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.
Files changed (221) hide show
  1. package/AGENTS.slexkit.md +29 -0
  2. package/CHANGELOG.md +90 -0
  3. package/LICENSE +21 -0
  4. package/README.md +165 -0
  5. package/README.zh-CN.md +165 -0
  6. package/dist/ai/llms-authoring.txt +44 -0
  7. package/dist/ai/llms-components.txt +669 -0
  8. package/dist/ai/llms-full.txt +6586 -0
  9. package/dist/ai/llms-runtime.txt +1475 -0
  10. package/dist/ai/llms-toolhost.txt +295 -0
  11. package/dist/ai/llms.txt +69 -0
  12. package/dist/ai/slexkit-ai-manifest.json +2922 -0
  13. package/dist/base.css +621 -0
  14. package/dist/chunks/accordion-5f0nvjjm.js +376 -0
  15. package/dist/chunks/accordion-830dw78f.js +221 -0
  16. package/dist/chunks/accordion-cfjyxw93.js +630 -0
  17. package/dist/chunks/accordion-cw5r75jm.js +424 -0
  18. package/dist/chunks/accordion-ehnhpeca.js +492 -0
  19. package/dist/chunks/accordion-hzyrngd6.js +2377 -0
  20. package/dist/chunks/accordion-nw12ytps.js +6823 -0
  21. package/dist/components/accordion.js +163 -0
  22. package/dist/components/badge.js +80 -0
  23. package/dist/components/button.css +114 -0
  24. package/dist/components/button.js +16 -0
  25. package/dist/components/callout.js +154 -0
  26. package/dist/components/card.js +95 -0
  27. package/dist/components/checkbox.js +114 -0
  28. package/dist/components/choice.css +165 -0
  29. package/dist/components/code-block.js +264 -0
  30. package/dist/components/collapsible.js +111 -0
  31. package/dist/components/column.js +49 -0
  32. package/dist/components/content.css +474 -0
  33. package/dist/components/disclosure.css +162 -0
  34. package/dist/components/display.css +259 -0
  35. package/dist/components/divider.js +98 -0
  36. package/dist/components/feedback.css +219 -0
  37. package/dist/components/grid.js +67 -0
  38. package/dist/components/index.js +13364 -0
  39. package/dist/components/input.css +1247 -0
  40. package/dist/components/input.js +384 -0
  41. package/dist/components/link.js +77 -0
  42. package/dist/components/progress.js +111 -0
  43. package/dist/components/radio-group.js +189 -0
  44. package/dist/components/row.js +200 -0
  45. package/dist/components/section.js +161 -0
  46. package/dist/components/select.css +260 -0
  47. package/dist/components/select.js +16 -0
  48. package/dist/components/slider.css +125 -0
  49. package/dist/components/slider.js +175 -0
  50. package/dist/components/specs.js +1090 -0
  51. package/dist/components/stat.js +178 -0
  52. package/dist/components/submit.css +9 -0
  53. package/dist/components/submit.js +77 -0
  54. package/dist/components/switch.css +114 -0
  55. package/dist/components/switch.js +114 -0
  56. package/dist/components/table.js +157 -0
  57. package/dist/components/tabs.css +192 -0
  58. package/dist/components/tabs.js +17 -0
  59. package/dist/components/text-input.css +245 -0
  60. package/dist/components/text.js +50 -0
  61. package/dist/components/toast.js +240 -0
  62. package/dist/components/tooling.css +1009 -0
  63. package/dist/components/tooling.js +48951 -0
  64. package/dist/runtime.cjs +3728 -0
  65. package/dist/runtime.js +3686 -0
  66. package/dist/slexkit.cjs +18539 -0
  67. package/dist/slexkit.css +4776 -0
  68. package/dist/slexkit.js +18497 -0
  69. package/dist/tooling.js +59141 -0
  70. package/dist/types/components/accordion.d.ts +2 -0
  71. package/dist/types/components/badge.d.ts +2 -0
  72. package/dist/types/components/button.d.ts +2 -0
  73. package/dist/types/components/callout.d.ts +2 -0
  74. package/dist/types/components/card.d.ts +2 -0
  75. package/dist/types/components/checkbox.d.ts +2 -0
  76. package/dist/types/components/code-block.d.ts +2 -0
  77. package/dist/types/components/collapsible.d.ts +2 -0
  78. package/dist/types/components/column.d.ts +2 -0
  79. package/dist/types/components/divider.d.ts +2 -0
  80. package/dist/types/components/entries/accordion.d.ts +3 -0
  81. package/dist/types/components/entries/badge.d.ts +3 -0
  82. package/dist/types/components/entries/button.d.ts +3 -0
  83. package/dist/types/components/entries/callout.d.ts +3 -0
  84. package/dist/types/components/entries/card.d.ts +3 -0
  85. package/dist/types/components/entries/checkbox.d.ts +3 -0
  86. package/dist/types/components/entries/code-block.d.ts +3 -0
  87. package/dist/types/components/entries/collapsible.d.ts +3 -0
  88. package/dist/types/components/entries/column.d.ts +3 -0
  89. package/dist/types/components/entries/divider.d.ts +3 -0
  90. package/dist/types/components/entries/grid.d.ts +3 -0
  91. package/dist/types/components/entries/input.d.ts +3 -0
  92. package/dist/types/components/entries/link.d.ts +3 -0
  93. package/dist/types/components/entries/progress.d.ts +3 -0
  94. package/dist/types/components/entries/radio-group.d.ts +3 -0
  95. package/dist/types/components/entries/row.d.ts +3 -0
  96. package/dist/types/components/entries/section.d.ts +3 -0
  97. package/dist/types/components/entries/select.d.ts +3 -0
  98. package/dist/types/components/entries/slider.d.ts +3 -0
  99. package/dist/types/components/entries/specs.d.ts +1 -0
  100. package/dist/types/components/entries/stat.d.ts +3 -0
  101. package/dist/types/components/entries/submit.d.ts +3 -0
  102. package/dist/types/components/entries/switch.d.ts +3 -0
  103. package/dist/types/components/entries/table.d.ts +3 -0
  104. package/dist/types/components/entries/tabs.d.ts +3 -0
  105. package/dist/types/components/entries/text.d.ts +3 -0
  106. package/dist/types/components/entries/toast.d.ts +3 -0
  107. package/dist/types/components/entries/tooling.d.ts +1 -0
  108. package/dist/types/components/grid.d.ts +2 -0
  109. package/dist/types/components/index.d.ts +6 -0
  110. package/dist/types/components/input.d.ts +2 -0
  111. package/dist/types/components/link.d.ts +2 -0
  112. package/dist/types/components/progress.d.ts +2 -0
  113. package/dist/types/components/radio-group.d.ts +2 -0
  114. package/dist/types/components/row.d.ts +2 -0
  115. package/dist/types/components/section.d.ts +2 -0
  116. package/dist/types/components/select.d.ts +2 -0
  117. package/dist/types/components/slider.d.ts +2 -0
  118. package/dist/types/components/spec-helpers.d.ts +23 -0
  119. package/dist/types/components/spec-registry.d.ts +12 -0
  120. package/dist/types/components/spec-schema.d.ts +74 -0
  121. package/dist/types/components/specs.d.ts +2 -0
  122. package/dist/types/components/stat.d.ts +2 -0
  123. package/dist/types/components/submit.d.ts +2 -0
  124. package/dist/types/components/svelte/adapter.d.ts +3 -0
  125. package/dist/types/components/svelte/bindProps.d.ts +2 -0
  126. package/dist/types/components/svelte/helpers.d.ts +33 -0
  127. package/dist/types/components/svelte/layout/balancedTiles.d.ts +14 -0
  128. package/dist/types/components/svelte/types.d.ts +12 -0
  129. package/dist/types/components/switch.d.ts +2 -0
  130. package/dist/types/components/table.d.ts +2 -0
  131. package/dist/types/components/tabs.d.ts +2 -0
  132. package/dist/types/components/text.d.ts +2 -0
  133. package/dist/types/components/toast.d.ts +2 -0
  134. package/dist/types/components/tooling.d.ts +2 -0
  135. package/dist/types/components-svelte.d.ts +5 -0
  136. package/dist/types/engine/component-scope.d.ts +14 -0
  137. package/dist/types/engine/component-state.d.ts +9 -0
  138. package/dist/types/engine/diagnostics.d.ts +24 -0
  139. package/dist/types/engine/engineering.d.ts +11 -0
  140. package/dist/types/engine/eval.d.ts +5 -0
  141. package/dist/types/engine/index.d.ts +26 -0
  142. package/dist/types/engine/markdown-runtime.d.ts +33 -0
  143. package/dist/types/engine/merge.d.ts +1 -0
  144. package/dist/types/engine/reactive.d.ts +11 -0
  145. package/dist/types/engine/registry.d.ts +4 -0
  146. package/dist/types/engine/renderer.d.ts +6 -0
  147. package/dist/types/engine/sandbox-runner.d.ts +2 -0
  148. package/dist/types/engine/secure-runtime.d.ts +214 -0
  149. package/dist/types/engine/store.d.ts +12 -0
  150. package/dist/types/engine/types.d.ts +58 -0
  151. package/dist/types/icons/manager.d.ts +17 -0
  152. package/dist/types/icons/phosphor.d.ts +45 -0
  153. package/dist/types/index.d.ts +61 -0
  154. package/dist/types/runtime.d.ts +32 -0
  155. package/dist/types/toolhost/index.d.ts +78 -0
  156. package/dist/types/tooling-umd.d.ts +47 -0
  157. package/dist/types/version.d.ts +8 -0
  158. package/dist/umd/slexkit.tooling.umd.js +66553 -0
  159. package/dist/umd/slexkit.umd.js +18552 -0
  160. package/package.json +136 -0
  161. package/scripts/cli.mjs +47 -0
  162. package/skills/slexkit/SKILL.md +27 -0
  163. package/skills/slexkit-author/SKILL.md +50 -0
  164. package/skills/slexkit-host-integration/SKILL.md +33 -0
  165. package/skills/slexkit-secure-runtime/SKILL.md +31 -0
  166. package/skills/slexkit-toolhost/SKILL.md +38 -0
  167. package/skills/slexkit-update/SKILL.md +23 -0
  168. package/src/components/svelte/InlineIcon.svelte +66 -0
  169. package/src/components/svelte/adapter.ts +76 -0
  170. package/src/components/svelte/bindProps.ts +9 -0
  171. package/src/components/svelte/content/Badge.svelte +19 -0
  172. package/src/components/svelte/content/Callout.svelte +57 -0
  173. package/src/components/svelte/content/CodeBlock.svelte +130 -0
  174. package/src/components/svelte/content/Divider.svelte +21 -0
  175. package/src/components/svelte/content/Link.svelte +21 -0
  176. package/src/components/svelte/content/Section.svelte +24 -0
  177. package/src/components/svelte/content/Table.svelte +44 -0
  178. package/src/components/svelte/disclosure/Accordion.svelte +100 -0
  179. package/src/components/svelte/disclosure/Collapsible.svelte +45 -0
  180. package/src/components/svelte/display/Stat.svelte +102 -0
  181. package/src/components/svelte/display/Text.svelte +11 -0
  182. package/src/components/svelte/feedback/Progress.svelte +34 -0
  183. package/src/components/svelte/feedback/Toast.svelte +105 -0
  184. package/src/components/svelte/helpers.ts +148 -0
  185. package/src/components/svelte/input/Button.svelte +78 -0
  186. package/src/components/svelte/input/Checkbox.svelte +52 -0
  187. package/src/components/svelte/input/Input.svelte +202 -0
  188. package/src/components/svelte/input/RadioGroup.svelte +71 -0
  189. package/src/components/svelte/input/Select.svelte +220 -0
  190. package/src/components/svelte/input/Slider.svelte +96 -0
  191. package/src/components/svelte/input/Submit.svelte +32 -0
  192. package/src/components/svelte/input/Switch.svelte +53 -0
  193. package/src/components/svelte/input/Tabs.svelte +188 -0
  194. package/src/components/svelte/layout/Card.svelte +17 -0
  195. package/src/components/svelte/layout/Column.svelte +15 -0
  196. package/src/components/svelte/layout/Grid.svelte +26 -0
  197. package/src/components/svelte/layout/Row.svelte +105 -0
  198. package/src/components/svelte/layout/balancedTiles.ts +85 -0
  199. package/src/components/svelte/tooling/CodeMirror.svelte +91 -0
  200. package/src/components/svelte/tooling/Playground.svelte +765 -0
  201. package/src/components/svelte/tooling/PlaygroundMarkdown.svelte +26 -0
  202. package/src/components/svelte/tooling/PlaygroundSlexCode.svelte +76 -0
  203. package/src/components/svelte/types.ts +17 -0
  204. package/src/styles/animation.css +98 -0
  205. package/src/styles/components/button.css +114 -0
  206. package/src/styles/components/choice.css +165 -0
  207. package/src/styles/components/select.css +260 -0
  208. package/src/styles/components/slider.css +125 -0
  209. package/src/styles/components/submit.css +9 -0
  210. package/src/styles/components/switch.css +114 -0
  211. package/src/styles/components/tabs.css +192 -0
  212. package/src/styles/components/text-input.css +245 -0
  213. package/src/styles/content.css +474 -0
  214. package/src/styles/disclosure.css +162 -0
  215. package/src/styles/display.css +259 -0
  216. package/src/styles/entry.css +34 -0
  217. package/src/styles/feedback.css +219 -0
  218. package/src/styles/input.css +8 -0
  219. package/src/styles/layout.css +365 -0
  220. package/src/styles/theme.css +31 -0
  221. 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
@@ -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.