slexkit 0.2.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/AGENTS.slexkit.md +29 -0
- package/CHANGELOG.md +90 -0
- package/LICENSE +21 -0
- package/README.md +165 -0
- package/README.zh-CN.md +165 -0
- package/dist/ai/llms-authoring.txt +44 -0
- package/dist/ai/llms-components.txt +669 -0
- package/dist/ai/llms-full.txt +6586 -0
- package/dist/ai/llms-runtime.txt +1475 -0
- package/dist/ai/llms-toolhost.txt +295 -0
- package/dist/ai/llms.txt +69 -0
- package/dist/ai/slexkit-ai-manifest.json +2922 -0
- package/dist/base.css +621 -0
- package/dist/chunks/accordion-5f0nvjjm.js +376 -0
- package/dist/chunks/accordion-830dw78f.js +221 -0
- package/dist/chunks/accordion-cfjyxw93.js +630 -0
- package/dist/chunks/accordion-cw5r75jm.js +424 -0
- package/dist/chunks/accordion-ehnhpeca.js +492 -0
- package/dist/chunks/accordion-hzyrngd6.js +2377 -0
- package/dist/chunks/accordion-nw12ytps.js +6823 -0
- package/dist/components/accordion.js +163 -0
- package/dist/components/badge.js +80 -0
- package/dist/components/button.css +114 -0
- package/dist/components/button.js +16 -0
- package/dist/components/callout.js +154 -0
- package/dist/components/card.js +95 -0
- package/dist/components/checkbox.js +114 -0
- package/dist/components/choice.css +165 -0
- package/dist/components/code-block.js +264 -0
- package/dist/components/collapsible.js +111 -0
- package/dist/components/column.js +49 -0
- package/dist/components/content.css +474 -0
- package/dist/components/disclosure.css +162 -0
- package/dist/components/display.css +259 -0
- package/dist/components/divider.js +98 -0
- package/dist/components/feedback.css +219 -0
- package/dist/components/grid.js +67 -0
- package/dist/components/index.js +13364 -0
- package/dist/components/input.css +1247 -0
- package/dist/components/input.js +384 -0
- package/dist/components/link.js +77 -0
- package/dist/components/progress.js +111 -0
- package/dist/components/radio-group.js +189 -0
- package/dist/components/row.js +200 -0
- package/dist/components/section.js +161 -0
- package/dist/components/select.css +260 -0
- package/dist/components/select.js +16 -0
- package/dist/components/slider.css +125 -0
- package/dist/components/slider.js +175 -0
- package/dist/components/specs.js +1090 -0
- package/dist/components/stat.js +178 -0
- package/dist/components/submit.css +9 -0
- package/dist/components/submit.js +77 -0
- package/dist/components/switch.css +114 -0
- package/dist/components/switch.js +114 -0
- package/dist/components/table.js +157 -0
- package/dist/components/tabs.css +192 -0
- package/dist/components/tabs.js +17 -0
- package/dist/components/text-input.css +245 -0
- package/dist/components/text.js +50 -0
- package/dist/components/toast.js +240 -0
- package/dist/components/tooling.css +1009 -0
- package/dist/components/tooling.js +48951 -0
- package/dist/runtime.cjs +3728 -0
- package/dist/runtime.js +3686 -0
- package/dist/slexkit.cjs +18539 -0
- package/dist/slexkit.css +4776 -0
- package/dist/slexkit.js +18497 -0
- package/dist/tooling.js +59141 -0
- package/dist/types/components/accordion.d.ts +2 -0
- package/dist/types/components/badge.d.ts +2 -0
- package/dist/types/components/button.d.ts +2 -0
- package/dist/types/components/callout.d.ts +2 -0
- package/dist/types/components/card.d.ts +2 -0
- package/dist/types/components/checkbox.d.ts +2 -0
- package/dist/types/components/code-block.d.ts +2 -0
- package/dist/types/components/collapsible.d.ts +2 -0
- package/dist/types/components/column.d.ts +2 -0
- package/dist/types/components/divider.d.ts +2 -0
- package/dist/types/components/entries/accordion.d.ts +3 -0
- package/dist/types/components/entries/badge.d.ts +3 -0
- package/dist/types/components/entries/button.d.ts +3 -0
- package/dist/types/components/entries/callout.d.ts +3 -0
- package/dist/types/components/entries/card.d.ts +3 -0
- package/dist/types/components/entries/checkbox.d.ts +3 -0
- package/dist/types/components/entries/code-block.d.ts +3 -0
- package/dist/types/components/entries/collapsible.d.ts +3 -0
- package/dist/types/components/entries/column.d.ts +3 -0
- package/dist/types/components/entries/divider.d.ts +3 -0
- package/dist/types/components/entries/grid.d.ts +3 -0
- package/dist/types/components/entries/input.d.ts +3 -0
- package/dist/types/components/entries/link.d.ts +3 -0
- package/dist/types/components/entries/progress.d.ts +3 -0
- package/dist/types/components/entries/radio-group.d.ts +3 -0
- package/dist/types/components/entries/row.d.ts +3 -0
- package/dist/types/components/entries/section.d.ts +3 -0
- package/dist/types/components/entries/select.d.ts +3 -0
- package/dist/types/components/entries/slider.d.ts +3 -0
- package/dist/types/components/entries/specs.d.ts +1 -0
- package/dist/types/components/entries/stat.d.ts +3 -0
- package/dist/types/components/entries/submit.d.ts +3 -0
- package/dist/types/components/entries/switch.d.ts +3 -0
- package/dist/types/components/entries/table.d.ts +3 -0
- package/dist/types/components/entries/tabs.d.ts +3 -0
- package/dist/types/components/entries/text.d.ts +3 -0
- package/dist/types/components/entries/toast.d.ts +3 -0
- package/dist/types/components/entries/tooling.d.ts +1 -0
- package/dist/types/components/grid.d.ts +2 -0
- package/dist/types/components/index.d.ts +6 -0
- package/dist/types/components/input.d.ts +2 -0
- package/dist/types/components/link.d.ts +2 -0
- package/dist/types/components/progress.d.ts +2 -0
- package/dist/types/components/radio-group.d.ts +2 -0
- package/dist/types/components/row.d.ts +2 -0
- package/dist/types/components/section.d.ts +2 -0
- package/dist/types/components/select.d.ts +2 -0
- package/dist/types/components/slider.d.ts +2 -0
- package/dist/types/components/spec-helpers.d.ts +23 -0
- package/dist/types/components/spec-registry.d.ts +12 -0
- package/dist/types/components/spec-schema.d.ts +74 -0
- package/dist/types/components/specs.d.ts +2 -0
- package/dist/types/components/stat.d.ts +2 -0
- package/dist/types/components/submit.d.ts +2 -0
- package/dist/types/components/svelte/adapter.d.ts +3 -0
- package/dist/types/components/svelte/bindProps.d.ts +2 -0
- package/dist/types/components/svelte/helpers.d.ts +33 -0
- package/dist/types/components/svelte/layout/balancedTiles.d.ts +14 -0
- package/dist/types/components/svelte/types.d.ts +12 -0
- package/dist/types/components/switch.d.ts +2 -0
- package/dist/types/components/table.d.ts +2 -0
- package/dist/types/components/tabs.d.ts +2 -0
- package/dist/types/components/text.d.ts +2 -0
- package/dist/types/components/toast.d.ts +2 -0
- package/dist/types/components/tooling.d.ts +2 -0
- package/dist/types/components-svelte.d.ts +5 -0
- package/dist/types/engine/component-scope.d.ts +14 -0
- package/dist/types/engine/component-state.d.ts +9 -0
- package/dist/types/engine/diagnostics.d.ts +24 -0
- package/dist/types/engine/engineering.d.ts +11 -0
- package/dist/types/engine/eval.d.ts +5 -0
- package/dist/types/engine/index.d.ts +26 -0
- package/dist/types/engine/markdown-runtime.d.ts +33 -0
- package/dist/types/engine/merge.d.ts +1 -0
- package/dist/types/engine/reactive.d.ts +11 -0
- package/dist/types/engine/registry.d.ts +4 -0
- package/dist/types/engine/renderer.d.ts +6 -0
- package/dist/types/engine/sandbox-runner.d.ts +2 -0
- package/dist/types/engine/secure-runtime.d.ts +214 -0
- package/dist/types/engine/store.d.ts +12 -0
- package/dist/types/engine/types.d.ts +58 -0
- package/dist/types/icons/manager.d.ts +17 -0
- package/dist/types/icons/phosphor.d.ts +45 -0
- package/dist/types/index.d.ts +61 -0
- package/dist/types/runtime.d.ts +32 -0
- package/dist/types/toolhost/index.d.ts +78 -0
- package/dist/types/tooling-umd.d.ts +47 -0
- package/dist/types/version.d.ts +8 -0
- package/dist/umd/slexkit.tooling.umd.js +66553 -0
- package/dist/umd/slexkit.umd.js +18552 -0
- package/package.json +136 -0
- package/scripts/cli.mjs +47 -0
- package/skills/slexkit/SKILL.md +27 -0
- package/skills/slexkit-author/SKILL.md +50 -0
- package/skills/slexkit-host-integration/SKILL.md +33 -0
- package/skills/slexkit-secure-runtime/SKILL.md +31 -0
- package/skills/slexkit-toolhost/SKILL.md +38 -0
- package/skills/slexkit-update/SKILL.md +23 -0
- package/src/components/svelte/InlineIcon.svelte +66 -0
- package/src/components/svelte/adapter.ts +76 -0
- package/src/components/svelte/bindProps.ts +9 -0
- package/src/components/svelte/content/Badge.svelte +19 -0
- package/src/components/svelte/content/Callout.svelte +57 -0
- package/src/components/svelte/content/CodeBlock.svelte +130 -0
- package/src/components/svelte/content/Divider.svelte +21 -0
- package/src/components/svelte/content/Link.svelte +21 -0
- package/src/components/svelte/content/Section.svelte +24 -0
- package/src/components/svelte/content/Table.svelte +44 -0
- package/src/components/svelte/disclosure/Accordion.svelte +100 -0
- package/src/components/svelte/disclosure/Collapsible.svelte +45 -0
- package/src/components/svelte/display/Stat.svelte +102 -0
- package/src/components/svelte/display/Text.svelte +11 -0
- package/src/components/svelte/feedback/Progress.svelte +34 -0
- package/src/components/svelte/feedback/Toast.svelte +105 -0
- package/src/components/svelte/helpers.ts +148 -0
- package/src/components/svelte/input/Button.svelte +78 -0
- package/src/components/svelte/input/Checkbox.svelte +52 -0
- package/src/components/svelte/input/Input.svelte +202 -0
- package/src/components/svelte/input/RadioGroup.svelte +71 -0
- package/src/components/svelte/input/Select.svelte +220 -0
- package/src/components/svelte/input/Slider.svelte +96 -0
- package/src/components/svelte/input/Submit.svelte +32 -0
- package/src/components/svelte/input/Switch.svelte +53 -0
- package/src/components/svelte/input/Tabs.svelte +188 -0
- package/src/components/svelte/layout/Card.svelte +17 -0
- package/src/components/svelte/layout/Column.svelte +15 -0
- package/src/components/svelte/layout/Grid.svelte +26 -0
- package/src/components/svelte/layout/Row.svelte +105 -0
- package/src/components/svelte/layout/balancedTiles.ts +85 -0
- package/src/components/svelte/tooling/CodeMirror.svelte +91 -0
- package/src/components/svelte/tooling/Playground.svelte +765 -0
- package/src/components/svelte/tooling/PlaygroundMarkdown.svelte +26 -0
- package/src/components/svelte/tooling/PlaygroundSlexCode.svelte +76 -0
- package/src/components/svelte/types.ts +17 -0
- package/src/styles/animation.css +98 -0
- package/src/styles/components/button.css +114 -0
- package/src/styles/components/choice.css +165 -0
- package/src/styles/components/select.css +260 -0
- package/src/styles/components/slider.css +125 -0
- package/src/styles/components/submit.css +9 -0
- package/src/styles/components/switch.css +114 -0
- package/src/styles/components/tabs.css +192 -0
- package/src/styles/components/text-input.css +245 -0
- package/src/styles/content.css +474 -0
- package/src/styles/disclosure.css +162 -0
- package/src/styles/display.css +259 -0
- package/src/styles/entry.css +34 -0
- package/src/styles/feedback.css +219 -0
- package/src/styles/input.css +8 -0
- package/src/styles/layout.css +365 -0
- package/src/styles/theme.css +31 -0
- package/src/styles/tooling.css +1009 -0
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# SlexKit Agent Rules
|
|
2
|
+
|
|
3
|
+
Use these rules when an AI agent writes or integrates SlexKit.
|
|
4
|
+
|
|
5
|
+
## Output Shape
|
|
6
|
+
|
|
7
|
+
- Use explicit `slex` fenced code blocks for display-oriented interactive UI.
|
|
8
|
+
- Include a readable Markdown fallback after every generated fence.
|
|
9
|
+
- Use the Slex envelope `{ namespace, g, layout }`.
|
|
10
|
+
- Keep state, derived values, and helper functions in `g`.
|
|
11
|
+
- Keep component structure in `layout`.
|
|
12
|
+
- Use component keys in `type:identifier` form.
|
|
13
|
+
- Use `$` read-pipes for dynamic props and `on*` write-pipes for event handlers.
|
|
14
|
+
|
|
15
|
+
## Boundaries
|
|
16
|
+
|
|
17
|
+
- Do not emit React, JSX, Svelte, Vue, imports, or build scaffolding inside `slex` fences.
|
|
18
|
+
- Do not ask a host to scan plain JavaScript, JSON, or untagged code blocks.
|
|
19
|
+
- Use ToolHost only for structured user input that must resolve to a submitted or ignored result.
|
|
20
|
+
- Use ordinary `slex` fences for status cards, dashboards, calculators, metrics, and summaries.
|
|
21
|
+
- Use the secure runtime for untrusted or agent-generated source.
|
|
22
|
+
|
|
23
|
+
## Discovery
|
|
24
|
+
|
|
25
|
+
- Read `/llms.txt` first for the short index.
|
|
26
|
+
- Read `/llms-components.txt` before choosing component props.
|
|
27
|
+
- Read `/llms-runtime.txt` before host integration.
|
|
28
|
+
- Read `/llms-toolhost.txt` before building confirmations, choices, or forms.
|
|
29
|
+
- Prefer the `@slexkit/mcp` read-only MCP server when available.
|
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to SlexKit.
|
|
4
|
+
|
|
5
|
+
## v0.2.0 - First public release
|
|
6
|
+
|
|
7
|
+
### Added
|
|
8
|
+
- `@slexkit/mcp`: AI Agent Model Context Protocol server with `slexkitDocs`, `slexkitExamples`, `slexkitValidate` tools
|
|
9
|
+
- Protocol marker: `"slex": "0.1"` required on all Slex expressions and ToolHost templates
|
|
10
|
+
- SPEC contract validation: component specs are now validated against the runtime contract
|
|
11
|
+
- Version sync automation (`scripts/sync-version.ts`) and changelog sync (`scripts/sync-changelog.ts`)
|
|
12
|
+
- AI documentation generation pipeline with structured LLM-friendly output
|
|
13
|
+
- Static site export with SEO metadata engine (`site/data/seo.js`, `site/scripts/export-static.ts`)
|
|
14
|
+
- Chinese documentation for all reference and guide pages
|
|
15
|
+
- Enhanced component state management with lifecycle hooks (`onMount`, `onUnmount`, `onUpdate`)
|
|
16
|
+
|
|
17
|
+
### Changed
|
|
18
|
+
- Switch component migrated from `checked` to `enabled` state mode
|
|
19
|
+
- Documentation: restructured site content, synced en-US with zh-CN, added reference section
|
|
20
|
+
- Theme: refined select styling, dropdown shadows, footer and info tone polish
|
|
21
|
+
- AI docs generation enhanced with Chinese/English locale awareness
|
|
22
|
+
|
|
23
|
+
### Fixed
|
|
24
|
+
- Component spec alignment with documentation across all 28 components
|
|
25
|
+
- Site routing and code block highlighting
|
|
26
|
+
- Introduction and quick-start guide wording for clarity
|
|
27
|
+
- Broken links and factual errors in component and reference documentation
|
|
28
|
+
|
|
29
|
+
## v0.1.9
|
|
30
|
+
|
|
31
|
+
### Added
|
|
32
|
+
- Icon manager with Phosphor icon system (`registerIcon`, `registerIcons`, `getIcon`, `loadIcon`)
|
|
33
|
+
- Expanded icon support across labeled components (badge, button, callout, etc.)
|
|
34
|
+
- Icon docs page with registration API reference
|
|
35
|
+
|
|
36
|
+
### Fixed
|
|
37
|
+
- Refined component interactions in static site export
|
|
38
|
+
- Tabs indicator animation restored
|
|
39
|
+
- Callout and toast icon placement in titles
|
|
40
|
+
- Numeric value display formatting
|
|
41
|
+
|
|
42
|
+
### Changed
|
|
43
|
+
- Site docs shell refactored for static export
|
|
44
|
+
- Site navigation and theme controls alignment
|
|
45
|
+
- Slex naming standardized across codebase
|
|
46
|
+
|
|
47
|
+
## v0.1.8
|
|
48
|
+
|
|
49
|
+
### Added
|
|
50
|
+
- CSP-hardened secure runtime sandbox with heartbeat watchdog
|
|
51
|
+
- `mountSecureArtifact()` for isolated iframe rendering
|
|
52
|
+
- `createSlexKitMarkdownRuntimeHost()` for Markdown-hosted SlexKit blocks
|
|
53
|
+
- Streamdown React renderer (`@slexkit/streamdown`)
|
|
54
|
+
- Obsidian plugin adapter (`@slexkit/obsidian`)
|
|
55
|
+
- Shadcn-compatible CSS theme (`@slexkit/theme-shadcn`)
|
|
56
|
+
- Package boundary wrappers (`@slexkit/runtime`, `@slexkit/components-svelte`)
|
|
57
|
+
- ToolHost with built-in templates: `confirm-action`, `choose-options`, `fill-form`
|
|
58
|
+
|
|
59
|
+
### Changed
|
|
60
|
+
- Component registration model: side-effect import registers all components
|
|
61
|
+
- Styles reorganized into per-component CSS files
|
|
62
|
+
- Build system: Bun.build with Svelte plugin, split ESM entries
|
|
63
|
+
|
|
64
|
+
## v0.1.7
|
|
65
|
+
|
|
66
|
+
### Added
|
|
67
|
+
- `$for` list rendering with keyed reconciliation (delete / add-update-reorder / trim phases)
|
|
68
|
+
- `$if` conditional rendering with enter/leave animation support
|
|
69
|
+
- `$key` strategy: `$value`, property-based, or fallback to index
|
|
70
|
+
- Component instance state modes: `value`, `checked`, `enabled`, `readable`, `none`
|
|
71
|
+
- Lifecycle hooks: `g.onMount_<name>()`, `g.onUnmount_<name>()`, `g.onUpdate_<name>()`
|
|
72
|
+
- Engineering number input with SI prefix parsing
|
|
73
|
+
- Rich error diagnostics with line/column/excerpt display
|
|
74
|
+
|
|
75
|
+
### Changed
|
|
76
|
+
- Expression evaluation: `new Function()` compilation with reactive dependency tracking
|
|
77
|
+
- Layout tree renderer now supports three rendering paths (normal, `$if`, `$for`)
|
|
78
|
+
- `g` deep-merge preserves keys not present in the new state
|
|
79
|
+
|
|
80
|
+
## v0.1.6 and earlier
|
|
81
|
+
|
|
82
|
+
### Added
|
|
83
|
+
- Reactive `g`/`layout` split with expression pipes (`$` read-pipes, `on*` write-pipes)
|
|
84
|
+
- Custom fine-grained reactivity system (~280 lines, no external dependency)
|
|
85
|
+
- Component registry with extensible renderer interface
|
|
86
|
+
- Svelte 5 component adapter (creates stores from props, flushSync DOM)
|
|
87
|
+
- `mount()`, `ingest()`, `boot()` entry points
|
|
88
|
+
- 28 built-in Svelte components across 8 categories
|
|
89
|
+
- `parseSlexSource()` DSL parser with `diagnoseSlexKitSource()` error reporting
|
|
90
|
+
- Documentation site with interactive playground
|
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 SlexKit
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
<div align="center">
|
|
2
|
+
<p>
|
|
3
|
+
<img src="site/assets/logo.svg" alt="SlexKit" width="84" height="84" />
|
|
4
|
+
</p>
|
|
5
|
+
<h1>SlexKit</h1>
|
|
6
|
+
<p><strong>Streaming Live EXpressions Kit</strong></p>
|
|
7
|
+
<p>
|
|
8
|
+
"Docs as tools, tools as docs." Give Markdown interactive power and make every AI output come alive.
|
|
9
|
+
</p>
|
|
10
|
+
<p>
|
|
11
|
+
<a href="site/content/guides/intro/en-US.md">Documentation</a> ·
|
|
12
|
+
<a href="site/content/components/accordion/en-US.md">Components</a> ·
|
|
13
|
+
<a href="site/content/reference/spec/en-US.md">Specification</a> ·
|
|
14
|
+
<a href="site/content/guides/ai-agents/en-US.md">AI / Agents</a> ·
|
|
15
|
+
<a href="README.zh-CN.md">简体中文</a>
|
|
16
|
+
</p>
|
|
17
|
+
<p>
|
|
18
|
+
<img alt="version" src="https://img.shields.io/badge/version-0.2.0-18181b">
|
|
19
|
+
<img alt="script" src="https://img.shields.io/badge/Slex-v0.1-18181b">
|
|
20
|
+
<img alt="TypeScript" src="https://img.shields.io/badge/runtime-TypeScript-3178c6">
|
|
21
|
+
<img alt="Svelte 5" src="https://img.shields.io/badge/components-Svelte_5-ff3e00">
|
|
22
|
+
<img alt="license" src="https://img.shields.io/badge/license-MIT-16a34a">
|
|
23
|
+
</p>
|
|
24
|
+
</div>
|
|
25
|
+
|
|
26
|
+
## Live interface blocks inside Markdown
|
|
27
|
+
|
|
28
|
+
**SlexKit** turns explicit `slex` Markdown fences into live, stateful UI blocks. A Slex source is just a JavaScript object literal: `g` holds state and logic, `layout` describes the component tree, and the browser runtime renders the result in place.
|
|
29
|
+
|
|
30
|
+
It is built for chat messages, documents, agent panels, tool results, and AI-authored dashboards. It is not a full application framework.
|
|
31
|
+
|
|
32
|
+
## Installation
|
|
33
|
+
|
|
34
|
+
```sh
|
|
35
|
+
npm install slexkit
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
```ts
|
|
39
|
+
import { mount } from "slexkit";
|
|
40
|
+
import "slexkit/style.css";
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## Usage
|
|
44
|
+
|
|
45
|
+
```html
|
|
46
|
+
<div id="app"></div>
|
|
47
|
+
|
|
48
|
+
<script type="module">
|
|
49
|
+
import { mount } from "slexkit";
|
|
50
|
+
import "slexkit/style.css";
|
|
51
|
+
|
|
52
|
+
mount(
|
|
53
|
+
{
|
|
54
|
+
slex: "0.1",
|
|
55
|
+
namespace: "hello",
|
|
56
|
+
g: { name: "World", count: 0 },
|
|
57
|
+
layout: {
|
|
58
|
+
"card:greeting": {
|
|
59
|
+
title: "Greeting",
|
|
60
|
+
"text:message": {
|
|
61
|
+
"$text": "'Hello, ' + g.name + '! Count: ' + g.count"
|
|
62
|
+
},
|
|
63
|
+
"button:add": {
|
|
64
|
+
label: "+1",
|
|
65
|
+
onclick: "g.count++"
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
},
|
|
70
|
+
document.getElementById("app")
|
|
71
|
+
);
|
|
72
|
+
</script>
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
## Markdown Native
|
|
76
|
+
|
|
77
|
+
SlexKit-capable hosts process explicit `slex` fences only. Plain `js`, `json`, and unlabeled code blocks stay inert.
|
|
78
|
+
|
|
79
|
+
````md
|
|
80
|
+
```slex
|
|
81
|
+
{
|
|
82
|
+
slex: "0.1",
|
|
83
|
+
namespace: "status",
|
|
84
|
+
g: { done: 3, total: 4 },
|
|
85
|
+
layout: {
|
|
86
|
+
"badge:state": { label: "Ready", tone: "success" },
|
|
87
|
+
"text:summary": { "$text": "g.done + '/' + g.total + ' complete'" }
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
**Status:** Ready. 3/4 complete.
|
|
93
|
+
````
|
|
94
|
+
|
|
95
|
+
Markdown platforms without SlexKit support show the fallback text. Hosts with SlexKit render the interactive UI.
|
|
96
|
+
|
|
97
|
+
## What You Get
|
|
98
|
+
|
|
99
|
+
- **Zero-build Slex source**: object literals with no imports, scaffolding, or component bundling in the generated output.
|
|
100
|
+
- **Reactive `g` / `layout` model**: centralized state and logic with declarative component trees.
|
|
101
|
+
- **Expression pipes**: `$` read expressions for dynamic props and `on*` write expressions for events.
|
|
102
|
+
- **Directives**: `$if` and `$for` for conditional rendering and keyed list reconciliation.
|
|
103
|
+
- **Official Svelte components**: 40+ layout, input, content, display, disclosure, feedback, and tooling components.
|
|
104
|
+
- **Extensible registry**: custom component types, Svelte renderers, and component state modes.
|
|
105
|
+
- **Trusted and secure runtimes**: host-realm rendering for trusted content, sandbox iframe rendering for untrusted source.
|
|
106
|
+
- **ToolHost**: confirm, choose, and fill-form templates for structured AI tool-call UX.
|
|
107
|
+
- **AI-friendly docs surface**: `llms.txt`, skills, and the `@slexkit/mcp` read-only MCP server.
|
|
108
|
+
|
|
109
|
+
## Packages
|
|
110
|
+
|
|
111
|
+
| Package | Install | Contents |
|
|
112
|
+
| --- | --- | --- |
|
|
113
|
+
| `slexkit` | `npm install slexkit` | Runtime, Svelte components, ToolHost, styles |
|
|
114
|
+
| `@slexkit/runtime` | `npm install slexkit @slexkit/runtime` | Component-free runtime wrapper |
|
|
115
|
+
| `@slexkit/components-svelte` | `npm install slexkit @slexkit/runtime @slexkit/components-svelte` | Svelte component registration |
|
|
116
|
+
| `@slexkit/theme-shadcn` | `npm install @slexkit/theme-shadcn` | CSS theme tokens |
|
|
117
|
+
| `@slexkit/streamdown` | `npm install slexkit @slexkit/theme-shadcn @slexkit/streamdown streamdown react react-dom` | React / Streamdown Markdown renderer |
|
|
118
|
+
| `@slexkit/obsidian` | `npm install slexkit @slexkit/obsidian` | Obsidian plugin adapter |
|
|
119
|
+
| `@slexkit/mcp` | `npx -y @slexkit/mcp` | Read-only MCP server for docs, examples, and source validation |
|
|
120
|
+
|
|
121
|
+
See [Package Boundaries](site/content/reference/packages/en-US.md) for details.
|
|
122
|
+
|
|
123
|
+
## Integrations
|
|
124
|
+
|
|
125
|
+
| Host | Path |
|
|
126
|
+
| --- | --- |
|
|
127
|
+
| Browser DOM | `mount()`, `ingest()`, `boot()`, `disposeNamespace()` |
|
|
128
|
+
| Markdown renderers | `createSlexKitMarkdownRuntimeHost()` |
|
|
129
|
+
| React / Streamdown | `@slexkit/streamdown` |
|
|
130
|
+
| Obsidian | `@slexkit/obsidian` |
|
|
131
|
+
| AI agents | `@slexkit/mcp`, `llms.txt`, SlexKit skill docs |
|
|
132
|
+
| Custom components | `register()`, `registerSvelteComponent()`, `registerSubset()` |
|
|
133
|
+
|
|
134
|
+
## Security Runtime
|
|
135
|
+
|
|
136
|
+
Trusted mode runs inside the host realm and is intended for application-authored or reviewed source. Secure mode isolates untrusted Slex source in a sandbox iframe with an opaque origin, nonce-based CSP, locked-down globals, host-mediated network access, and a heartbeat watchdog.
|
|
137
|
+
|
|
138
|
+
Read the [Security Runtime](site/content/reference/security/en-US.md) docs before rendering unreviewed user or model output.
|
|
139
|
+
|
|
140
|
+
## Documentation
|
|
141
|
+
|
|
142
|
+
| Document | Topic |
|
|
143
|
+
| --- | --- |
|
|
144
|
+
| [Getting Started](site/content/guides/quick-start/en-US.md) | Install and render a first Markdown-friendly Slex source |
|
|
145
|
+
| [Integration](site/content/guides/integration/en-US.md) | Streamdown, Obsidian, and custom host paths |
|
|
146
|
+
| [Runtime model](site/content/reference/runtime/en-US.md) | Mounting, updates, namespace store, lifecycle |
|
|
147
|
+
| [Slex usage reference](site/content/reference/usage/en-US.md) | Source structure, directives, expressions, events, custom components |
|
|
148
|
+
| [Security runtime](site/content/reference/security/en-US.md) | Threat model, sandbox iframe, policy, postMessage bridge |
|
|
149
|
+
| [Slex Specification](site/content/reference/spec/en-US.md) | Protocol v0.1, types, merge rules, lifecycle hooks |
|
|
150
|
+
| [ToolHost](site/content/reference/toolhost/en-US.md) | Tool-call rendering and custom templates |
|
|
151
|
+
| [Icon system](site/content/reference/icons/en-US.md) | Phosphor icons, custom registration, Iconify fallback |
|
|
152
|
+
| [AI / Agents](site/content/guides/ai-agents/en-US.md) | `llms.txt`, MCP server, skills, and authoring rules |
|
|
153
|
+
| [Changelog](CHANGELOG.md) | Release notes and notable changes |
|
|
154
|
+
|
|
155
|
+
## Version Information
|
|
156
|
+
|
|
157
|
+
```ts
|
|
158
|
+
import { SLEXKIT_VERSION, SLEX_PROTOCOL_VERSION, getSlexKitInfo } from "slexkit";
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
The npm package version, component implementation version, and Slex protocol version are exposed separately. The current public protocol is `v0.1`.
|
|
162
|
+
|
|
163
|
+
## License
|
|
164
|
+
|
|
165
|
+
MIT
|
package/README.zh-CN.md
ADDED
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
<div align="center">
|
|
2
|
+
<p>
|
|
3
|
+
<img src="site/assets/logo.svg" alt="SlexKit" width="84" height="84" />
|
|
4
|
+
</p>
|
|
5
|
+
<h1>SlexKit</h1>
|
|
6
|
+
<p><strong>Streaming Live EXpressions Kit</strong></p>
|
|
7
|
+
<p>
|
|
8
|
+
“文档即工具,工具即文档”,赋予 Markdown 可交互的能力,让 AI 的每一次输出都变得生动。
|
|
9
|
+
</p>
|
|
10
|
+
<p>
|
|
11
|
+
<a href="site/content/guides/intro/zh-CN.md">简介</a> ·
|
|
12
|
+
<a href="site/content/components/accordion/zh-CN.md">组件</a> ·
|
|
13
|
+
<a href="site/content/reference/spec/zh-CN.md">规范</a> ·
|
|
14
|
+
<a href="site/content/guides/ai-agents/zh-CN.md">AI / Agents</a> ·
|
|
15
|
+
<a href="README.md">English</a>
|
|
16
|
+
</p>
|
|
17
|
+
<p>
|
|
18
|
+
<img alt="version" src="https://img.shields.io/badge/version-0.2.0-18181b">
|
|
19
|
+
<img alt="script" src="https://img.shields.io/badge/Slex-v0.1-18181b">
|
|
20
|
+
<img alt="TypeScript" src="https://img.shields.io/badge/runtime-TypeScript-3178c6">
|
|
21
|
+
<img alt="Svelte 5" src="https://img.shields.io/badge/components-Svelte_5-ff3e00">
|
|
22
|
+
<img alt="license" src="https://img.shields.io/badge/license-MIT-16a34a">
|
|
23
|
+
</p>
|
|
24
|
+
</div>
|
|
25
|
+
|
|
26
|
+
## 把 Markdown 变成实时交互块
|
|
27
|
+
|
|
28
|
+
**SlexKit** 会把显式 `slex` Markdown fence 变成带状态的实时 UI 块。Slex 源码只是一个 JavaScript 对象字面量:`g` 保存状态和逻辑,`layout` 描述组件树,浏览器运行时在原位置渲染结果。
|
|
29
|
+
|
|
30
|
+
它适合聊天消息、文档、Agent 面板、工具结果和 AI 生成的仪表盘。它不是完整应用框架。
|
|
31
|
+
|
|
32
|
+
## 安装
|
|
33
|
+
|
|
34
|
+
```sh
|
|
35
|
+
npm install slexkit
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
```ts
|
|
39
|
+
import { mount } from "slexkit";
|
|
40
|
+
import "slexkit/style.css";
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## 使用
|
|
44
|
+
|
|
45
|
+
```html
|
|
46
|
+
<div id="app"></div>
|
|
47
|
+
|
|
48
|
+
<script type="module">
|
|
49
|
+
import { mount } from "slexkit";
|
|
50
|
+
import "slexkit/style.css";
|
|
51
|
+
|
|
52
|
+
mount(
|
|
53
|
+
{
|
|
54
|
+
slex: "0.1",
|
|
55
|
+
namespace: "hello",
|
|
56
|
+
g: { name: "World", count: 0 },
|
|
57
|
+
layout: {
|
|
58
|
+
"card:greeting": {
|
|
59
|
+
title: "Greeting",
|
|
60
|
+
"text:message": {
|
|
61
|
+
"$text": "'Hello, ' + g.name + '! Count: ' + g.count"
|
|
62
|
+
},
|
|
63
|
+
"button:add": {
|
|
64
|
+
label: "+1",
|
|
65
|
+
onclick: "g.count++"
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
},
|
|
70
|
+
document.getElementById("app")
|
|
71
|
+
);
|
|
72
|
+
</script>
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
## Markdown 原生输出
|
|
76
|
+
|
|
77
|
+
支持 SlexKit 的宿主只处理显式 `slex` fence。普通 `js`、`json` 和未标记代码块都保持惰性,不会被猜测执行。
|
|
78
|
+
|
|
79
|
+
````md
|
|
80
|
+
```slex
|
|
81
|
+
{
|
|
82
|
+
slex: "0.1",
|
|
83
|
+
namespace: "status",
|
|
84
|
+
g: { done: 3, total: 4 },
|
|
85
|
+
layout: {
|
|
86
|
+
"badge:state": { label: "Ready", tone: "success" },
|
|
87
|
+
"text:summary": { "$text": "g.done + '/' + g.total + ' complete'" }
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
**状态:** Ready。3/4 complete.
|
|
93
|
+
````
|
|
94
|
+
|
|
95
|
+
不支持 SlexKit 的 Markdown 平台会显示 fallback 文本;支持 SlexKit 的宿主会渲染交互 UI。
|
|
96
|
+
|
|
97
|
+
## 能力概览
|
|
98
|
+
|
|
99
|
+
- **零构建 Slex 源码**:生成结果是对象字面量,不需要 imports、脚手架或组件打包。
|
|
100
|
+
- **响应式 `g` / `layout` 模型**:状态和逻辑集中在 `g`,UI 结构由组件树声明。
|
|
101
|
+
- **表达式管道**:`$` 读表达式用于动态属性,`on*` 写表达式用于事件。
|
|
102
|
+
- **指令系统**:`$if` 和 `$for` 支持条件渲染和带 key 的列表协调。
|
|
103
|
+
- **官方 Svelte 组件**:40+ 个 layout、input、content、display、disclosure、feedback、tooling 组件。
|
|
104
|
+
- **可扩展注册表**:支持自定义组件类型、Svelte renderer 和组件状态模式。
|
|
105
|
+
- **可信与安全双运行时**:可信内容在宿主域渲染,不可信源码在 sandbox iframe 中隔离渲染。
|
|
106
|
+
- **ToolHost**:为 AI tool-call 提供确认、选择、填表等结构化交互模板。
|
|
107
|
+
- **AI 友好文档面**:提供 `llms.txt`、skills 和只读 `@slexkit/mcp` MCP 服务。
|
|
108
|
+
|
|
109
|
+
## 包
|
|
110
|
+
|
|
111
|
+
| 包 | 安装 | 内容 |
|
|
112
|
+
| --- | --- | --- |
|
|
113
|
+
| `slexkit` | `npm install slexkit` | Runtime、Svelte 组件、ToolHost、样式 |
|
|
114
|
+
| `@slexkit/runtime` | `npm install slexkit @slexkit/runtime` | 无组件运行时封装 |
|
|
115
|
+
| `@slexkit/components-svelte` | `npm install slexkit @slexkit/runtime @slexkit/components-svelte` | Svelte 组件注册 |
|
|
116
|
+
| `@slexkit/theme-shadcn` | `npm install @slexkit/theme-shadcn` | CSS 主题 token |
|
|
117
|
+
| `@slexkit/streamdown` | `npm install slexkit @slexkit/theme-shadcn @slexkit/streamdown streamdown react react-dom` | React / Streamdown Markdown 渲染器 |
|
|
118
|
+
| `@slexkit/obsidian` | `npm install slexkit @slexkit/obsidian` | Obsidian 插件适配器 |
|
|
119
|
+
| `@slexkit/mcp` | `npx -y @slexkit/mcp` | 面向文档、示例和源码校验的只读 MCP 服务 |
|
|
120
|
+
|
|
121
|
+
更多说明见 [Package Boundaries](site/content/reference/packages/zh-CN.md)。
|
|
122
|
+
|
|
123
|
+
## 集成
|
|
124
|
+
|
|
125
|
+
| 宿主 | 路径 |
|
|
126
|
+
| --- | --- |
|
|
127
|
+
| 浏览器 DOM | `mount()`、`ingest()`、`boot()`、`disposeNamespace()` |
|
|
128
|
+
| Markdown 渲染器 | `createSlexKitMarkdownRuntimeHost()` |
|
|
129
|
+
| React / Streamdown | `@slexkit/streamdown` |
|
|
130
|
+
| Obsidian | `@slexkit/obsidian` |
|
|
131
|
+
| AI Agents | `@slexkit/mcp`、`llms.txt`、SlexKit skill 文档 |
|
|
132
|
+
| 自定义组件 | `register()`、`registerSvelteComponent()`、`registerSubset()` |
|
|
133
|
+
|
|
134
|
+
## 安全运行时
|
|
135
|
+
|
|
136
|
+
可信模式在宿主域内运行,适合应用自己生成或经过审核的源码。安全模式会把不可信 Slex 源码隔离到 sandbox iframe 中,并使用 opaque origin、基于 nonce 的 CSP、锁定全局变量、宿主代理网络访问和心跳 watchdog。
|
|
137
|
+
|
|
138
|
+
渲染未审核的用户输入或模型输出前,请先阅读 [Security Runtime](site/content/reference/security/zh-CN.md)。
|
|
139
|
+
|
|
140
|
+
## 文档
|
|
141
|
+
|
|
142
|
+
| 文档 | 主题 |
|
|
143
|
+
| --- | --- |
|
|
144
|
+
| [快速开始](site/content/guides/quick-start/zh-CN.md) | 安装并渲染第一个 Markdown 友好的 Slex 源码 |
|
|
145
|
+
| [集成指南](site/content/guides/integration/zh-CN.md) | Streamdown、Obsidian 和自定义宿主路径 |
|
|
146
|
+
| [运行时模型](site/content/reference/runtime/zh-CN.md) | 挂载、更新、命名空间存储、生命周期 |
|
|
147
|
+
| [Slex 用法参考](site/content/reference/usage/zh-CN.md) | 源码结构、指令、表达式、事件、自定义组件 |
|
|
148
|
+
| [安全运行时](site/content/reference/security/zh-CN.md) | 威胁模型、sandbox iframe、策略、postMessage 桥接 |
|
|
149
|
+
| [Slex 规范](site/content/reference/spec/zh-CN.md) | 协议 v0.1、类型、合并规则、生命周期钩子 |
|
|
150
|
+
| [ToolHost](site/content/reference/toolhost/zh-CN.md) | Tool-call 渲染和自定义模板 |
|
|
151
|
+
| [图标系统](site/content/reference/icons/zh-CN.md) | Phosphor 图标、自定义注册、Iconify fallback |
|
|
152
|
+
| [AI / Agents](site/content/guides/ai-agents/zh-CN.md) | `llms.txt`、MCP 服务、skills 和创作规则 |
|
|
153
|
+
| [更新日志](CHANGELOG.md) | 发布说明和重要变更 |
|
|
154
|
+
|
|
155
|
+
## 版本信息
|
|
156
|
+
|
|
157
|
+
```ts
|
|
158
|
+
import { SLEXKIT_VERSION, SLEX_PROTOCOL_VERSION, getSlexKitInfo } from "slexkit";
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
npm 包版本、组件实现版本和 Slex 协议版本会分别暴露。当前公开协议是 `v0.1`。
|
|
162
|
+
|
|
163
|
+
## 许可协议
|
|
164
|
+
|
|
165
|
+
MIT
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# SlexKit Authoring Rules for LLMs
|
|
2
|
+
|
|
3
|
+
SlexKit's agent-readable source is Markdown with explicit `slex` fences. Do not use `.mdx`; `slex` fences are the interactive layer.
|
|
4
|
+
|
|
5
|
+
## Always Do
|
|
6
|
+
|
|
7
|
+
- Emit explicit `slex` fenced code blocks for display-oriented interactive UI.
|
|
8
|
+
- Use a Slex expression envelope: `slex`, `namespace`, `g`, and `layout`.
|
|
9
|
+
- Put mutable state and helper functions in `g`; put component structure in `layout`.
|
|
10
|
+
- Use component keys in `type:identifier` form, such as `card:summary`.
|
|
11
|
+
- Use `$` read-pipes for dynamic props and `on*` write-pipes for event handlers.
|
|
12
|
+
- Include readable Markdown fallback text after the fence.
|
|
13
|
+
- Use secure runtime integration for untrusted or agent-generated source.
|
|
14
|
+
|
|
15
|
+
## Do Not
|
|
16
|
+
|
|
17
|
+
- Do not emit imports, JSX, Svelte, Vue, or project scaffolding inside `slex` fences.
|
|
18
|
+
- Do not ask hosts to scan plain JavaScript, JSON, or untagged code blocks.
|
|
19
|
+
- Do not wrap ordinary status cards or summaries in ToolHost.
|
|
20
|
+
- Do not bypass the sandbox for untrusted source.
|
|
21
|
+
- Do not invent `.mdx` routes for SlexKit docs.
|
|
22
|
+
|
|
23
|
+
## Display UI Example
|
|
24
|
+
|
|
25
|
+
```slex
|
|
26
|
+
{
|
|
27
|
+
slex: "0.1",
|
|
28
|
+
namespace: "release_status",
|
|
29
|
+
g: { done: 3, total: 4 },
|
|
30
|
+
layout: {
|
|
31
|
+
"card:summary": {
|
|
32
|
+
title: "Release status",
|
|
33
|
+
"text:count": { "$text": "g.done + '/' + g.total + ' complete'" },
|
|
34
|
+
"progress:bar": { "$value": "g.done / g.total * 100" }
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
**Fallback:** Release status: 3/4 complete.
|
|
41
|
+
|
|
42
|
+
## ToolHost Boundary
|
|
43
|
+
|
|
44
|
+
Use ToolHost only when the UI must return structured user input to the host, such as confirmations, option lists, or forms. Display-only dashboards, metrics, and status blocks should stay as `slex` fences.
|