@loom-framework/core 0.1.0-alpha.39 → 0.1.0-alpha.40

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 (138) hide show
  1. package/dist/backend/ai/button-resolver.d.ts +17 -0
  2. package/dist/backend/ai/button-resolver.d.ts.map +1 -0
  3. package/dist/backend/ai/button-resolver.js +40 -0
  4. package/dist/backend/ai/button-resolver.js.map +1 -0
  5. package/dist/backend/ai/engine.d.ts +51 -0
  6. package/dist/backend/ai/engine.d.ts.map +1 -0
  7. package/dist/backend/ai/engine.js +188 -0
  8. package/dist/backend/ai/engine.js.map +1 -0
  9. package/dist/backend/ai/index.d.ts +11 -0
  10. package/dist/backend/ai/index.d.ts.map +1 -0
  11. package/dist/backend/ai/index.js +8 -0
  12. package/dist/backend/ai/index.js.map +1 -0
  13. package/dist/backend/ai/output-parser.d.ts +29 -0
  14. package/dist/backend/ai/output-parser.d.ts.map +1 -0
  15. package/dist/backend/ai/output-parser.js +247 -0
  16. package/dist/backend/ai/output-parser.js.map +1 -0
  17. package/dist/backend/ai/session-manager.d.ts +102 -0
  18. package/dist/backend/ai/session-manager.d.ts.map +1 -0
  19. package/dist/backend/ai/session-manager.js +291 -0
  20. package/dist/backend/ai/session-manager.js.map +1 -0
  21. package/dist/backend/index.d.ts +61 -0
  22. package/dist/backend/index.d.ts.map +1 -0
  23. package/dist/backend/index.js +160 -0
  24. package/dist/backend/index.js.map +1 -0
  25. package/dist/backend/observe/index.d.ts +6 -0
  26. package/dist/backend/observe/index.d.ts.map +1 -0
  27. package/dist/backend/observe/index.js +5 -0
  28. package/dist/backend/observe/index.js.map +1 -0
  29. package/dist/backend/observe/logger.d.ts +28 -0
  30. package/dist/backend/observe/logger.d.ts.map +1 -0
  31. package/dist/backend/observe/logger.js +80 -0
  32. package/dist/backend/observe/logger.js.map +1 -0
  33. package/dist/backend/observe/types.d.ts +26 -0
  34. package/dist/backend/observe/types.d.ts.map +1 -0
  35. package/dist/backend/observe/types.js +7 -0
  36. package/dist/backend/observe/types.js.map +1 -0
  37. package/dist/backend/routes/chat.d.ts +31 -0
  38. package/dist/backend/routes/chat.d.ts.map +1 -0
  39. package/dist/backend/routes/chat.js +426 -0
  40. package/dist/backend/routes/chat.js.map +1 -0
  41. package/dist/backend/routes/data.d.ts +13 -0
  42. package/dist/backend/routes/data.d.ts.map +1 -0
  43. package/dist/backend/routes/data.js +129 -0
  44. package/dist/backend/routes/data.js.map +1 -0
  45. package/dist/backend/routes/health.d.ts +7 -0
  46. package/dist/backend/routes/health.d.ts.map +1 -0
  47. package/dist/backend/routes/health.js +15 -0
  48. package/dist/backend/routes/health.js.map +1 -0
  49. package/dist/backend/routes/index.d.ts +9 -0
  50. package/dist/backend/routes/index.d.ts.map +1 -0
  51. package/dist/backend/routes/index.js +8 -0
  52. package/dist/backend/routes/index.js.map +1 -0
  53. package/dist/backend/routes/upload.d.ts +24 -0
  54. package/dist/backend/routes/upload.d.ts.map +1 -0
  55. package/dist/backend/routes/upload.js +67 -0
  56. package/dist/backend/routes/upload.js.map +1 -0
  57. package/dist/bin.d.ts +8 -0
  58. package/dist/bin.d.ts.map +1 -0
  59. package/dist/bin.js +12 -0
  60. package/dist/bin.js.map +1 -0
  61. package/dist/cli/commands/build.d.ts +11 -0
  62. package/dist/cli/commands/build.d.ts.map +1 -0
  63. package/dist/cli/commands/build.js +170 -0
  64. package/dist/cli/commands/build.js.map +1 -0
  65. package/dist/cli/commands/data.d.ts +11 -0
  66. package/dist/cli/commands/data.d.ts.map +1 -0
  67. package/dist/cli/commands/data.js +137 -0
  68. package/dist/cli/commands/data.js.map +1 -0
  69. package/dist/cli/commands/dev.d.ts +9 -0
  70. package/dist/cli/commands/dev.d.ts.map +1 -0
  71. package/dist/cli/commands/dev.js +114 -0
  72. package/dist/cli/commands/dev.js.map +1 -0
  73. package/dist/cli/commands/generate-capabilities.d.ts +8 -0
  74. package/dist/cli/commands/generate-capabilities.d.ts.map +1 -0
  75. package/dist/cli/commands/generate-capabilities.js +40 -0
  76. package/dist/cli/commands/generate-capabilities.js.map +1 -0
  77. package/dist/cli/commands/generate-cli-command.d.ts +8 -0
  78. package/dist/cli/commands/generate-cli-command.d.ts.map +1 -0
  79. package/dist/cli/commands/generate-cli-command.js +64 -0
  80. package/dist/cli/commands/generate-cli-command.js.map +1 -0
  81. package/dist/cli/commands/generate-page.d.ts +9 -0
  82. package/dist/cli/commands/generate-page.d.ts.map +1 -0
  83. package/dist/cli/commands/generate-page.js +325 -0
  84. package/dist/cli/commands/generate-page.js.map +1 -0
  85. package/dist/cli/commands/generate-skill.d.ts +8 -0
  86. package/dist/cli/commands/generate-skill.d.ts.map +1 -0
  87. package/dist/cli/commands/generate-skill.js +75 -0
  88. package/dist/cli/commands/generate-skill.js.map +1 -0
  89. package/dist/cli/commands/generate.d.ts +6 -0
  90. package/dist/cli/commands/generate.d.ts.map +1 -0
  91. package/dist/cli/commands/generate.js +17 -0
  92. package/dist/cli/commands/generate.js.map +1 -0
  93. package/dist/cli/commands/init.d.ts +8 -0
  94. package/dist/cli/commands/init.d.ts.map +1 -0
  95. package/dist/cli/commands/init.js +400 -0
  96. package/dist/cli/commands/init.js.map +1 -0
  97. package/dist/cli/commands/observe.d.ts +9 -0
  98. package/dist/cli/commands/observe.d.ts.map +1 -0
  99. package/dist/cli/commands/observe.js +142 -0
  100. package/dist/cli/commands/observe.js.map +1 -0
  101. package/dist/cli/commands/skill.d.ts +9 -0
  102. package/dist/cli/commands/skill.d.ts.map +1 -0
  103. package/dist/cli/commands/skill.js +186 -0
  104. package/dist/cli/commands/skill.js.map +1 -0
  105. package/dist/cli/helpers/duration.d.ts +5 -0
  106. package/dist/cli/helpers/duration.d.ts.map +1 -0
  107. package/dist/cli/helpers/duration.js +19 -0
  108. package/dist/cli/helpers/duration.js.map +1 -0
  109. package/dist/cli/helpers/field-template.d.ts +9 -0
  110. package/dist/cli/helpers/field-template.d.ts.map +1 -0
  111. package/dist/cli/helpers/field-template.js +59 -0
  112. package/dist/cli/helpers/field-template.js.map +1 -0
  113. package/dist/cli/helpers/naming.d.ts +6 -0
  114. package/dist/cli/helpers/naming.d.ts.map +1 -0
  115. package/dist/cli/helpers/naming.js +14 -0
  116. package/dist/cli/helpers/naming.js.map +1 -0
  117. package/dist/cli/index.d.ts +9 -0
  118. package/dist/cli/index.d.ts.map +1 -0
  119. package/dist/cli/index.js +33 -0
  120. package/dist/cli/index.js.map +1 -0
  121. package/dist/cli/utils.d.ts +10 -0
  122. package/dist/cli/utils.d.ts.map +1 -0
  123. package/dist/cli/utils.js +31 -0
  124. package/dist/cli/utils.js.map +1 -0
  125. package/dist/index.d.ts +3 -0
  126. package/dist/index.d.ts.map +1 -1
  127. package/dist/index.js +4 -0
  128. package/dist/index.js.map +1 -1
  129. package/dist/server-bin.d.ts +12 -0
  130. package/dist/server-bin.d.ts.map +1 -0
  131. package/dist/server-bin.js +75 -0
  132. package/dist/server-bin.js.map +1 -0
  133. package/package.json +17 -5
  134. package/templates/skill/SKILL.md +91 -0
  135. package/templates/skill/references/README.md +67 -0
  136. package/templates/skill/references/data-model.md +87 -0
  137. package/templates/skill/references/skill-development.md +46 -0
  138. package/templates/skill/references/troubleshooting.md +35 -0
@@ -0,0 +1,91 @@
1
+ ---
2
+ name: Loom
3
+ description: |
4
+ Use this skill when the user asks to "create a new loom project", "用loom开发一个系统",
5
+ "开发一个AI平台应用", "为系统添加页面", "为项目配置 AI 按钮功能", or any Loom framework task.
6
+ Loom is an AI-Native full-stack framework.
7
+ version: 0.1.0
8
+ ---
9
+
10
+ # Loom - AI-Native Framework Skill
11
+
12
+ ## Quick Start
13
+
14
+ 1. Confirm project scope: name, description, data models, skills
15
+ 2. Create project:
16
+ `npx @loom-framework/core@latest loom init <name> --description <desc> --adapter <filesystem|sqlite>`
17
+ 3. Define data models in `loom.config.ts` (see Schema below)
18
+ 4. Generate pages: `loom generate page <Name> --model <model>`
19
+ 5. Start dev: `loom dev` → http://localhost:5173 (frontend), http://localhost:3000 (backend)
20
+
21
+ **Important:** Always run commands from the project directory (not the loom monorepo root).
22
+
23
+ ## Core CLI Commands
24
+
25
+ - `loom dev` - Start dev environment (hot-reload)
26
+ - `--skip-generate`, `--backend-only`, `--frontend-only`
27
+ - `loom build` - Build for production
28
+ - `loom generate capabilities` - Generate MCP Server + CLI from config
29
+ - `loom generate page <name> --model <model>` - Generate CRUD page (includes capabilities + wiring)
30
+ - `loom generate skill <name>` - Generate skill scaffold
31
+
32
+ ## Detailed Workflows
33
+
34
+ ### Adding a New Data Model
35
+
36
+ 1. Edit `loom.config.ts` → add model definition (see Schema below; for advanced options see `references/data-model.md`)
37
+ 2. Run `loom generate page <Name> --model <model-name>`
38
+ 3. Model is immediately available via MCP Tools and `loom data` CLI
39
+
40
+ ### Adding a New Skill
41
+
42
+ 1. Create scaffold: `loom generate skill <name>`
43
+ 2. Edit `.claude/skills/<name>/SKILL.md` (see `references/skill-development.md` for format)
44
+ 3. Add reference prompts in `.claude/skills/<name>/references/`
45
+
46
+ ### Adding an AI Button
47
+
48
+ 1. Edit `loom.config.ts` → add entry to `aiButtons` array (top-level, not inside `ai`)
49
+ 2. In frontend page, use `useAIButton('<button-id>')` or `<AIActionButton buttonId="<id>" />`
50
+
51
+ ## loom.config.ts Schema (Core)
52
+
53
+ ```typescript
54
+ import { defineConfig } from '@loom-framework/core';
55
+
56
+ export default defineConfig({
57
+ project: {
58
+ name: 'my-app', // required
59
+ description: '...',', // optional
60
+ },
61
+ data: {
62
+ defaultAdapter: 'filesystem', // 'filesystem' | 'sqlite'
63
+ models: [{
64
+ name: 'items', // lowercase, hyphens/underscores allowed
65
+ description: '...',', // optional: shown in generated pages
66
+ fields: [{
67
+ name: 'status', // alphanumeric + underscore, start with letter/underscore
68
+ type: 'string', // 'string' | 'number' | 'boolean' | 'date' | 'string[]' | 'number[]' | 'json'
69
+ required: true, // optional, default false
70
+ description: '...,', // optional: shown in forms
71
+ default: 'active', // optional: auto-filled on write
72
+ enum: ['active', 'inactive'], // optional: restrict values
73
+ }],
74
+ }],
75
+ },
76
+ aiButtons: [{ // optional
77
+ id: 'summarize', // required: unique identifier
78
+ label: '总结', // required: button text
79
+ prompt: '请总结以下内容', // required (or promptTemplate)
80
+ }],
81
+ });
82
+ ```
83
+
84
+ For advanced config (`ai.claudeCode`, `server`, per-model `adapters`, `indexes`, `aiButtons.promptTemplate/contextVars`), see `references/data-model.md`.
85
+
86
+ ## Troubleshooting
87
+
88
+ - **`loom` commands fail "No loom.config.ts found"**: Run commands from the project directory, not the loom monorepo root
89
+ - **create-loom-app not on npm**: Use `npx @loom-framework/core loom init <name> --description <desc> --adapter <filesystem|sqlite>`
90
+
91
+ See `references/troubleshooting.md` for more issues.
@@ -0,0 +1,67 @@
1
+ # Loom - AI-Native Full-Stack Framework
2
+
3
+ 编织 AI 能力为应用织物
4
+
5
+ ## 核心理念
6
+
7
+ - **Prompt as Code**: 业务逻辑写在 Skill 的 Markdown 中,而非后端代码
8
+ - **Schema-driven**: 一个模型定义 → MCP Tool + CLI 命令 + REST API(自动同步)
9
+ - **Zero Backend Logic**: 后端是透明代理,所有智能在 Skill 中
10
+
11
+ ## 三种交互类型
12
+
13
+ | 类型 | 说明 | 实现方式 |
14
+ |------|------|---------|
15
+ | AI Chat | 自然语言对话 | HTTP SSE 流式,Claude Code 引擎 |
16
+ | AI Buttons | 一键 AI 动作 | 预定义 Prompt,`aiButtons` 配置 |
17
+ | CRUD | 结构化数据管理 | REST API,Schema 驱动自动生成 |
18
+
19
+ ## 项目结构
20
+
21
+ ```
22
+ my-loom-app/
23
+ ├── loom.config.ts # 唯一配置源(模型、AI 按钮、服务器配置)
24
+ ├── frontend/ # React + TypeScript + Vite
25
+ │ └── src/pages/ # 业务页面(CRUD 等)
26
+ ├── backend/src/ # Fastify + AI 通信(LoomServer)
27
+ ├── .claude/skills/ # Skills(Prompt as Code)
28
+ ├── cli/src/commands/ # CLI 业务命令扩展
29
+ ├── data/ # 数据存储(DataAdapter 管理)
30
+ └── .loom/ # 自动生成(gitignore)
31
+ ├── mcp-server/ # MCP Server(自动生成)
32
+ └── mcp.json # MCP 配置
33
+ ```
34
+
35
+ ## CLI 命令速查
36
+
37
+ ### 开发
38
+
39
+ | 命令 | 说明 |
40
+ |------|------|
41
+ | `loom dev` | 启动开发环境(前端 + 后端,热更新) |
42
+ | `loom build` | 生产构建 |
43
+
44
+ ### 生成
45
+
46
+ | 命令 | 说明 |
47
+ |------|------|
48
+ | `loom generate page <Name> --model <model>` | 生成 CRUD 页面 |
49
+ | `loom generate skill <name>` | 生成 Skill 脚手架 |
50
+ | `loom generate capabilities` | 重新生成 MCP Server + CLI |
51
+
52
+ ### 数据
53
+
54
+ | 命令 | 说明 |
55
+ |------|------|
56
+ | `loom data read <model>` | 读取记录 |
57
+ | `loom data write <model> --data '<json>'` | 写入记录 |
58
+ | `loom data schema [model]` | 查看模型定义 |
59
+
60
+ ### 其他
61
+
62
+ | 命令 | 说明 |
63
+ |------|------|
64
+ | `loom skill list` | 列出所有 Skill |
65
+ | `loom skill validate [name]` | 校验 Skill 结构 |
66
+ | `loom observe logs` | 查看 AI 交互日志 |
67
+ | `loom observe metrics` | 查看聚合指标 |
@@ -0,0 +1,87 @@
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 (or promptTemplate)
78
+ promptTemplate: 'Summarize {{content}}', // alternative to prompt, with {{vars}}
79
+ contextVars: ['content'], // optional: variable names for promptTemplate
80
+ placement: 'page-header', // optional: UI placement hint
81
+ }],
82
+ ```
83
+
84
+ ## Data Access in Skills
85
+
86
+ - **Prefer MCP Tools** for data CRUD: `read_<model>`, `write_<model>`, `update_<model>`, `delete_<model>`
87
+ - 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,35 @@
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
+ ## `loom dev` Port Already in Use (EADDRINUSE)
10
+
11
+ Previous process still running. Kill it: `lsof -ti:3000 | xargs kill -9`
12
+
13
+ ## Commands Fail: "No loom.config.ts found"
14
+
15
+ Running from the wrong directory. `cd` into the project directory before running `loom` commands.
16
+
17
+ ## Model Name Validation Error
18
+
19
+ Model names must match `^[a-z][a-z0-9_-]*$` (lowercase, hyphens/underscores allowed).
20
+ Field names must match `^[a-zA-Z_][a-zA-Z0-9_]*$`.
21
+
22
+ ## `loom build` Backend TSC Fails: Cannot use JSX
23
+
24
+ Root `tsconfig.json` includes `frontend/` with `.tsx` files.
25
+ Add `"frontend"` to `exclude` in root `tsconfig.json`:
26
+ ```json
27
+ { "exclude": ["node_modules", "dist", "frontend"] }
28
+ ```
29
+ Frontend has its own `frontend/tsconfig.json` with `jsx: "react-jsx"`.
30
+
31
+ ## Debug Tips
32
+
33
+ - `loom data schema <model>` — inspect model fields
34
+ - `loom observe logs` — view AI interaction logs
35
+ - `loom skill validate` — check skill structure