@downcity/city 0.2.153 → 0.2.157
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/bin/index.d.ts +3 -1
- package/bin/index.d.ts.map +1 -1
- package/bin/index.js +1 -0
- package/bin/index.js.map +1 -1
- package/bin/pact/user/types.d.ts +2 -0
- package/bin/pact/user/types.d.ts.map +1 -1
- package/bin/service/ai/ai-service.d.ts +3 -55
- package/bin/service/ai/ai-service.d.ts.map +1 -1
- package/bin/service/ai/ai-service.js +34 -245
- package/bin/service/ai/ai-service.js.map +1 -1
- package/bin/service/ai/model-registry.d.ts +39 -0
- package/bin/service/ai/model-registry.d.ts.map +1 -0
- package/bin/service/ai/model-registry.js +74 -0
- package/bin/service/ai/model-registry.js.map +1 -0
- package/bin/service/ai/model-routing.d.ts +10 -0
- package/bin/service/ai/model-routing.d.ts.map +1 -0
- package/bin/service/ai/model-routing.js +140 -0
- package/bin/service/ai/model-routing.js.map +1 -0
- package/bin/service/ai/provider.d.ts +11 -1
- package/bin/service/ai/provider.d.ts.map +1 -1
- package/bin/service/ai/provider.js +33 -4
- package/bin/service/ai/provider.js.map +1 -1
- package/bin/service/ai/reasoning.d.ts +26 -0
- package/bin/service/ai/reasoning.d.ts.map +1 -0
- package/bin/service/ai/reasoning.js +118 -0
- package/bin/service/ai/reasoning.js.map +1 -0
- package/bin/service/ai/types.d.ts +5 -24
- package/bin/service/ai/types.d.ts.map +1 -1
- package/bin/types/AIReasoning.d.ts +25 -0
- package/bin/types/AIReasoning.d.ts.map +1 -0
- package/bin/types/AIReasoning.js +7 -0
- package/bin/types/AIReasoning.js.map +1 -0
- package/bin/types/AIRouting.d.ts +37 -0
- package/bin/types/AIRouting.d.ts.map +1 -0
- package/bin/types/AIRouting.js +7 -0
- package/bin/types/AIRouting.js.map +1 -0
- package/package.json +2 -2
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AI 模型推理强度解析模块。
|
|
3
|
+
*
|
|
4
|
+
* AIService 在最终模型路由完成后调用本模块进行校验和默认值解析。
|
|
5
|
+
* Provider 只能读取这里写入 Context.locals 的可信结果,再映射厂商参数。
|
|
6
|
+
*/
|
|
7
|
+
import type { Context } from "../service.js";
|
|
8
|
+
import type { AIResolvedReasoning } from "../../types/AIReasoning.js";
|
|
9
|
+
import type { ModelConfig } from "./types.js";
|
|
10
|
+
/**
|
|
11
|
+
* 在模型注册阶段校验推理能力配置。
|
|
12
|
+
*/
|
|
13
|
+
export declare function validate_model_reasoning(model: ModelConfig): void;
|
|
14
|
+
/**
|
|
15
|
+
* 按最终执行模型解析一次请求的推理强度。
|
|
16
|
+
*/
|
|
17
|
+
export declare function resolve_model_reasoning(model: ModelConfig, input: Record<string, unknown>): AIResolvedReasoning | undefined;
|
|
18
|
+
/**
|
|
19
|
+
* 将已解析推理强度写入 Provider 上下文、请求体和计量元数据。
|
|
20
|
+
*/
|
|
21
|
+
export declare function attach_resolved_reasoning(ctx: Context, reasoning: AIResolvedReasoning | undefined): void;
|
|
22
|
+
/**
|
|
23
|
+
* 读取 AIService 已校验的推理强度。
|
|
24
|
+
*/
|
|
25
|
+
export declare function read_resolved_reasoning(ctx: Context): AIResolvedReasoning | undefined;
|
|
26
|
+
//# sourceMappingURL=reasoning.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reasoning.d.ts","sourceRoot":"","sources":["../../../src/service/ai/reasoning.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAEtE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAK9C;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI,CAmCjE;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,WAAW,EAClB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,mBAAmB,GAAG,SAAS,CAoCjC;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CACvC,GAAG,EAAE,OAAO,EACZ,SAAS,EAAE,mBAAmB,GAAG,SAAS,GACzC,IAAI,CAYN;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,OAAO,GAAG,mBAAmB,GAAG,SAAS,CAUrF"}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AI 模型推理强度解析模块。
|
|
3
|
+
*
|
|
4
|
+
* AIService 在最终模型路由完成后调用本模块进行校验和默认值解析。
|
|
5
|
+
* Provider 只能读取这里写入 Context.locals 的可信结果,再映射厂商参数。
|
|
6
|
+
*/
|
|
7
|
+
import { httpError } from "../../utils/helpers.js";
|
|
8
|
+
/** Context.locals 中保存已解析推理强度的固定字段名。 */
|
|
9
|
+
const AI_REASONING_LOCAL_KEY = "ai_reasoning";
|
|
10
|
+
/**
|
|
11
|
+
* 在模型注册阶段校验推理能力配置。
|
|
12
|
+
*/
|
|
13
|
+
export function validate_model_reasoning(model) {
|
|
14
|
+
const reasoning = model.reasoning;
|
|
15
|
+
if (!reasoning)
|
|
16
|
+
return;
|
|
17
|
+
if (!Array.isArray(reasoning.efforts) || reasoning.efforts.length === 0) {
|
|
18
|
+
throw new Error(`Model ${model.id} reasoning.efforts must not be empty`);
|
|
19
|
+
}
|
|
20
|
+
const effort_ids = new Set();
|
|
21
|
+
for (const effort of reasoning.efforts) {
|
|
22
|
+
const effort_id = effort.id.trim();
|
|
23
|
+
if (!effort_id) {
|
|
24
|
+
throw new Error(`Model ${model.id} reasoning effort id is required`);
|
|
25
|
+
}
|
|
26
|
+
if (effort.id !== effort_id) {
|
|
27
|
+
throw new Error(`Model ${model.id} reasoning effort id must not contain surrounding whitespace`);
|
|
28
|
+
}
|
|
29
|
+
if (!effort.name.trim()) {
|
|
30
|
+
throw new Error(`Model ${model.id} reasoning effort ${effort_id} name is required`);
|
|
31
|
+
}
|
|
32
|
+
if (effort_ids.has(effort_id)) {
|
|
33
|
+
throw new Error(`Model ${model.id} has duplicate reasoning effort: ${effort_id}`);
|
|
34
|
+
}
|
|
35
|
+
effort_ids.add(effort_id);
|
|
36
|
+
}
|
|
37
|
+
const default_effort = reasoning.default_effort?.trim();
|
|
38
|
+
if (reasoning.default_effort !== undefined && reasoning.default_effort !== default_effort) {
|
|
39
|
+
throw new Error(`Model ${model.id} default reasoning effort must not contain surrounding whitespace`);
|
|
40
|
+
}
|
|
41
|
+
if (reasoning.default_effort !== undefined && !default_effort) {
|
|
42
|
+
throw new Error(`Model ${model.id} default reasoning effort must not be empty`);
|
|
43
|
+
}
|
|
44
|
+
if (default_effort && !effort_ids.has(default_effort)) {
|
|
45
|
+
throw new Error(`Model ${model.id} has unknown default reasoning effort: ${default_effort}`);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* 按最终执行模型解析一次请求的推理强度。
|
|
50
|
+
*/
|
|
51
|
+
export function resolve_model_reasoning(model, input) {
|
|
52
|
+
if (input.effort_id !== undefined) {
|
|
53
|
+
throw httpError(422, "effort_id is not supported; use reasoning_effort");
|
|
54
|
+
}
|
|
55
|
+
const requested_value = input.reasoning_effort;
|
|
56
|
+
const has_requested_effort = requested_value !== undefined;
|
|
57
|
+
if (has_requested_effort && typeof requested_value !== "string") {
|
|
58
|
+
throw httpError(422, "reasoning_effort must be a string");
|
|
59
|
+
}
|
|
60
|
+
const requested_effort = typeof requested_value === "string"
|
|
61
|
+
? requested_value.trim()
|
|
62
|
+
: undefined;
|
|
63
|
+
if (has_requested_effort && !requested_effort) {
|
|
64
|
+
throw httpError(422, "reasoning_effort must not be empty");
|
|
65
|
+
}
|
|
66
|
+
const reasoning = model.reasoning;
|
|
67
|
+
if (!reasoning) {
|
|
68
|
+
if (requested_effort) {
|
|
69
|
+
throw httpError(422, `Model ${model.id} does not support reasoning_effort`);
|
|
70
|
+
}
|
|
71
|
+
return undefined;
|
|
72
|
+
}
|
|
73
|
+
const effort = requested_effort ?? reasoning.default_effort?.trim();
|
|
74
|
+
if (!effort)
|
|
75
|
+
return undefined;
|
|
76
|
+
if (!reasoning.efforts.some((item) => item.id === effort)) {
|
|
77
|
+
throw httpError(422, `Model ${model.id} does not support reasoning_effort: ${effort}`);
|
|
78
|
+
}
|
|
79
|
+
return {
|
|
80
|
+
effort,
|
|
81
|
+
source: requested_effort ? "request" : "default",
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* 将已解析推理强度写入 Provider 上下文、请求体和计量元数据。
|
|
86
|
+
*/
|
|
87
|
+
export function attach_resolved_reasoning(ctx, reasoning) {
|
|
88
|
+
if (!reasoning)
|
|
89
|
+
return;
|
|
90
|
+
ctx.locals[AI_REASONING_LOCAL_KEY] = reasoning;
|
|
91
|
+
ctx.input.reasoning_effort = reasoning.effort;
|
|
92
|
+
ctx.metering = {
|
|
93
|
+
...ctx.metering,
|
|
94
|
+
metadata: {
|
|
95
|
+
...(ctx.metering?.metadata ?? {}),
|
|
96
|
+
reasoning_effort: reasoning.effort,
|
|
97
|
+
reasoning_effort_source: reasoning.source,
|
|
98
|
+
},
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* 读取 AIService 已校验的推理强度。
|
|
103
|
+
*/
|
|
104
|
+
export function read_resolved_reasoning(ctx) {
|
|
105
|
+
const value = ctx.locals[AI_REASONING_LOCAL_KEY];
|
|
106
|
+
if (!value || typeof value !== "object")
|
|
107
|
+
return undefined;
|
|
108
|
+
const record = value;
|
|
109
|
+
if (typeof record.effort !== "string")
|
|
110
|
+
return undefined;
|
|
111
|
+
if (record.source !== "request" && record.source !== "default")
|
|
112
|
+
return undefined;
|
|
113
|
+
return {
|
|
114
|
+
effort: record.effort,
|
|
115
|
+
source: record.source,
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
//# sourceMappingURL=reasoning.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reasoning.js","sourceRoot":"","sources":["../../../src/service/ai/reasoning.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import type { ActionFn } from "../action.js";
|
|
7
7
|
import type { AIBalanceBridge, AIProviderBillFn } from "./charge.js";
|
|
8
|
+
import type { CityModelDescriptor, CityModelEnvRequirement, CityModelReasoning } from "@downcity/type";
|
|
8
9
|
import type { LanguageModel } from "ai";
|
|
9
10
|
/**
|
|
10
11
|
* Provider 构造选项。
|
|
@@ -112,6 +113,8 @@ export interface ModelConfig {
|
|
|
112
113
|
tags?: string[];
|
|
113
114
|
/** 模型元数据 */
|
|
114
115
|
meta?: Record<string, unknown>;
|
|
116
|
+
/** 模型支持的推理强度配置。 */
|
|
117
|
+
reasoning?: CityModelReasoning;
|
|
115
118
|
/** 模型所需环境变量 */
|
|
116
119
|
env?: Record<string, string>;
|
|
117
120
|
/** Provider 的 baseURL(用于自动透传) */
|
|
@@ -127,36 +130,14 @@ export interface ModelConfig {
|
|
|
127
130
|
/** 本模型的出账方法,只生成扣费草稿,不直接扣余额。 */
|
|
128
131
|
bill?: AIProviderBillFn;
|
|
129
132
|
}
|
|
130
|
-
export
|
|
131
|
-
/** 模型 ID */
|
|
132
|
-
id: string;
|
|
133
|
-
/** 模型展示名称 */
|
|
134
|
-
name: string;
|
|
135
|
-
/** 模型描述 */
|
|
136
|
-
description: string;
|
|
137
|
-
/** 模型支持的 modality 列表 */
|
|
138
|
-
modalities: string[];
|
|
139
|
-
/** 模型标签 */
|
|
140
|
-
tags: string[];
|
|
141
|
-
/** 模型元数据 */
|
|
142
|
-
meta: Record<string, unknown>;
|
|
143
|
-
/** 模型依赖的环境变量需求(通常仅在 admin 身份下返回) */
|
|
144
|
-
env_requirements?: AIModelEnvRequirement[];
|
|
145
|
-
}
|
|
133
|
+
export type PublicModel = CityModelDescriptor;
|
|
146
134
|
/**
|
|
147
135
|
* AI 模型环境变量需求。
|
|
148
136
|
*
|
|
149
137
|
* 用于 admin 视角展示某个模型依赖哪些运行时 key,
|
|
150
138
|
* 以及这些 key 当前是否已经配置完成。
|
|
151
139
|
*/
|
|
152
|
-
export
|
|
153
|
-
/** 环境变量 key,例如 `DEEPSEEK_API_KEY` */
|
|
154
|
-
key: string;
|
|
155
|
-
/** 给管理员展示的说明文本 */
|
|
156
|
-
description: string;
|
|
157
|
-
/** 当前是否必须提供该 key 才能调用模型 */
|
|
158
|
-
required: boolean;
|
|
159
|
-
}
|
|
140
|
+
export type AIModelEnvRequirement = CityModelEnvRequirement;
|
|
160
141
|
/**
|
|
161
142
|
* AIService 配置。
|
|
162
143
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/service/ai/types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/service/ai/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AI 推理强度运行时类型。
|
|
3
|
+
*
|
|
4
|
+
* 这里的结构只表示 AIService 已完成模型校验后的可信结果,不能直接由请求体构造。
|
|
5
|
+
*/
|
|
6
|
+
/** 已解析的模型推理强度。 */
|
|
7
|
+
export interface AIResolvedReasoning {
|
|
8
|
+
/** 最终模型接受的推理强度档位 ID。 */
|
|
9
|
+
effort: string;
|
|
10
|
+
/** 档位来自调用方请求还是模型默认配置。 */
|
|
11
|
+
source: "request" | "default";
|
|
12
|
+
}
|
|
13
|
+
/** AI SDK provider option 支持的 JSON 值。 */
|
|
14
|
+
export type AIProviderOptionValue = null | string | number | boolean | AIProviderOptionObject | AIProviderOptionValue[];
|
|
15
|
+
/** 单个 AI SDK Provider 的 JSON 参数对象。 */
|
|
16
|
+
export interface AIProviderOptionObject {
|
|
17
|
+
/** Provider 私有参数值。 */
|
|
18
|
+
[key: string]: AIProviderOptionValue | undefined;
|
|
19
|
+
}
|
|
20
|
+
/** 按 AI SDK Provider ID 分组的 providerOptions。 */
|
|
21
|
+
export interface AIProviderOptions {
|
|
22
|
+
/** 指定 Provider 的私有参数对象。 */
|
|
23
|
+
[provider_id: string]: AIProviderOptionObject;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=AIReasoning.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AIReasoning.d.ts","sourceRoot":"","sources":["../../src/types/AIReasoning.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,kBAAkB;AAClB,MAAM,WAAW,mBAAmB;IAClC,wBAAwB;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,yBAAyB;IACzB,MAAM,EAAE,SAAS,GAAG,SAAS,CAAC;CAC/B;AAED,yCAAyC;AACzC,MAAM,MAAM,qBAAqB,GAC7B,IAAI,GACJ,MAAM,GACN,MAAM,GACN,OAAO,GACP,sBAAsB,GACtB,qBAAqB,EAAE,CAAC;AAE5B,sCAAsC;AACtC,MAAM,WAAW,sBAAsB;IACrC,sBAAsB;IACtB,CAAC,GAAG,EAAE,MAAM,GAAG,qBAAqB,GAAG,SAAS,CAAC;CAClD;AAED,gDAAgD;AAChD,MAAM,WAAW,iBAAiB;IAChC,2BAA2B;IAC3B,CAAC,WAAW,EAAE,MAAM,GAAG,sBAAsB,CAAC;CAC/C"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AIReasoning.js","sourceRoot":"","sources":["../../src/types/AIReasoning.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AI 模型运行时路由类型。
|
|
3
|
+
*
|
|
4
|
+
* 用于描述模型 action 解析结果、媒体 fallback 计划以及路由模块所需的模型访问能力。
|
|
5
|
+
*/
|
|
6
|
+
import type { ActionFn } from "../service/action.js";
|
|
7
|
+
import type { ModelConfig } from "../service/ai/types.js";
|
|
8
|
+
/** 已解析的模型 action。 */
|
|
9
|
+
export interface AIResolvedAction {
|
|
10
|
+
/** 本次 action 绑定的最终模型配置。 */
|
|
11
|
+
model?: ModelConfig;
|
|
12
|
+
/** 本次请求实际执行的 Provider action。 */
|
|
13
|
+
action: ActionFn;
|
|
14
|
+
}
|
|
15
|
+
/** 模型发生 fallback 的标准原因。 */
|
|
16
|
+
export type AIRoutingFallbackReason = "input_requires_media";
|
|
17
|
+
/** 最终模型路由计划。 */
|
|
18
|
+
export interface AIResolvedRoutingPlan {
|
|
19
|
+
/** 最终执行的模型和 action。 */
|
|
20
|
+
resolved: AIResolvedAction;
|
|
21
|
+
/** 发生 fallback 时的原模型 ID。 */
|
|
22
|
+
fallback_from?: string;
|
|
23
|
+
/** 发生 fallback 时的标准原因。 */
|
|
24
|
+
fallback_reason?: AIRoutingFallbackReason;
|
|
25
|
+
/** 触发 fallback 的媒体类型。 */
|
|
26
|
+
fallback_media_type?: string;
|
|
27
|
+
}
|
|
28
|
+
/** 媒体 fallback 路由访问模型注册表所需的最小能力。 */
|
|
29
|
+
export interface AIModelRoutingAdapter {
|
|
30
|
+
/** 解析 fallback 规则中的模型 ID 或内联模型配置。 */
|
|
31
|
+
resolve_model(input: ModelConfig | string): ModelConfig | undefined;
|
|
32
|
+
/** 解析目标模型在指定通路下的 action。 */
|
|
33
|
+
resolve_action(model: ModelConfig, mode: string): ActionFn | undefined;
|
|
34
|
+
/** 判断目标模型当前是否满足环境变量等运行条件。 */
|
|
35
|
+
is_available(model: ModelConfig): boolean;
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=AIRouting.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AIRouting.d.ts","sourceRoot":"","sources":["../../src/types/AIRouting.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAE1D,qBAAqB;AACrB,MAAM,WAAW,gBAAgB;IAC/B,2BAA2B;IAC3B,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,iCAAiC;IACjC,MAAM,EAAE,QAAQ,CAAC;CAClB;AAED,2BAA2B;AAC3B,MAAM,MAAM,uBAAuB,GAAG,sBAAsB,CAAC;AAE7D,gBAAgB;AAChB,MAAM,WAAW,qBAAqB;IACpC,uBAAuB;IACvB,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,4BAA4B;IAC5B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,0BAA0B;IAC1B,eAAe,CAAC,EAAE,uBAAuB,CAAC;IAC1C,yBAAyB;IACzB,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,oCAAoC;AACpC,MAAM,WAAW,qBAAqB;IACpC,qCAAqC;IACrC,aAAa,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,GAAG,WAAW,GAAG,SAAS,CAAC;IACpE,4BAA4B;IAC5B,cAAc,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAC;IACvE,6BAA6B;IAC7B,YAAY,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC;CAC3C"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AIRouting.js","sourceRoot":"","sources":["../../src/types/AIRouting.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@downcity/city",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.157",
|
|
4
4
|
"description": "Downcity City runtime and City access SDK for services, actions, auth, env, and cities.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./bin/index.js",
|
|
@@ -41,7 +41,7 @@
|
|
|
41
41
|
"typescript": "^6.0.3"
|
|
42
42
|
},
|
|
43
43
|
"dependencies": {
|
|
44
|
-
"@downcity/type": "0.1.
|
|
44
|
+
"@downcity/type": "0.1.112",
|
|
45
45
|
"ai": "^6.0.193",
|
|
46
46
|
"drizzle-orm": "^0.45.2",
|
|
47
47
|
"hono": "^4.12.23"
|