@yss123/cage-ai 0.0.0-stage → 0.3.0

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 (81) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +77 -2
  3. package/dist/budget.d.ts +64 -0
  4. package/dist/budget.js +54 -0
  5. package/dist/budget.js.map +1 -0
  6. package/dist/context-read.d.ts +38 -0
  7. package/dist/context-read.js +124 -0
  8. package/dist/context-read.js.map +1 -0
  9. package/dist/context-schema.d.ts +9 -0
  10. package/dist/context-schema.js +16 -0
  11. package/dist/context-schema.js.map +1 -0
  12. package/dist/context.d.ts +27 -0
  13. package/dist/context.js +83 -0
  14. package/dist/context.js.map +1 -0
  15. package/dist/execution-schema.d.ts +9 -0
  16. package/dist/execution-schema.js +20 -0
  17. package/dist/execution-schema.js.map +1 -0
  18. package/dist/history.d.ts +43 -0
  19. package/dist/history.js +139 -0
  20. package/dist/history.js.map +1 -0
  21. package/dist/http.d.ts +15 -0
  22. package/dist/http.js +197 -0
  23. package/dist/http.js.map +1 -0
  24. package/dist/index.d.ts +33 -0
  25. package/dist/index.js +97 -0
  26. package/dist/index.js.map +1 -0
  27. package/dist/model-failure.d.ts +66 -0
  28. package/dist/model-failure.js +85 -0
  29. package/dist/model-failure.js.map +1 -0
  30. package/dist/model.d.ts +50 -0
  31. package/dist/model.js +93 -0
  32. package/dist/model.js.map +1 -0
  33. package/dist/models.d.ts +75 -0
  34. package/dist/models.js +241 -0
  35. package/dist/models.js.map +1 -0
  36. package/dist/personalities.d.ts +87 -0
  37. package/dist/personalities.js +191 -0
  38. package/dist/personalities.js.map +1 -0
  39. package/dist/personality-presets.d.ts +14 -0
  40. package/dist/personality-presets.js +24 -0
  41. package/dist/personality-presets.js.map +1 -0
  42. package/dist/prompt.d.ts +67 -0
  43. package/dist/prompt.js +148 -0
  44. package/dist/prompt.js.map +1 -0
  45. package/dist/query.d.ts +13 -0
  46. package/dist/query.js +82 -0
  47. package/dist/query.js.map +1 -0
  48. package/dist/request-plan.d.ts +59 -0
  49. package/dist/request-plan.js +168 -0
  50. package/dist/request-plan.js.map +1 -0
  51. package/dist/responses.d.ts +29 -0
  52. package/dist/responses.js +134 -0
  53. package/dist/responses.js.map +1 -0
  54. package/dist/runtime.d.ts +172 -0
  55. package/dist/runtime.js +1188 -0
  56. package/dist/runtime.js.map +1 -0
  57. package/dist/schema.d.ts +11 -0
  58. package/dist/schema.js +51 -0
  59. package/dist/schema.js.map +1 -0
  60. package/dist/security.d.ts +23 -0
  61. package/dist/security.js +73 -0
  62. package/dist/security.js.map +1 -0
  63. package/dist/state.d.ts +238 -0
  64. package/dist/state.js +11 -0
  65. package/dist/state.js.map +1 -0
  66. package/dist/store.d.ts +113 -0
  67. package/dist/store.js +456 -0
  68. package/dist/store.js.map +1 -0
  69. package/dist/text-stream.d.ts +62 -0
  70. package/dist/text-stream.js +99 -0
  71. package/dist/text-stream.js.map +1 -0
  72. package/dist/tool-catalog.d.ts +23 -0
  73. package/dist/tool-catalog.js +53 -0
  74. package/dist/tool-catalog.js.map +1 -0
  75. package/dist/tools.d.ts +54 -0
  76. package/dist/tools.js +250 -0
  77. package/dist/tools.js.map +1 -0
  78. package/dist/types.d.ts +283 -0
  79. package/dist/types.js +16 -0
  80. package/dist/types.js.map +1 -0
  81. package/package.json +41 -3
@@ -0,0 +1,283 @@
1
+ /**
2
+ * AI 后端统一类型与运行配置。模型适配器、请求规划和运行时共用这些定义;浏览器使用 ai-protocol。
3
+ * 请求数据不授予权限,可信身份来自内核;模型返回的调用还必须经过参数、授权与事务校验。
4
+ */
5
+ import type { Ctx, Kernel } from '@yss123/cage-kernel';
6
+ import type { RuntimeOntology } from '@yss123/cage-ontology';
7
+ import type { StoredRun } from './state.js';
8
+ /**
9
+ * 模型提议的工具调用,先持久化计划再验证执行;模型 ID 只在同一步内识别调用。
10
+ */
11
+ export interface ToolCall {
12
+ /**
13
+ * 模型调用标识,与步数组成持久动作去重键。
14
+ */
15
+ id: string;
16
+ /**
17
+ * 必须匹配已提供工具的协议名称。
18
+ */
19
+ name: string;
20
+ /**
21
+ * 尚待对应 schema 校验的模型参数。
22
+ */
23
+ arguments: Record<string, unknown>;
24
+ }
25
+ /**
26
+ * 持久消息的通用表示;运行引用与原生协议项保留在服务端,适配器只发送协议允许字段。
27
+ */
28
+ export interface ModelMessage {
29
+ /**
30
+ * 系统、用户、助理或工具角色;工具数据不能提升为系统指令。
31
+ */
32
+ role: 'system' | 'user' | 'assistant' | 'tool';
33
+ /**
34
+ * 文字或 JSON 回执;仅有工具调用时可以为空。
35
+ */
36
+ content: string;
37
+ /**
38
+ * 助理提出的调用组,省略表示普通文字。
39
+ */
40
+ toolCalls?: ToolCall[];
41
+ /**
42
+ * 回执对应的调用 ID,需与前面的调用配对。
43
+ */
44
+ toolCallId?: string;
45
+ /** 本地证据定位,不发送为模型协议字段。 */
46
+ runId?: string;
47
+ /**
48
+ * 可按权限回查原始结果的运行/动作引用。
49
+ */
50
+ receipt?: {
51
+ runId: string;
52
+ actionId: string;
53
+ };
54
+ /** Responses 的不透明推理/压缩项仅用于同配置恢复,不向 UI 展示。 */
55
+ providerItems?: {
56
+ key: string;
57
+ items: Record<string, unknown>[];
58
+ };
59
+ }
60
+ /**
61
+ * 模型可见工具定义;这里只含描述和完整 schema,执行函数由服务端持有。
62
+ */
63
+ export interface ModelTool {
64
+ /**
65
+ * 稳定协议工具名,不是任意可执行代码标识。
66
+ */
67
+ name: string;
68
+ /**
69
+ * 工具用途与边界的公开说明。
70
+ */
71
+ description: string;
72
+ /**
73
+ * 完整 JSON Schema,不能为预算截掉部分字段。
74
+ */
75
+ input: Record<string, unknown>;
76
+ }
77
+ /**
78
+ * 适配器验证后的单次结果;usage 缺失时按预留额度估算,calls 尚不表示业务已经执行。
79
+ */
80
+ export interface ModelResult {
81
+ /**
82
+ * 最终文字,供流式显示校准。
83
+ */
84
+ text: string;
85
+ /**
86
+ * 待执行调用列表;空列表在审批模式不能替代裁决。
87
+ */
88
+ calls: ToolCall[];
89
+ /**
90
+ * 上游报告的输入/输出 Token;省略时保守估算。
91
+ */
92
+ usage?: {
93
+ inputTokens: number;
94
+ outputTokens: number;
95
+ };
96
+ /**
97
+ * 已由适配器检查的停止原因。
98
+ */
99
+ finishReason?: string;
100
+ /**
101
+ * Responses 完成响应 ID,只在同配置下接续。
102
+ */
103
+ responseId?: string;
104
+ /**
105
+ * Responses 原生输出,可能含不透明推理项,仅后端恢复使用。
106
+ */
107
+ outputItems?: Record<string, unknown>[];
108
+ }
109
+ /**
110
+ * 一次有界模型请求,输入、工具及输出预算已规划;取消信号同时传入网络和流式回调。
111
+ */
112
+ export interface ModelRequest {
113
+ /**
114
+ * 当前有界消息窗口,裁剪不删除原始记录。
115
+ */
116
+ messages: ModelMessage[];
117
+ /**
118
+ * 本步可用的完整工具定义,执行时仍复核授权。
119
+ */
120
+ tools: ModelTool[];
121
+ /**
122
+ * 本次输出额度,包含供应商计入的推理 Token。
123
+ */
124
+ maxOutputTokens: number;
125
+ /**
126
+ * 租约、停止或超时触发的取消信号。
127
+ */
128
+ signal: AbortSignal;
129
+ /**
130
+ * 增量文字回调,异步完成支持背压。
131
+ */
132
+ onText?: (text: string) => Promise<void>;
133
+ /** 运行时注入的可信上下文,协议适配器不得发送给外部模型。 */
134
+ context?: {
135
+ tenantId: string;
136
+ runId: string;
137
+ };
138
+ /** 仅由运行时从已授权的持久会话读取;ID 不接受浏览器输入。 */
139
+ previousResponseId?: string;
140
+ /**
141
+ * 模型配置指纹,不匹配时不能复用原生历史项。
142
+ */
143
+ stateKey?: string;
144
+ }
145
+ /**
146
+ * 模型适配接口;spec 不含密钥,托管模型通过 bind/resolve 获取当前租户配置后执行 generate。
147
+ */
148
+ export interface ModelProvider {
149
+ /** 可序列化且不含密钥的配置,参与 API/worker 一致性检查。 */
150
+ readonly spec: Record<string, unknown>;
151
+ /**
152
+ * 按内核绑定服务依赖,声明阶段不访问数据库。
153
+ */
154
+ bind?(kernel: Kernel): ModelProvider;
155
+ /** 每步解析一次托管配置,使预算与实际请求使用同一份配置快照。 */
156
+ resolve?(context: {
157
+ tenantId: string;
158
+ }): Promise<ModelProvider>;
159
+ /**
160
+ * 真实模型窗口 Token 容量,省略使用框架默认值。
161
+ */
162
+ contextWindowTokens?: number;
163
+ /**
164
+ * 接续指纹和压缩开关;开启不证明远端已经压缩。
165
+ */
166
+ continuation?: {
167
+ key: string;
168
+ compaction: boolean;
169
+ };
170
+ /**
171
+ * 执行一次模型请求;协议或网络失败抛给运行时分类。
172
+ */
173
+ generate(request: ModelRequest): Promise<ModelResult>;
174
+ }
175
+ /**
176
+ * 整轮执行的硬额度,分别限制有效步数、尝试次数、工具数、Token 和执行毫秒数。
177
+ */
178
+ export interface RunLimits {
179
+ /**
180
+ * 有效模型步数上限。
181
+ */
182
+ maxSteps: number;
183
+ /**
184
+ * 本轮工具调用累计上限。
185
+ */
186
+ maxToolCalls: number;
187
+ /**
188
+ * 本轮累计输入与输出 Token 额度。
189
+ */
190
+ tokenBudget: number;
191
+ /**
192
+ * 执行阶段总超时,单位毫秒,等待交互恢复后重新建立截止时间。
193
+ */
194
+ timeoutMs: number;
195
+ /**
196
+ * 单次最大输出 Token,仍受剩余额度限制。
197
+ */
198
+ maxOutputTokens: number;
199
+ /**
200
+ * 额外调用尝试上限,不表示所有错误自动重试。
201
+ */
202
+ maxModelRetries?: number;
203
+ }
204
+ /**
205
+ * 工具与历史的可选输入上限,仍受窗口、输出预留和整轮剩余额度共同限制。
206
+ */
207
+ export interface AiContextOptions {
208
+ /** 所有工具 schema 的估算 Token 上限,默认模型窗口的 25%,仍受本轮剩余空间约束。 */
209
+ maxToolTokens?: number;
210
+ /** 协议工具数量上限,包含通用工具;不是开启发现的固定业务工具阈值。默认 128。 */
211
+ maxTools?: number;
212
+ /** 自动恢复的近期完整轮次预算;更早资料继续保留并可按引用分页取回。 */
213
+ maxHistoryTokens?: number;
214
+ }
215
+ /**
216
+ * 应用顶层 ai() 配置;模型别名、助理策略和并发设置由应用声明,权限仍由内核决定。
217
+ */
218
+ export interface AiOptions {
219
+ /**
220
+ * 模型别名到适配器的映射,审批与助理按别名引用。
221
+ */
222
+ models: Record<string, ModelProvider>;
223
+ /**
224
+ * 可选助理:model 为别名,instructions 为策略,limits 覆盖额度,confirmWrites 控制普通写确认。
225
+ */
226
+ assistant?: {
227
+ model: string;
228
+ instructions?: string;
229
+ limits?: Partial<RunLimits>;
230
+ confirmWrites?: boolean;
231
+ };
232
+ /**
233
+ * 单个运行时实例并发数,不是全局集群配额。
234
+ */
235
+ maxConcurrentRuns?: number;
236
+ /**
237
+ * 同租户同用户未终结运行上限,提交时在配额锁内检查。
238
+ */
239
+ maxQueuedPerUser?: number;
240
+ /**
241
+ * 工具与历史预算策略,不增加数据或工具权限。
242
+ */
243
+ context?: AiContextOptions;
244
+ /** 使用已构建清单时,启动必须校验其注册指纹。省略则从同一运行注册表构建。 */
245
+ ontology?: RuntimeOntology;
246
+ /**
247
+ * 委托有效期,单位毫秒;等待用户同样受限制。
248
+ */
249
+ delegationTtlMs?: number;
250
+ }
251
+ /**
252
+ * 未覆盖项使用的默认单轮额度,提交时复制到运行记录,不追改已排队任务。
253
+ */
254
+ export declare const DEFAULT_LIMITS: RunLimits;
255
+ /**
256
+ * 每一步的可信执行快照;动作前重新读取权限,持久变更还需有效租约。
257
+ */
258
+ export interface Execution {
259
+ /**
260
+ * 安全读取、命令与事务所依赖的内核。
261
+ */
262
+ kernel: Kernel;
263
+ /**
264
+ * 当前主体、租户、能力与范围。
265
+ */
266
+ ctx: Ctx;
267
+ /**
268
+ * 当前持久运行快照,写入前仍需核对租约。
269
+ */
270
+ run: StoredRun;
271
+ /**
272
+ * 取消与执行截止信号。
273
+ */
274
+ signal: AbortSignal;
275
+ /**
276
+ * 与注册指纹对应的服务端本体。
277
+ */
278
+ ontology: RuntimeOntology;
279
+ }
280
+ /**
281
+ * 运行终态集合,用于队列、历史与前端判断;等待用户的状态仍未终结。
282
+ */
283
+ export declare const TERMINAL: string[];
package/dist/types.js ADDED
@@ -0,0 +1,16 @@
1
+ /**
2
+ * 未覆盖项使用的默认单轮额度,提交时复制到运行记录,不追改已排队任务。
3
+ */
4
+ export const DEFAULT_LIMITS = {
5
+ maxSteps: 16,
6
+ maxToolCalls: 40,
7
+ tokenBudget: 40_000,
8
+ timeoutMs: 120_000,
9
+ maxOutputTokens: 4000,
10
+ maxModelRetries: 2,
11
+ };
12
+ /**
13
+ * 运行终态集合,用于队列、历史与前端判断;等待用户的状态仍未终结。
14
+ */
15
+ export const TERMINAL = ['succeeded', 'failed', 'cancelled', 'expired'];
16
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAqOA;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAc;IACvC,QAAQ,EAAE,EAAE;IACZ,YAAY,EAAE,EAAE;IAChB,WAAW,EAAE,MAAM;IACnB,SAAS,EAAE,OAAO;IAClB,eAAe,EAAE,IAAI;IACrB,eAAe,EAAE,CAAC;CACnB,CAAC;AA0BF;;GAEG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,44 @@
1
1
  {
2
2
  "name": "@yss123/cage-ai",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
3
+ "version": "0.3.0",
4
+ "type": "module",
5
+ "description": "Cage 自研 AI 运行时、本体助理与智能审批执行器",
6
+ "main": "dist/index.js",
7
+ "types": "dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "default": "./dist/index.js"
12
+ }
13
+ },
14
+ "files": [
15
+ "dist"
16
+ ],
17
+ "dependencies": {
18
+ "fastify": "^5.6.0",
19
+ "kysely": "^0.28.5",
20
+ "zod": "^4.1.5",
21
+ "@yss123/cage-kernel": "0.3.0",
22
+ "@yss123/cage-ontology": "0.3.0",
23
+ "@yss123/cage-connectors": "0.3.0",
24
+ "@yss123/cage-approval": "0.3.0",
25
+ "@yss123/cage-ai-protocol": "0.3.0"
26
+ },
27
+ "license": "MIT",
28
+ "engines": {
29
+ "node": ">=24"
30
+ },
31
+ "repository": {
32
+ "type": "git",
33
+ "url": "git+https://github.com/shunshunyue/cage.git",
34
+ "directory": "packages/ai"
35
+ },
36
+ "publishConfig": {
37
+ "access": "public",
38
+ "registry": "https://registry.npmjs.org/"
39
+ },
40
+ "scripts": {
41
+ "build": "tsc -p tsconfig.json",
42
+ "typecheck": "tsc -p tsconfig.json --noEmit"
43
+ }
6
44
  }