openfeel 1.1.4 → 1.1.5
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/README.en.md +12 -0
- package/README.zh-CN.md +11 -0
- package/dist/cli/deploy-check-output.d.ts +35 -0
- package/dist/cli/deploy-check-output.d.ts.map +1 -0
- package/dist/cli/deploy-check-output.js +53 -0
- package/dist/cli/deploy-check-output.js.map +1 -0
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +3 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/repl.d.ts.map +1 -1
- package/dist/cli/repl.js +3 -0
- package/dist/cli/repl.js.map +1 -1
- package/dist/commands/setup.d.ts.map +1 -1
- package/dist/commands/setup.js +32 -0
- package/dist/commands/setup.js.map +1 -1
- package/dist/core/config.js +2 -2
- package/dist/core/deployment-check.d.ts +44 -0
- package/dist/core/deployment-check.d.ts.map +1 -0
- package/dist/core/deployment-check.js +98 -0
- package/dist/core/deployment-check.js.map +1 -0
- package/dist/core/i18n-data/en.d.ts.map +1 -1
- package/dist/core/i18n-data/en.js +8 -0
- package/dist/core/i18n-data/en.js.map +1 -1
- package/dist/core/i18n-data/zh-CN.d.ts.map +1 -1
- package/dist/core/i18n-data/zh-CN.js +8 -0
- package/dist/core/i18n-data/zh-CN.js.map +1 -1
- package/dist/core/setup.d.ts.map +1 -1
- package/dist/core/setup.js +3 -1
- package/dist/core/setup.js.map +1 -1
- package/dist/core/template-loader.d.ts.map +1 -1
- package/dist/core/template-loader.js +20 -5
- package/dist/core/template-loader.js.map +1 -1
- package/dist/core/update.d.ts.map +1 -1
- package/dist/core/update.js +20 -3
- package/dist/core/update.js.map +1 -1
- package/package.json +1 -1
package/README.en.md
CHANGED
|
@@ -29,6 +29,18 @@ npm install -g openfeel@latest # Update to latest
|
|
|
29
29
|
|
|
30
30
|
Requires: Node.js ≥ 20
|
|
31
31
|
|
|
32
|
+
## Upgrading openfeel
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
npm i -g openfeel@latest # 1. Upgrade the CLI
|
|
36
|
+
openfeel setup # 2. Re-run deployment to refresh global AGENTS.md/agents/skills/opencode.jsonc
|
|
37
|
+
# 3. Restart the harness (opencode) to load the new global config
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
> `npm i -g` alone does not refresh global assets — you must re-run `openfeel setup` and restart the harness.
|
|
41
|
+
> The CLI also prints a passive prompt when it detects deployment drift or a missing global deployment.
|
|
42
|
+
> If unsure whether an upgrade is needed, run `openfeel setup --check` to diagnose whether the deployed version matches the CLI version.
|
|
43
|
+
|
|
32
44
|
## Quick Start
|
|
33
45
|
|
|
34
46
|
```bash
|
package/README.zh-CN.md
CHANGED
|
@@ -29,6 +29,17 @@ npm install -g openfeel@latest # 更新到最新版本
|
|
|
29
29
|
|
|
30
30
|
要求:Node.js ≥ 20
|
|
31
31
|
|
|
32
|
+
## 升级 openfeel
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
npm i -g openfeel@latest # 1. 升级 CLI
|
|
36
|
+
openfeel setup # 2. 重跑部署,刷新全局 AGENTS.md/agents/skills/opencode.jsonc
|
|
37
|
+
# 3. 重启 harness(opencode)以加载新的全局配置
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
> 仅 `npm i -g` 不会刷新全局资产,须重跑 `openfeel setup` 并重启 harness。
|
|
41
|
+
> 若不确定是否需要升级,运行 `openfeel setup --check` 诊断全局部署版本与 CLI 版本是否一致。
|
|
42
|
+
|
|
32
43
|
## 快速开始
|
|
33
44
|
|
|
34
45
|
```bash
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* deploy-check-output.ts — 被动部署检测的运行期适配器(stage-67)
|
|
3
|
+
*
|
|
4
|
+
* 职责:组装进程上下文(argv/isTTY/env)→ 门控(shouldRunDeployCheck)→ 只读检测
|
|
5
|
+
* (checkGlobalDeployment)→ 命中 mismatch/missing 时**仅向 stderr** 渲染提示。
|
|
6
|
+
* 约束:异常全捕获**静默**(绝不影响主命令);不改退出码;不写盘;**每进程一次**。
|
|
7
|
+
*
|
|
8
|
+
* 接入点:`cli/index.ts runCli()`(parse 前)与 `cli/repl.ts startRepl()`(welcome 后)。
|
|
9
|
+
* 不得在 `cli/index.ts` 顶层注册 commander 钩子(会污染 test/** 的 parseAsync)。
|
|
10
|
+
*/
|
|
11
|
+
import { checkGlobalDeployment } from '../core/deployment-check.js';
|
|
12
|
+
/** 测试可注入的上下文覆盖(默认取真实进程上下文) */
|
|
13
|
+
export interface DeployCheckOutputOptions {
|
|
14
|
+
/** 进程参数(不含 node/bin),默认 process.argv.slice(2) */
|
|
15
|
+
argv?: string[];
|
|
16
|
+
/** 是否 TTY,默认 Boolean(process.stdout.isTTY) */
|
|
17
|
+
isTTY?: boolean;
|
|
18
|
+
/** 环境变量,默认 process.env */
|
|
19
|
+
env?: NodeJS.ProcessEnv;
|
|
20
|
+
/** 语言覆盖,默认 getCliLang(process.cwd()) */
|
|
21
|
+
lang?: string;
|
|
22
|
+
/** 「已提示」标志覆盖,默认模块级 warned(每进程一次) */
|
|
23
|
+
warned?: {
|
|
24
|
+
value: boolean;
|
|
25
|
+
};
|
|
26
|
+
/** 检测函数注入,默认 checkGlobalDeployment(便于单测不打桩 IO) */
|
|
27
|
+
check?: typeof checkGlobalDeployment;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* 执行被动部署提示(幂等 per process)。
|
|
31
|
+
* 命中 mismatch → `update.globalStaleWarnTmpl`;missing → `update.globalMissingWarnTmpl`;
|
|
32
|
+
* ok/unknown → 静默;异常 → 静默。
|
|
33
|
+
*/
|
|
34
|
+
export declare function emitGlobalDeployCheck(options?: DeployCheckOutputOptions): void;
|
|
35
|
+
//# sourceMappingURL=deploy-check-output.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deploy-check-output.d.ts","sourceRoot":"","sources":["../../src/cli/deploy-check-output.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,qBAAqB,EAAwB,MAAM,6BAA6B,CAAC;AAM1F,8BAA8B;AAC9B,MAAM,WAAW,wBAAwB;IACvC,iDAAiD;IACjD,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,8CAA8C;IAC9C,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,0BAA0B;IAC1B,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,wCAAwC;IACxC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,oCAAoC;IACpC,MAAM,CAAC,EAAE;QAAE,KAAK,EAAE,OAAO,CAAA;KAAE,CAAC;IAC5B,kDAAkD;IAClD,KAAK,CAAC,EAAE,OAAO,qBAAqB,CAAC;CACtC;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,CAAC,EAAE,wBAAwB,GAAG,IAAI,CAgC9E"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* deploy-check-output.ts — 被动部署检测的运行期适配器(stage-67)
|
|
3
|
+
*
|
|
4
|
+
* 职责:组装进程上下文(argv/isTTY/env)→ 门控(shouldRunDeployCheck)→ 只读检测
|
|
5
|
+
* (checkGlobalDeployment)→ 命中 mismatch/missing 时**仅向 stderr** 渲染提示。
|
|
6
|
+
* 约束:异常全捕获**静默**(绝不影响主命令);不改退出码;不写盘;**每进程一次**。
|
|
7
|
+
*
|
|
8
|
+
* 接入点:`cli/index.ts runCli()`(parse 前)与 `cli/repl.ts startRepl()`(welcome 后)。
|
|
9
|
+
* 不得在 `cli/index.ts` 顶层注册 commander 钩子(会污染 test/** 的 parseAsync)。
|
|
10
|
+
*/
|
|
11
|
+
import { checkGlobalDeployment, shouldRunDeployCheck } from '../core/deployment-check.js';
|
|
12
|
+
import { t, getCliLang } from '../core/i18n.js';
|
|
13
|
+
/** 模块级「本进程是否已提示」标志(每进程一次;测试可经 options.warned 注入) */
|
|
14
|
+
const warned = { value: false };
|
|
15
|
+
/**
|
|
16
|
+
* 执行被动部署提示(幂等 per process)。
|
|
17
|
+
* 命中 mismatch → `update.globalStaleWarnTmpl`;missing → `update.globalMissingWarnTmpl`;
|
|
18
|
+
* ok/unknown → 静默;异常 → 静默。
|
|
19
|
+
*/
|
|
20
|
+
export function emitGlobalDeployCheck(options) {
|
|
21
|
+
try {
|
|
22
|
+
const w = options?.warned ?? warned;
|
|
23
|
+
const argv = options?.argv ?? process.argv.slice(2);
|
|
24
|
+
const isTTY = options?.isTTY ?? Boolean(process.stdout.isTTY);
|
|
25
|
+
const env = options?.env ?? process.env;
|
|
26
|
+
// 门控为假 → 直接静默(保护 --json/--quiet/非 TTY/部署类命令)
|
|
27
|
+
if (!shouldRunDeployCheck({ argv, isTTY, env, alreadyWarned: w.value })) {
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
const check = options?.check ?? checkGlobalDeployment;
|
|
31
|
+
const result = check();
|
|
32
|
+
// ok / unknown → 静默(unknown 避免 Schema 演进误报,R-4)
|
|
33
|
+
if (result.status !== 'mismatch' && result.status !== 'missing') {
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
const lang = options?.lang ?? getCliLang(process.cwd());
|
|
37
|
+
if (result.status === 'mismatch') {
|
|
38
|
+
process.stderr.write(t('update.globalStaleWarnTmpl', lang, {
|
|
39
|
+
deployed: result.deployedVersion ?? '?',
|
|
40
|
+
cli: result.cliVersion,
|
|
41
|
+
}) + '\n');
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
process.stderr.write(t('update.globalMissingWarnTmpl', lang) + '\n');
|
|
45
|
+
}
|
|
46
|
+
// 命中提示后置位「每进程一次」
|
|
47
|
+
w.value = true;
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
// 检测/渲染异常 → 静默,绝不影响主命令(R-1)
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=deploy-check-output.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deploy-check-output.js","sourceRoot":"","sources":["../../src/cli/deploy-check-output.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAC1F,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAEhD,oDAAoD;AACpD,MAAM,MAAM,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;AAkBhC;;;;GAIG;AACH,MAAM,UAAU,qBAAqB,CAAC,OAAkC;IACtE,IAAI,CAAC;QACH,MAAM,CAAC,GAAG,OAAO,EAAE,MAAM,IAAI,MAAM,CAAC;QACpC,MAAM,IAAI,GAAG,OAAO,EAAE,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACpD,MAAM,KAAK,GAAG,OAAO,EAAE,KAAK,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC9D,MAAM,GAAG,GAAG,OAAO,EAAE,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC;QACxC,6CAA6C;QAC7C,IAAI,CAAC,oBAAoB,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,aAAa,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC;YACxE,OAAO;QACT,CAAC;QACD,MAAM,KAAK,GAAG,OAAO,EAAE,KAAK,IAAI,qBAAqB,CAAC;QACtD,MAAM,MAAM,GAAG,KAAK,EAAE,CAAC;QACvB,gDAAgD;QAChD,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAChE,OAAO;QACT,CAAC;QACD,MAAM,IAAI,GAAG,OAAO,EAAE,IAAI,IAAI,UAAU,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QACxD,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;YACjC,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,CAAC,CAAC,4BAA4B,EAAE,IAAI,EAAE;gBACpC,QAAQ,EAAE,MAAM,CAAC,eAAe,IAAI,GAAG;gBACvC,GAAG,EAAE,MAAM,CAAC,UAAU;aACvB,CAAC,GAAG,IAAI,CACV,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,8BAA8B,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;QACvE,CAAC;QACD,iBAAiB;QACjB,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC;IACjB,CAAC;IAAC,MAAM,CAAC;QACP,4BAA4B;IAC9B,CAAC;AACH,CAAC"}
|
package/dist/cli/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAapC,QAAA,MAAM,OAAO,SAAgB,CAAC;AAe9B;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAAC,OAAO,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAYrE;AAyCD,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA+EpD;AAED,yCAAyC;AACzC,eAAO,MAAM,eAAe,IAAI,CAAC;AAEjC,qDAAqD;AACrD,wBAAgB,cAAc,CAAC,GAAG,EAAE,OAAO,GAAG,KAAK,CAQlD;AAED,0CAA0C;AAC1C,wBAAgB,MAAM,IAAI,IAAI,CAY7B;AAED,OAAO,EAAE,OAAO,EAAE,CAAC;AACnB,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC"}
|
package/dist/cli/index.js
CHANGED
|
@@ -9,6 +9,7 @@ import { t, getCliLang, hasKey } from '../core/i18n.js';
|
|
|
9
9
|
import { isFlowConcurrentError } from '../core/flow-manager.js';
|
|
10
10
|
import { handleConcurrentConflict } from '../commands/shared/errors.js';
|
|
11
11
|
import { runtimeLog } from '../core/runtime-log.js';
|
|
12
|
+
import { emitGlobalDeployCheck } from './deploy-check-output.js';
|
|
12
13
|
// 读取 package.json 获取版本号
|
|
13
14
|
const require = createRequire(import.meta.url);
|
|
14
15
|
const pkg = require('../../package.json');
|
|
@@ -178,6 +179,8 @@ export function runCli() {
|
|
|
178
179
|
// stage-58 B-6:命令(argv)+ 结果入运行日志;不记录 stdout 内容。
|
|
179
180
|
// 注:--help/--version 由 commander 输出后直接 exit → 不记「cli done」;错误路径经 handleCliError 抛出 → 亦不记「cli done」。
|
|
180
181
|
runtimeLog('info', 'cli start: ' + process.argv.slice(2).join(' '));
|
|
182
|
+
// stage-67:被动部署提示(门控内置于适配器;异常静默,不影响主命令)
|
|
183
|
+
emitGlobalDeployCheck();
|
|
181
184
|
try {
|
|
182
185
|
program.parse();
|
|
183
186
|
}
|
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,wBAAwB,EAAE,MAAM,8BAA8B,CAAC;AACxE,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/repl.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repl.d.ts","sourceRoot":"","sources":["../../src/cli/repl.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"repl.d.ts","sourceRoot":"","sources":["../../src/cli/repl.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAczC;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA2EhD"}
|
package/dist/cli/repl.js
CHANGED
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
*/
|
|
9
9
|
import * as readline from 'node:readline';
|
|
10
10
|
import { t, getCliLang } from '../core/i18n.js';
|
|
11
|
+
import { emitGlobalDeployCheck } from './deploy-check-output.js';
|
|
11
12
|
/** REPL 内拦截 process.exit 抛出的哨兵(表示命令请求退出,但不终止主循环) */
|
|
12
13
|
class ReplExitSignal extends Error {
|
|
13
14
|
code;
|
|
@@ -34,6 +35,8 @@ export function startRepl(program) {
|
|
|
34
35
|
prompt: t('repl.prompt', lang),
|
|
35
36
|
});
|
|
36
37
|
console.log(t('repl.welcome', lang));
|
|
38
|
+
// stage-67:REPL 启动时检测一次(每进程一次;REPL 内命令不重复触发)
|
|
39
|
+
emitGlobalDeployCheck();
|
|
37
40
|
rl.prompt();
|
|
38
41
|
rl.on('line', (line) => {
|
|
39
42
|
const trimmed = line.trim();
|
package/dist/cli/repl.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repl.js","sourceRoot":"","sources":["../../src/cli/repl.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAC;AAE1C,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"repl.js","sourceRoot":"","sources":["../../src/cli/repl.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAC;AAE1C,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAEjE,oDAAoD;AACpD,MAAM,cAAe,SAAQ,KAAK;IACvB,IAAI,CAAqC;IAClD,YAAY,IAAwC;QAClD,KAAK,CAAC,kBAAkB,CAAC,CAAC;QAC1B,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;QAC7B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF;AAED;;;;;;GAMG;AACH,MAAM,UAAU,SAAS,CAAC,OAAgB;IACxC,qEAAqE;IACrE,OAAO,CAAC,YAAY,EAAE,CAAC;IAEvB,MAAM,IAAI,GAAG,UAAU,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IAEvC,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC;QAClC,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,MAAM,EAAE,CAAC,CAAC,aAAa,EAAE,IAAI,CAAC;KAC/B,CAAC,CAAC;IAEH,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC,CAAC;IACrC,6CAA6C;IAC7C,qBAAqB,EAAE,CAAC;IACxB,EAAE,CAAC,MAAM,EAAE,CAAC;IAEZ,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAY,EAAE,EAAE;QAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAE5B,SAAS;QACT,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,EAAE,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO;QACT,CAAC;QAED,OAAO;QACP,IAAI,OAAO,KAAK,MAAM,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;YAC7C,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC;YACjC,EAAE,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,mCAAmC;QACnC,IAAI,OAAO,KAAK,MAAM,IAAI,OAAO,KAAK,GAAG,EAAE,CAAC;YAC1C,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC,CAAC;YACvC,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;gBACnC,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;YACvD,CAAC;YACD,EAAE,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO;QACT,CAAC;QAED,mCAAmC;QACnC,yDAAyD;QACzD,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAClC,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;QAClC,IAAI,CAAC;YACH,sDAAsD;YACtD,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC,IAA6B,EAAE,EAAE;gBAChD,MAAM,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC;YACjC,CAAC,CAAwB,CAAC;YAC1B,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;QAC/C,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,IAAI,GAAG,YAAY,cAAc,EAAE,CAAC;gBAClC,oCAAoC;YACtC,CAAC;iBAAM,IAAI,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,MAAM,IAAI,GAAG,EAAE,CAAC;gBAC3D,MAAM,IAAI,GAAI,GAAyB,CAAC,IAAI,CAAC;gBAC7C,2CAA2C;gBAC3C,IAAI,IAAI,KAAK,yBAAyB,IAAI,IAAI,KAAK,gBAAgB,IAAI,IAAI,KAAK,mBAAmB,EAAE,CAAC;oBACpG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,kBAAkB,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBAClG,CAAC;YACH,CAAC;iBAAM,IAAI,GAAG,YAAY,KAAK,EAAE,CAAC;gBAChC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,kBAAkB,EAAE,IAAI,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC;YAC3D,CAAC;QACH,CAAC;gBAAS,CAAC;YACT,OAAO,CAAC,IAAI,GAAG,YAAY,CAAC;QAC9B,CAAC;QAED,EAAE,CAAC,MAAM,EAAE,CAAC;IACd,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;QAClB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/commands/setup.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/commands/setup.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA4C3D"}
|
package/dist/commands/setup.js
CHANGED
|
@@ -1,12 +1,44 @@
|
|
|
1
1
|
import { setupGlobalFramework } from '../core/setup.js';
|
|
2
|
+
import { checkGlobalDeployment } from '../core/deployment-check.js';
|
|
2
3
|
import { t, getCliLang } from '../core/i18n.js';
|
|
3
4
|
export function registerSetupCommand(program) {
|
|
4
5
|
program
|
|
5
6
|
.command('setup')
|
|
6
7
|
.description('部署全局 OpenFeel 框架配置(全局 AGENTS.md + agent + skill + 平台适配器配置:opencode.jsonc),不建立项目 .openfeel/')
|
|
7
8
|
.option('--lang <lang>', 'Agent 提示词语言(zh-CN 或 en),默认 zh-CN')
|
|
9
|
+
.option('--check', t('help.setup.check', getCliLang(process.cwd())))
|
|
10
|
+
.option('--json', t('help.setup.json', getCliLang(process.cwd())))
|
|
8
11
|
.action((options) => {
|
|
9
12
|
const lang = getCliLang(process.cwd());
|
|
13
|
+
// stage-67:--check 前置只读短路——不执行任何部署、零写盘(D-E / R-3)
|
|
14
|
+
if (options?.check === true) {
|
|
15
|
+
const result = checkGlobalDeployment();
|
|
16
|
+
if (options.json === true) {
|
|
17
|
+
// 纯 JSON 单文档;对齐既有 --json 约定(数值 schemaVersion)
|
|
18
|
+
console.log(JSON.stringify({
|
|
19
|
+
schemaVersion: 1,
|
|
20
|
+
status: result.status,
|
|
21
|
+
cliVersion: result.cliVersion,
|
|
22
|
+
deployedVersion: result.deployedVersion,
|
|
23
|
+
}, null, 2));
|
|
24
|
+
}
|
|
25
|
+
else if (result.status === 'ok') {
|
|
26
|
+
console.log(t('setup.checkOkTmpl', lang, { deployed: result.deployedVersion ?? '?', cli: result.cliVersion }));
|
|
27
|
+
}
|
|
28
|
+
else if (result.status === 'mismatch') {
|
|
29
|
+
console.log(t('setup.checkMismatchTmpl', lang, { deployed: result.deployedVersion ?? '?', cli: result.cliVersion }));
|
|
30
|
+
}
|
|
31
|
+
else if (result.status === 'missing') {
|
|
32
|
+
console.log(t('setup.checkMissingTmpl', lang));
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
// unknown:显式命令下可报告(区别于被动静默)
|
|
36
|
+
console.log(t('setup.checkUnknownTmpl', lang));
|
|
37
|
+
}
|
|
38
|
+
// 一致 → 0;不一致/缺失/不可判定 → 1(门禁可拦截)
|
|
39
|
+
process.exitCode = result.status === 'ok' ? 0 : 1;
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
10
42
|
const deployLang = (options?.lang === 'en' || options?.lang === 'zh-CN') ? options.lang : 'zh-CN';
|
|
11
43
|
const r = setupGlobalFramework(deployLang);
|
|
12
44
|
if (r.created.length) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/commands/setup.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAEhD,MAAM,UAAU,oBAAoB,CAAC,OAAgB;IACnD,OAAO;SACJ,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,4FAA4F,CAAC;SACzG,MAAM,CAAC,eAAe,EAAE,kCAAkC,CAAC;SAC3D,MAAM,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/commands/setup.ts"],"names":[],"mappings":"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"}
|
package/dist/core/config.js
CHANGED
|
@@ -341,7 +341,7 @@ const CONFIG_TEMPLATE_ZH = `# .openfeel/config.yaml
|
|
|
341
341
|
# 本文件为所有阶段提供默认值,status.md 可覆盖
|
|
342
342
|
|
|
343
343
|
meta:
|
|
344
|
-
version: 1.1.
|
|
344
|
+
version: 1.1.5
|
|
345
345
|
project: OpenFeel
|
|
346
346
|
tech_stack: TypeScript
|
|
347
347
|
|
|
@@ -393,7 +393,7 @@ const CONFIG_TEMPLATE_EN = `# .openfeel/config.yaml
|
|
|
393
393
|
# This file provides defaults for all stages; status.md can override
|
|
394
394
|
|
|
395
395
|
meta:
|
|
396
|
-
version: 1.1.
|
|
396
|
+
version: 1.1.5
|
|
397
397
|
project: OpenFeel
|
|
398
398
|
tech_stack: TypeScript
|
|
399
399
|
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/** 全局部署一致性检测结果状态 */
|
|
2
|
+
export type DeployCheckStatus = 'ok' | 'mismatch' | 'missing' | 'unknown';
|
|
3
|
+
/** 全局部署一致性检测结果 */
|
|
4
|
+
export interface DeployCheckResult {
|
|
5
|
+
/** 四态判定 */
|
|
6
|
+
status: DeployCheckStatus;
|
|
7
|
+
/** 当前 CLI 版本(基准) */
|
|
8
|
+
cliVersion: string;
|
|
9
|
+
/** 全局 state 记录的已部署版本;缺失/损坏时为 null */
|
|
10
|
+
deployedVersion: string | null;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* 检测全局部署版本与当前 CLI 版本是否一致(只读、不写盘、不加锁)。
|
|
14
|
+
* - 全局 state 文件缺失 → 'missing'
|
|
15
|
+
* - 文件存在但 Schema 非法/解析失败(load 返回 null)→ 'unknown'(静默)
|
|
16
|
+
* - 版本一致 → 'ok';不一致 → 'mismatch'
|
|
17
|
+
* - 任何读取异常(权限/占用/EISDIR)→ 'unknown'(静默,不抛)
|
|
18
|
+
* @param options.currentVersion 覆盖 CLI 版本基准(测试注入用;缺省取 getOpenfeelVersion())
|
|
19
|
+
*/
|
|
20
|
+
export declare function checkGlobalDeployment(options?: {
|
|
21
|
+
currentVersion?: string;
|
|
22
|
+
}): DeployCheckResult;
|
|
23
|
+
/** 门控纯函数输入(stage-67 由 runCli/startRepl 构造) */
|
|
24
|
+
export interface DeployCheckGateInput {
|
|
25
|
+
/** 进程参数(不含 node/bin) */
|
|
26
|
+
argv: string[];
|
|
27
|
+
/** process.stdout.isTTY */
|
|
28
|
+
isTTY: boolean;
|
|
29
|
+
/** process.env */
|
|
30
|
+
env: NodeJS.ProcessEnv;
|
|
31
|
+
/** 本进程是否已提示过(每进程一次) */
|
|
32
|
+
alreadyWarned: boolean;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* 是否应执行/输出被动部署提示(纯函数,输入全显式,便于单测矩阵)。
|
|
36
|
+
* 返回 false(静默)的条件(任一):
|
|
37
|
+
* - 非 TTY;已提示过;
|
|
38
|
+
* - argv 含 --json / --quiet;
|
|
39
|
+
* - argv 含 --version / -v / --help / -h;
|
|
40
|
+
* - 首个非选项 token ∈ {setup, update, init, migrate};
|
|
41
|
+
* - CI / OPENFEEL_NO_UPDATE_CHECK 为真值。
|
|
42
|
+
*/
|
|
43
|
+
export declare function shouldRunDeployCheck(input: DeployCheckGateInput): boolean;
|
|
44
|
+
//# sourceMappingURL=deployment-check.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deployment-check.d.ts","sourceRoot":"","sources":["../../src/core/deployment-check.ts"],"names":[],"mappings":"AAkBA,oBAAoB;AACpB,MAAM,MAAM,iBAAiB,GAAG,IAAI,GAAG,UAAU,GAAG,SAAS,GAAG,SAAS,CAAC;AAE1E,kBAAkB;AAClB,MAAM,WAAW,iBAAiB;IAChC,WAAW;IACX,MAAM,EAAE,iBAAiB,CAAC;IAC1B,oBAAoB;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,qCAAqC;IACrC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC;AAED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,CAAC,EAAE;IAAE,cAAc,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,iBAAiB,CAsB9F;AAED,8CAA8C;AAC9C,MAAM,WAAW,oBAAoB;IACnC,wBAAwB;IACxB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,2BAA2B;IAC3B,KAAK,EAAE,OAAO,CAAC;IACf,kBAAkB;IAClB,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC;IACvB,uBAAuB;IACvB,aAAa,EAAE,OAAO,CAAC;CACxB;AAYD;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAkBzE"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* deployment-check.ts — 全局部署版本一致性检测核心(stage-66)
|
|
3
|
+
*
|
|
4
|
+
* 职责:只读检测 `~/.openfeel/update_state.json.openfeel_version` 与当前 CLI 版本是否一致,
|
|
5
|
+
* 并提供「是否应输出被动部署提示」的纯函数门控策略。
|
|
6
|
+
* 本模块**不接 CLI**(接入归 stage-67);检测**只读**、不加锁、不写盘。
|
|
7
|
+
*
|
|
8
|
+
* ── 集成契约(stage-67 复用,勿改结构;R-4)──────────────────────────
|
|
9
|
+
* - checkGlobalDeployment({ currentVersion? }) => DeployCheckResult
|
|
10
|
+
* 四态:ok | mismatch | missing | unknown(unknown 静默)
|
|
11
|
+
* - shouldRunDeployCheck({ argv, isTTY, env, alreadyWarned }) => boolean
|
|
12
|
+
* true = 允许输出被动提示;false = 静默
|
|
13
|
+
* ────────────────────────────────────────────────────────────────
|
|
14
|
+
*/
|
|
15
|
+
import { existsSync } from 'node:fs';
|
|
16
|
+
import { getGlobalUpdateStatePath } from './global-paths.js';
|
|
17
|
+
import { loadGlobalUpdateState, getOpenfeelVersion } from './update-state.js';
|
|
18
|
+
/**
|
|
19
|
+
* 检测全局部署版本与当前 CLI 版本是否一致(只读、不写盘、不加锁)。
|
|
20
|
+
* - 全局 state 文件缺失 → 'missing'
|
|
21
|
+
* - 文件存在但 Schema 非法/解析失败(load 返回 null)→ 'unknown'(静默)
|
|
22
|
+
* - 版本一致 → 'ok';不一致 → 'mismatch'
|
|
23
|
+
* - 任何读取异常(权限/占用/EISDIR)→ 'unknown'(静默,不抛)
|
|
24
|
+
* @param options.currentVersion 覆盖 CLI 版本基准(测试注入用;缺省取 getOpenfeelVersion())
|
|
25
|
+
*/
|
|
26
|
+
export function checkGlobalDeployment(options) {
|
|
27
|
+
const cliVersion = options?.currentVersion ?? getOpenfeelVersion();
|
|
28
|
+
try {
|
|
29
|
+
const statePath = getGlobalUpdateStatePath();
|
|
30
|
+
// 文件不存在 → 部署缺失(与「存在但非法」区分;loadGlobalUpdateState 对二者均返回 null)
|
|
31
|
+
if (!existsSync(statePath)) {
|
|
32
|
+
return { status: 'missing', cliVersion, deployedVersion: null };
|
|
33
|
+
}
|
|
34
|
+
const state = loadGlobalUpdateState();
|
|
35
|
+
// 文件存在但 Schema 非法/解析失败 → unknown 静默(避免 Schema 演进误报)
|
|
36
|
+
if (state === null) {
|
|
37
|
+
return { status: 'unknown', cliVersion, deployedVersion: null };
|
|
38
|
+
}
|
|
39
|
+
const deployedVersion = state.openfeel_version;
|
|
40
|
+
// 版本一致 → ok;否则 mismatch(含降级:部署版本 > CLI 版本亦按 != 处理)
|
|
41
|
+
return deployedVersion === cliVersion
|
|
42
|
+
? { status: 'ok', cliVersion, deployedVersion }
|
|
43
|
+
: { status: 'mismatch', cliVersion, deployedVersion };
|
|
44
|
+
}
|
|
45
|
+
catch {
|
|
46
|
+
// 读取异常(权限/占用/目录占位等)→ unknown 静默,不抛
|
|
47
|
+
return { status: 'unknown', cliVersion, deployedVersion: null };
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
/** 部署修复类命令白名单:避免「提示用户去做他正在做的事」 */
|
|
51
|
+
const DEPLOY_COMMANDS = new Set(['setup', 'update', 'init', 'migrate']);
|
|
52
|
+
/** 环境变量真值判定:仅识别 '1' / 'true'(大小写与首尾空白不敏感);CI=yes 等其它值不识别,由门控的 !isTTY 兜底(REV-003) */
|
|
53
|
+
function isTruthyEnv(value) {
|
|
54
|
+
if (value === undefined) {
|
|
55
|
+
return false;
|
|
56
|
+
}
|
|
57
|
+
const v = value.trim().toLowerCase();
|
|
58
|
+
return v === '1' || v === 'true';
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* 是否应执行/输出被动部署提示(纯函数,输入全显式,便于单测矩阵)。
|
|
62
|
+
* 返回 false(静默)的条件(任一):
|
|
63
|
+
* - 非 TTY;已提示过;
|
|
64
|
+
* - argv 含 --json / --quiet;
|
|
65
|
+
* - argv 含 --version / -v / --help / -h;
|
|
66
|
+
* - 首个非选项 token ∈ {setup, update, init, migrate};
|
|
67
|
+
* - CI / OPENFEEL_NO_UPDATE_CHECK 为真值。
|
|
68
|
+
*/
|
|
69
|
+
export function shouldRunDeployCheck(input) {
|
|
70
|
+
// 非交互(CI/测试/管道)→ 静默
|
|
71
|
+
if (!input.isTTY) {
|
|
72
|
+
return false;
|
|
73
|
+
}
|
|
74
|
+
// 每进程一次 → 已提示则静默
|
|
75
|
+
if (input.alreadyWarned) {
|
|
76
|
+
return false;
|
|
77
|
+
}
|
|
78
|
+
// 机器可读/安静模式 → 静默(保护 --json stdout 契约)
|
|
79
|
+
if (input.argv.includes('--json') || input.argv.includes('--quiet')) {
|
|
80
|
+
return false;
|
|
81
|
+
}
|
|
82
|
+
// 帮助/版本次命令 → 静默
|
|
83
|
+
if (input.argv.includes('--version') || input.argv.includes('-v') ||
|
|
84
|
+
input.argv.includes('--help') || input.argv.includes('-h')) {
|
|
85
|
+
return false;
|
|
86
|
+
}
|
|
87
|
+
// 部署修复类命令 → 静默
|
|
88
|
+
const firstToken = input.argv.find((a) => !a.startsWith('-'));
|
|
89
|
+
if (firstToken !== undefined && DEPLOY_COMMANDS.has(firstToken)) {
|
|
90
|
+
return false;
|
|
91
|
+
}
|
|
92
|
+
// CI / 显式禁用 → 静默
|
|
93
|
+
if (isTruthyEnv(input.env.CI) || isTruthyEnv(input.env.OPENFEEL_NO_UPDATE_CHECK)) {
|
|
94
|
+
return false;
|
|
95
|
+
}
|
|
96
|
+
return true;
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=deployment-check.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deployment-check.js","sourceRoot":"","sources":["../../src/core/deployment-check.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"en.d.ts","sourceRoot":"","sources":["../../../src/core/i18n-data/en.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAa,UAAU,EAAE,MAAM,YAAY,CAAC;AAGxD,eAAO,MAAM,MAAM,EAAE,UAwBpB,CAAC;AAGF,eAAO,MAAM,IAAI,EAAE,UA0QlB,CAAC;AAGF,eAAO,MAAM,IAAI,EAAE,UAyBlB,CAAC;AAGF,eAAO,MAAM,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"en.d.ts","sourceRoot":"","sources":["../../../src/core/i18n-data/en.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAa,UAAU,EAAE,MAAM,YAAY,CAAC;AAGxD,eAAO,MAAM,MAAM,EAAE,UAwBpB,CAAC;AAGF,eAAO,MAAM,IAAI,EAAE,UA0QlB,CAAC;AAGF,eAAO,MAAM,IAAI,EAAE,UAyBlB,CAAC;AAGF,eAAO,MAAM,MAAM,EAAE,UA0BpB,CAAC;AAGF,eAAO,MAAM,OAAO,EAAE,UA8CrB,CAAC;AAGF,eAAO,MAAM,KAAK,EAAE,UA6BnB,CAAC;AAGF,eAAO,MAAM,IAAI,EAAE,UA+BlB,CAAC;AAGF,eAAO,MAAM,SAAS,EAAE,UAiCvB,CAAC;AAGF,eAAO,MAAM,OAAO,EAAE,UAOrB,CAAC;AAGF,eAAO,MAAM,OAAO,EAAE,UAAe,CAAC;AAGtC,eAAO,MAAM,IAAI,EAAE,UAMlB,CAAC;AAGF,eAAO,MAAM,YAAY,EAAE,UAAe,CAAC;AAG3C,eAAO,MAAM,IAAI,EAAE,UAalB,CAAC;AAGF,eAAO,MAAM,IAAI,EAAE,UAuOlB,CAAC;AAGF,eAAO,MAAM,MAAM,EAAE,UA6BpB,CAAC;AAGF,eAAO,MAAM,OAAO,EAAE,UA4BrB,CAAC;AAGF,eAAO,MAAM,KAAK,EAAE,UAqBnB,CAAC;AAGF,eAAO,MAAM,KAAK,EAAE,UAWnB,CAAC;AAGF,eAAO,MAAM,OAAO,EAAE,UASrB,CAAC;AAGF,eAAO,MAAM,IAAI,EAAE,UAMlB,CAAC;AAGF,eAAO,MAAM,UAAU,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,UAAU,CAAA;CAAE,CAqBlE,CAAC"}
|
|
@@ -327,6 +327,8 @@ export const update = {
|
|
|
327
327
|
'legacyLayoutWarnTmpl': { key: 'update.legacyLayoutWarnTmpl', zh: '', en: '[update] Detected legacy in-project layout .opencode/{dirs}; run openfeel migrate (provided since stage-39) to migrate.' },
|
|
328
328
|
'globalJsoncParseSkipTmpl': { key: 'update.globalJsoncParseSkipTmpl', zh: '', en: '[update] Failed to parse global opencode.jsonc (may contain block comments); skipping merge and keeping the original file: {err}' },
|
|
329
329
|
'globalJsoncWriteSkipTmpl': { key: 'update.globalJsoncWriteSkipTmpl', zh: '', en: '[update] {err}; skipped global opencode.jsonc write, continuing with remaining steps' },
|
|
330
|
+
'globalStaleWarnTmpl': { key: 'update.globalStaleWarnTmpl', zh: '', en: '[openfeel] Global OpenFeel deployment version {deployed} differs from CLI version {cli}; run `openfeel setup` and restart the harness (opencode) to load the latest global configuration.' },
|
|
331
|
+
'globalMissingWarnTmpl': { key: 'update.globalMissingWarnTmpl', zh: '', en: '[openfeel] No global OpenFeel deployment detected; run `openfeel setup` and restart the harness (opencode).' },
|
|
330
332
|
};
|
|
331
333
|
/* ==================== project ==================== */
|
|
332
334
|
export const project = {
|
|
@@ -521,6 +523,8 @@ export const help = {
|
|
|
521
523
|
'init.nonInteractive': { key: 'help.init.nonInteractive', zh: '', en: 'Non-interactive mode (used together with --workspace-only)' },
|
|
522
524
|
'setup': { key: 'help.setup', zh: '', en: 'Deploy global OpenFeel framework config (global AGENTS.md + agents + skills + platform adapter config: opencode.jsonc); does not create the project .openfeel/' },
|
|
523
525
|
'setup.lang': { key: 'help.setup.lang', zh: '', en: 'Agent prompt language (zh-CN or en), defaults to zh-CN' },
|
|
526
|
+
'setup.check': { key: 'help.setup.check', zh: '', en: 'Diagnose whether the global deployment matches the CLI version (read-only; no deploy); exit 0 if consistent, else 1' },
|
|
527
|
+
'setup.json': { key: 'help.setup.json', zh: '', en: 'Output the diagnosis as JSON (pure single JSON document with schemaVersion)' },
|
|
524
528
|
'update': { key: 'help.update', zh: '', en: 'Deploy OpenFeel adapter files to target project (interactive tool selection when no args)' },
|
|
525
529
|
'update.lang': { key: 'help.update.lang', zh: '', en: 'Agent prompt language (zh-CN or en)' },
|
|
526
530
|
'update.force': { key: 'help.update.force', zh: '', en: 'Skip AGENTS.md overwrite confirmation, force overwrite' },
|
|
@@ -812,6 +816,10 @@ export const setup = {
|
|
|
812
816
|
'updated': { key: 'setup.updated', zh: '', en: 'Updated global files:' },
|
|
813
817
|
'appended': { key: 'setup.appended', zh: '', en: 'Global files needing manual confirmation (already exist and are unmanaged; not overwritten):' },
|
|
814
818
|
'complete': { key: 'setup.complete', zh: '', en: '? Global OpenFeel framework config deployed' },
|
|
819
|
+
'checkOkTmpl': { key: 'setup.checkOkTmpl', zh: '', en: 'Global deployment version {deployed} (matches CLI version {cli})' },
|
|
820
|
+
'checkMismatchTmpl': { key: 'setup.checkMismatchTmpl', zh: '', en: 'Global deployment version {deployed} != CLI version {cli}; run `openfeel setup` and restart the harness (opencode).' },
|
|
821
|
+
'checkMissingTmpl': { key: 'setup.checkMissingTmpl', zh: '', en: 'No global OpenFeel deployment detected; run `openfeel setup` and restart the harness (opencode).' },
|
|
822
|
+
'checkUnknownTmpl': { key: 'setup.checkUnknownTmpl', zh: '', en: 'Global deployment status cannot be determined (update_state.json missing or corrupted); run `openfeel setup` to redeploy.' },
|
|
815
823
|
};
|
|
816
824
|
/* ==================== metrics domain: agent performance summary (T15) ==================== */
|
|
817
825
|
export const metrics = {
|