@vpxa/aikit 0.1.157 → 0.1.159

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vpxa/aikit",
3
- "version": "0.1.157",
3
+ "version": "0.1.159",
4
4
  "type": "module",
5
5
  "description": "Local-first AI developer toolkit — knowledge base, code analysis, context management, and developer tools for LLM agents",
6
6
  "license": "MIT",
@@ -37,6 +37,7 @@
37
37
  "!scaffold/adapters/",
38
38
  "!scaffold/generated/",
39
39
  "!scaffold/general/viewers/",
40
+ "scaffold/general/viewers/dist/*.html",
40
41
  "!scaffold/README.md",
41
42
  "README.md",
42
43
  "LICENSE"
@@ -56,6 +57,7 @@
56
57
  "@huggingface/transformers": "^4.x",
57
58
  "@lancedb/lancedb": "^0.x",
58
59
  "@mcp-ui/server": "^6.x",
60
+ "@mixmark-io/domino": "^2.x",
59
61
  "@modelcontextprotocol/ext-apps": "^1.x",
60
62
  "@modelcontextprotocol/sdk": "^1.x",
61
63
  "diff": "^9.x",
@@ -64,6 +66,7 @@
64
66
  "linkedom": "^0.x",
65
67
  "lru-cache": "^11.x",
66
68
  "marked": "^18.x",
69
+ "mermaid": "^11",
67
70
  "minimatch": "^10.x",
68
71
  "sql.js": "^1.x",
69
72
  "sqlite-vec": "^0.x",
@@ -107,7 +107,7 @@ interface TypedBlock {
107
107
  [key: string]: unknown;
108
108
  }
109
109
  /** All supported block type literals. */
110
- type BlockType = 'markdown' | 'text' | 'heading' | 'paragraph' | 'separator' | 'code' | 'table' | 'metrics' | 'cards' | 'tree' | 'graph' | 'mermaid' | 'chart' | 'timeline' | 'checklist' | 'comparison' | 'status-board' | 'prompt' | 'progress' | 'actions' | 'docs-browser' | 'finding' | 'tags';
110
+ type BlockType = 'markdown' | 'text' | 'heading' | 'paragraph' | 'separator' | 'code' | 'table' | 'metrics' | 'cards' | 'tree' | 'graph' | 'mermaid' | 'chart' | 'timeline' | 'checklist' | 'comparison' | 'component-detail' | 'data-table-schema' | 'status-board' | 'docs-hub' | 'prompt' | 'progress' | 'actions' | 'docs-browser' | 'finding' | 'lifecycle-flow' | 'tags';
111
111
  /** Value type for metrics block. */
112
112
  interface MetricItem {
113
113
  label: string;
@@ -174,6 +174,68 @@ interface DocFile {
174
174
  content?: string;
175
175
  status?: 'current' | 'stale' | 'missing';
176
176
  }
177
+ interface DocsHubPage {
178
+ title: string;
179
+ description?: string;
180
+ icon?: string;
181
+ href?: string;
182
+ category?: string;
183
+ status?: 'current' | 'draft' | 'deprecated';
184
+ }
185
+ interface ComponentInterface {
186
+ name: string;
187
+ type: string;
188
+ description?: string;
189
+ }
190
+ interface ComponentDependency {
191
+ name: string;
192
+ relationship?: string;
193
+ }
194
+ interface ComponentDetailValue {
195
+ name: string;
196
+ description?: string;
197
+ type?: string;
198
+ technology?: string;
199
+ responsibilities?: string[];
200
+ interfaces?: ComponentInterface[];
201
+ dependencies?: ComponentDependency[];
202
+ metrics?: Record<string, string | number>;
203
+ codeLinks?: Array<{
204
+ label: string;
205
+ href: string;
206
+ }>;
207
+ }
208
+ interface LifecycleFlowStep {
209
+ id: string;
210
+ label: string;
211
+ description?: string;
212
+ type?: 'start' | 'end' | 'step' | 'decision' | 'parallel';
213
+ status?: 'active' | 'completed' | 'pending' | 'error';
214
+ }
215
+ interface LifecycleFlowEdge {
216
+ from: string;
217
+ to: string;
218
+ label?: string;
219
+ }
220
+ interface DataTableSchemaField {
221
+ name: string;
222
+ type: string;
223
+ required?: boolean;
224
+ description?: string;
225
+ constraints?: string[];
226
+ default?: string;
227
+ }
228
+ interface DataTableSchemaIndex {
229
+ name: string;
230
+ columns: string[];
231
+ unique?: boolean;
232
+ }
233
+ interface DataTableSchemaValue {
234
+ name: string;
235
+ description?: string;
236
+ fields: DataTableSchemaField[];
237
+ indexes?: DataTableSchemaIndex[];
238
+ }
177
239
  /** Block renderer function signature. */
178
240
  type BlockRenderer = (block: TypedBlock, ctx?: RenderContext) => string;
179
241
  /** Public alias for the renderer-specific context when another package claims RenderContext. */
@@ -216,7 +278,7 @@ interface ChannelSurface {
216
278
  //#endregion
217
279
  //#region packages/blocks-core/src/css.d.ts
218
280
  /** Base CSS that's always needed. */
219
- declare const baseCss = "\n.bk-section {\n display: grid;\n gap: var(--dt-space-3);\n margin: 0 0 var(--dt-space-6);\n}\n\n.bk-section-title {\n margin: 0;\n color: var(--dt-text-primary);\n font-family: var(--dt-font-sans);\n font-size: var(--dt-font-size-lg);\n font-weight: 700;\n}\n\n.bk-text,\n.bk-markdown,\n.bk-paragraph,\n.bk-fallback,\n.bk-prompt,\n.bk-heading,\n.bk-table,\n.bk-docs-browser,\n.bk-actions,\n.bk-comparison,\n.bk-status-board,\n.bk-progress,\n.bk-timeline,\n.bk-tree,\n.bk-tags,\n.bk-cards,\n.bk-metrics,\n.bk-chart,\n.bk-code,\n.bk-mermaid,\n.bk-graph,\n.bk-checklist,\n.bk-finding {\n font-family: var(--dt-font-sans);\n}\n\n.bk-text a,\n.bk-markdown a,\n.bk-finding a {\n color: var(--dt-accent-fg);\n text-decoration: none;\n}\n\n.bk-text code,\n.bk-markdown code,\n.bk-finding code {\n padding: 0 var(--dt-space-1);\n border-radius: var(--dt-radius-sm);\n background: var(--dt-bg-tertiary);\n color: var(--dt-purple-fg);\n font-family: var(--dt-font-mono);\n font-size: 0.95em;\n}\n\n.bk-fallback {\n margin: 0;\n padding: var(--dt-space-4);\n border: 1px solid var(--dt-border-default);\n border-radius: var(--dt-radius-lg);\n background: var(--dt-bg-secondary);\n color: var(--dt-text-secondary);\n font-family: var(--dt-font-mono);\n font-size: var(--dt-font-size-sm);\n white-space: pre-wrap;\n}\n\n.bk-visually-hidden {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n}\n";
281
+ declare const baseCss = "\n.bk-section {\n display: grid;\n gap: var(--dt-space-3);\n margin: 0 0 var(--dt-space-6);\n}\n\n.bk-section-title {\n margin: 0;\n color: var(--dt-text-primary);\n font-family: var(--dt-font-sans);\n font-size: var(--dt-font-size-lg);\n font-weight: 700;\n}\n\n.bk-text,\n.bk-markdown,\n.bk-paragraph,\n.bk-fallback,\n.bk-prompt,\n.bk-heading,\n.bk-table,\n.bk-data-table-schema,\n.bk-docs-browser,\n.bk-docs-hub,\n.bk-actions,\n.bk-comparison,\n.bk-component-detail,\n.bk-status-board,\n.bk-progress,\n.bk-lifecycle-flow,\n.bk-timeline,\n.bk-tree,\n.bk-tags,\n.bk-cards,\n.bk-metrics,\n.bk-chart,\n.bk-code,\n.bk-mermaid,\n.bk-graph,\n.bk-checklist,\n.bk-finding {\n font-family: var(--dt-font-sans);\n}\n\n.bk-text a,\n.bk-markdown a,\n.bk-finding a {\n color: var(--dt-accent-fg);\n text-decoration: none;\n}\n\n.bk-text code,\n.bk-markdown code,\n.bk-finding code {\n padding: 0 var(--dt-space-1);\n border-radius: var(--dt-radius-sm);\n background: var(--dt-bg-tertiary);\n color: var(--dt-purple-fg);\n font-family: var(--dt-font-mono);\n font-size: 0.95em;\n}\n\n.bk-fallback {\n margin: 0;\n padding: var(--dt-space-4);\n border: 1px solid var(--dt-border-default);\n border-radius: var(--dt-radius-lg);\n background: var(--dt-bg-secondary);\n color: var(--dt-text-secondary);\n font-family: var(--dt-font-mono);\n font-size: var(--dt-font-size-sm);\n white-space: pre-wrap;\n}\n\n.bk-visually-hidden {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n}\n";
220
282
  /** Collect CSS for specific block types only. */
221
283
  declare function collectCss(blockTypes: string[]): string;
222
284
  /** Get all block CSS. */
@@ -225,6 +287,55 @@ declare function generateDarkTokenCss(): string;
225
287
  /** Generate CSS custom properties from the typed token map. */
226
288
  declare function generateTokenCss(colorScheme?: 'light' | 'dark' | 'auto'): string;
227
289
  //#endregion
290
+ //#region packages/blocks-core/src/header.d.ts
291
+ /**
292
+ * Shared header/footer module — single source of truth for all AI Kit templates.
293
+ * Used by: shell.ts (present tool), React viewers (via matching CSS classes), report template.
294
+ */
295
+ interface HeaderOptions {
296
+ title: string;
297
+ subtitle?: string;
298
+ /** Brand text. Defaults to 'AI Kit' */
299
+ brand?: string;
300
+ /** Whether to include theme toggle button */
301
+ showThemeToggle?: boolean;
302
+ /** Transport type affects which toolbox items appear */
303
+ transport?: TransportType;
304
+ /** Additional action buttons HTML to inject */
305
+ actionsHtml?: string;
306
+ }
307
+ interface FooterOptions {
308
+ generatedAt?: string;
309
+ badge?: string;
310
+ contentHtml?: string;
311
+ }
312
+ declare const HEADER_CLASS_NAMES: {
313
+ readonly header: "aikit-header";
314
+ readonly brand: "aikit-header-brand";
315
+ readonly title: "aikit-header-title";
316
+ readonly titleText: "aikit-header-title-text";
317
+ readonly subtitle: "aikit-header-subtitle";
318
+ readonly actions: "aikit-header-actions";
319
+ readonly themeToggle: "aikit-theme-toggle";
320
+ readonly themeToggleIcon: "aikit-theme-toggle-icon";
321
+ readonly themeToggleIconSun: "aikit-theme-toggle-icon--sun";
322
+ readonly themeToggleIconMoon: "aikit-theme-toggle-icon--moon";
323
+ readonly toolbox: "aikit-toolbox";
324
+ readonly toolboxToggle: "aikit-toolbox-toggle";
325
+ readonly toolboxMenu: "aikit-toolbox-menu";
326
+ readonly toolboxItem: "aikit-toolbox-item";
327
+ readonly footer: "aikit-footer";
328
+ readonly footerMeta: "aikit-footer-meta";
329
+ readonly footerText: "aikit-footer-text";
330
+ readonly footerBrand: "aikit-footer-brand";
331
+ readonly footerTimestamp: "aikit-footer-timestamp";
332
+ readonly footerSlot: "aikit-footer-slot";
333
+ readonly footerBadge: "aikit-footer-badge";
334
+ };
335
+ declare function buildHeader(options: HeaderOptions): string;
336
+ declare function buildFooter(options?: FooterOptions): string;
337
+ declare const HEADER_CSS = "\n.aikit-header,\n.aikit-toolbox-menu,\n.aikit-footer {\n --aikit-background: var(--background, var(--dt-bg-primary));\n --aikit-foreground: var(--foreground, var(--dt-text-primary));\n --aikit-muted: var(--muted, var(--dt-bg-secondary));\n --aikit-muted-foreground: var(--muted-foreground, var(--dt-text-secondary));\n --aikit-border: var(--border, var(--dt-border-default));\n --aikit-accent: var(--accent, var(--dt-accent-subtle));\n --aikit-accent-foreground: var(--accent-foreground, var(--dt-accent-fg));\n --aikit-card: var(--card, var(--dt-bg-secondary));\n --aikit-card-foreground: var(--card-foreground, var(--dt-text-primary));\n}\n\n.aikit-header {\n position: sticky;\n top: 0;\n z-index: 100;\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--dt-space-4);\n min-height: 3.5rem;\n padding: var(--dt-space-2) var(--dt-space-4);\n border-bottom: 1px solid var(--aikit-border);\n background: color-mix(in srgb, var(--aikit-background) 88%, transparent);\n backdrop-filter: blur(8px);\n}\n\n.aikit-header-brand,\n.aikit-header-actions {\n flex: 0 0 auto;\n min-width: 0;\n}\n\n.aikit-header-brand {\n display: flex;\n align-items: center;\n color: var(--aikit-muted-foreground);\n font-family: var(--dt-font-mono);\n font-size: var(--dt-font-size-sm);\n font-weight: 600;\n letter-spacing: 0.12em;\n text-transform: uppercase;\n}\n\n.aikit-header-title {\n flex: 1 1 auto;\n min-width: 0;\n display: flex;\n align-items: baseline;\n gap: var(--dt-space-2);\n justify-content: flex-start;\n min-height: 0;\n}\n\n.aikit-header-title-text {\n min-width: 0;\n flex: 1 1 auto;\n color: var(--aikit-foreground);\n font-size: var(--dt-font-size-lg);\n font-weight: 600;\n line-height: 1.2;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.aikit-header-subtitle {\n flex: 0 1 auto;\n min-width: 0;\n color: var(--aikit-muted-foreground);\n font-size: var(--dt-font-size-sm);\n line-height: 1.2;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.aikit-header-actions {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n gap: var(--dt-space-2);\n min-width: max-content;\n}\n\n.aikit-header-actions > * {\n flex: 0 0 auto;\n}\n\n.aikit-toolbox {\n position: relative;\n}\n\n.aikit-theme-toggle,\n.aikit-toolbox-toggle {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n position: relative;\n width: 2.5rem;\n height: 2.5rem;\n padding: 0;\n border: 1px solid var(--aikit-border);\n border-radius: 999px;\n background: var(--aikit-card);\n color: var(--aikit-card-foreground);\n cursor: pointer;\n font: inherit;\n transition:\n background var(--dt-transition-fast),\n border-color var(--dt-transition-fast),\n color var(--dt-transition-fast),\n transform var(--dt-transition-fast);\n}\n\n.aikit-theme-toggle:hover,\n.aikit-toolbox-toggle:hover {\n background: var(--aikit-muted);\n}\n\n.aikit-theme-toggle:focus-visible,\n.aikit-toolbox-toggle:focus-visible,\n.aikit-toolbox-item:focus-visible {\n outline: 2px solid var(--aikit-accent-foreground);\n outline-offset: 2px;\n}\n\n.aikit-theme-toggle-icon {\n position: absolute;\n inset: 0;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n transition:\n opacity var(--dt-transition-normal),\n transform var(--dt-transition-normal);\n}\n\n.aikit-theme-toggle-icon--sun {\n opacity: 1;\n transform: scale(1) rotate(0deg);\n}\n\n.aikit-theme-toggle-icon--moon {\n opacity: 0;\n transform: scale(0.65) rotate(-40deg);\n}\n\nhtml[data-theme='dark'] .aikit-theme-toggle-icon--sun {\n opacity: 0;\n transform: scale(0.65) rotate(40deg);\n}\n\nhtml[data-theme='dark'] .aikit-theme-toggle-icon--moon {\n opacity: 1;\n transform: scale(1) rotate(0deg);\n}\n\n.aikit-toolbox-menu {\n position: absolute;\n top: calc(100% + var(--dt-space-2));\n right: 0;\n min-width: 11rem;\n display: grid;\n gap: var(--dt-space-1);\n padding: var(--dt-space-2);\n border: 1px solid var(--aikit-border);\n border-radius: var(--dt-radius-lg);\n background: var(--aikit-background);\n box-shadow: var(--dt-shadow-lg);\n z-index: 120;\n}\n\n.aikit-toolbox-menu[hidden] {\n display: none;\n}\n\n.aikit-toolbox-item {\n display: inline-flex;\n align-items: center;\n gap: var(--dt-space-2);\n width: 100%;\n min-height: 2.5rem;\n padding: 0 var(--dt-space-3);\n border: 1px solid transparent;\n border-radius: var(--dt-radius-sm);\n background: transparent;\n color: var(--aikit-foreground);\n cursor: pointer;\n font: inherit;\n text-align: left;\n}\n\n.aikit-toolbox-item:hover {\n background: var(--aikit-muted);\n border-color: var(--aikit-border);\n}\n\n.aikit-toolbox-item svg {\n flex: 0 0 auto;\n}\n\n.aikit-footer {\n margin-top: auto;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: var(--dt-space-4) var(--dt-space-4) var(--dt-space-6);\n border-top: 1px solid var(--aikit-border);\n color: var(--aikit-muted-foreground);\n font-size: var(--dt-font-size-xs);\n}\n\n.aikit-footer-meta {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: var(--dt-space-2);\n flex-wrap: wrap;\n text-align: center;\n}\n\n.aikit-footer-text {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 0.35rem;\n min-width: 0;\n}\n\n.aikit-footer-brand {\n color: var(--aikit-foreground);\n font-family: var(--dt-font-mono);\n font-weight: 600;\n letter-spacing: 0.08em;\n text-transform: uppercase;\n}\n\n.aikit-footer-timestamp,\n.aikit-footer-slot {\n min-width: 0;\n}\n\n.aikit-footer-slot {\n display: inline-flex;\n align-items: center;\n gap: 0.35rem;\n}\n\n@supports not (background: color-mix(in srgb, white 50%, transparent)) {\n .aikit-header {\n background: var(--aikit-background);\n }\n}\n\n@media (max-width: 640px) {\n .aikit-header-brand {\n display: none;\n }\n\n .aikit-header {\n gap: var(--dt-space-2);\n padding-left: var(--dt-space-3);\n padding-right: var(--dt-space-3);\n }\n\n .aikit-toolbox-menu {\n right: 0;\n left: auto;\n min-width: auto;\n max-width: calc(100vw - 2rem);\n }\n}\n\n@media (max-width: 400px) {\n .aikit-header-actions {\n gap: var(--dt-space-1);\n }\n\n .aikit-footer {\n padding-left: var(--dt-space-3);\n padding-right: var(--dt-space-3);\n }\n\n .aikit-toolbox-menu {\n position: fixed;\n top: auto;\n bottom: 0;\n left: 0;\n right: 0;\n min-width: auto;\n max-width: 100%;\n border-radius: 0.5rem 0.5rem 0 0;\n box-shadow: 0 -4px 12px rgba(0, 0, 0, 0.15);\n }\n}\n";
338
+ //#endregion
228
339
  //#region packages/blocks-core/src/island-descriptor.d.ts
229
340
  /** Describes a hydration island for blocks-interactive. */
230
341
  interface IslandDescriptor {
@@ -481,4 +592,4 @@ declare function blockItems(block: {
481
592
  value?: unknown;
482
593
  }): Array<Record<string, unknown>>;
483
594
  //#endregion
484
- export { type ActionItem, type ActionOption, type BlockRenderContext, type BlockRenderer, type BlockType, type CardItem, type ChannelError, type ChannelOutcome, type ChannelSurface, type ChecklistItem, type ComparisonColumn, type DocFile, type HeadScript, type IslandDescriptor, type KnownIslandId, type LayoutOptions, type MetricItem, type ProgressItem, type RenderContext, type RenderDiagnostic, type RenderManifest, type RenderSurfaceOptions, type ResponsePolicy, type ShellOptions, type StatusCategory, type SurfaceAction, type SurfaceActionResult, type SurfaceMetadata, type TemplateDefinition, TemplateRegistry, type TimelineItem, type TokenName, type TokenValue, type TransportType, type TypedBlock, allCss, baseCss, blockItems, buildShell, checklistTemplate, collectCss, darkTokenNames, darkTokens, dashboardTemplateDefinition, dataTableTemplate, defaultRegistry, diffViewTemplate, documentTemplate, errorTemplate, escapeHtml, flameGraphTemplateDefinition, formTemplate, formatValue, generateDarkTokenCss, generateTokenCss, inlineMarkdown, isError, isResult, kanbanTemplateDefinition, listSortTemplateDefinition, pickerTemplate, renderBlock, renderBlocks, renderSurface, reportTemplate, sanitizeId, sanitizeUrl, statusBoardTemplate, timelineTemplate, tokenNames, tokens, toneName, toneVar, treeTemplate, tryParseJson };
595
+ export { type ActionItem, type ActionOption, type BlockRenderContext, type BlockRenderer, type BlockType, type CardItem, type ChannelError, type ChannelOutcome, type ChannelSurface, type ChecklistItem, type ComparisonColumn, type ComponentDependency, type ComponentDetailValue, type ComponentInterface, type DataTableSchemaField, type DataTableSchemaIndex, type DataTableSchemaValue, type DocFile, type DocsHubPage, type FooterOptions, HEADER_CLASS_NAMES, HEADER_CSS, type HeadScript, type HeaderOptions, type IslandDescriptor, type KnownIslandId, type LayoutOptions, type LifecycleFlowEdge, type LifecycleFlowStep, type MetricItem, type ProgressItem, type RenderContext, type RenderDiagnostic, type RenderManifest, type RenderSurfaceOptions, type ResponsePolicy, type ShellOptions, type StatusCategory, type SurfaceAction, type SurfaceActionResult, type SurfaceMetadata, type TemplateDefinition, TemplateRegistry, type TimelineItem, type TokenName, type TokenValue, type TransportType, type TypedBlock, allCss, baseCss, blockItems, buildFooter, buildHeader, buildShell, checklistTemplate, collectCss, darkTokenNames, darkTokens, dashboardTemplateDefinition, dataTableTemplate, defaultRegistry, diffViewTemplate, documentTemplate, errorTemplate, escapeHtml, flameGraphTemplateDefinition, formTemplate, formatValue, generateDarkTokenCss, generateTokenCss, inlineMarkdown, isError, isResult, kanbanTemplateDefinition, listSortTemplateDefinition, pickerTemplate, renderBlock, renderBlocks, renderSurface, reportTemplate, sanitizeId, sanitizeUrl, statusBoardTemplate, timelineTemplate, tokenNames, tokens, toneName, toneVar, treeTemplate, tryParseJson };