@zhin.js/scaffold-wizard 1.1.2 → 1.1.4
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/lib/decisions.d.ts +16 -0
- package/lib/decisions.d.ts.map +1 -0
- package/lib/decisions.js +140 -0
- package/lib/decisions.js.map +1 -0
- package/lib/index.d.ts +2 -0
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +1 -0
- package/lib/index.js.map +1 -1
- package/lib/zhin-stack-deps.d.ts +1 -1
- package/lib/zhin-stack-deps.js +1 -1
- package/lib/zhin-stack-deps.js.map +1 -1
- package/package.json +2 -2
- package/src/decisions.ts +132 -0
- package/src/index.ts +6 -0
- package/src/stack-versions.generated.json +0 -1
- package/src/zhin-stack-deps.ts +1 -1
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export declare const TYPESAFE_DECISION_PACKAGE = "@zhin.js/service-typesafe";
|
|
2
|
+
export interface TypeSafeSetupConfig {
|
|
3
|
+
readonly instanceKey: string;
|
|
4
|
+
readonly apiKey: string;
|
|
5
|
+
readonly model: string;
|
|
6
|
+
readonly mode: 'shadow' | 'active';
|
|
7
|
+
readonly envVar?: string;
|
|
8
|
+
}
|
|
9
|
+
/** An explicitly requested optional integration. Existing AI configuration is preserved. */
|
|
10
|
+
export declare function configureTypeSafeDecisions(config: Readonly<Record<string, unknown>>): Promise<TypeSafeSetupConfig>;
|
|
11
|
+
/** Plan data separately from writes so secrets cannot enter the configuration document. */
|
|
12
|
+
export declare function applyTypeSafeDecisionsToConfig(config: Record<string, unknown>, setup: TypeSafeSetupConfig): void;
|
|
13
|
+
export declare function saveTypeSafeSetupDependencies(projectDir: string, setup: TypeSafeSetupConfig): Promise<void>;
|
|
14
|
+
/** Local checks only; never sends a paid API request or returns credential values. */
|
|
15
|
+
export declare function diagnoseDecisionConfig(config: Readonly<Record<string, unknown>>, packageJson: unknown): string[];
|
|
16
|
+
//# sourceMappingURL=decisions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decisions.d.ts","sourceRoot":"","sources":["../src/decisions.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,yBAAyB,8BAA8B,CAAC;AACrE,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,QAAQ,GAAG,QAAQ,CAAC;IACnC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAWD,4FAA4F;AAC5F,wBAAsB,0BAA0B,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAaxH;AAWD,2FAA2F;AAC3F,wBAAgB,8BAA8B,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,KAAK,EAAE,mBAAmB,GAAG,IAAI,CAkBhH;AAED,wBAAsB,6BAA6B,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAiBjH;AAED,sFAAsF;AACtF,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EAAE,WAAW,EAAE,OAAO,GAAG,MAAM,EAAE,CAuChH"}
|
package/lib/decisions.js
ADDED
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
import inquirer from 'inquirer';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
import fs from 'fs-extra';
|
|
4
|
+
import path from 'node:path';
|
|
5
|
+
import { formatEnvValue, mergeEnvText } from './env.js';
|
|
6
|
+
import { clonePluginConfigurationMap, mergeDependenciesIntoPackageJson, mergePluginManifestIntoPackageJson } from './apply.js';
|
|
7
|
+
import { isAiEnabledInConfig } from './project-deps.js';
|
|
8
|
+
export const TYPESAFE_DECISION_PACKAGE = '@zhin.js/service-typesafe';
|
|
9
|
+
function hasChatAgent(config) {
|
|
10
|
+
if (!isAiEnabledInConfig(config))
|
|
11
|
+
return false;
|
|
12
|
+
const binding = record(record(record(config.ai).agents).zhin);
|
|
13
|
+
return typeof binding.provider === 'string' && !!binding.provider.trim()
|
|
14
|
+
&& typeof binding.model === 'string' && !!binding.model.trim();
|
|
15
|
+
}
|
|
16
|
+
function record(value) {
|
|
17
|
+
return value && typeof value === 'object' && !Array.isArray(value) ? value : {};
|
|
18
|
+
}
|
|
19
|
+
/** An explicitly requested optional integration. Existing AI configuration is preserved. */
|
|
20
|
+
export async function configureTypeSafeDecisions(config) {
|
|
21
|
+
if (!hasChatAgent(config))
|
|
22
|
+
throw new Error('先运行 zhin setup --ai 配置聊天模型,再运行 zhin setup --decisions。Jev 决策模型不能替代聊天模型。');
|
|
23
|
+
console.log(chalk.blue('\nTypeSafe Jev:选择 Agent / Skill / Tool 的可选决策服务。'));
|
|
24
|
+
console.log(chalk.gray('shadow 仅记录建议,不改变已有行为;active 启用推荐。审核默认关闭。调用会向外部服务发送经过权限过滤的请求与候选描述。'));
|
|
25
|
+
const answers = await inquirer.prompt([
|
|
26
|
+
{ type: 'input', name: 'instanceKey', message: '决策插件实例名', default: 'typesafe', validate: (value) => /^[a-z][a-z0-9-]*$/.test(value) || '使用小写字母、数字和连字符,字母开头' },
|
|
27
|
+
{ type: 'password', name: 'apiKey', message: 'TypeSafe API Key(仅写入 .env)', mask: '*', validate: (value) => value.trim().length > 0 || '请输入 API Key' },
|
|
28
|
+
{ type: 'input', name: 'model', message: 'Jev 模型(生产校准后建议固定版本)', default: 'jev-latest', validate: (value) => value.trim().length > 0 || '请输入模型名称' },
|
|
29
|
+
{ type: 'select', name: 'mode', message: 'Skill / Tool 推荐运行方式', default: 'shadow', choices: [{ name: 'shadow:观察建议,评估后再启用', value: 'shadow' }, { name: 'active:启用推荐,权限仍由 Zhin 校验', value: 'active' }] },
|
|
30
|
+
]);
|
|
31
|
+
const reference = record(record(config.plugins)[answers.instanceKey]).apiKey;
|
|
32
|
+
const existingVariable = typeof reference === 'string' ? /^\$\{([A-Za-z_][A-Za-z0-9_]*)\}$/.exec(reference)?.[1] : undefined;
|
|
33
|
+
return { ...answers, envVar: existingVariable ?? decisionKeyVariable(answers.instanceKey) };
|
|
34
|
+
}
|
|
35
|
+
function decisionKeyVariable(instanceKey) {
|
|
36
|
+
return instanceKey === 'typesafe' ? 'TYPESAFE_API_KEY' : `TYPESAFE_${instanceKey.toUpperCase().replace(/-/g, '_')}_API_KEY`;
|
|
37
|
+
}
|
|
38
|
+
function envVariable(setup) {
|
|
39
|
+
const name = setup.envVar ?? decisionKeyVariable(setup.instanceKey);
|
|
40
|
+
if (!/^[A-Za-z_][A-Za-z0-9_]*$/.test(name))
|
|
41
|
+
throw new Error('Invalid TypeSafe environment variable name.');
|
|
42
|
+
return name;
|
|
43
|
+
}
|
|
44
|
+
/** Plan data separately from writes so secrets cannot enter the configuration document. */
|
|
45
|
+
export function applyTypeSafeDecisionsToConfig(config, setup) {
|
|
46
|
+
if (!hasChatAgent(config))
|
|
47
|
+
throw new Error('TypeSafe decisions require existing AI configuration; run zhin setup --ai first.');
|
|
48
|
+
if (!/^[a-z][a-z0-9-]*$/.test(setup.instanceKey) || !setup.model.trim() || !setup.apiKey.trim())
|
|
49
|
+
throw new Error('Invalid TypeSafe setup configuration.');
|
|
50
|
+
const plugins = clonePluginConfigurationMap(config);
|
|
51
|
+
const existing = record(plugins[setup.instanceKey]);
|
|
52
|
+
plugins[setup.instanceKey] = { ...existing, apiKey: '${' + envVariable(setup) + '}', model: setup.model.trim(), timeoutMs: 10000, maxRetries: 2, enabled: true };
|
|
53
|
+
config.plugins = plugins;
|
|
54
|
+
const ai = record(config.ai);
|
|
55
|
+
const previousDecisions = record(ai.decisions);
|
|
56
|
+
config.ai = { ...ai, decisions: {
|
|
57
|
+
...previousDecisions,
|
|
58
|
+
provider: `root/${setup.instanceKey}`,
|
|
59
|
+
skills: { ...record(previousDecisions.skills), mode: setup.mode },
|
|
60
|
+
tools: { ...record(previousDecisions.tools), mode: setup.mode },
|
|
61
|
+
agents: previousDecisions.agents ?? { mode: 'off' },
|
|
62
|
+
memory: previousDecisions.memory ?? { mode: 'off' },
|
|
63
|
+
approval: previousDecisions.approval ?? { mode: 'off' },
|
|
64
|
+
} };
|
|
65
|
+
}
|
|
66
|
+
export async function saveTypeSafeSetupDependencies(projectDir, setup) {
|
|
67
|
+
const variable = envVariable(setup);
|
|
68
|
+
const pkgPath = path.join(projectDir, 'package.json');
|
|
69
|
+
const pkg = await fs.readJson(pkgPath);
|
|
70
|
+
const existingManifest = record(pkg.zhin).plugins;
|
|
71
|
+
if (Array.isArray(existingManifest) && existingManifest.some(entry => record(entry).instanceKey === setup.instanceKey && record(entry).package !== TYPESAFE_DECISION_PACKAGE)) {
|
|
72
|
+
throw new Error('Decision plugin instance already belongs to another package; choose a different instanceKey.');
|
|
73
|
+
}
|
|
74
|
+
await mergePluginManifestIntoPackageJson(projectDir, [{ package: TYPESAFE_DECISION_PACKAGE, instanceKey: setup.instanceKey }]);
|
|
75
|
+
await mergeDependenciesIntoPackageJson(projectDir, { [TYPESAFE_DECISION_PACKAGE]: '^1.0.0' });
|
|
76
|
+
const envPath = path.join(projectDir, '.env');
|
|
77
|
+
const envExists = await fs.pathExists(envPath);
|
|
78
|
+
const previous = envExists ? await fs.readFile(envPath, 'utf8') : '';
|
|
79
|
+
// writeFile's mode applies only when creating a file. Restrict existing files
|
|
80
|
+
// before adding credentials; Windows access control is not POSIX file modes.
|
|
81
|
+
if (envExists && process.platform !== 'win32')
|
|
82
|
+
await fs.chmod(envPath, 0o600);
|
|
83
|
+
await fs.writeFile(envPath, mergeEnvText(previous, `${variable}=${formatEnvValue(setup.apiKey)}\n`), { mode: 0o600 });
|
|
84
|
+
}
|
|
85
|
+
/** Local checks only; never sends a paid API request or returns credential values. */
|
|
86
|
+
export function diagnoseDecisionConfig(config, packageJson) {
|
|
87
|
+
const ai = record(config.ai);
|
|
88
|
+
if (!Object.hasOwn(ai, 'decisions'))
|
|
89
|
+
return [];
|
|
90
|
+
const decisions = record(ai.decisions);
|
|
91
|
+
const issues = [];
|
|
92
|
+
const taskNames = ['skills', 'tools', 'memory', 'agents', 'approval'];
|
|
93
|
+
if (Object.keys(decisions).some(key => !['provider', ...taskNames].includes(key)))
|
|
94
|
+
issues.push('ai.decisions 含有未知配置字段。');
|
|
95
|
+
const provider = decisions.provider;
|
|
96
|
+
if (typeof provider !== 'string' || !/^root(?:\/[a-z0-9][a-z0-9-]*)+$/.test(provider))
|
|
97
|
+
return [...issues, 'ai.decisions.provider 必须是精确插件 owner,例如 root/typesafe。'];
|
|
98
|
+
for (const name of taskNames) {
|
|
99
|
+
if (!Object.hasOwn(decisions, name))
|
|
100
|
+
continue;
|
|
101
|
+
const task = record(decisions[name]);
|
|
102
|
+
if (Object.keys(task).some(key => !['mode', 'timeoutMs', 'minConfidence', 'topK', 'maxCandidates', 'maxSelections'].includes(key)))
|
|
103
|
+
issues.push(`ai.decisions.${name} 含有未知配置字段。`);
|
|
104
|
+
if (typeof task.mode !== 'string' || !['off', 'shadow', 'active'].includes(task.mode))
|
|
105
|
+
issues.push(`ai.decisions.${name}.mode 必须是 off、shadow 或 active。`);
|
|
106
|
+
for (const field of ['timeoutMs', 'topK', 'maxCandidates', 'maxSelections']) {
|
|
107
|
+
if (task[field] !== undefined && (!Number.isSafeInteger(task[field]) || Number(task[field]) <= 0 || field === 'timeoutMs' && Number(task[field]) > 2147483647))
|
|
108
|
+
issues.push(`ai.decisions.${name}.${field} 必须是正整数。`);
|
|
109
|
+
}
|
|
110
|
+
if (task.minConfidence !== undefined && (typeof task.minConfidence !== 'number' || !Number.isFinite(task.minConfidence) || task.minConfidence < 0 || task.minConfidence > 1))
|
|
111
|
+
issues.push(`ai.decisions.${name}.minConfidence 必须在 0 到 1 之间。`);
|
|
112
|
+
}
|
|
113
|
+
if (!hasChatAgent(config))
|
|
114
|
+
issues.push('决策服务需要已启用的 AI Agent;运行 zhin setup --ai。');
|
|
115
|
+
const enabled = taskNames.some(name => ['shadow', 'active'].includes(String(record(decisions[name]).mode)));
|
|
116
|
+
if (!enabled)
|
|
117
|
+
return issues;
|
|
118
|
+
const key = provider.slice('root/'.length);
|
|
119
|
+
// Nested Plugin owners are resolved from the actual runtime graph during activation.
|
|
120
|
+
if (key.includes('/'))
|
|
121
|
+
return issues;
|
|
122
|
+
const pkg = record(packageJson);
|
|
123
|
+
const manifest = record(pkg.zhin).plugins;
|
|
124
|
+
const entries = Array.isArray(manifest) ? manifest.filter(entry => record(entry).instanceKey === key) : [];
|
|
125
|
+
if (entries.length !== 1) {
|
|
126
|
+
issues.push('决策插件实例未在 package.json#zhin.plugins 唯一声明。');
|
|
127
|
+
return issues;
|
|
128
|
+
}
|
|
129
|
+
if (record(entries[0]).package === TYPESAFE_DECISION_PACKAGE) {
|
|
130
|
+
const configForProvider = record(record(config.plugins)[key]);
|
|
131
|
+
if (configForProvider.enabled === false)
|
|
132
|
+
issues.push('绑定的 TypeSafe 插件已禁用。');
|
|
133
|
+
if (typeof configForProvider.apiKey !== 'string' || !configForProvider.apiKey.trim())
|
|
134
|
+
issues.push('TypeSafe 插件缺少 apiKey 环境变量引用。');
|
|
135
|
+
if (!Object.hasOwn({ ...record(pkg.dependencies), ...record(pkg.devDependencies) }, TYPESAFE_DECISION_PACKAGE))
|
|
136
|
+
issues.push('package.json 缺少 @zhin.js/service-typesafe 依赖。');
|
|
137
|
+
}
|
|
138
|
+
return issues;
|
|
139
|
+
}
|
|
140
|
+
//# sourceMappingURL=decisions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decisions.js","sourceRoot":"","sources":["../src/decisions.ts"],"names":[],"mappings":"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"}
|
package/lib/index.d.ts
CHANGED
|
@@ -20,4 +20,6 @@ export type { UpgradeToL4Diagnosis } from './upgrade-l4.js';
|
|
|
20
20
|
export { loadProjectConfig, createProjectConfigPlan, renderProjectConfigPatch, applyProjectConfigPlan, migrateAiLegacyConfig, diagnoseConsoleConfig, applyConsoleConfigFixes, packageToInstanceKey, } from './project-config-plan.js';
|
|
21
21
|
export type { LoadedProjectConfig, ProjectConfigFormat, ProjectConfigPlan, ProjectConfigPlanOptions, ConsoleConfigDiagnosis, } from './project-config-plan.js';
|
|
22
22
|
export { applyDatabaseToConfig, applyAdaptersToConfig, applyAIToConfig, appendWizardEnvVars, collectWizardDependencies, collectWizardFeatures, mergeDependenciesIntoPackageJson, mergeFeaturesIntoPackageJson, mergePluginManifestIntoPackageJson, finalizeWizardOptions, applyWizardOptionsToConfig, clonePluginConfigurationMap, materializeDatabaseConfig, buildRuntimeConfigDocument, serializeRuntimeConfig, } from './apply.js';
|
|
23
|
+
export { TYPESAFE_DECISION_PACKAGE, configureTypeSafeDecisions, applyTypeSafeDecisionsToConfig, saveTypeSafeSetupDependencies, diagnoseDecisionConfig, } from './decisions.js';
|
|
24
|
+
export type { TypeSafeSetupConfig } from './decisions.js';
|
|
23
25
|
//# sourceMappingURL=index.d.ts.map
|
package/lib/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/lib/index.js
CHANGED
|
@@ -11,4 +11,5 @@ export { SPEECH_PACKAGE, HTML_RENDERER_PACKAGE, ADAPTERS_PREFER_HTML_IMAGE, diag
|
|
|
11
11
|
export { diagnoseUpgradeToL4, getUpgradeToL4Dependencies, } from './upgrade-l4.js';
|
|
12
12
|
export { loadProjectConfig, createProjectConfigPlan, renderProjectConfigPatch, applyProjectConfigPlan, migrateAiLegacyConfig, diagnoseConsoleConfig, applyConsoleConfigFixes, packageToInstanceKey, } from './project-config-plan.js';
|
|
13
13
|
export { applyDatabaseToConfig, applyAdaptersToConfig, applyAIToConfig, appendWizardEnvVars, collectWizardDependencies, collectWizardFeatures, mergeDependenciesIntoPackageJson, mergeFeaturesIntoPackageJson, mergePluginManifestIntoPackageJson, finalizeWizardOptions, applyWizardOptionsToConfig, clonePluginConfigurationMap, materializeDatabaseConfig, buildRuntimeConfigDocument, serializeRuntimeConfig, } from './apply.js';
|
|
14
|
+
export { TYPESAFE_DECISION_PACKAGE, configureTypeSafeDecisions, applyTypeSafeDecisionsToConfig, saveTypeSafeSetupDependencies, diagnoseDecisionConfig, } from './decisions.js';
|
|
14
15
|
//# sourceMappingURL=index.js.map
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,wBAAwB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AACzE,OAAO,EACL,4BAA4B,EAC5B,mBAAmB,EACnB,4BAA4B,EAC5B,sBAAsB,GACvB,MAAM,2BAA2B,CAAC;AASnC,OAAO,EACL,QAAQ,EACR,oBAAoB,EACpB,iBAAiB,EACjB,6BAA6B,EAC7B,sBAAsB,EACtB,2BAA2B,EAC3B,4BAA4B,EAC5B,sBAAsB,EACtB,oBAAoB,GACrB,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,uBAAuB,EACvB,cAAc,GACf,MAAM,0BAA0B,CAAC;AAGlC,OAAO,EACL,WAAW,EACX,iBAAiB,EACjB,oBAAoB,EACpB,oBAAoB,EACpB,uBAAuB,GACxB,MAAM,SAAS,CAAC;AAEjB,OAAO,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAC;AAEzD,OAAO,EACL,cAAc,EACd,YAAY,EACZ,0BAA0B,EAC1B,uBAAuB,GACxB,MAAM,UAAU,CAAC;AAElB,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,iBAAiB,EACjB,qBAAqB,EACrB,sBAAsB,EACtB,mBAAmB,EACnB,8BAA8B,EAC9B,kCAAkC,EAClC,sBAAsB,EACtB,4BAA4B,EAC5B,yBAAyB,EACzB,gCAAgC,EAChC,qCAAqC,EACrC,mBAAmB,EACnB,yBAAyB,GAC1B,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EACL,mBAAmB,EACnB,4BAA4B,EAC5B,0BAA0B,EAC1B,4BAA4B,EAC5B,+BAA+B,EAC/B,oCAAoC,EACpC,6BAA6B,EAC7B,yBAAyB,EACzB,2BAA2B,EAC3B,kCAAkC,EAClC,uCAAuC,GACxC,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EACL,cAAc,EACd,qBAAqB,EACrB,0BAA0B,EAC1B,qBAAqB,EACrB,4BAA4B,EAC5B,2BAA2B,GAC5B,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EACL,mBAAmB,EACnB,0BAA0B,GAC3B,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EACL,iBAAiB,EACjB,uBAAuB,EACvB,wBAAwB,EACxB,sBAAsB,EACtB,qBAAqB,EACrB,qBAAqB,EACrB,uBAAuB,EACvB,oBAAoB,GACrB,MAAM,0BAA0B,CAAC;AASlC,OAAO,EACL,qBAAqB,EACrB,qBAAqB,EACrB,eAAe,EACf,mBAAmB,EACnB,yBAAyB,EACzB,qBAAqB,EACrB,gCAAgC,EAChC,4BAA4B,EAC5B,kCAAkC,EAClC,qBAAqB,EACrB,0BAA0B,EAC1B,2BAA2B,EAC3B,yBAAyB,EACzB,0BAA0B,EAC1B,sBAAsB,GACvB,MAAM,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,wBAAwB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AACzE,OAAO,EACL,4BAA4B,EAC5B,mBAAmB,EACnB,4BAA4B,EAC5B,sBAAsB,GACvB,MAAM,2BAA2B,CAAC;AASnC,OAAO,EACL,QAAQ,EACR,oBAAoB,EACpB,iBAAiB,EACjB,6BAA6B,EAC7B,sBAAsB,EACtB,2BAA2B,EAC3B,4BAA4B,EAC5B,sBAAsB,EACtB,oBAAoB,GACrB,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,uBAAuB,EACvB,cAAc,GACf,MAAM,0BAA0B,CAAC;AAGlC,OAAO,EACL,WAAW,EACX,iBAAiB,EACjB,oBAAoB,EACpB,oBAAoB,EACpB,uBAAuB,GACxB,MAAM,SAAS,CAAC;AAEjB,OAAO,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAC;AAEzD,OAAO,EACL,cAAc,EACd,YAAY,EACZ,0BAA0B,EAC1B,uBAAuB,GACxB,MAAM,UAAU,CAAC;AAElB,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,iBAAiB,EACjB,qBAAqB,EACrB,sBAAsB,EACtB,mBAAmB,EACnB,8BAA8B,EAC9B,kCAAkC,EAClC,sBAAsB,EACtB,4BAA4B,EAC5B,yBAAyB,EACzB,gCAAgC,EAChC,qCAAqC,EACrC,mBAAmB,EACnB,yBAAyB,GAC1B,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EACL,mBAAmB,EACnB,4BAA4B,EAC5B,0BAA0B,EAC1B,4BAA4B,EAC5B,+BAA+B,EAC/B,oCAAoC,EACpC,6BAA6B,EAC7B,yBAAyB,EACzB,2BAA2B,EAC3B,kCAAkC,EAClC,uCAAuC,GACxC,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EACL,cAAc,EACd,qBAAqB,EACrB,0BAA0B,EAC1B,qBAAqB,EACrB,4BAA4B,EAC5B,2BAA2B,GAC5B,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EACL,mBAAmB,EACnB,0BAA0B,GAC3B,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EACL,iBAAiB,EACjB,uBAAuB,EACvB,wBAAwB,EACxB,sBAAsB,EACtB,qBAAqB,EACrB,qBAAqB,EACrB,uBAAuB,EACvB,oBAAoB,GACrB,MAAM,0BAA0B,CAAC;AASlC,OAAO,EACL,qBAAqB,EACrB,qBAAqB,EACrB,eAAe,EACf,mBAAmB,EACnB,yBAAyB,EACzB,qBAAqB,EACrB,gCAAgC,EAChC,4BAA4B,EAC5B,kCAAkC,EAClC,qBAAqB,EACrB,0BAA0B,EAC1B,2BAA2B,EAC3B,yBAAyB,EACzB,0BAA0B,EAC1B,sBAAsB,GACvB,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,yBAAyB,EAAE,0BAA0B,EAAE,8BAA8B,EACrF,6BAA6B,EAAE,sBAAsB,GACtD,MAAM,gBAAgB,CAAC"}
|
package/lib/zhin-stack-deps.d.ts
CHANGED
|
@@ -23,7 +23,7 @@ export declare const ZHIN_STACK_VERSIONS: {
|
|
|
23
23
|
readonly '@zhin.js/tool': "latest";
|
|
24
24
|
readonly '@zhin.js/client': "latest";
|
|
25
25
|
readonly '@zhin.js/contract': "latest";
|
|
26
|
-
readonly '@zhin.js/
|
|
26
|
+
readonly '@zhin.js/components': "latest";
|
|
27
27
|
readonly '@zhin.js/speech': "latest";
|
|
28
28
|
readonly '@zhin.js/html-renderer': "latest";
|
|
29
29
|
readonly '@zhin.js/mcp': "latest";
|
package/lib/zhin-stack-deps.js
CHANGED
|
@@ -27,7 +27,7 @@ export const ZHIN_STACK_VERSIONS = {
|
|
|
27
27
|
'@zhin.js/tool': 'latest',
|
|
28
28
|
'@zhin.js/client': 'latest',
|
|
29
29
|
'@zhin.js/contract': 'latest',
|
|
30
|
-
'@zhin.js/
|
|
30
|
+
'@zhin.js/components': 'latest',
|
|
31
31
|
'@zhin.js/speech': 'latest',
|
|
32
32
|
'@zhin.js/html-renderer': 'latest',
|
|
33
33
|
'@zhin.js/mcp': 'latest',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"zhin-stack-deps.js","sourceRoot":"","sources":["../src/zhin-stack-deps.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,wBAAwB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AACzE,OAAO,EAAE,8BAA8B,EAAE,6BAA6B,EAAE,mBAAmB,EAAwB,MAAM,mBAAmB,CAAC;AAE7I;;;;GAIG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,SAAS,EAAE,QAAQ;IACnB,cAAc,EAAE,QAAQ;IACxB,gBAAgB,EAAE,QAAQ;IAC1B,mBAAmB,EAAE,QAAQ;IAC7B,yBAAyB,EAAE,QAAQ;IACnC,kBAAkB,EAAE,QAAQ;IAC5B,kBAAkB,EAAE,QAAQ;IAC5B,kBAAkB,EAAE,QAAQ;IAC5B,oBAAoB,EAAE,QAAQ;IAC9B,2BAA2B,EAAE,QAAQ;IACrC,eAAe,EAAE,QAAQ;IACzB,iBAAiB,EAAE,QAAQ;IAC3B,eAAe,EAAE,QAAQ;IACzB,yBAAyB,EAAE,QAAQ;IACnC,gBAAgB,EAAE,QAAQ;IAC1B,eAAe,EAAE,QAAQ;IACzB,iBAAiB,EAAE,QAAQ;IAC3B,mBAAmB,EAAE,QAAQ;IAC7B,
|
|
1
|
+
{"version":3,"file":"zhin-stack-deps.js","sourceRoot":"","sources":["../src/zhin-stack-deps.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,wBAAwB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AACzE,OAAO,EAAE,8BAA8B,EAAE,6BAA6B,EAAE,mBAAmB,EAAwB,MAAM,mBAAmB,CAAC;AAE7I;;;;GAIG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,SAAS,EAAE,QAAQ;IACnB,cAAc,EAAE,QAAQ;IACxB,gBAAgB,EAAE,QAAQ;IAC1B,mBAAmB,EAAE,QAAQ;IAC7B,yBAAyB,EAAE,QAAQ;IACnC,kBAAkB,EAAE,QAAQ;IAC5B,kBAAkB,EAAE,QAAQ;IAC5B,kBAAkB,EAAE,QAAQ;IAC5B,oBAAoB,EAAE,QAAQ;IAC9B,2BAA2B,EAAE,QAAQ;IACrC,eAAe,EAAE,QAAQ;IACzB,iBAAiB,EAAE,QAAQ;IAC3B,eAAe,EAAE,QAAQ;IACzB,yBAAyB,EAAE,QAAQ;IACnC,gBAAgB,EAAE,QAAQ;IAC1B,eAAe,EAAE,QAAQ;IACzB,iBAAiB,EAAE,QAAQ;IAC3B,mBAAmB,EAAE,QAAQ;IAC7B,qBAAqB,EAAE,QAAQ;IAC/B,iBAAiB,EAAE,QAAQ;IAC3B,wBAAwB,EAAE,QAAQ;IAClC,cAAc,EAAE,QAAQ;IACxB,0BAA0B,EAAE,QAAQ;IACpC,2BAA2B,EAAE,QAAQ;IACrC,0BAA0B,EAAE,QAAQ;IACpC,wBAAwB,EAAE,QAAQ;IAClC,yBAAyB,EAAE,QAAQ;IACnC,uBAAuB,EAAE,QAAQ;IACjC,uBAAuB,EAAE,QAAQ;IACjC,uBAAuB,EAAE,QAAQ;IACjC,uBAAuB,EAAE,QAAQ;IACjC,wBAAwB,EAAE,QAAQ;IAClC,yBAAyB,EAAE,QAAQ;IACnC,2BAA2B,EAAE,QAAQ;IACrC,2BAA2B,EAAE,QAAQ;IACrC,qBAAqB,EAAE,QAAQ;IAC/B,yBAAyB,EAAE,QAAQ;IACnC,wBAAwB,EAAE,QAAQ;IAClC,2BAA2B,EAAE,QAAQ;IACrC,4BAA4B,EAAE,QAAQ;IACtC,wBAAwB,EAAE,QAAQ;IAClC,+BAA+B,EAAE,QAAQ;CACjC,CAAC;AAIX,SAAS,UAAU,CAAC,WAA+B;IACjD,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE;QAAE,OAAO,SAAS,CAAC;IAC3C,IAAI,WAAW,KAAK,aAAa;QAAE,OAAO,SAAS,CAAC;IACpD,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC3E,OAAO,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAC9C,CAAC;AAED,SAAS,eAAe,CAAC,WAA+B;IACtD,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE;QAAE,OAAO,SAAS,CAAC;IAC3C,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;IAClF,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAClE,CAAC;AAED,SAAS,yBAAyB,CAAC,GAAoB,EAAE,IAAY;IACnE,OAAO,GAAG,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,eAAe,EAAE,CAAC,IAAI,CAAC,CAAC;AACjE,CAAC;AAED,SAAS,kBAAkB,CAAC,GAAW,EAAE,WAAmB;IAC1D,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;IAC/C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC;QAAE,OAAO,SAAS,CAAC;IAC9C,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;QACnC,MAAM,SAAS,GAAG,GAAG,CAAC,GAAG,WAAW,eAAe,CAAyB,CAAC;QAC7E,OAAO,UAAU,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IACvC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,SAAS,oBAAoB,CAAC,GAAW,EAAE,WAAmB;IAC5D,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;IAC/C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC;QAAE,OAAO,SAAS,CAAC;IAC9C,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;QACnC,MAAM,SAAS,GAAG,GAAG,CAAC,GAAG,WAAW,eAAe,CAAyB,CAAC;QAC7E,OAAO,SAAS,CAAC,OAAO,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,SAAS,mBAAmB,CAAC,GAAW,EAAE,GAAoB,EAAE,WAAmB;IACjF,OAAO,kBAAkB,CAAC,GAAG,EAAE,WAAW,CAAC,IAAI,UAAU,CAAC,yBAAyB,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC,CAAC;AACzG,CAAC;AAED,SAAS,2BAA2B,CAAC,WAA+B;IAClE,MAAM,OAAO,GAAG,eAAe,CAAC,WAAW,CAAC,CAAC;IAC7C,IAAI,CAAC,OAAO;QAAE,OAAO,SAAS,CAAC;IAC/B,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,OAAO,CAAC;IAC/B,OAAO,KAAK,IAAI,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC;AACnD,CAAC;AAED,SAAS,mBAAmB,CAAC,WAAmB;IAC9C,OAAO,mBAAmB,CAAC,WAA+B,CAAC,IAAI,QAAQ,CAAC;AAC1E,CAAC;AAED,4DAA4D;AAC5D,MAAM,CAAC,MAAM,4BAA4B,GAAG,IAAI,CAAC;AAEjD,qCAAqC;AACrC,MAAM,CAAC,MAAM,0BAA0B,GAAG,cAAc,CAAC;AAEzD,gDAAgD;AAChD,MAAM,UAAU,+BAA+B;IAC7C,OAAO;QACL,QAAQ,EAAE,CAAC,GAAG,EAAE,WAAW,EAAE,YAAY,CAAC;QAC1C,sBAAsB,EAAE,KAAK;QAC7B,WAAW,EAAE;YACX,OAAO,EAAE,IAAI;SACd;KACF,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,4BAA4B;IAC1C,OAAO;QACL,SAAS,EAAE,mBAAmB,CAAC,SAAS,CAAC;QACzC,gBAAgB,EAAE,mBAAmB,CAAC,gBAAgB,CAAC;KACxD,CAAC;AACJ,CAAC;AAED,oDAAoD;AACpD,MAAM,UAAU,oCAAoC,CAAC,MAA+B;IAClF,MAAM,IAAI,GAA2B;QACnC,SAAS,EAAE,mBAAmB,CAAC,SAAS,CAAC;KAC1C,CAAC;IAEF,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;IACjC,IAAI,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QACzE,IAAI,CAAC,mBAAmB,CAAC,GAAG,mBAAmB,CAAC,mBAAmB,CAAC,CAAC;QACrE,MAAM,OAAO,GAAG,MAAM,CAAE,QAAoC,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;QAC5E,MAAM,MAAM,GAAG,iBAAiB,CAAC,OAAyC,CAAC,CAAC;QAC5E,IAAI,MAAM,EAAE,CAAC;YACX,IAAI,CAAC,MAAM,CAAC,GAAG,wBAAwB,CAAC,MAAM,CAAC,CAAC;QAClD,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAOD,MAAM,UAAU,kCAAkC,CAChD,GAAoB,EACpB,QAAgC;IAEhC,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QACvD,MAAM,QAAQ,GAAG,yBAAyB,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QACtD,IAAI,CAAC,QAAQ,IAAI,QAAQ,KAAK,aAAa;YAAE,SAAS;QACtD,MAAM,aAAa,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;QAC3C,MAAM,QAAQ,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;QACrC,IAAI,aAAa,IAAI,IAAI,IAAI,QAAQ,IAAI,IAAI,IAAI,aAAa,GAAG,QAAQ,EAAE,CAAC;YAC1E,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtB,CAAC;IACH,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,uCAAuC,CACrD,GAAW,EACX,GAAoB,EACpB,MAA+B;IAE/B,MAAM,MAAM,GAA+B,EAAE,CAAC;IAC9C,MAAM,WAAW,GAAG,oBAAoB,CAAC,GAAG,EAAE,SAAS,CAAC,IAAI,yBAAyB,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;IACtG,MAAM,aAAa,GAAG,yBAAyB,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC;IACvE,MAAM,SAAS,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAE9C,IAAI,2BAA2B,CAAC,WAAW,CAAC,KAAK,KAAK,IAAI,CAAC,SAAS,IAAI,aAAa,CAAC,EAAE,CAAC;QACvF,MAAM,CAAC,IAAI,CAAC;YACV,OAAO,EAAE,SAAS;YAClB,MAAM,EAAE,6DAA6D;SACtE,CAAC,CAAC;IACL,CAAC;IAED,IAAI,SAAS,IAAI,CAAC,aAAa,EAAE,CAAC;QAChC,iDAAiD;IACnD,CAAC;IAED,MAAM,UAAU,GAAG,mBAAmB,CAAC,GAAG,EAAE,GAAG,EAAE,gBAAgB,CAAC,CAAC;IACnE,IAAI,UAAU,IAAI,IAAI,IAAI,UAAU,GAAG,CAAC,IAAI,SAAS,EAAE,CAAC;QACtD,MAAM,CAAC,IAAI,CAAC;YACV,OAAO,EAAE,gBAAgB;YACzB,MAAM,EAAE,yEAAyE;SAClF,CAAC,CAAC;IACL,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAUD,MAAM,UAAU,2BAA2B,CAAC,SAA6B;IACvE,MAAM,KAAK,GAAG,IAAI,GAAG,CAAS;QAC5B,GAAG,SAAS,CAAC,sBAAsB;QACnC,GAAG,SAAS,CAAC,qBAAqB;KACnC,CAAC,CAAC;IACH,KAAK,MAAM,KAAK,IAAI,SAAS,CAAC,qBAAqB,EAAE,CAAC;QACpD,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC3B,CAAC;IACD,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC;AACpB,CAAC;AAED,MAAM,UAAU,6BAA6B,CAC3C,GAAW,EACX,MAA+B,EAC/B,GAAqB;IAErB,MAAM,QAAQ,GAAG,oCAAoC,CAAC,MAAM,CAAC,CAAC;IAC9D,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;IACvD,MAAM,WAAW,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC;QACxD,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,eAAe,CAAoB;QACrD,CAAC,CAAC,EAAE,CAAC,CAAC;IACR,MAAM,sBAAsB,GAAG,8BAA8B,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;IACrF,MAAM,qBAAqB,GAAG,kCAAkC,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;IACxF,MAAM,qBAAqB,GAAG,uCAAuC,CAAC,GAAG,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;IAChG,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,sBAAsB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;IAChG,MAAM,YAAY,GAAG,6BAA6B,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IAClE,OAAO;QACL,QAAQ;QACR,sBAAsB;QACtB,qBAAqB;QACrB,qBAAqB;QACrB,YAAY;KACb,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,QAAkB,EAAE,QAAgC;IAC5F,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,cAAc,CAAC;IACjD,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,IAAI,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,QAAQ,EAAE,CAAC,CAAC;IAC9E,OAAO,YAAY,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;AACvC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zhin.js/scaffold-wizard",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.4",
|
|
4
4
|
"description": "Shared interactive scaffold wizard for create-zhin-app and @zhin.js/cli",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./lib/index.js",
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
"inquirer": "^14.0.2",
|
|
23
23
|
"qrcode": "^1.5.4",
|
|
24
24
|
"yaml": "^2.9.0",
|
|
25
|
-
"@zhin.js/plugin-runtime": "1.1.
|
|
25
|
+
"@zhin.js/plugin-runtime": "1.1.13"
|
|
26
26
|
},
|
|
27
27
|
"devDependencies": {
|
|
28
28
|
"@types/fs-extra": "^11.0.4",
|
package/src/decisions.ts
ADDED
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
import inquirer from 'inquirer';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
import fs from 'fs-extra';
|
|
4
|
+
import path from 'node:path';
|
|
5
|
+
import { formatEnvValue, mergeEnvText } from './env.js';
|
|
6
|
+
import { clonePluginConfigurationMap, mergeDependenciesIntoPackageJson, mergePluginManifestIntoPackageJson } from './apply.js';
|
|
7
|
+
import { isAiEnabledInConfig } from './project-deps.js';
|
|
8
|
+
|
|
9
|
+
export const TYPESAFE_DECISION_PACKAGE = '@zhin.js/service-typesafe';
|
|
10
|
+
export interface TypeSafeSetupConfig {
|
|
11
|
+
readonly instanceKey: string;
|
|
12
|
+
readonly apiKey: string;
|
|
13
|
+
readonly model: string;
|
|
14
|
+
readonly mode: 'shadow' | 'active';
|
|
15
|
+
readonly envVar?: string;
|
|
16
|
+
}
|
|
17
|
+
function hasChatAgent(config: Readonly<Record<string, unknown>>): boolean {
|
|
18
|
+
if (!isAiEnabledInConfig(config)) return false;
|
|
19
|
+
const binding = record(record(record(config.ai).agents).zhin);
|
|
20
|
+
return typeof binding.provider === 'string' && !!binding.provider.trim()
|
|
21
|
+
&& typeof binding.model === 'string' && !!binding.model.trim();
|
|
22
|
+
}
|
|
23
|
+
function record(value: unknown): Record<string, unknown> {
|
|
24
|
+
return value && typeof value === 'object' && !Array.isArray(value) ? value as Record<string, unknown> : {};
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/** An explicitly requested optional integration. Existing AI configuration is preserved. */
|
|
28
|
+
export async function configureTypeSafeDecisions(config: Readonly<Record<string, unknown>>): Promise<TypeSafeSetupConfig> {
|
|
29
|
+
if (!hasChatAgent(config)) throw new Error('先运行 zhin setup --ai 配置聊天模型,再运行 zhin setup --decisions。Jev 决策模型不能替代聊天模型。');
|
|
30
|
+
console.log(chalk.blue('\nTypeSafe Jev:选择 Agent / Skill / Tool 的可选决策服务。'));
|
|
31
|
+
console.log(chalk.gray('shadow 仅记录建议,不改变已有行为;active 启用推荐。审核默认关闭。调用会向外部服务发送经过权限过滤的请求与候选描述。'));
|
|
32
|
+
const answers = await inquirer.prompt([
|
|
33
|
+
{ type: 'input', name: 'instanceKey', message: '决策插件实例名', default: 'typesafe', validate: (value: string) => /^[a-z][a-z0-9-]*$/.test(value) || '使用小写字母、数字和连字符,字母开头' },
|
|
34
|
+
{ type: 'password', name: 'apiKey', message: 'TypeSafe API Key(仅写入 .env)', mask: '*', validate: (value: string) => value.trim().length > 0 || '请输入 API Key' },
|
|
35
|
+
{ type: 'input', name: 'model', message: 'Jev 模型(生产校准后建议固定版本)', default: 'jev-latest', validate: (value: string) => value.trim().length > 0 || '请输入模型名称' },
|
|
36
|
+
{ type: 'select', name: 'mode', message: 'Skill / Tool 推荐运行方式', default: 'shadow', choices: [ { name: 'shadow:观察建议,评估后再启用', value: 'shadow' }, { name: 'active:启用推荐,权限仍由 Zhin 校验', value: 'active' } ] },
|
|
37
|
+
]);
|
|
38
|
+
const reference = record(record(config.plugins)[answers.instanceKey]).apiKey;
|
|
39
|
+
const existingVariable = typeof reference === 'string' ? /^\$\{([A-Za-z_][A-Za-z0-9_]*)\}$/.exec(reference)?.[1] : undefined;
|
|
40
|
+
return { ...answers, envVar: existingVariable ?? decisionKeyVariable(answers.instanceKey) };
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
function decisionKeyVariable(instanceKey: string): string {
|
|
44
|
+
return instanceKey === 'typesafe' ? 'TYPESAFE_API_KEY' : `TYPESAFE_${instanceKey.toUpperCase().replace(/-/g, '_')}_API_KEY`;
|
|
45
|
+
}
|
|
46
|
+
function envVariable(setup: TypeSafeSetupConfig): string {
|
|
47
|
+
const name = setup.envVar ?? decisionKeyVariable(setup.instanceKey);
|
|
48
|
+
if (!/^[A-Za-z_][A-Za-z0-9_]*$/.test(name)) throw new Error('Invalid TypeSafe environment variable name.');
|
|
49
|
+
return name;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/** Plan data separately from writes so secrets cannot enter the configuration document. */
|
|
53
|
+
export function applyTypeSafeDecisionsToConfig(config: Record<string, unknown>, setup: TypeSafeSetupConfig): void {
|
|
54
|
+
if (!hasChatAgent(config)) throw new Error('TypeSafe decisions require existing AI configuration; run zhin setup --ai first.');
|
|
55
|
+
if (!/^[a-z][a-z0-9-]*$/.test(setup.instanceKey) || !setup.model.trim() || !setup.apiKey.trim()) throw new Error('Invalid TypeSafe setup configuration.');
|
|
56
|
+
const plugins = clonePluginConfigurationMap(config);
|
|
57
|
+
const existing = record(plugins[setup.instanceKey]);
|
|
58
|
+
plugins[setup.instanceKey] = { ...existing, apiKey: '${' + envVariable(setup) + '}', model: setup.model.trim(), timeoutMs: 10000, maxRetries: 2, enabled: true };
|
|
59
|
+
config.plugins = plugins;
|
|
60
|
+
const ai = record(config.ai);
|
|
61
|
+
const previousDecisions = record(ai.decisions);
|
|
62
|
+
config.ai = { ...ai, decisions: {
|
|
63
|
+
...previousDecisions,
|
|
64
|
+
provider: `root/${setup.instanceKey}`,
|
|
65
|
+
skills: { ...record(previousDecisions.skills), mode: setup.mode },
|
|
66
|
+
tools: { ...record(previousDecisions.tools), mode: setup.mode },
|
|
67
|
+
agents: previousDecisions.agents ?? { mode: 'off' },
|
|
68
|
+
memory: previousDecisions.memory ?? { mode: 'off' },
|
|
69
|
+
approval: previousDecisions.approval ?? { mode: 'off' },
|
|
70
|
+
} };
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
export async function saveTypeSafeSetupDependencies(projectDir: string, setup: TypeSafeSetupConfig): Promise<void> {
|
|
74
|
+
const variable = envVariable(setup);
|
|
75
|
+
const pkgPath = path.join(projectDir, 'package.json');
|
|
76
|
+
const pkg = await fs.readJson(pkgPath);
|
|
77
|
+
const existingManifest = record(pkg.zhin).plugins;
|
|
78
|
+
if (Array.isArray(existingManifest) && existingManifest.some(entry => record(entry).instanceKey === setup.instanceKey && record(entry).package !== TYPESAFE_DECISION_PACKAGE)) {
|
|
79
|
+
throw new Error('Decision plugin instance already belongs to another package; choose a different instanceKey.');
|
|
80
|
+
}
|
|
81
|
+
await mergePluginManifestIntoPackageJson(projectDir, [{ package: TYPESAFE_DECISION_PACKAGE, instanceKey: setup.instanceKey }]);
|
|
82
|
+
await mergeDependenciesIntoPackageJson(projectDir, { [TYPESAFE_DECISION_PACKAGE]: '^1.0.0' });
|
|
83
|
+
const envPath = path.join(projectDir, '.env');
|
|
84
|
+
const envExists = await fs.pathExists(envPath);
|
|
85
|
+
const previous = envExists ? await fs.readFile(envPath, 'utf8') : '';
|
|
86
|
+
// writeFile's mode applies only when creating a file. Restrict existing files
|
|
87
|
+
// before adding credentials; Windows access control is not POSIX file modes.
|
|
88
|
+
if (envExists && process.platform !== 'win32') await fs.chmod(envPath, 0o600);
|
|
89
|
+
await fs.writeFile(envPath, mergeEnvText(previous, `${variable}=${formatEnvValue(setup.apiKey)}\n`), { mode: 0o600 });
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/** Local checks only; never sends a paid API request or returns credential values. */
|
|
93
|
+
export function diagnoseDecisionConfig(config: Readonly<Record<string, unknown>>, packageJson: unknown): string[] {
|
|
94
|
+
const ai = record(config.ai);
|
|
95
|
+
if (!Object.hasOwn(ai, 'decisions')) return [];
|
|
96
|
+
const decisions = record(ai.decisions);
|
|
97
|
+
const issues: string[] = [];
|
|
98
|
+
const taskNames = ['skills', 'tools', 'memory', 'agents', 'approval'];
|
|
99
|
+
if (Object.keys(decisions).some(key => !['provider', ...taskNames].includes(key))) issues.push('ai.decisions 含有未知配置字段。');
|
|
100
|
+
const provider = decisions.provider;
|
|
101
|
+
if (typeof provider !== 'string' || !/^root(?:\/[a-z0-9][a-z0-9-]*)+$/.test(provider)) return [...issues, 'ai.decisions.provider 必须是精确插件 owner,例如 root/typesafe。'];
|
|
102
|
+
for (const name of taskNames) {
|
|
103
|
+
if (!Object.hasOwn(decisions, name)) continue;
|
|
104
|
+
const task = record(decisions[name]);
|
|
105
|
+
if (Object.keys(task).some(key => !['mode', 'timeoutMs', 'minConfidence', 'topK', 'maxCandidates', 'maxSelections'].includes(key))) issues.push(`ai.decisions.${name} 含有未知配置字段。`);
|
|
106
|
+
if (typeof task.mode !== 'string' || !['off', 'shadow', 'active'].includes(task.mode)) issues.push(`ai.decisions.${name}.mode 必须是 off、shadow 或 active。`);
|
|
107
|
+
for (const field of ['timeoutMs', 'topK', 'maxCandidates', 'maxSelections']) {
|
|
108
|
+
if (task[field] !== undefined && (!Number.isSafeInteger(task[field]) || Number(task[field]) <= 0 || field === 'timeoutMs' && Number(task[field]) > 2147483647)) issues.push(`ai.decisions.${name}.${field} 必须是正整数。`);
|
|
109
|
+
}
|
|
110
|
+
if (task.minConfidence !== undefined && (typeof task.minConfidence !== 'number' || !Number.isFinite(task.minConfidence) || task.minConfidence < 0 || task.minConfidence > 1)) issues.push(`ai.decisions.${name}.minConfidence 必须在 0 到 1 之间。`);
|
|
111
|
+
}
|
|
112
|
+
if (!hasChatAgent(config)) issues.push('决策服务需要已启用的 AI Agent;运行 zhin setup --ai。');
|
|
113
|
+
const enabled = taskNames.some(name => ['shadow', 'active'].includes(String(record(decisions[name]).mode)));
|
|
114
|
+
if (!enabled) return issues;
|
|
115
|
+
const key = provider.slice('root/'.length);
|
|
116
|
+
// Nested Plugin owners are resolved from the actual runtime graph during activation.
|
|
117
|
+
if (key.includes('/')) return issues;
|
|
118
|
+
const pkg = record(packageJson);
|
|
119
|
+
const manifest = record(pkg.zhin).plugins;
|
|
120
|
+
const entries = Array.isArray(manifest) ? manifest.filter(entry => record(entry).instanceKey === key) : [];
|
|
121
|
+
if (entries.length !== 1) {
|
|
122
|
+
issues.push('决策插件实例未在 package.json#zhin.plugins 唯一声明。');
|
|
123
|
+
return issues;
|
|
124
|
+
}
|
|
125
|
+
if (record(entries[0]).package === TYPESAFE_DECISION_PACKAGE) {
|
|
126
|
+
const configForProvider = record(record(config.plugins)[key]);
|
|
127
|
+
if (configForProvider.enabled === false) issues.push('绑定的 TypeSafe 插件已禁用。');
|
|
128
|
+
if (typeof configForProvider.apiKey !== 'string' || !configForProvider.apiKey.trim()) issues.push('TypeSafe 插件缺少 apiKey 环境变量引用。');
|
|
129
|
+
if (!Object.hasOwn({ ...record(pkg.dependencies), ...record(pkg.devDependencies) }, TYPESAFE_DECISION_PACKAGE)) issues.push('package.json 缺少 @zhin.js/service-typesafe 依赖。');
|
|
130
|
+
}
|
|
131
|
+
return issues;
|
|
132
|
+
}
|
package/src/index.ts
CHANGED
|
@@ -136,3 +136,9 @@ export {
|
|
|
136
136
|
buildRuntimeConfigDocument,
|
|
137
137
|
serializeRuntimeConfig,
|
|
138
138
|
} from './apply.js';
|
|
139
|
+
|
|
140
|
+
export {
|
|
141
|
+
TYPESAFE_DECISION_PACKAGE, configureTypeSafeDecisions, applyTypeSafeDecisionsToConfig,
|
|
142
|
+
saveTypeSafeSetupDependencies, diagnoseDecisionConfig,
|
|
143
|
+
} from './decisions.js';
|
|
144
|
+
export type { TypeSafeSetupConfig } from './decisions.js';
|
package/src/zhin-stack-deps.ts
CHANGED
|
@@ -28,7 +28,7 @@ export const ZHIN_STACK_VERSIONS = {
|
|
|
28
28
|
'@zhin.js/tool': 'latest',
|
|
29
29
|
'@zhin.js/client': 'latest',
|
|
30
30
|
'@zhin.js/contract': 'latest',
|
|
31
|
-
'@zhin.js/
|
|
31
|
+
'@zhin.js/components': 'latest',
|
|
32
32
|
'@zhin.js/speech': 'latest',
|
|
33
33
|
'@zhin.js/html-renderer': 'latest',
|
|
34
34
|
'@zhin.js/mcp': 'latest',
|