@loom-framework/core 0.1.0-alpha.6 → 0.1.0-alpha.61

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 (162) 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 +17 -38
  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 +52 -0
  22. package/dist/backend/ai/engine.d.ts.map +1 -0
  23. package/dist/backend/ai/engine.js +189 -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 +16 -6
  78. package/dist/capability-generator.d.ts.map +1 -1
  79. package/dist/capability-generator.js +160 -248
  80. package/dist/capability-generator.js.map +1 -1
  81. package/dist/cli/commands/build.d.ts +11 -0
  82. package/dist/cli/commands/build.d.ts.map +1 -0
  83. package/dist/cli/commands/build.js +170 -0
  84. package/dist/cli/commands/build.js.map +1 -0
  85. package/dist/cli/commands/data.d.ts +12 -0
  86. package/dist/cli/commands/data.d.ts.map +1 -0
  87. package/dist/cli/commands/data.js +158 -0
  88. package/dist/cli/commands/data.js.map +1 -0
  89. package/dist/cli/commands/dev.d.ts +9 -0
  90. package/dist/cli/commands/dev.d.ts.map +1 -0
  91. package/dist/cli/commands/dev.js +114 -0
  92. package/dist/cli/commands/dev.js.map +1 -0
  93. package/dist/cli/commands/generate-capabilities.d.ts +8 -0
  94. package/dist/cli/commands/generate-capabilities.d.ts.map +1 -0
  95. package/dist/cli/commands/generate-capabilities.js +40 -0
  96. package/dist/cli/commands/generate-capabilities.js.map +1 -0
  97. package/dist/cli/commands/generate-cli-command.d.ts +8 -0
  98. package/dist/cli/commands/generate-cli-command.d.ts.map +1 -0
  99. package/dist/cli/commands/generate-cli-command.js +64 -0
  100. package/dist/cli/commands/generate-cli-command.js.map +1 -0
  101. package/dist/cli/commands/generate-page.d.ts +9 -0
  102. package/dist/cli/commands/generate-page.d.ts.map +1 -0
  103. package/dist/cli/commands/generate-page.js +418 -0
  104. package/dist/cli/commands/generate-page.js.map +1 -0
  105. package/dist/cli/commands/generate-skill.d.ts +8 -0
  106. package/dist/cli/commands/generate-skill.d.ts.map +1 -0
  107. package/dist/cli/commands/generate-skill.js +75 -0
  108. package/dist/cli/commands/generate-skill.js.map +1 -0
  109. package/dist/cli/commands/generate.d.ts +6 -0
  110. package/dist/cli/commands/generate.d.ts.map +1 -0
  111. package/dist/cli/commands/generate.js +17 -0
  112. package/dist/cli/commands/generate.js.map +1 -0
  113. package/dist/cli/commands/init.d.ts +8 -0
  114. package/dist/cli/commands/init.d.ts.map +1 -0
  115. package/dist/cli/commands/init.js +539 -0
  116. package/dist/cli/commands/init.js.map +1 -0
  117. package/dist/cli/commands/observe.d.ts +9 -0
  118. package/dist/cli/commands/observe.d.ts.map +1 -0
  119. package/dist/cli/commands/observe.js +142 -0
  120. package/dist/cli/commands/observe.js.map +1 -0
  121. package/dist/cli/commands/skill.d.ts +9 -0
  122. package/dist/cli/commands/skill.d.ts.map +1 -0
  123. package/dist/cli/commands/skill.js +186 -0
  124. package/dist/cli/commands/skill.js.map +1 -0
  125. package/dist/cli/helpers/duration.d.ts +5 -0
  126. package/dist/cli/helpers/duration.d.ts.map +1 -0
  127. package/dist/cli/helpers/duration.js +19 -0
  128. package/dist/cli/helpers/duration.js.map +1 -0
  129. package/dist/cli/helpers/field-template.d.ts +9 -0
  130. package/dist/cli/helpers/field-template.d.ts.map +1 -0
  131. package/dist/cli/helpers/field-template.js +92 -0
  132. package/dist/cli/helpers/field-template.js.map +1 -0
  133. package/dist/cli/helpers/naming.d.ts +12 -0
  134. package/dist/cli/helpers/naming.d.ts.map +1 -0
  135. package/dist/cli/helpers/naming.js +25 -0
  136. package/dist/cli/helpers/naming.js.map +1 -0
  137. package/dist/cli/index.d.ts +9 -0
  138. package/dist/cli/index.d.ts.map +1 -0
  139. package/dist/cli/index.js +33 -0
  140. package/dist/cli/index.js.map +1 -0
  141. package/dist/cli/utils.d.ts +10 -0
  142. package/dist/cli/utils.d.ts.map +1 -0
  143. package/dist/cli/utils.js +31 -0
  144. package/dist/cli/utils.js.map +1 -0
  145. package/dist/config.d.ts +8 -33
  146. package/dist/config.d.ts.map +1 -1
  147. package/dist/config.js +6 -7
  148. package/dist/config.js.map +1 -1
  149. package/dist/index.d.ts +6 -1
  150. package/dist/index.d.ts.map +1 -1
  151. package/dist/index.js +6 -0
  152. package/dist/index.js.map +1 -1
  153. package/dist/server-bin.d.ts +12 -0
  154. package/dist/server-bin.d.ts.map +1 -0
  155. package/dist/server-bin.js +75 -0
  156. package/dist/server-bin.js.map +1 -0
  157. package/dist/types.d.ts +28 -18
  158. package/dist/types.d.ts.map +1 -1
  159. package/package.json +17 -4
  160. package/templates/skill/SKILL.md +140 -0
  161. package/templates/skill/references/README.md +128 -0
  162. package/templates/skill/references/data-model.md +78 -0
@@ -0,0 +1,128 @@
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**: 一个数据实体定义 → Skill + 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
+ └── sessions/ # AI 会话持久化
121
+ ```
122
+
123
+ ## 两个包
124
+
125
+ | 包 | 说明 |
126
+ |---|---|
127
+ | `@loom-framework/core` | DataAdapter、LoomServer、CLI(loom / loom-server) |
128
+ | `@loom-framework/frontend-antd` | 前端组件库:AppShell、ChatDrawer、AIActionButton、useData、AIContext |
@@ -0,0 +1,78 @@
1
+ # Data Model Reference
2
+
3
+ Advanced configuration for `loom.config.ts`. Full type definitions from `packages/core/src/types.ts`.
4
+
5
+ ## FieldDefinition
6
+
7
+ ```typescript
8
+ {
9
+ name: 'status', // ^[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 string field to allowed values
15
+ }
16
+ ```
17
+
18
+ ## ModelSchema
19
+
20
+ ```typescript
21
+ {
22
+ name: 'orders', // ^[a-zA-Z][a-zA-Z0-9_]*$, will be used as React component name
23
+ description: 'Order records', // optional: shown in generated page heading
24
+ fields: [...],
25
+ indexes?: [{ fields: ['userId', 'status'], unique: false }],
26
+ adapters?: { // optional: per-model adapter override
27
+ filesystem: { dir: 'orders', format: 'json' | 'yaml', datePattern: 'YYYY-MM' },
28
+ sqlite: { table: 'orders' },
29
+ },
30
+ }
31
+ ```
32
+
33
+ ## AIButtonConfig
34
+
35
+ ```typescript
36
+ aiButtons: [{
37
+ id: 'summarize', // required: unique identifier
38
+ label: '总结', // required: button text
39
+ icon: 'FileTextOutlined', // optional: Ant Design icon component name
40
+ prompt: '请总结以下内容', // required: supports {{var}} placeholders, replaced with current row field values
41
+ placement: 'wrong_questions', // optional: limit to specific model pages, comma-separated; omit for all pages
42
+ }]
43
+ ```
44
+
45
+ ## AIConfig
46
+
47
+ ```typescript
48
+ ai: {
49
+ engine: 'claude-code', // default 'claude-code'
50
+ claudeCode: {
51
+ path: '/usr/local/bin/claude', // optional: custom claude binary path
52
+ pluginRoot: '.claude', // optional: plugin root directory
53
+ timeout: 120000, // optional: command timeout in ms
54
+ skipPermissions: false, // optional: skip permission prompts
55
+ },
56
+ }
57
+ ```
58
+
59
+ ## ServerConfig
60
+
61
+ ```typescript
62
+ server: {
63
+ port: 3000, // default 3000
64
+ host: '0.0.0.0',
65
+ cors: true, // default true
66
+ staticDir: './dist/frontend',
67
+ }
68
+ ```
69
+
70
+ ## DataConfig
71
+
72
+ ```typescript
73
+ data: {
74
+ defaultAdapter: 'filesystem' | 'sqlite',
75
+ models: [...],
76
+ sqlite: { filename: 'data.db' }, // optional, default 'loom.db'
77
+ }
78
+ ```