@undefineds.co/linx 0.2.15 → 0.2.17
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.
- package/dist/generated/version.js +3 -0
- package/dist/generated/version.js.map +1 -0
- package/dist/index.js +51 -225
- package/dist/index.js.map +1 -1
- package/dist/lib/account-api.js +1 -1
- package/dist/lib/account-api.js.map +1 -1
- package/dist/lib/account-session.js +1 -1
- package/dist/lib/account-session.js.map +1 -1
- package/dist/lib/ai-command.js +59 -32
- package/dist/lib/ai-command.js.map +1 -1
- package/dist/lib/chat-api.js +19 -177
- package/dist/lib/chat-api.js.map +1 -1
- package/dist/lib/codex-plugin/bridge.js.map +1 -1
- package/dist/lib/codex-plugin/codex-native-proxy.js.map +1 -1
- package/dist/lib/codex-plugin/index.js.map +1 -1
- package/dist/lib/codex-plugin/runner.js.map +1 -1
- package/dist/lib/credentials-store.js +1 -7
- package/dist/lib/credentials-store.js.map +1 -1
- package/dist/lib/default-model.js +0 -1
- package/dist/lib/default-model.js.map +1 -1
- package/dist/lib/login-command.js +2 -17
- package/dist/lib/login-command.js.map +1 -1
- package/dist/lib/models.js +27 -2
- package/dist/lib/models.js.map +1 -1
- package/dist/lib/oidc-auth.js +13 -78
- package/dist/lib/oidc-auth.js.map +1 -1
- package/dist/lib/oidc-session-storage.js.map +1 -1
- package/dist/lib/pi-adapter/auth.js +5 -12
- package/dist/lib/pi-adapter/auth.js.map +1 -1
- package/dist/lib/pi-adapter/branding.js +75 -553
- package/dist/lib/pi-adapter/branding.js.map +1 -1
- package/dist/lib/pi-adapter/index.js.map +1 -1
- package/dist/lib/pi-adapter/interactive.js +4 -154
- package/dist/lib/pi-adapter/interactive.js.map +1 -1
- package/dist/lib/pi-adapter/runtime.js +23 -138
- package/dist/lib/pi-adapter/runtime.js.map +1 -1
- package/dist/lib/pi-adapter/stream.js +4 -154
- package/dist/lib/pi-adapter/stream.js.map +1 -1
- package/dist/lib/pi-adapter/theme.js.map +1 -1
- package/dist/lib/pod-chat-store.js +1 -1
- package/dist/lib/pod-chat-store.js.map +1 -1
- package/dist/lib/profile-identity.js +60 -16
- package/dist/lib/profile-identity.js.map +1 -1
- package/dist/lib/prompt.js.map +1 -1
- package/dist/lib/runtime-target.js +1 -1
- package/dist/lib/runtime-target.js.map +1 -1
- package/dist/lib/solid-auth.js.map +1 -1
- package/dist/lib/thread-utils.js.map +1 -1
- package/dist/lib/watch/archive.js +1 -1
- package/dist/lib/watch/archive.js.map +1 -1
- package/dist/lib/watch/auth.js +1 -1
- package/dist/lib/watch/auth.js.map +1 -1
- package/dist/lib/watch/codex-composer.js.map +1 -1
- package/dist/lib/watch/codex-footer.js.map +1 -1
- package/dist/lib/watch/codex-overlay.js.map +1 -1
- package/dist/lib/watch/codex-request-form.js +1 -1
- package/dist/lib/watch/codex-request-form.js.map +1 -1
- package/dist/lib/watch/codex-request-input.js.map +1 -1
- package/dist/lib/watch/display.js.map +1 -1
- package/dist/lib/watch/format.js.map +1 -1
- package/dist/lib/watch/hooks/claude.js.map +1 -1
- package/dist/lib/watch/hooks/codebuddy.js.map +1 -1
- package/dist/lib/watch/hooks/codex.js.map +1 -1
- package/dist/lib/watch/hooks/index.js.map +1 -1
- package/dist/lib/watch/hooks/shared.js +1 -0
- package/dist/lib/watch/hooks/shared.js.map +1 -1
- package/dist/lib/watch/index.js.map +1 -1
- package/dist/lib/watch/pod-ai.js +32 -16
- package/dist/lib/watch/pod-ai.js.map +1 -1
- package/dist/lib/watch/pod-approval.js +203 -481
- package/dist/lib/watch/pod-approval.js.map +1 -1
- package/dist/lib/watch/pod-persistence.js +37 -24
- package/dist/lib/watch/pod-persistence.js.map +1 -1
- package/dist/lib/watch/runner.js +1 -4
- package/dist/lib/watch/runner.js.map +1 -1
- package/dist/lib/watch/types.js.map +1 -1
- package/dist/skills/drizzle-solid/SKILL.md +340 -0
- package/dist/skills/pod-storage/SKILL.md +60 -0
- package/dist/skills/solid-modeling/SKILL.md +274 -0
- package/dist/skills/xpod-componentsjs/SKILL.md +284 -0
- package/dist/watch-cli.js.map +1 -1
- package/package.json +10 -3
- package/vendor/client/dist/client/index.d.ts +118 -0
- package/vendor/client/dist/client/index.js +260 -0
- package/vendor/client/dist/index.d.ts +1 -0
- package/vendor/client/dist/index.js +1 -0
- package/vendor/client/dist/watch/index.d.ts +226 -0
- package/vendor/client/dist/watch/index.js +1114 -0
- package/vendor/client/package.json +9 -0
- package/dist/lib/node-warning-filter.js +0 -34
- package/dist/lib/node-warning-filter.js.map +0 -1
- package/dist/lib/pi-adapter/pod-approval.js +0 -8
- package/dist/lib/pi-adapter/pod-approval.js.map +0 -1
- package/dist/lib/pi-adapter/pod-mirror-mapping.js +0 -189
- package/dist/lib/pi-adapter/pod-mirror-mapping.js.map +0 -1
- package/dist/lib/pi-adapter/pod-mirror.js +0 -334
- package/dist/lib/pi-adapter/pod-mirror.js.map +0 -1
- package/dist/lib/pi-adapter/pod-native.js +0 -477
- package/dist/lib/pi-adapter/pod-native.js.map +0 -1
- package/dist/lib/pi-adapter/session.js +0 -727
- package/dist/lib/pi-adapter/session.js.map +0 -1
- package/dist/lib/pod-data-session.js +0 -70
- package/dist/lib/pod-data-session.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/dist/watch-cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"watch-cli.js","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"watch-cli.js","sourceRoot":"","sources":["../../../../src/watch-cli.ts"],"names":[],"mappings":";AACA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AACvC,OAAO,EACL,gCAAgC,EAChC,0BAA0B,EAC1B,yBAAyB,EACzB,uBAAuB,EACvB,yBAAyB,EACzB,wBAAwB,EACxB,0BAA0B,EAC1B,wBAAwB,EACxB,0BAA0B,EAC1B,QAAQ,GAIT,MAAM,sBAAsB,CAAA;AAE7B,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;KACrC,UAAU,CAAC,YAAY,CAAC;KACxB,mBAAmB,CAAC;IACnB,YAAY,EAAE,IAAI;CACnB,CAAC;KACD,OAAO,CACN,kCAAkC,EAClC,qCAAqC,EACrC,CAAC,OAAO,EAAE,EAAE,CACV,OAAO;KACJ,UAAU,CAAC,QAAQ,EAAE;IACpB,IAAI,EAAE,QAAQ;IACd,OAAO,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,CAAU;CAC5H,CAAC;KACD,UAAU,CAAC,SAAS,EAAE;IACrB,IAAI,EAAE,QAAQ;IACd,QAAQ,EAAE,qFAAqF;CAChG,CAAC;KACD,MAAM,CAAC,MAAM,EAAE;IACd,IAAI,EAAE,QAAQ;IACd,OAAO,EAAE,OAAO;IAChB,OAAO,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAU;IAC7C,QAAQ,EAAE,uBAAuB;CAClC,CAAC;KACD,MAAM,CAAC,OAAO,EAAE;IACf,IAAI,EAAE,QAAQ;IACd,QAAQ,EAAE,+BAA+B;CAC1C,CAAC;KACD,MAAM,CAAC,KAAK,EAAE;IACb,IAAI,EAAE,QAAQ;IACd,QAAQ,EAAE,+CAA+C;CAC1D,CAAC;KACD,MAAM,CAAC,OAAO,EAAE;IACf,IAAI,EAAE,SAAS;IACf,OAAO,EAAE,KAAK;IACd,QAAQ,EAAE,wDAAwD;CACnE,CAAC;KACD,MAAM,CAAC,mBAAmB,EAAE;IAC3B,IAAI,EAAE,QAAQ;IACd,OAAO,EAAE,MAAM;IACf,OAAO,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAU;IAC5C,QAAQ,EAAE,6GAA6G;CACxH,CAAC;KACD,MAAM,CAAC,SAAS,EAAE;IACjB,IAAI,EAAE,SAAS;IACf,OAAO,EAAE,KAAK;IACd,QAAQ,EAAE,6DAA6D;CACxE,CAAC;KACD,MAAM,CAAC,QAAQ,EAAE;IAChB,IAAI,EAAE,QAAQ;IACd,QAAQ,EAAE,mDAAmD;CAC9D,CAAC,EACN,KAAK,EAAE,IAAI,EAAE,EAAE;IACb,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IACrC,MAAM,aAAa,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAA;IAC1E,MAAM,MAAM,GAAG,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAA;IAEhD,IAAI,MAAM,KAAK,UAAU,EAAE,CAAC;QAC1B,MAAM,QAAQ,GAAG,0BAA0B,EAAE,CAAA;QAC7C,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,OAAO,CAAC,OAAO,KAAK,OAAO,CAAC,KAAK,KAAK,CAAC,CAAA;YACjE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,OAAO,CAAC,WAAW,IAAI,CAAC,CAAA;YAClD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,OAAO,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,CAAA;YAC3D,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,OAAO,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,CAAA;YACzD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,OAAO,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,CAAA;QACzD,CAAC;QACD,OAAM;IACR,CAAC;IAED,IAAI,MAAM,KAAK,UAAU,EAAE,CAAC;QAC1B,MAAM,QAAQ,GAAG,yBAAyB,EAAE,CAAA;QAC5C,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAA;YAClD,OAAM;QACR,CAAC;QAED,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAC/E,OAAM;IACR,CAAC;IAED,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QACtB,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;QAC1D,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAA;QACvD,CAAC;QAED,MAAM,OAAO,GAAG,wBAAwB,CAAC,SAAS,CAAC,CAAA;QACnD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,4BAA4B,SAAS,EAAE,CAAC,CAAA;QAC1D,CAAC;QAED,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,0BAA0B,CAAC,OAAO,EAAE,uBAAuB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;QAC7F,OAAM;IACR,CAAC;IAED,IAAI,MAAM,KAAK,WAAW,EAAE,CAAC;QAC3B,MAAM,SAAS,GAAG,MAAM,wBAAwB,EAAE,CAAA;QAClD,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,sDAAsD,CAAC,CAAA;YAC5E,OAAM;QACR,CAAC;QAED,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACvF,OAAM;IACR,CAAC;IAED,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;QAChD,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;QAC3D,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,MAAM,IAAI,KAAK,CAAC,qBAAqB,MAAM,eAAe,CAAC,CAAA;QAC7D,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,0BAA0B,CAAC;YAC/C,UAAU;YACV,QAAQ,EAAE,MAAM,KAAK,SAAS;gBAC5B,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,QAAQ,CAAC;gBAClD,CAAC,CAAC,SAAS;YACb,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS;SACpD,CAAC,CAAA;QACF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,gCAAgC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;QACtE,OAAM;IACR,CAAC;IAED,MAAM,OAAO,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAA6B,CAAA;IACtF,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QACpE,MAAM,IAAI,KAAK,CAAC,gIAAgI,CAAC,CAAA;IACnJ,CAAC;IAED,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACjC,MAAM,MAAM,GAAG,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,IAAI,CAAC,MAA8B,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAE,IAAI,CAAC,MAA+B,CAAC,IAAI,EAAE,CAAC;SAC5I,MAAM,CAAC,CAAC,IAAI,EAAkB,EAAE,CAAC,OAAO,IAAI,KAAK,QAAQ,CAAC;SAC1D,IAAI,CAAC,GAAG,CAAC;SACT,IAAI,EAAE,IAAI,SAAS,CAAA;IACtB,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC;QAC9B,OAAO;QACP,IAAI,EAAE,IAAI,CAAC,IAAiB;QAC5B,GAAG,EAAE,IAAI,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE;QAC9B,KAAK;QACL,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,MAAM;QACN,eAAe,EAAE,CAAE,IAAI,CAAC,IAAI,CAA0B,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC;QACzE,gBAAgB,EAAE,IAAI,CAAC,mBAAmB,CAA0B;KACrE,CAAC,CAAA;IAEF,IAAI,QAAQ,KAAK,CAAC,EAAE,CAAC;QACnB,OAAO,CAAC,QAAQ,GAAG,QAAQ,CAAA;IAC7B,CAAC;AACH,CAAC,CACF;KACA,MAAM,EAAE;KACR,IAAI,EAAE,CAAA;AAET,OAAO,CAAC,EAAE,CAAC,oBAAoB,EAAE,CAAC,KAAc,EAAE,EAAE;IAClD,OAAO,CAAC,KAAK,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAA;IACrE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AACjB,CAAC,CAAC,CAAA;AAEF,GAAG,CAAC,KAAK,EAAE,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@undefineds.co/linx",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.17",
|
|
4
4
|
"private": false,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -12,10 +12,11 @@
|
|
|
12
12
|
"test": "yarn build && node --test test/**/*.test.mjs"
|
|
13
13
|
},
|
|
14
14
|
"dependencies": {
|
|
15
|
-
"@undefineds.co/models": "0.2.15",
|
|
16
15
|
"@inrupt/solid-client-authn-node": "^3.1.1",
|
|
16
|
+
"@inrupt/vocab-common-rdf": "^1.0.5",
|
|
17
17
|
"@mariozechner/pi-coding-agent": "^0.67.6",
|
|
18
|
-
"
|
|
18
|
+
"@undefineds.co/drizzle-solid": "^0.3.5",
|
|
19
|
+
"@undefineds.co/models": "0.2.16",
|
|
19
20
|
"yargs": "^17.7.2",
|
|
20
21
|
"@zed-industries/codex-acp": "^0.9.5"
|
|
21
22
|
},
|
|
@@ -25,9 +26,15 @@
|
|
|
25
26
|
},
|
|
26
27
|
"files": [
|
|
27
28
|
"dist",
|
|
29
|
+
"vendor",
|
|
28
30
|
"README.md",
|
|
29
31
|
"package.json"
|
|
30
32
|
],
|
|
33
|
+
"repository": {
|
|
34
|
+
"type": "git",
|
|
35
|
+
"url": "git+https://github.com/undefinedsco/LinX.git",
|
|
36
|
+
"directory": "apps/cli"
|
|
37
|
+
},
|
|
31
38
|
"publishConfig": {
|
|
32
39
|
"access": "public"
|
|
33
40
|
}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
export type LinxAuthType = 'client_credentials' | 'oidc_oauth';
|
|
2
|
+
export interface LinxClientConfig {
|
|
3
|
+
url: string;
|
|
4
|
+
webId: string;
|
|
5
|
+
authType: LinxAuthType;
|
|
6
|
+
}
|
|
7
|
+
export interface LinxClientCredentialsSecrets {
|
|
8
|
+
clientId: string;
|
|
9
|
+
clientSecret: string;
|
|
10
|
+
}
|
|
11
|
+
export interface LinxOidcOAuthSecrets {
|
|
12
|
+
oidcRefreshToken: string;
|
|
13
|
+
oidcAccessToken: string;
|
|
14
|
+
oidcExpiresAt: string;
|
|
15
|
+
}
|
|
16
|
+
export type LinxClientSecrets = LinxClientCredentialsSecrets | LinxOidcOAuthSecrets;
|
|
17
|
+
export interface AccountSession {
|
|
18
|
+
url: string;
|
|
19
|
+
email: string;
|
|
20
|
+
token: string;
|
|
21
|
+
webId?: string;
|
|
22
|
+
podUrl?: string;
|
|
23
|
+
createdAt: string;
|
|
24
|
+
}
|
|
25
|
+
export interface LinxAccountControls {
|
|
26
|
+
pod?: string;
|
|
27
|
+
clientCredentials?: string;
|
|
28
|
+
}
|
|
29
|
+
export interface LinxAccountData {
|
|
30
|
+
controls: LinxAccountControls;
|
|
31
|
+
pods: Record<string, string>;
|
|
32
|
+
webIds: Record<string, string>;
|
|
33
|
+
clientCredentials: Record<string, string>;
|
|
34
|
+
}
|
|
35
|
+
export interface LinxClientCredential {
|
|
36
|
+
id: string;
|
|
37
|
+
secret?: string;
|
|
38
|
+
label?: string;
|
|
39
|
+
webId?: string;
|
|
40
|
+
}
|
|
41
|
+
export interface LinxStoredCredentials {
|
|
42
|
+
url: string;
|
|
43
|
+
webId: string;
|
|
44
|
+
authType: LinxAuthType;
|
|
45
|
+
secrets: LinxClientSecrets;
|
|
46
|
+
}
|
|
47
|
+
export type LinxCredentialBootstrapStatus = 'reused' | 'created' | 'recreated';
|
|
48
|
+
export interface LinxWhoAmIField {
|
|
49
|
+
key: 'email' | 'server' | 'webId' | 'pod' | 'session-created-at';
|
|
50
|
+
value: string;
|
|
51
|
+
}
|
|
52
|
+
export interface PerformLinxPasswordLoginInput {
|
|
53
|
+
baseUrl?: string | null;
|
|
54
|
+
fallbackBaseUrl?: string;
|
|
55
|
+
email: string;
|
|
56
|
+
password: string;
|
|
57
|
+
requestedWebId?: string | null;
|
|
58
|
+
credentialName?: string | null;
|
|
59
|
+
existingCredentials?: LinxStoredCredentials | null;
|
|
60
|
+
now?: Date;
|
|
61
|
+
}
|
|
62
|
+
export interface PerformLinxPasswordLoginResult {
|
|
63
|
+
baseUrl: string;
|
|
64
|
+
webId: string;
|
|
65
|
+
account: LinxAccountData;
|
|
66
|
+
session: AccountSession;
|
|
67
|
+
credentialStatus: LinxCredentialBootstrapStatus;
|
|
68
|
+
credentialsToSave?: {
|
|
69
|
+
url: string;
|
|
70
|
+
webId: string;
|
|
71
|
+
authType: 'client_credentials';
|
|
72
|
+
secrets: LinxClientCredentialsSecrets;
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
export interface PerformLinxPasswordLoginDependencies {
|
|
76
|
+
checkServer(baseUrl: string): Promise<boolean>;
|
|
77
|
+
login(email: string, password: string, baseUrl: string): Promise<string | null>;
|
|
78
|
+
getAccountData(token: string, baseUrl: string): Promise<LinxAccountData | null>;
|
|
79
|
+
validateClientCredentials?(credentials: LinxStoredCredentials): Promise<boolean>;
|
|
80
|
+
createClientCredentials(token: string, credentialsUrl: string, webId: string, name?: string): Promise<LinxClientCredential | null>;
|
|
81
|
+
}
|
|
82
|
+
export declare const LINX_HOME_DIRNAME = ".linx";
|
|
83
|
+
export declare const LINX_CONFIG_FILE_NAME = "config.json";
|
|
84
|
+
export declare const LINX_SECRETS_FILE_NAME = "secrets.json";
|
|
85
|
+
export declare const LINX_ACCOUNT_SESSION_FILE_NAME = "account.json";
|
|
86
|
+
export declare const LINX_CLOUD_IDENTITY_ORIGIN = "https://id.undefineds.co";
|
|
87
|
+
export declare const LINX_CLOUD_API_ORIGIN = "https://api.undefineds.co";
|
|
88
|
+
export declare const LINX_CLOUD_ACCOUNT_API_BASE_URL = "https://id.undefineds.co/";
|
|
89
|
+
export declare const LINX_CLOUD_RUNTIME_API_BASE_URL = "https://api.undefineds.co/v1";
|
|
90
|
+
export declare const LINX_CLOUD_API_BASE_URL = "https://id.undefineds.co/";
|
|
91
|
+
export declare const LINX_CLOUD_IDENTITY_HOSTS: readonly ["id.undefineds.co"];
|
|
92
|
+
export declare function resolveLinxBaseUrl(url?: string | null, fallbackBaseUrl?: string): string;
|
|
93
|
+
export declare function resolveLinxRuntimeApiBaseUrl(url?: string | null, fallbackBaseUrl?: string): string;
|
|
94
|
+
export declare function resolveLinxCloudAccountBaseUrl(url?: string | null): string;
|
|
95
|
+
export declare function resolveLinxCloudRuntimeApiBaseUrl(url?: string | null): string;
|
|
96
|
+
export declare function resolveLinxCloudApiBaseUrl(url?: string | null): string;
|
|
97
|
+
export declare function isLinxCloudIdentityBaseUrl(url?: string | null): boolean;
|
|
98
|
+
export declare function resolveLinxRuntimeOriginForIssuerUrl(url?: string | null): string;
|
|
99
|
+
export declare function resolveLinxRuntimeApiBaseUrlForIssuerUrl(url?: string | null): string;
|
|
100
|
+
export declare function resolveLinxPodUrl(webId: string): string;
|
|
101
|
+
export declare function resolveLinxPodBaseUrl(webId: string): string;
|
|
102
|
+
export declare function parseLinxClientConfig(raw: unknown): LinxClientConfig | null;
|
|
103
|
+
export declare function isLinxClientCredentialsSecrets(secrets: LinxClientSecrets): secrets is LinxClientCredentialsSecrets;
|
|
104
|
+
export declare function isLinxOidcOAuthSecrets(secrets: LinxClientSecrets): secrets is LinxOidcOAuthSecrets;
|
|
105
|
+
export declare function parseLinxClientSecrets(raw: unknown): LinxClientSecrets | null;
|
|
106
|
+
export declare function parseLinxAccountData(raw: unknown): LinxAccountData | null;
|
|
107
|
+
export declare function parseLinxClientCredential(raw: unknown): LinxClientCredential | null;
|
|
108
|
+
export declare function parseAccountSession(raw: unknown): AccountSession | null;
|
|
109
|
+
export declare function selectLinxAccountWebId(account: LinxAccountData | null, preferredWebId?: string | null): string | null;
|
|
110
|
+
export declare function hasMatchingLinxStoredCredentials(credentials: Pick<LinxStoredCredentials, 'url' | 'webId'> | null | undefined, baseUrl: string, webId: string): boolean;
|
|
111
|
+
export declare function resolveLinxCredentialBootstrapStatus(input: {
|
|
112
|
+
reusedExistingCredentials: boolean;
|
|
113
|
+
hadMatchingStoredCredentials: boolean;
|
|
114
|
+
}): LinxCredentialBootstrapStatus;
|
|
115
|
+
export declare function listLinxWhoAmIFields(session: AccountSession, options?: {
|
|
116
|
+
verbose?: boolean;
|
|
117
|
+
}): LinxWhoAmIField[];
|
|
118
|
+
export declare function performLinxPasswordLogin(input: PerformLinxPasswordLoginInput, deps: PerformLinxPasswordLoginDependencies): Promise<PerformLinxPasswordLoginResult>;
|