@loom-framework/core 0.1.0-alpha.5 → 0.1.0-alpha.50

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 (163) hide show
  1. package/dist/adapter-base.d.ts +29 -0
  2. package/dist/adapter-base.d.ts.map +1 -0
  3. package/dist/adapter-base.js +62 -0
  4. package/dist/adapter-base.js.map +1 -0
  5. package/dist/adapter-factory.d.ts +8 -0
  6. package/dist/adapter-factory.d.ts.map +1 -0
  7. package/dist/adapter-factory.js +25 -0
  8. package/dist/adapter-factory.js.map +1 -0
  9. package/dist/adapter-filesystem.d.ts +6 -11
  10. package/dist/adapter-filesystem.d.ts.map +1 -1
  11. package/dist/adapter-filesystem.js +8 -33
  12. package/dist/adapter-filesystem.js.map +1 -1
  13. package/dist/adapter-sqlite.d.ts +6 -23
  14. package/dist/adapter-sqlite.d.ts.map +1 -1
  15. package/dist/adapter-sqlite.js +45 -50
  16. package/dist/adapter-sqlite.js.map +1 -1
  17. package/dist/backend/ai/button-resolver.d.ts +18 -0
  18. package/dist/backend/ai/button-resolver.d.ts.map +1 -0
  19. package/dist/backend/ai/button-resolver.js +58 -0
  20. package/dist/backend/ai/button-resolver.js.map +1 -0
  21. package/dist/backend/ai/engine.d.ts +51 -0
  22. package/dist/backend/ai/engine.d.ts.map +1 -0
  23. package/dist/backend/ai/engine.js +188 -0
  24. package/dist/backend/ai/engine.js.map +1 -0
  25. package/dist/backend/ai/index.d.ts +11 -0
  26. package/dist/backend/ai/index.d.ts.map +1 -0
  27. package/dist/backend/ai/index.js +8 -0
  28. package/dist/backend/ai/index.js.map +1 -0
  29. package/dist/backend/ai/output-parser.d.ts +29 -0
  30. package/dist/backend/ai/output-parser.d.ts.map +1 -0
  31. package/dist/backend/ai/output-parser.js +247 -0
  32. package/dist/backend/ai/output-parser.js.map +1 -0
  33. package/dist/backend/ai/session-manager.d.ts +103 -0
  34. package/dist/backend/ai/session-manager.d.ts.map +1 -0
  35. package/dist/backend/ai/session-manager.js +298 -0
  36. package/dist/backend/ai/session-manager.js.map +1 -0
  37. package/dist/backend/index.d.ts +61 -0
  38. package/dist/backend/index.d.ts.map +1 -0
  39. package/dist/backend/index.js +160 -0
  40. package/dist/backend/index.js.map +1 -0
  41. package/dist/backend/observe/index.d.ts +6 -0
  42. package/dist/backend/observe/index.d.ts.map +1 -0
  43. package/dist/backend/observe/index.js +5 -0
  44. package/dist/backend/observe/index.js.map +1 -0
  45. package/dist/backend/observe/logger.d.ts +28 -0
  46. package/dist/backend/observe/logger.d.ts.map +1 -0
  47. package/dist/backend/observe/logger.js +80 -0
  48. package/dist/backend/observe/logger.js.map +1 -0
  49. package/dist/backend/observe/types.d.ts +26 -0
  50. package/dist/backend/observe/types.d.ts.map +1 -0
  51. package/dist/backend/observe/types.js +7 -0
  52. package/dist/backend/observe/types.js.map +1 -0
  53. package/dist/backend/routes/chat.d.ts +31 -0
  54. package/dist/backend/routes/chat.d.ts.map +1 -0
  55. package/dist/backend/routes/chat.js +426 -0
  56. package/dist/backend/routes/chat.js.map +1 -0
  57. package/dist/backend/routes/data.d.ts +13 -0
  58. package/dist/backend/routes/data.d.ts.map +1 -0
  59. package/dist/backend/routes/data.js +129 -0
  60. package/dist/backend/routes/data.js.map +1 -0
  61. package/dist/backend/routes/health.d.ts +7 -0
  62. package/dist/backend/routes/health.d.ts.map +1 -0
  63. package/dist/backend/routes/health.js +15 -0
  64. package/dist/backend/routes/health.js.map +1 -0
  65. package/dist/backend/routes/index.d.ts +9 -0
  66. package/dist/backend/routes/index.d.ts.map +1 -0
  67. package/dist/backend/routes/index.js +8 -0
  68. package/dist/backend/routes/index.js.map +1 -0
  69. package/dist/backend/routes/upload.d.ts +24 -0
  70. package/dist/backend/routes/upload.d.ts.map +1 -0
  71. package/dist/backend/routes/upload.js +67 -0
  72. package/dist/backend/routes/upload.js.map +1 -0
  73. package/dist/bin.d.ts +8 -0
  74. package/dist/bin.d.ts.map +1 -0
  75. package/dist/bin.js +12 -0
  76. package/dist/bin.js.map +1 -0
  77. package/dist/capability-generator.d.ts.map +1 -1
  78. package/dist/capability-generator.js +4 -8
  79. package/dist/capability-generator.js.map +1 -1
  80. package/dist/cli/commands/build.d.ts +11 -0
  81. package/dist/cli/commands/build.d.ts.map +1 -0
  82. package/dist/cli/commands/build.js +170 -0
  83. package/dist/cli/commands/build.js.map +1 -0
  84. package/dist/cli/commands/data.d.ts +11 -0
  85. package/dist/cli/commands/data.d.ts.map +1 -0
  86. package/dist/cli/commands/data.js +137 -0
  87. package/dist/cli/commands/data.js.map +1 -0
  88. package/dist/cli/commands/dev.d.ts +9 -0
  89. package/dist/cli/commands/dev.d.ts.map +1 -0
  90. package/dist/cli/commands/dev.js +114 -0
  91. package/dist/cli/commands/dev.js.map +1 -0
  92. package/dist/cli/commands/generate-capabilities.d.ts +8 -0
  93. package/dist/cli/commands/generate-capabilities.d.ts.map +1 -0
  94. package/dist/cli/commands/generate-capabilities.js +40 -0
  95. package/dist/cli/commands/generate-capabilities.js.map +1 -0
  96. package/dist/cli/commands/generate-cli-command.d.ts +8 -0
  97. package/dist/cli/commands/generate-cli-command.d.ts.map +1 -0
  98. package/dist/cli/commands/generate-cli-command.js +64 -0
  99. package/dist/cli/commands/generate-cli-command.js.map +1 -0
  100. package/dist/cli/commands/generate-page.d.ts +9 -0
  101. package/dist/cli/commands/generate-page.d.ts.map +1 -0
  102. package/dist/cli/commands/generate-page.js +411 -0
  103. package/dist/cli/commands/generate-page.js.map +1 -0
  104. package/dist/cli/commands/generate-skill.d.ts +8 -0
  105. package/dist/cli/commands/generate-skill.d.ts.map +1 -0
  106. package/dist/cli/commands/generate-skill.js +75 -0
  107. package/dist/cli/commands/generate-skill.js.map +1 -0
  108. package/dist/cli/commands/generate.d.ts +6 -0
  109. package/dist/cli/commands/generate.d.ts.map +1 -0
  110. package/dist/cli/commands/generate.js +17 -0
  111. package/dist/cli/commands/generate.js.map +1 -0
  112. package/dist/cli/commands/init.d.ts +8 -0
  113. package/dist/cli/commands/init.d.ts.map +1 -0
  114. package/dist/cli/commands/init.js +539 -0
  115. package/dist/cli/commands/init.js.map +1 -0
  116. package/dist/cli/commands/observe.d.ts +9 -0
  117. package/dist/cli/commands/observe.d.ts.map +1 -0
  118. package/dist/cli/commands/observe.js +142 -0
  119. package/dist/cli/commands/observe.js.map +1 -0
  120. package/dist/cli/commands/skill.d.ts +9 -0
  121. package/dist/cli/commands/skill.d.ts.map +1 -0
  122. package/dist/cli/commands/skill.js +186 -0
  123. package/dist/cli/commands/skill.js.map +1 -0
  124. package/dist/cli/helpers/duration.d.ts +5 -0
  125. package/dist/cli/helpers/duration.d.ts.map +1 -0
  126. package/dist/cli/helpers/duration.js +19 -0
  127. package/dist/cli/helpers/duration.js.map +1 -0
  128. package/dist/cli/helpers/field-template.d.ts +9 -0
  129. package/dist/cli/helpers/field-template.d.ts.map +1 -0
  130. package/dist/cli/helpers/field-template.js +92 -0
  131. package/dist/cli/helpers/field-template.js.map +1 -0
  132. package/dist/cli/helpers/naming.d.ts +12 -0
  133. package/dist/cli/helpers/naming.d.ts.map +1 -0
  134. package/dist/cli/helpers/naming.js +25 -0
  135. package/dist/cli/helpers/naming.js.map +1 -0
  136. package/dist/cli/index.d.ts +9 -0
  137. package/dist/cli/index.d.ts.map +1 -0
  138. package/dist/cli/index.js +33 -0
  139. package/dist/cli/index.js.map +1 -0
  140. package/dist/cli/utils.d.ts +10 -0
  141. package/dist/cli/utils.d.ts.map +1 -0
  142. package/dist/cli/utils.js +31 -0
  143. package/dist/cli/utils.js.map +1 -0
  144. package/dist/config.d.ts +8 -33
  145. package/dist/config.d.ts.map +1 -1
  146. package/dist/config.js +6 -7
  147. package/dist/config.js.map +1 -1
  148. package/dist/index.d.ts +6 -1
  149. package/dist/index.d.ts.map +1 -1
  150. package/dist/index.js +6 -0
  151. package/dist/index.js.map +1 -1
  152. package/dist/server-bin.d.ts +12 -0
  153. package/dist/server-bin.d.ts.map +1 -0
  154. package/dist/server-bin.js +75 -0
  155. package/dist/server-bin.js.map +1 -0
  156. package/dist/types.d.ts +28 -18
  157. package/dist/types.d.ts.map +1 -1
  158. package/package.json +17 -4
  159. package/templates/skill/SKILL.md +118 -0
  160. package/templates/skill/references/README.md +129 -0
  161. package/templates/skill/references/data-model.md +101 -0
  162. package/templates/skill/references/skill-development.md +46 -0
  163. package/templates/skill/references/troubleshooting.md +42 -0
@@ -0,0 +1,129 @@
1
+ # Loom - AI-Native Full-Stack Framework
2
+
3
+ 编织 AI 能力为应用织物
4
+
5
+ ## 快速上手
6
+
7
+ ### 1. 安装 npm 包
8
+
9
+ Loom 包含两个包:
10
+
11
+ - `@loom-framework/core` — CLI + 后端(全局安装以使用 `loom` 命令)
12
+ - `@loom-framework/frontend-antd` — 前端组件库(项目运行时依赖,`loom init` 自动添加)
13
+
14
+ ```bash
15
+ npm install -g @loom-framework/core
16
+ ```
17
+
18
+ ### 2. 配置 Skill 到 Claude Code
19
+
20
+ Loom Skill 随 npm 包发布,位于 `templates/skill/` 目录。复制到 Claude Code 的 skill 目录:
21
+
22
+ ```bash
23
+ # 从全局安装复制
24
+ cp -r $(npm root -g)/@loom-framework/core/templates/skill ~/.claude/skills/loom
25
+
26
+ # 或从项目内复制
27
+ cp -r node_modules/@loom-framework/core/templates/skill ~/.claude/skills/loom
28
+ ```
29
+
30
+ ### 3. 打开 Claude Code
31
+
32
+ 启动 Claude Code,Skill 会被自动加载。
33
+
34
+ ### 4. 开始使用
35
+
36
+ 在 Claude Code 中输入以下内容触发 Loom Skill:
37
+
38
+ ### 开始开发
39
+
40
+ 在 Claude Code 中输入以下内容即可触发 Loom Skill:
41
+
42
+ - "用 loom 开发一个 AI 平台"
43
+ - "创建一个 loom 项目"
44
+ - "为系统添加页面"
45
+ - "配置 AI 按钮"
46
+
47
+ 示例对话:
48
+
49
+ ```
50
+ 用户: 用 loom 开发一个笔记管理系统,用 sqlite 存储,
51
+ 需要 AI 总结和翻译功能
52
+ Claude: [读取 SKILL.md] → 运行 loom init → 编辑 config →
53
+ loom generate page → loom dev
54
+ ```
55
+
56
+ ### 开发流程
57
+
58
+ 1. **创建项目**:`npx -p @loom-framework/core loom init <name> --description <desc> --adapter <adapter>`
59
+ 2. **编辑配置**:在 `loom.config.ts` 中定义数据模型和 AI 按钮
60
+ 3. **生成页面**:`loom generate page <Name> --model <model>`
61
+ 4. **启动开发**:`loom dev` → http://localhost:5173
62
+
63
+ ## 核心理念
64
+
65
+ - **Prompt as Code**: 业务逻辑写在 Skill 的 Markdown 中,而非后端代码
66
+ - **Schema-driven**: 一个模型定义 → MCP Tool + CLI 命令 + REST API(自动同步)
67
+ - **Zero Backend Logic**: 后端是透明代理,所有智能在 Skill 中
68
+
69
+ ## 三种交互类型
70
+
71
+ | 类型 | 说明 | 用户入口 | 自动化程度 |
72
+ |------|------|---------|-----------|
73
+ | AI Chat | 自然语言对话 | AppShell 右下角浮动按钮 | 开箱即用,无需配置 |
74
+ | AI Buttons | 一键 AI 动作 | CRUD 页面操作列的 AI 下拉菜单 | 配置 aiButtons + generate page,自动集成 |
75
+ | CRUD | 结构化数据管理 | 导航菜单页面 | 配置 model + generate page,自动生成 |
76
+
77
+ ## 组件架构
78
+
79
+ ```
80
+ AppShell
81
+ ├── Layout (Sider + Content)
82
+ └── AIBubble → ChatDrawer → ChatPanel
83
+ ├── LoomChatProvider + useXChat
84
+ ├── MessageContent (thinking / content / tool_call)
85
+ └── Sender (输入框 + 文件上传)
86
+
87
+ AIActionButton → AIContext.triggerAI() → ChatDrawer 自动提交
88
+ useData → 监听 loom:data-changed 事件自动刷新
89
+ ```
90
+
91
+ ### AI 按钮工作流
92
+
93
+ 1. 点击 AI 按钮 → `AIContext.triggerAI({ query, buttonId, context })`
94
+ 2. ChatDrawer 打开并自动提交 prompt
95
+ 3. AI 可能通过工具调用进行 CRUD 操作
96
+ 4. done 事件触发 `loom:data-changed` → useData 自动 refresh
97
+
98
+ ### 前端组件导出
99
+
100
+ | 组件/Hook | 说明 |
101
+ |-----------|------|
102
+ | `AppShell` | 应用布局框架,内含 AIBubble |
103
+ | `ChatDrawer` | AI 对话抽屉(多会话、流式、thinking/tool_call) |
104
+ | `AIBubble` | AI 浮动按钮(imperativeHandle: openWithQuery) |
105
+ | `AIActionButton` | AI 动作按钮(通过 AIContext 触发 ChatDrawer) |
106
+ | `AIContext` | AI 上下文(AppShell 提供 triggerAI) |
107
+ | `useData` | 数据 CRUD hook(自动响应 loom:data-changed 事件) |
108
+
109
+ ## 项目结构
110
+
111
+ ```
112
+ my-loom-app/
113
+ ├── loom.config.ts # 配置源
114
+ ├── frontend/src/components/pages/ # 业务页面
115
+ ├── backend/src/ # Fastify + AI 通信
116
+ ├── .claude/skills/ # Skills
117
+ ├── cli/src/commands/ # CLI 命令扩展
118
+ ├── data/ # 数据存储
119
+ └── .loom/ # 自动生成(gitignore)
120
+ ├── mcp-server/ # MCP Server
121
+ └── mcp.json # MCP 配置
122
+ ```
123
+
124
+ ## 两个包
125
+
126
+ | 包 | 说明 |
127
+ |---|---|
128
+ | `@loom-framework/core` | DataAdapter、LoomServer、CLI(loom / loom-server) |
129
+ | `@loom-framework/frontend-antd` | 前端组件库:AppShell、ChatDrawer、AIActionButton、useData、AIContext |
@@ -0,0 +1,101 @@
1
+ # Data Model Reference
2
+
3
+ Advanced configuration for `loom.config.ts` data models. Load this when defining complex models.
4
+
5
+ ## Full Field Options
6
+
7
+ ```typescript
8
+ {
9
+ name: 'status', // must match ^[a-zA-Z_][a-zA-Z0-9_]*$
10
+ type: 'string', // 'string' | 'number' | 'boolean' | 'date' | 'string[]' | 'number[]' | 'json'
11
+ required: true, // optional, default false
12
+ description: '...',', // optional: shown in generated forms
13
+ default: 'active', // optional: auto-filled on write if not provided
14
+ enum: ['active', 'inactive', 'archived'], // optional: restrict to allowed values
15
+ }
16
+ ```
17
+
18
+ ## Model-Level Options
19
+
20
+ ```typescript
21
+ {
22
+ name: 'orders',
23
+ description: 'Order records', // shown in generated page heading
24
+ fields: [...],
25
+ indexes: [ // optional: database indexes
26
+ { fields: ['userId', 'status'], unique: false },
27
+ ],
28
+ adapters: { // optional: per-model adapter override
29
+ filesystem: { dir: 'orders', format: 'json' | 'yaml', datePattern: 'yyyy-MM-dd' },
30
+ sqlite: { table: 'orders' },
31
+ },
32
+ },
33
+ ```
34
+
35
+ ## AI Configuration
36
+
37
+ ```typescript
38
+ ai: {
39
+ engine: 'claude-code', // default 'claude-code'
40
+ claudeCode: {
41
+ path: '/usr/local/bin/claude', // custom claude binary path
42
+ pluginRoot: '.claude', // plugin root directory
43
+ timeout: 120000, // command timeout in ms
44
+ skipPermissions: false, // skip permission prompts
45
+ defaultModel: 'claude-sonnet-4-6',
46
+ },
47
+ },
48
+ ```
49
+
50
+ ## Server Configuration
51
+
52
+ ```typescript
53
+ server: {
54
+ port: 3000, // default 3000
55
+ host: '0.0.0.0',
56
+ cors: true, // default true
57
+ staticDir: './dist/frontend',
58
+ },
59
+ ```
60
+
61
+ ## SQLite Configuration
62
+
63
+ ```typescript
64
+ data: {
65
+ defaultAdapter: 'sqlite',
66
+ sqlite: { filename: 'data.db' }, // default 'loom.db'
67
+ }
68
+ ```
69
+
70
+ ## AI Buttons (Full Options)
71
+
72
+ ```typescript
73
+ aiButtons: [{
74
+ id: 'summarize', // required: unique identifier
75
+ label: '总结', // required: button text
76
+ icon: 'FileTextOutlined', // optional: Ant Design icon name
77
+ prompt: '请总结以下内容', // required: prompt text, supports {{var}} placeholders
78
+ // {{var}} is replaced with the current row's field value at runtime
79
+ placement: 'page-header', // optional: UI placement hint
80
+ },
81
+ {
82
+ id: 'analyze', // example with template variables
83
+ label: '分析',
84
+ prompt: '分析{{questionContent}},错误答案:{{wrongAnswer}}',
85
+ }],
86
+ ```
87
+
88
+ ### AI Button Behavior
89
+
90
+ When configured, AI buttons are automatically integrated into CRUD page action columns:
91
+
92
+ 1. Each table row shows an "AI" dropdown button with all configured buttons as menu items
93
+ 2. Clicking a button opens the ChatDrawer and sends `buttonId` + row `context` to the server
94
+ 3. Server resolves `prompt` with `{{fieldName}}` replaced by the current row's field values
95
+ 4. Context fields not referenced in the template are automatically appended to the prompt
96
+ 5. If AI performs CRUD via tool calls, the page auto-refreshes (via `loom:data-changed` event)
97
+
98
+ ## Data Access in Skills
99
+
100
+ - **Prefer MCP Tools** for data CRUD: `read_<model>`, `write_<model>`, `update_<model>`, `delete_<model>`
101
+ - Use `loom data read/write <model>` CLI only for debugging
@@ -0,0 +1,46 @@
1
+ # Skill Development Reference
2
+
3
+ Guide for creating and managing Loom Skills. Load this when adding or editing `.claude/skills/`.
4
+
5
+ ## Skill Structure
6
+
7
+ ```
8
+ .claude/skills/<skill-name>/
9
+ ├── SKILL.md # Required: trigger conditions + workflow
10
+ └── references/ # Optional: detailed rules and reference docs
11
+ └── *.md
12
+ ```
13
+
14
+ ## SKILL.md Format
15
+
16
+ ```markdown
17
+ ---
18
+ name: <skill-name>
19
+ description: |
20
+ This skill should be used when the user asks to "<trigger phrases>".
21
+ Include both English and Chinese trigger phrases.
22
+ version: 1.0.0
23
+ ---
24
+
25
+ # <Skill Name>
26
+
27
+ <Description of what this skill does>
28
+
29
+ ## Workflow
30
+
31
+ 1. <Step 1>
32
+ 2. <Step 2>
33
+
34
+ ## Rules
35
+
36
+ - <Rule 1>
37
+ - <Rule 2>
38
+ ```
39
+
40
+ ## Best Practices
41
+
42
+ - Keep SKILL.md focused on one capability domain
43
+ - Use `references/` for detailed rules that would clutter the main SKILL.md
44
+ - Specify which MCP Tools (`read_<model>`, `write_<model>`) the skill should use
45
+ - Skills define behavior through prompts, not code generation
46
+ - Run `loom skill validate [name]` to check SKILL.md structure
@@ -0,0 +1,42 @@
1
+ # Troubleshooting Guide
2
+
3
+ Common issues when creating and running Loom projects.
4
+
5
+ ## `loom generate` Fails: Cannot find module '@loom-framework/core'
6
+
7
+ Dependencies not installed. Run `npm install` from the project directory.
8
+
9
+ ## `npx @loom-framework/core loom init` Fails
10
+
11
+ The `npx` command cannot find the executable. Use the `-p` flag to specify the package:
12
+ ```bash
13
+ npx -p @loom-framework/core loom init <name> --description <desc> --adapter <adapter>
14
+ ```
15
+
16
+ ## `loom dev` Port Already in Use (EADDRINUSE)
17
+
18
+ Previous process still running. Kill it: `lsof -ti:3000 | xargs kill -9`
19
+
20
+ ## Commands Fail: "No loom.config.ts found"
21
+
22
+ Running from the wrong directory. `cd` into the project directory before running `loom` commands.
23
+
24
+ ## Model Name Validation Error
25
+
26
+ Model names must match `^[a-z][a-z0-9_-]*$` (lowercase, hyphens/underscores allowed).
27
+ Field names must match `^[a-zA-Z_][a-zA-Z0-9_]*$`.
28
+
29
+ ## `loom build` Backend TSC Fails: Cannot use JSX
30
+
31
+ Root `tsconfig.json` includes `frontend/` with `.tsx` files.
32
+ Add `"frontend"` to `exclude` in root `tsconfig.json`:
33
+ ```json
34
+ { "exclude": ["node_modules", "dist", "frontend"] }
35
+ ```
36
+ Frontend has its own `frontend/tsconfig.json` with `jsx: "react-jsx"`.
37
+
38
+ ## Debug Tips
39
+
40
+ - `loom data schema <model>` — inspect model fields
41
+ - `loom observe logs` — view AI interaction logs
42
+ - `loom skill validate` — check skill structure