@undefineds.co/linx 0.2.16 → 0.2.18

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 (42) hide show
  1. package/dist/generated/version.js +3 -0
  2. package/dist/generated/version.js.map +1 -0
  3. package/dist/index.js +10 -17
  4. package/dist/index.js.map +1 -1
  5. package/dist/lib/ai-command.js +169 -301
  6. package/dist/lib/ai-command.js.map +1 -1
  7. package/dist/lib/login-command.js +30 -22
  8. package/dist/lib/login-command.js.map +1 -1
  9. package/dist/lib/models.js +2 -2
  10. package/dist/lib/models.js.map +1 -1
  11. package/dist/lib/oidc-auth.js +59 -12
  12. package/dist/lib/oidc-auth.js.map +1 -1
  13. package/dist/lib/pi-adapter/auth.js +36 -7
  14. package/dist/lib/pi-adapter/auth.js.map +1 -1
  15. package/dist/lib/pi-adapter/branding.js +215 -5
  16. package/dist/lib/pi-adapter/branding.js.map +1 -1
  17. package/dist/lib/pi-adapter/interactive.js +25 -1
  18. package/dist/lib/pi-adapter/interactive.js.map +1 -1
  19. package/dist/lib/pi-adapter/pod-mirror.js +219 -137
  20. package/dist/lib/pi-adapter/pod-mirror.js.map +1 -1
  21. package/dist/lib/pi-adapter/pod-tools.js +104 -0
  22. package/dist/lib/pi-adapter/pod-tools.js.map +1 -0
  23. package/dist/lib/pi-adapter/runtime.js +207 -23
  24. package/dist/lib/pi-adapter/runtime.js.map +1 -1
  25. package/dist/lib/pi-adapter/session.js +63 -182
  26. package/dist/lib/pi-adapter/session.js.map +1 -1
  27. package/dist/lib/pi-adapter/web-fetch.js +154 -0
  28. package/dist/lib/pi-adapter/web-fetch.js.map +1 -0
  29. package/dist/lib/pod-chat-store.js +40 -30
  30. package/dist/lib/pod-chat-store.js.map +1 -1
  31. package/dist/lib/pod-data-session.js.map +1 -1
  32. package/dist/lib/watch/pod-approval.js +275 -303
  33. package/dist/lib/watch/pod-approval.js.map +1 -1
  34. package/dist/lib/watch/pod-persistence.js +37 -35
  35. package/dist/lib/watch/pod-persistence.js.map +1 -1
  36. package/dist/skills/drizzle-solid/SKILL.md +340 -0
  37. package/dist/skills/pod-storage/SKILL.md +60 -0
  38. package/dist/skills/solid-modeling/SKILL.md +274 -0
  39. package/dist/skills/xpod-componentsjs/SKILL.md +284 -0
  40. package/package.json +2 -2
  41. package/dist/lib/pi-adapter/pod-native.js +0 -478
  42. package/dist/lib/pi-adapter/pod-native.js.map +0 -1
@@ -0,0 +1,284 @@
1
+ ---
2
+ name: xpod-componentsjs
3
+ description: Xpod Components.js 变量和组件配置专家,处理 CLI 参数、变量解析、组件配置等问题
4
+ allowed-tools: Read, Write, Edit, Grep, Glob, Bash
5
+ ---
6
+
7
+ # Xpod Components.js 配置专家
8
+
9
+ 你是 Xpod 项目的 Components.js 配置专家。Xpod 基于 Community Solid Server (CSS),使用 Components.js 进行依赖注入。
10
+
11
+ ## 核心知识
12
+
13
+ ### 变量解析流程
14
+
15
+ ```
16
+ 环境变量 (CSS_XXX)
17
+
18
+ YargsCliExtractor (cli.json) - 解析 CLI 参数
19
+
20
+ ShorthandResolver (resolver.json) - 将参数映射到 Components.js 变量
21
+
22
+ Variable (配置文件中) - 在组件配置中引用变量
23
+ ```
24
+
25
+ ### 关键文件
26
+
27
+ | 文件 | 作用 |
28
+ |------|------|
29
+ | `config/cli.json` | 声明 CLI 参数(YargsParameter) |
30
+ | `config/resolver.json` | 将 CLI 参数映射到 Components.js 变量(KeyExtractor) |
31
+ | `config/*.json` | 使用 `"@type": "Variable"` 引用变量 |
32
+ | `dist/components/context.jsonld` | 自动生成的组件 context,包含参数名映射 |
33
+
34
+ ## 添加新变量的完整步骤
35
+
36
+ ### 步骤 1: cli.json 声明参数
37
+
38
+ ```json
39
+ // config/cli.json
40
+ {
41
+ "@type": "YargsParameter",
42
+ "name": "myNewParam",
43
+ "options": {
44
+ "type": "string",
45
+ "hidden": true
46
+ }
47
+ }
48
+ ```
49
+
50
+ 参数名使用 camelCase,对应环境变量自动转换:`myNewParam` → `CSS_MY_NEW_PARAM`
51
+
52
+ ### 步骤 2: resolver.json 添加 KeyExtractor(最容易遗漏!)
53
+
54
+ ```json
55
+ // config/resolver.json
56
+ {
57
+ "CombinedShorthandResolver:_resolvers_key": "urn:solid-server:default:variable:myNewParam",
58
+ "CombinedShorthandResolver:_resolvers_value": {
59
+ "@type": "KeyExtractor",
60
+ "key": "myNewParam",
61
+ "defaultValue": ""
62
+ }
63
+ }
64
+ ```
65
+
66
+ ### 步骤 3: 配置文件中使用变量
67
+
68
+ ```json
69
+ {
70
+ "myConfig": {
71
+ "@id": "urn:solid-server:default:variable:myNewParam",
72
+ "@type": "Variable"
73
+ }
74
+ }
75
+ ```
76
+
77
+ ## 抽象类和接口的处理
78
+
79
+ ### 关键规则:Generator 只处理导出的类
80
+
81
+ Components.js Generator (`componentsjs-generator`) 只会为 **从 `src/index.ts` 导出的类** 生成 `.jsonld` 文件。
82
+
83
+ ### 问题场景
84
+
85
+ 当一个类继承抽象基类或实现接口时:
86
+
87
+ ```typescript
88
+ // 子类生成的 jsonld 会包含 extends 引用
89
+ "extends": ["undefineds:dist/path/to/BaseClass.jsonld#BaseClass"]
90
+ ```
91
+
92
+ 如果 `BaseClass` 没有被导出,Generator 不会为它生成 jsonld,启动时会报错:
93
+
94
+ ```
95
+ Error: Resource .../BaseClass.jsonld#BaseClass is not a valid component
96
+ ```
97
+
98
+ ### 解决方案
99
+
100
+ **1. 确保抽象类/基类从 index.ts 导出**
101
+
102
+ ```typescript
103
+ // src/index.ts
104
+ import { MyBaseClass } from './path/to/MyBaseClass';
105
+ import { MyImplClass } from './path/to/MyImplClass';
106
+
107
+ export default {
108
+ MyBaseClass, // ← 必须导出基类!
109
+ MyImplClass,
110
+ };
111
+ ```
112
+
113
+ **2. 使用 abstract class 而不是 interface**
114
+
115
+ Generator **不会为 TypeScript interface 生成 jsonld**。如果有类 `implements` 一个 interface,必须将 interface 改为 abstract class:
116
+
117
+ ```typescript
118
+ // ❌ 错误 - interface 不会生成 jsonld
119
+ export interface QuintStore {
120
+ get(pattern: QuintPattern): Promise<Quint[]>;
121
+ put(quint: Quint): Promise<void>;
122
+ }
123
+
124
+ export class MyStore implements QuintStore { ... }
125
+ ```
126
+
127
+ ```typescript
128
+ // ✅ 正确 - abstract class 会生成 jsonld
129
+ export abstract class QuintStore {
130
+ abstract get(pattern: QuintPattern): Promise<Quint[]>;
131
+ abstract put(quint: Quint): Promise<void>;
132
+ }
133
+
134
+ export class MyStore extends QuintStore { ... }
135
+ ```
136
+
137
+ **3. 子类继承时添加 super() 和 override**
138
+
139
+ ```typescript
140
+ export class MyStore extends QuintStore {
141
+ constructor(options: Options) {
142
+ super(); // ← 必须调用 super()
143
+ this.options = options;
144
+ }
145
+
146
+ override async get(pattern: QuintPattern): Promise<Quint[]> {
147
+ // 如果基类有可选方法的实现,需要 override 修饰符
148
+ }
149
+ }
150
+ ```
151
+
152
+ ### 检查清单
153
+
154
+ 添加新的抽象类/基类时:
155
+
156
+ - [ ] 使用 `abstract class` 而不是 `interface`
157
+ - [ ] 在 `src/index.ts` 中导出该类
158
+ - [ ] 子类使用 `extends` 而不是 `implements`
159
+ - [ ] 子类构造函数调用 `super()`
160
+ - [ ] 覆盖父类方法时添加 `override` 修饰符
161
+ - [ ] 运行 `yarn build` 验证 jsonld 生成
162
+
163
+ ## 常见错误诊断
164
+
165
+ ### 错误: Resource is not a valid component
166
+
167
+ ```
168
+ Error: Resource .../types.jsonld#QuintStore is not a valid component,
169
+ either it is not defined, has no type, or is incorrectly referenced
170
+ ```
171
+
172
+ **原因**:
173
+ 1. 使用了 TypeScript interface(Generator 不处理 interface)
174
+ 2. 抽象类/基类没有从 index.ts 导出
175
+
176
+ **解决**:
177
+ 1. 将 interface 改为 abstract class
178
+ 2. 在 index.ts 中导出该类
179
+ 3. 运行 `yarn build`
180
+
181
+ ### 错误: Could not find (valid) component types
182
+
183
+ ```
184
+ ErrorResourcesContext: Could not find (valid) component types for config "urn:xxx:MyComponent" among its types, or a requireName
185
+ ```
186
+
187
+ **原因**: 新增或重命名了 TypeScript 类,但没有重新生成 Components.js 的 `.jsonld` 组件定义文件
188
+ **解决**: 运行完整编译 `npm run build`(不是 `npm run build:ts`),让 `componentsjs-generator` 生成新的 `.jsonld` 文件
189
+
190
+ ```bash
191
+ # 错误 - 只编译 TypeScript,不会生成 .jsonld
192
+ npm run build:ts
193
+
194
+ # 正确 - 完整编译,包括 componentsjs-generator
195
+ npm run build
196
+ ```
197
+
198
+ ### 错误: Undefined variable
199
+
200
+ ```
201
+ Error: Undefined variable: urn:solid-server:default:variable:xxx
202
+ ```
203
+
204
+ **原因**: resolver.json 中缺少对应的 KeyExtractor
205
+ **解决**: 在 resolver.json 中添加变量映射
206
+
207
+ ### 错误: Multiple values for parameter
208
+
209
+ ```
210
+ ErrorResourcesContext: Detected multiple values for parameter ... YargsCliExtractor_options
211
+ ```
212
+
213
+ **原因**: xpod 的 cli.json 和 CSS 的 cli.json 都定义了 `options` 块
214
+ **解决**: xpod 的 cli.json 不要添加 `options` 块,CSS 已经配置了 `envVarPrefix` 和 `loadFromEnv`
215
+
216
+ ### 错误: xxx.map is not a function
217
+
218
+ ```
219
+ TypeError: options.routes.map is not a function
220
+ ```
221
+
222
+ **原因**: 组件参数名格式不正确
223
+ **解决**: 查看 `dist/components/context.jsonld` 中的正确参数名,使用简写形式
224
+
225
+ ```json
226
+ // 正确
227
+ { "@type": "MyComponent", "routes": [...], "fallback": {...} }
228
+
229
+ // 错误
230
+ { "@type": "MyComponent", "MyComponent:_options_routes": [...] }
231
+ ```
232
+
233
+ ## 配置文件 @context 规范
234
+
235
+ ### 正确写法
236
+
237
+ ```json
238
+ {
239
+ "@context": [
240
+ "https://linkedsoftwaredependencies.org/bundles/npm/@solid/community-server/^8.0.0/components/context.jsonld",
241
+ "https://linkedsoftwaredependencies.org/bundles/npm/@undefineds.co/xpod/^0.0.0/components/context.jsonld"
242
+ ]
243
+ }
244
+ ```
245
+
246
+ ### 禁止自定义覆盖
247
+
248
+ 不要在 @context 中添加与 dist/components/context.jsonld 冲突的自定义映射。
249
+
250
+ ## 调试命令
251
+
252
+ ```bash
253
+ # 验证环境变量加载
254
+ node_modules/.bin/dotenv -e .env.cluster -- node -e "console.log(process.env.CSS_MY_PARAM)"
255
+
256
+ # 直接传递 CLI 参数测试
257
+ community-solid-server -c config/xxx.json -m . --myNewParam test-value
258
+
259
+ # 查看组件参数名
260
+ grep -A 10 '"MyComponent"' dist/components/context.jsonld
261
+
262
+ # 检查某个类的 jsonld 是否生成
263
+ ls dist/path/to/MyClass.jsonld
264
+
265
+ # 检查 components.jsonld 是否包含某个类的 import
266
+ grep "MyClass" dist/components/components.jsonld
267
+ ```
268
+
269
+ ## 检查清单
270
+
271
+ 添加新变量时必须完成:
272
+
273
+ - [ ] `config/cli.json` - 添加 YargsParameter
274
+ - [ ] `config/resolver.json` - 添加 KeyExtractor
275
+ - [ ] `.env.xxx` - 添加环境变量(如需要)
276
+ - [ ] 组件配置文件 - 使用 `"@type": "Variable"` 引用
277
+ - [ ] 运行 `yarn build` 重新生成 components
278
+
279
+ 添加新的抽象类/基类时:
280
+
281
+ - [ ] 使用 `abstract class` 而不是 `interface`
282
+ - [ ] 在 `src/index.ts` 中导出该类
283
+ - [ ] 子类使用 `extends` 而不是 `implements`
284
+ - [ ] 运行 `yarn build` 验证 jsonld 生成
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@undefineds.co/linx",
3
- "version": "0.2.16",
3
+ "version": "0.2.18",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "bin": {
@@ -12,7 +12,7 @@
12
12
  "test": "yarn build && node --test test/**/*.test.mjs"
13
13
  },
14
14
  "dependencies": {
15
- "@undefineds.co/models": "0.2.16",
15
+ "@undefineds.co/models": "0.2.18",
16
16
  "@inrupt/solid-client-authn-node": "^3.1.1",
17
17
  "@mariozechner/pi-coding-agent": "^0.67.6",
18
18
  "n3": "^1.26.0",