dsh-plugin-specflow 0.0.0-stage → 0.1.1
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/LICENSE +201 -0
- package/README.md +166 -2
- package/THIRD_PARTY_NOTICES.md +13 -0
- package/cordis.patch.yml +3 -0
- package/dist/ZOD_LICENSE +21 -0
- package/dist/build-info.json +19 -0
- package/dist/client.js +3404 -0
- package/dist/index.mjs +41177 -0
- package/package.json +78 -4
package/dist/client.js
ADDED
|
@@ -0,0 +1,3404 @@
|
|
|
1
|
+
window.__ModuleLoader__.load({ id: "dsh-plugin-specflow", factory: (require) => {
|
|
2
|
+
const module = { exports: {} };
|
|
3
|
+
const exports = module.exports;
|
|
4
|
+
"use strict";
|
|
5
|
+
var __defProp = Object.defineProperty;
|
|
6
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
7
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
8
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
9
|
+
var __export = (target, all) => {
|
|
10
|
+
for (var name in all)
|
|
11
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
12
|
+
};
|
|
13
|
+
var __copyProps = (to, from, except, desc) => {
|
|
14
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
15
|
+
for (let key of __getOwnPropNames(from))
|
|
16
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
17
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
18
|
+
}
|
|
19
|
+
return to;
|
|
20
|
+
};
|
|
21
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
22
|
+
|
|
23
|
+
// plugins/deepseek-specflow/src/client.tsx
|
|
24
|
+
var client_exports = {};
|
|
25
|
+
__export(client_exports, {
|
|
26
|
+
SpecflowPanel: () => SpecflowPanel,
|
|
27
|
+
TAB_ID: () => TAB_ID,
|
|
28
|
+
TAB_KIND: () => TAB_KIND,
|
|
29
|
+
apply: () => apply,
|
|
30
|
+
inject: () => inject
|
|
31
|
+
});
|
|
32
|
+
module.exports = __toCommonJS(client_exports);
|
|
33
|
+
|
|
34
|
+
// apps/web/src/i18n.ts
|
|
35
|
+
var import_react = require("react");
|
|
36
|
+
|
|
37
|
+
// packages/i18n/web-shell.ts
|
|
38
|
+
var messages = {
|
|
39
|
+
"SpecFlow \xB7 \u5DE5\u7A0B\u5DE5\u4F5C\u53F0": "SpecFlow \xB7 Engineering Workbench",
|
|
40
|
+
"\u754C\u9762\u8BED\u8A00": "Interface language",
|
|
41
|
+
"\u751F\u6210\u5185\u5BB9\u8BED\u8A00": "Generated content language",
|
|
42
|
+
"\u65B0\u8FD0\u884C\u4F7F\u7528\u6B64\u8BED\u8A00\u751F\u6210\u6587\u6863\u3001\u7B80\u62A5\u548C\u95EE\u9898\u3002\u5DF2\u6709\u8FD0\u884C\u4E0E\u7528\u6237\u539F\u6587\u4FDD\u7559\u539F\u6837\u3002": "New runs use this language for documents, briefs, and questions. Existing runs and user content retain their original text.",
|
|
43
|
+
"\u65E0\u6CD5\u4FDD\u5B58\u8BED\u8A00\u8BBE\u7F6E\uFF0C\u8BF7\u91CD\u8BD5\u3002": "Could not save the language preference. Please try again.",
|
|
44
|
+
"\u5F00\u53D1\u6D41\u7A0B": "Workflow",
|
|
45
|
+
"\u9700\u6C42\u8F93\u5165": "Requirements",
|
|
46
|
+
"\u6587\u6863\u4EA7\u7269": "Documents",
|
|
47
|
+
"\u4EE3\u7801\u4E0E\u9A8C\u8BC1": "Code and verification",
|
|
48
|
+
"\u8FD0\u884C\u8BB0\u5F55": "Run history",
|
|
49
|
+
"\u5F53\u524D\u9605\u8BFB\u4F4D\u7F6E\u672A\u80FD\u4FDD\u5B58\u5230\u684C\u9762\uFF0C\u4E0B\u6B21\u91CD\u542F\u53EF\u80FD\u9700\u8981\u91CD\u65B0\u5B9A\u4F4D\u3002": "Could not save your reading position. You may need to find it again after restarting.",
|
|
50
|
+
"\u5DE5\u4F5C\u9879\u4E0E\u6240\u9009\u5DE5\u4F5C\u7A7A\u95F4\u4E0D\u4E00\u81F4\uFF0C\u8BF7\u91CD\u65B0\u8BFB\u53D6\u3002": "The work item does not belong to the selected workspace. Reload the workspace.",
|
|
51
|
+
"\u90E8\u5206\u5B9A\u4F4D\u5BF9\u8C61\u5DF2\u5931\u6548\uFF0C\u5DF2\u8FD4\u56DE\u5F53\u524D\u53EF\u7528\u5185\u5BB9\u3002": "Some saved locations are no longer available. Showing the current available content.",
|
|
52
|
+
"\u64CD\u4F5C\u5DF2\u5B8C\u6210\uFF0C\u4F46\u72B6\u6001\u540C\u6B65\u5931\u8D25\u3002\u8BF7\u5237\u65B0\u6838\u5BF9\u5DE5\u7A0B\u8BB0\u5F55\u3002": "The operation completed, but synchronization failed. Refresh to check the engineering records.",
|
|
53
|
+
"\u8DF3\u5230\u4E3B\u5185\u5BB9": "Skip to main content",
|
|
54
|
+
"\u5DE5\u7A0B\u5BFC\u822A": "Workspace navigation",
|
|
55
|
+
"\u5173\u95ED\u5DE5\u7A0B\u5BFC\u822A": "Close workspace navigation",
|
|
56
|
+
"SpecFlow \u9996\u9875": "SpecFlow home",
|
|
57
|
+
"\u5DE5\u7A0B\u5DE5\u4F5C\u7A7A\u95F4": "Engineering workspace",
|
|
58
|
+
"\u6253\u5F00 Git \u4ED3\u5E93": "Open Git repository",
|
|
59
|
+
"\u6253\u5F00 Git \u4ED3\u5E93\uFF0C\u6DFB\u52A0\u5DE5\u4F5C\u7A7A\u95F4": "Open a Git repository to add a workspace",
|
|
60
|
+
"\u5DE5\u4F5C\u9879": "Work items",
|
|
61
|
+
"\u65B0\u5EFA\u5DE5\u4F5C\u9879": "New work item",
|
|
62
|
+
"\u641C\u7D22\u5F53\u524D\u7A7A\u95F4\u5DE5\u4F5C\u9879": "Search work items in this workspace",
|
|
63
|
+
"\u641C\u7D22\u5DE5\u4F5C\u9879": "Search work items",
|
|
64
|
+
"\u5F53\u524D\u7A7A\u95F4\u7684\u5DE5\u4F5C\u9879": "Work items in this workspace",
|
|
65
|
+
"\u672A\u627E\u5230\u5339\u914D\u7684\u5DE5\u4F5C\u9879": "No matching work items",
|
|
66
|
+
"\u5F53\u524D\u7A7A\u95F4\u6682\u65E0\u5DE5\u4F5C\u9879": "No work items in this workspace",
|
|
67
|
+
"\u6B63\u5728\u8BFB\u53D6\u5DE5\u4F5C\u9879\u2026": "Loading work items\u2026",
|
|
68
|
+
"\u5DE5\u7A0B\u4EA7\u7269": "Artifacts",
|
|
69
|
+
"\u5F53\u524D\u5DE5\u4F5C\u9879\u7684\u5DE5\u7A0B\u4EA7\u7269": "Artifacts for this work item",
|
|
70
|
+
"\u6B64\u5DE5\u4F5C\u9879\u5C1A\u65E0\u5DE5\u7A0B\u4EA7\u7269": "This work item has no artifacts yet",
|
|
71
|
+
"\u9009\u62E9\u5DE5\u4F5C\u9879\u540E\u67E5\u770B\u4EA7\u7269": "Select a work item to view its artifacts",
|
|
72
|
+
"\u72B6\u6001\u672A\u77E5": "Status unknown",
|
|
73
|
+
"\u53EF\u7528": "Available",
|
|
74
|
+
"\u4E0D\u53EF\u7528": "Unavailable",
|
|
75
|
+
"\u5DE5\u7A0B\u8BBE\u7F6E": "Project settings",
|
|
76
|
+
"\u5173\u95ED\u5DE5\u7A0B\u5BFC\u822A\u906E\u7F69": "Dismiss workspace navigation",
|
|
77
|
+
"\u5C55\u5F00\u5DE5\u7A0B\u5BFC\u822A": "Open workspace navigation",
|
|
78
|
+
"\u5DE5\u4F5C\u7A7A\u95F4": "Workspace",
|
|
79
|
+
"\u7F3A\u9677\u4FEE\u590D": "Bug fix",
|
|
80
|
+
"\u529F\u80FD\u5F00\u53D1": "Feature development",
|
|
81
|
+
"\u4E8B\u4EF6\u8FDE\u63A5\uFF1B\u6700\u540E\u6210\u529F\u540C\u6B65 {0}": "Event connection; last successful sync {0}",
|
|
82
|
+
"\u4E8B\u4EF6\u5DF2\u8FDE\u63A5": "Events connected",
|
|
83
|
+
"\u8FDE\u63A5\u4E8B\u4EF6\u4E2D": "Connecting events",
|
|
84
|
+
"\u4E8B\u4EF6\u91CD\u8FDE\u4E2D": "Reconnecting events",
|
|
85
|
+
"\u5237\u65B0": "Refresh",
|
|
86
|
+
"\u9700\u6C42\u4E0E\u57FA\u7EBF": "Requirements and baseline",
|
|
87
|
+
"\u5B8C\u6574\u9700\u6C42\u89C1\u300C\u9700\u6C42\u8F93\u5165\u300D\u4E2D\u7684\u6587\u6863\u3002": "See Requirements for the complete requirement documents.",
|
|
88
|
+
"\u57FA\u7EBF {0}": "Baseline {0}",
|
|
89
|
+
"\u5DF2\u4EA4\u4ED8": "Delivered",
|
|
90
|
+
"\u8FDB\u884C\u4E2D": "In progress",
|
|
91
|
+
"\u5F85\u5904\u7406 {0} \u9879": "{0} pending items",
|
|
92
|
+
"\u5F85\u5904\u7406": "Pending",
|
|
93
|
+
"\u66F4\u591A\u5DE5\u4F5C\u9879\u64CD\u4F5C": "More work item actions",
|
|
94
|
+
"\u5BFC\u51FA\u5DE5\u7A0B\u8BB0\u5F55": "Export engineering records",
|
|
95
|
+
"\u9694\u79BB\u9A8C\u6536\u9879\u76EE": "Isolated demo project",
|
|
96
|
+
"\u72EC\u7ACB\u5DE5\u4F5C\u533A\u5185\u6267\u884C\u771F\u5B9E\u6587\u4EF6\u4FEE\u6539\u4E0E\u6D4B\u8BD5": "Runs real file changes and tests in an isolated workspace",
|
|
97
|
+
"\u4E0D\u8C03\u7528\u6A21\u578B API": "No model API calls",
|
|
98
|
+
"\u8BFB\u53D6\u66F4\u65B0\u5931\u8D25\uFF1A": "Could not load updates: ",
|
|
99
|
+
"\u91CD\u65B0\u540C\u6B65": "Sync again",
|
|
100
|
+
"\u6709 {count} \u4E2A\u5199\u5165\u7684\u7ED3\u679C\u5F85\u786E\u8BA4\uFF0C\u76F8\u5173\u64CD\u4F5C\u5DF2\u9501\u5B9A\u3002\u8BF7\u5148\u5237\u65B0\u67E5\u770B\u5DE5\u7A0B\u8BB0\u5F55\uFF0C\u907F\u514D\u91CD\u590D\u6D3E\u53D1\u3002": "{count} writes need confirmation. Related actions are locked. Refresh and check the engineering records before submitting again.",
|
|
101
|
+
"\u5237\u65B0\u6838\u5BF9\u8BB0\u5F55": "Refresh and check records",
|
|
102
|
+
"\u5DF2\u6838\u5BF9\u7ED3\u679C\uFF0C\u89E3\u9664\u9501\u5B9A": "Results checked, unlock actions",
|
|
103
|
+
"\u5DE5\u4F5C\u9879\u89C6\u56FE": "Work item views",
|
|
104
|
+
"\u6700\u540E\u6210\u529F\u540C\u6B65 {0}": "Last successful sync {0}",
|
|
105
|
+
"\u6B63\u5728\u540C\u6B65": "Syncing",
|
|
106
|
+
"\u540C\u6B65\u5931\u8D25": "Sync failed",
|
|
107
|
+
"\u540C\u6B65\u4E8E {0}": "Synced at {0}",
|
|
108
|
+
"\u65E0\u6CD5\u8BFB\u53D6\u5DE5\u7A0B\u6570\u636E": "Could not load engineering data",
|
|
109
|
+
"\u6B63\u5728\u52A0\u8F7D\u5DE5\u4F5C\u7A7A\u95F4": "Loading workspace",
|
|
110
|
+
"\u6253\u5F00\u4E00\u4E2A\u5DE5\u7A0B\u5DE5\u4F5C\u7A7A\u95F4": "Open an engineering workspace",
|
|
111
|
+
"\u6BCF\u4E2A\u7A7A\u95F4\u5BF9\u5E94\u4E00\u4E2A\u9879\u76EE\u76EE\u5F55": "Each workspace corresponds to a project directory",
|
|
112
|
+
"\u8BF7\u91CD\u8BD5\u52A0\u8F7D": "Please try loading again",
|
|
113
|
+
"\u6B63\u5728\u8BFB\u53D6\u672C\u5730\u5DE5\u7A0B\u6570\u636E\u2026": "Loading local engineering data\u2026",
|
|
114
|
+
"\u8BE5\u5DE5\u4F5C\u7A7A\u95F4\u8FD8\u6CA1\u6709\u5DE5\u4F5C\u9879": "This workspace has no work items yet",
|
|
115
|
+
"\u4ECE Git \u9879\u76EE\u76EE\u5F55\u5F00\u59CB": "Start with a Git project directory",
|
|
116
|
+
"\u5728\u5DE5\u4F5C\u7A7A\u95F4\u4E2D\u7BA1\u7406\u6BCF\u4E2A\u5DE5\u4F5C\u9879\u7684\u9700\u6C42\u3001\u6D41\u7A0B\u3001\u4EE3\u7801\u548C\u4EA7\u7269\u3002": "Manage requirements, workflows, code, and artifacts for each work item in a workspace.",
|
|
117
|
+
"\u91CD\u8BD5\u52A0\u8F7D": "Try again",
|
|
118
|
+
"\u91CD\u65B0\u8BFB\u53D6\u5DE5\u4F5C\u9879": "Reload work item",
|
|
119
|
+
"\u5728\u6B64\u7A7A\u95F4\u65B0\u5EFA\u5DE5\u4F5C\u9879": "Create a work item here",
|
|
120
|
+
"\u7A7A\u95F4 \u2192 \u5DE5\u4F5C\u9879 \u2192 \u5DE5\u7A0B\u4EA7\u7269": "Workspace \u2192 Work item \u2192 Artifacts",
|
|
121
|
+
"SpecFlow \xB7 \u5DE5\u7A0B\u63A7\u5236\u5C42": "SpecFlow \xB7 Engineering control layer",
|
|
122
|
+
"\u5173\u95ED\u901A\u77E5": "Dismiss notification",
|
|
123
|
+
"\u5F85\u5904\u7406\u4E8B\u9879 \xB7 {0}": "Pending items \xB7 {0}",
|
|
124
|
+
"\u672C\u6B21\u8FD0\u884C": "This run",
|
|
125
|
+
"\u6267\u884C\u4EA4\u4E92": "Runtime interaction",
|
|
126
|
+
"\u590D\u6838\u53D1\u73B0": "Review finding",
|
|
127
|
+
"\u6587\u6863\u5BA1\u9605": "Document review",
|
|
128
|
+
"\u4F9D\u636E\u5DF2\u53D8\u66F4\uFF0C\u5148\u67E5\u770B\u539F\u59CB\u6750\u6599": "The source has changed. Review the original material first.",
|
|
129
|
+
"\u5F53\u524D\u6CA1\u6709\u5F85\u5904\u7406\u4E8B\u9879": "No pending items",
|
|
130
|
+
"\u540E\u7EED\u95EE\u9898\u3001\u6388\u6743\u548C\u5F85\u5BA1\u9605\u4EA7\u7269\u4F1A\u51FA\u73B0\u5728\u8FD9\u91CC\u3002": "Questions, permission requests, and artifacts awaiting review will appear here.",
|
|
131
|
+
"\u5F85\u6267\u884C": "Pending",
|
|
132
|
+
"\u542F\u52A8\u4E2D": "Starting",
|
|
133
|
+
"\u6267\u884C\u4E2D": "Running",
|
|
134
|
+
"\u7B49\u5F85\u56DE\u7B54": "Awaiting answers",
|
|
135
|
+
"\u6267\u884C\u5DF2\u7ED3\u675F": "Completed",
|
|
136
|
+
"\u6267\u884C\u5931\u8D25": "Failed",
|
|
137
|
+
"\u5DF2\u505C\u6B62": "Stopped",
|
|
138
|
+
"\u5F85\u6838\u5BF9": "Needs reconciliation",
|
|
139
|
+
"\u5DF2\u901A\u8FC7": "Passed",
|
|
140
|
+
"\u963B\u585E": "Blocked",
|
|
141
|
+
"\u5DF2\u8FC7\u671F": "Stale",
|
|
142
|
+
"\u5DF2\u63A5\u7EB3": "Accepted",
|
|
143
|
+
"\u5F85\u68C0\u67E5": "Unchecked",
|
|
144
|
+
"\u5019\u9009": "Candidate",
|
|
145
|
+
"\u6D4B\u8BD5\u901A\u8FC7\xB7\u5F85\u590D\u6838": "Tests passed \xB7 Review pending",
|
|
146
|
+
"\u5DF2\u9A8C\u8BC1": "Verified",
|
|
147
|
+
"\u672A\u89E3\u51B3": "Open",
|
|
148
|
+
"\u5DF2\u89E3\u51B3": "Resolved",
|
|
149
|
+
"\u5DF2\u8BB0\u5F55\u4F8B\u5916": "Exception recorded",
|
|
150
|
+
"\u65E0\u6CD5\u8FDE\u63A5\u672C\u5730\u670D\u52A1\uFF0C\u8BF7\u786E\u8BA4\u670D\u52A1\u5DF2\u542F\u52A8\u540E\u91CD\u8BD5\u3002": "Could not connect to the local service. Check that it is running and try again.",
|
|
151
|
+
"\u5199\u5165\u7ED3\u679C\u5C1A\u672A\u786E\u8BA4\uFF0C\u8BF7\u5148\u5237\u65B0\u6838\u5BF9\u5DE5\u7A0B\u8BB0\u5F55\uFF0C\u907F\u514D\u91CD\u590D\u6D3E\u53D1\u3002": "The write result is unconfirmed. Refresh and check the engineering records before submitting again.",
|
|
152
|
+
"\u672C\u5730\u670D\u52A1\u8FD4\u56DE\u4E86\u65E0\u6CD5\u8BFB\u53D6\u7684\u54CD\u5E94\uFF0C\u8BF7\u5237\u65B0\u91CD\u8BD5\u3002": "The local service returned an unreadable response. Refresh and try again.",
|
|
153
|
+
"\u672C\u6B21\u5199\u5165\u7684\u54CD\u5E94\u65E0\u6CD5\u8BFB\u53D6\uFF0C\u8BF7\u5148\u5237\u65B0\u6838\u5BF9\u7ED3\u679C\u3002": "The write response could not be read. Refresh to check the result first.",
|
|
154
|
+
"\u670D\u52A1\u7AEF\u5199\u5165\u54CD\u5E94\u5F02\u5E38": "The service returned an invalid write response",
|
|
155
|
+
"{0}\uFF1B\u7ED3\u679C\u5C1A\u672A\u786E\u8BA4\uFF0C\u8BF7\u5148\u6838\u5BF9\u5DE5\u7A0B\u8BB0\u5F55\u3002": "{0}; the result is unconfirmed. Check the engineering records first."
|
|
156
|
+
};
|
|
157
|
+
|
|
158
|
+
// packages/i18n/web-documents.ts
|
|
159
|
+
var messages2 = {
|
|
160
|
+
"\u6253\u5F00 Git \u4ED3\u5E93": "Open Git repository",
|
|
161
|
+
"\u65B0\u5EFA\u5DE5\u7A0B\u5DE5\u4F5C\u9879": "Create work item",
|
|
162
|
+
"\u7EC4\u5408\u5DE5\u7A0B\u6D41\u7A0B": "Compose workflow",
|
|
163
|
+
"\u5DE5\u7A0B\u8BBE\u7F6E": "Project settings",
|
|
164
|
+
"\u5BFC\u5165\u5DF2\u6709\u6587\u6863": "Import existing documents",
|
|
165
|
+
"\u5173\u95ED\u5BF9\u8BDD\u6846": "Close dialog",
|
|
166
|
+
"\u4ED3\u5E93\u7EDD\u5BF9\u8DEF\u5F84": "Absolute repository path",
|
|
167
|
+
"\u9009\u62E9\u4ED3\u5E93\u6587\u4EF6\u5939": "Choose repository folder",
|
|
168
|
+
"\u6CE8\u518C\u540E\u521B\u5EFA\u5DE5\u4F5C\u9879\u3002\u5DE5\u4F5C\u9879\u4F7F\u7528\u72EC\u7ACB\u5206\u652F\uFF0C\u73B0\u6709\u672A\u63D0\u4EA4\u6539\u52A8\u4F1A\u88AB\u4FDD\u7559\u3002": "Register the repository to create a work item. Work items use separate branches and preserve existing uncommitted changes.",
|
|
169
|
+
"\u4ED3\u5E93\u5DF2\u6CE8\u518C": "Repository registered",
|
|
170
|
+
"\u6CE8\u518C\u9879\u76EE": "Register project",
|
|
171
|
+
"\u5DE5\u4F5C\u9879\u540D\u79F0": "Work item name",
|
|
172
|
+
"\u4F8B\u5982\uFF1A\u589E\u52A0\u6587\u4EF6\u5BFC\u5165\u529F\u80FD": "For example: Add file import",
|
|
173
|
+
"\u9700\u6C42\u6B63\u6587": "Requirements",
|
|
174
|
+
"\u63CF\u8FF0\u7528\u6237\u9700\u8981\u4EC0\u4E48\uFF0C\u4EE5\u53CA\u5FC5\u987B\u6EE1\u8DB3\u7684\u9A8C\u6536\u6761\u4EF6\uFF1B\u4E5F\u53EF\u4EE5\u901A\u8FC7\u9700\u6C42\u6587\u6863\u63D0\u4F9B\u3002": "Describe what users need and the required acceptance criteria. You can also attach requirements documents.",
|
|
175
|
+
"\u521B\u5EFA\u5DE5\u4F5C\u9879": "Create work item",
|
|
176
|
+
"\u4EA7\u7269\u7C7B\u578B": "Artifact type",
|
|
177
|
+
"Markdown \u5185\u5BB9": "Markdown content",
|
|
178
|
+
"\u7C98\u8D34\u5DF2\u6709\u6587\u6863\uFF0C\u5BFC\u5165\u540E\u9700\u8981\u91CD\u65B0\u590D\u6838\u4E0E\u63A5\u7EB3\u3002": "Paste an existing document. Imported content must be reviewed and accepted again.",
|
|
179
|
+
"\u6587\u6863\u5DF2\u5BFC\u5165\u4E3A\u5019\u9009\u7248\u672C": "Document imported as a candidate revision",
|
|
180
|
+
"\u5BFC\u5165\u5019\u9009\u4EA7\u7269": "Import candidate artifact",
|
|
181
|
+
"\u6267\u884C\u5E95\u5EA7": "Execution harness",
|
|
182
|
+
"\u5F53\u524D\u5DE5\u7A0B\u4F7F\u7528": "Harness for this project",
|
|
183
|
+
"\u4FDD\u5B58\u540E\uFF0C\u65B0\u5C1D\u8BD5\u4F7F\u7528\u6240\u9009\u5E95\u5EA7\u3002\u5207\u6362\u65F6\u6E05\u9664\u5176\u4ED6\u5E95\u5EA7\u7684\u89D2\u8272\u9ED8\u8BA4\u6A21\u578B\uFF0C\u8BF7\u91CD\u65B0\u9009\u62E9\u5E76\u4FDD\u5B58\uFF1B\u8FD0\u884C\u8BB0\u5F55\u4FDD\u7559\u539F\u5E95\u5EA7\u3002": "New attempts use the selected harness after saving. Switching clears role defaults from other harnesses; select models again and save. Run records retain their original harness.",
|
|
184
|
+
"\u72B6\u6001\u672A\u77E5": "Status unknown",
|
|
185
|
+
"\u53EF\u7528": "Available",
|
|
186
|
+
"\u4E0D\u53EF\u7528": "Unavailable",
|
|
187
|
+
"\u793A\u4F8B\u5E95\u5EA7\u4EC5\u7528\u4E8E\u4F53\u9A8C\u5DE5\u7A0B\u6D41\u7A0B\uFF0C\u4E0D\u8C03\u7528\u771F\u5B9E\u6A21\u578B\u3002": "The demo harness lets you explore the workflow without calling real models.",
|
|
188
|
+
"\u6A21\u578B\u76EE\u5F55\u5DF2\u5237\u65B0": "Model catalog refreshed",
|
|
189
|
+
"\u5237\u65B0\u6A21\u578B\u76EE\u5F55": "Refresh model catalog",
|
|
190
|
+
"\u6DFB\u52A0 Maka \u8FDE\u63A5": "Add Maka connection",
|
|
191
|
+
"\u5F53\u524D\u5C1A\u65E0 Maka \u6A21\u578B\u8FDE\u63A5\u3002\u6DFB\u52A0\u8FDE\u63A5\u540E\u5373\u53EF\u4E3A\u5404\u89D2\u8272\u9009\u62E9\u6A21\u578B\u3002": "No Maka model connections are configured. Add a connection to select models for each role.",
|
|
192
|
+
"OpenCode \u5C1A\u65E0\u53EF\u7528\u6A21\u578B\uFF0C\u8BF7\u5148\u5728 OpenCode \u4E2D\u914D\u7F6E\u4F9B\u5E94\u5546\uFF0C\u518D\u5237\u65B0\u6A21\u578B\u76EE\u5F55\u3002": "OpenCode has no available models. Configure a provider in OpenCode, then refresh the model catalog.",
|
|
193
|
+
"\u8FDE\u63A5\u540D\u79F0": "Connection name",
|
|
194
|
+
"\u6211\u7684\u6A21\u578B\u670D\u52A1": "My model service",
|
|
195
|
+
"\u8FDE\u63A5\u6807\u8BC6": "Connection ID",
|
|
196
|
+
"\u4F9B\u5E94\u5546": "Provider",
|
|
197
|
+
"\u81EA\u5B9A\u4E49\u517C\u5BB9 API / \u672C\u5730\u6A21\u578B": "Custom compatible API / local model",
|
|
198
|
+
"\u63A5\u53E3\u534F\u8BAE": "API protocol",
|
|
199
|
+
"\u670D\u52A1\u7AEF\u70B9": "Service endpoint",
|
|
200
|
+
"https://example.com/v1\uFF1B\u6807\u51C6\u4F9B\u5E94\u5546\u53EF\u7559\u7A7A": "https://example.com/v1; optional for standard providers",
|
|
201
|
+
"\u6A21\u578B ID": "Model IDs",
|
|
202
|
+
"\u591A\u4E2A\u6A21\u578B\u7528\u9017\u53F7\u5206\u9694": "Separate multiple models with commas",
|
|
203
|
+
"API \u5BC6\u94A5": "API key",
|
|
204
|
+
"\u51ED\u636E\u7531\u672C\u673A Maka \u4FDD\u5B58": "Credentials are stored locally by Maka",
|
|
205
|
+
"\u8FDE\u63A5\u5DF2\u4FDD\u5B58\u81F3 Maka\uFF1B\u8BF7\u5148\u8FD0\u884C\u4E00\u6B21\u63A5\u5165\u9A8C\u8BC1": "Connection saved to Maka. Run a connection check before use.",
|
|
206
|
+
"\u4FDD\u5B58\u8FDE\u63A5": "Save connection",
|
|
207
|
+
"\u89D2\u8272\u9ED8\u8BA4\u6A21\u578B": "Default models by role",
|
|
208
|
+
"\u7684\u6A21\u578B\u7528\u4E8E\u540E\u7EED\u65B0\u5C1D\u8BD5\u3002": " models are used for new attempts.",
|
|
209
|
+
"{backend} \u7684\u6A21\u578B\u7528\u4E8E\u540E\u7EED\u65B0\u5C1D\u8BD5\u3002": "Models from {backend} are used for new attempts.",
|
|
210
|
+
"\u9700\u6C42\u5206\u6790": "Requirements analysis",
|
|
211
|
+
"\u5DE5\u7A0B\u8BBE\u8BA1": "Engineering design",
|
|
212
|
+
"\u4EE3\u7801\u5B9E\u73B0": "Implementation",
|
|
213
|
+
"\u72EC\u7ACB\u590D\u6838": "Independent review",
|
|
214
|
+
"\u5C1A\u672A\u914D\u7F6E": "Not configured",
|
|
215
|
+
"\u9879\u76EE\u7AE0\u7A0B\u4E0E\u5DE5\u7A0B\u89C4\u5219": "Project constitution and engineering rules",
|
|
216
|
+
"\u8865\u5145\u5DE5\u7A0B\u89C4\u5219": "Additional engineering rules",
|
|
217
|
+
"\u786E\u5B9A\u6027\u9A8C\u8BC1\u547D\u4EE4 \xB7 \u9AD8\u7EA7": "Deterministic verification commands \xB7 Advanced",
|
|
218
|
+
"\u4F7F\u7528\u73B0\u6709\u9879\u76EE\u547D\u4EE4\u7684 JSON \u914D\u7F6E\uFF0C\u6309\u5B9E\u9645\u9000\u51FA\u7801\u8BB0\u5F55\u8BC1\u636E\u3002": "Configure existing project commands as JSON. Evidence records their actual exit codes.",
|
|
219
|
+
"\u786E\u5B9A\u6027\u9A8C\u8BC1\u547D\u4EE4": "Deterministic verification commands",
|
|
220
|
+
"\u5DE5\u7A0B\u914D\u7F6E\u5DF2\u4FDD\u5B58\uFF1B\u65B0\u5C1D\u8BD5\u4F7F\u7528\u66F4\u65B0\u540E\u7684\u914D\u7F6E": "Project settings saved. New attempts use the updated configuration.",
|
|
221
|
+
"\u4FDD\u5B58\u5DE5\u7A0B\u8BBE\u7F6E": "Save project settings",
|
|
222
|
+
"\u7F16\u8F91\u521B\u5EFA\u65B0\u6D41\u7A0B\u7248\u672C\u3002\u5DF2\u542F\u52A8\u8FD0\u884C\u4FDD\u7559\u539F\u5B9A\u4E49\u3002": "Editing creates a new workflow version. Existing runs retain their original definition.",
|
|
223
|
+
"\u6D41\u7A0B\u540D\u79F0": "Workflow name",
|
|
224
|
+
"\u4E0A\u79FB {value0}": "Move {value0} up",
|
|
225
|
+
"\u4E0B\u79FB {value0}": "Move {value0} down",
|
|
226
|
+
"\u6B65\u9AA4 {value0} \u540D\u79F0": "Step {value0} name",
|
|
227
|
+
"\u6B65\u9AA4 {value0} \u7C7B\u578B": "Step {value0} type",
|
|
228
|
+
"\u6B65\u9AA4 {value0} \u89D2\u8272": "Step {value0} role",
|
|
229
|
+
"\u65E0\u6A21\u578B\u89D2\u8272": "No model role",
|
|
230
|
+
"\u6B65\u9AA4 {value0} \u8F93\u5165": "Step {value0} inputs",
|
|
231
|
+
"\u8F93\u5165\uFF0C\u4EE5\u9017\u53F7\u5206\u9694": "Inputs, separated by commas",
|
|
232
|
+
"\u6B65\u9AA4 {value0} \u8F93\u51FA": "Step {value0} outputs",
|
|
233
|
+
"\u8F93\u51FA\u4EA7\u7269": "Output artifacts",
|
|
234
|
+
"\u6B65\u9AA4 {value0} \u6307\u4EE4": "Step {value0} instructions",
|
|
235
|
+
"\u5220\u9664 {value0}": "Delete {value0}",
|
|
236
|
+
"\u65B0\u5DE5\u7A0B\u6B65\u9AA4": "New engineering step",
|
|
237
|
+
"\u63CF\u8FF0\u8FD9\u4E2A\u6B65\u9AA4\u7684\u6267\u884C\u76EE\u6807\u3002": "Describe the goal of this step.",
|
|
238
|
+
"\u6DFB\u52A0\u6B65\u9AA4": "Add step",
|
|
239
|
+
"\u6821\u9A8C\u6D41\u7A0B": "Validate workflow",
|
|
240
|
+
"\u65B0\u6D41\u7A0B\u7248\u672C\u5DF2\u4FDD\u5B58\u5E76\u521B\u5EFA\u65B0\u8FD0\u884C": "Workflow version saved and a new run created",
|
|
241
|
+
"\u4FDD\u5B58\u5E76\u521B\u5EFA\u65B0\u8FD0\u884C": "Save and create new run",
|
|
242
|
+
"\u7B80\u62A5\u4E0E\u9009\u5B9A\u6587\u6863\u7248\u672C\u4E0D\u4E00\u81F4\uFF0C\u8BF7\u91CD\u65B0\u8F7D\u5165\u3002": "The brief does not match the selected document revision. Reload it.",
|
|
243
|
+
"\u65E0\u6CD5\u8F7D\u5165\u7B80\u62A5\uFF0C\u8BF7\u91CD\u8BD5\u3002": "Unable to load the brief. Try again.",
|
|
244
|
+
"\u5DF2\u4FDD\u5B58\u65B0\u5019\u9009\u7248\u672C\uFF0C\u9700\u8981\u91CD\u65B0\u590D\u6838": "New candidate revision saved. A new review is required.",
|
|
245
|
+
"\u5F53\u524D\u67E5\u770B\u5386\u53F2\u7248\u672C\uFF0C\u8BF7\u9009\u62E9\u5F53\u524D\u5019\u9009\u3002": "You are viewing a historical revision. Select the current candidate.",
|
|
246
|
+
"\u672C\u5730\u8349\u7A3F\u4E0E\u670D\u52A1\u5668\u7248\u672C\u51B2\u7A81\uFF0C\u8BF7\u5148\u5408\u5E76\u3002": "The local draft conflicts with the server revision. Merge it first.",
|
|
247
|
+
"\u672C\u5730\u8349\u7A3F\u5C1A\u672A\u4FDD\u5B58\uFF0C\u8BF7\u4FDD\u5B58\u65B0\u7248\u672C\u540E\u91CD\u65B0\u590D\u6838\u3002": "The local draft is unsaved. Save a new revision and request a new review.",
|
|
248
|
+
"\u9700\u6C42\u6F84\u6E05\u5C1A\u672A\u5B8C\u6210\u3002": "Requirements clarification is incomplete.",
|
|
249
|
+
"\u5F53\u524D\u4FEE\u8BA2\u5C1A\u672A\u901A\u8FC7\u72EC\u7ACB\u590D\u6838\u3002": "The current revision has not passed independent review.",
|
|
250
|
+
"\u6B64\u4FEE\u8BA2\u5DF2\u63A5\u7EB3\u3002": "This revision has been accepted.",
|
|
251
|
+
"\u6240\u7528\u9700\u6C42\u7248\u672C\u5DF2\u53D8\u66F4\uFF0C\u8BF7\u91CD\u65B0\u751F\u6210\u4E0E\u590D\u6838\u3002": "The requirements have changed. Regenerate and review again.",
|
|
252
|
+
"\u5DE5\u7A0B\u7AE0\u7A0B\u65E0\u6CD5\u8BFB\u53D6\uFF1A{value0}": "Unable to read the project constitution: {value0}",
|
|
253
|
+
"\u6240\u7528\u5DE5\u7A0B\u7AE0\u7A0B\u5DF2\u53D8\u66F4\uFF0C\u8BF7\u91CD\u65B0\u751F\u6210\u4E0E\u590D\u6838\u3002": "The project constitution has changed. Regenerate and review again.",
|
|
254
|
+
"\u4E0A\u6E38\u4EA7\u7269\u7248\u672C\u5DF2\u53D8\u5316\uFF0C\u8BF7\u91CD\u65B0\u751F\u6210\u4E0E\u590D\u6838\u3002": "An upstream artifact has changed. Regenerate and review again.",
|
|
255
|
+
"\u6587\u6863\u4EA7\u7269": "Document artifacts",
|
|
256
|
+
"\u4EFD": "documents",
|
|
257
|
+
"\u5171 {count} \u4EFD": "{count} total",
|
|
258
|
+
"\u5DE5\u4F5C\u9879\u5DF2\u4EA4\u4ED8\uFF0C\u6587\u6863\u4E0E\u5BA1\u9605\u8BB0\u5F55\u53EA\u8BFB\u3002\u540E\u7EED\u9700\u6C42\u8BF7\u65B0\u5EFA\u5DE5\u4F5C\u9879\u3002": "This work item has been delivered. Documents and review records are read-only. Create a new work item for further requirements.",
|
|
259
|
+
"\u6BCF\u4EFD\u4EA7\u7269\u90FD\u6709\u4F9B\u4EBA\u9605\u8BFB\u7684\u7B80\u62A5\u4E0E\u4F9B AI \u6267\u884C\u7684\u5B8C\u6574\u6587\u6863\u3002": "Each artifact includes a readable brief and a complete document for AI execution.",
|
|
260
|
+
"\u5BFC\u5165\u6587\u6863": "Import documents",
|
|
261
|
+
"\u5C1A\u672A\u4EA7\u51FA\u6587\u6863": "No documents yet",
|
|
262
|
+
"\u6B64\u5DE5\u4F5C\u9879\u5DF2\u4EA4\u4ED8\u3002\u540E\u7EED\u9700\u6C42\u8BF7\u65B0\u5EFA\u5DE5\u4F5C\u9879\u3002": "This work item has been delivered. Create a new work item for further requirements.",
|
|
263
|
+
"\u8FD0\u884C\u9700\u6C42\u89C4\u683C\u6B65\u9AA4\uFF0C\u6216\u5BFC\u5165\u5DF2\u6709 Markdown \u5F00\u59CB\u5DE5\u7A0B\u6D41\u7A0B\u3002": "Run the specification step or import existing Markdown to start the workflow.",
|
|
264
|
+
"\u6587\u6863\u7248\u672C": "Document revision",
|
|
265
|
+
"\u7248\u672C": "Version",
|
|
266
|
+
" \xB7 \u5DF2\u63A5\u7EB3": " \xB7 Accepted",
|
|
267
|
+
"\u5DF2\u63A5\u7EB3": "Accepted",
|
|
268
|
+
"\u5019\u9009\u7248\u672C": "Candidate revision",
|
|
269
|
+
"\u5DF2\u72EC\u7ACB\u590D\u6838": "Independently reviewed",
|
|
270
|
+
"\u7B49\u5F85\u72EC\u7ACB\u590D\u6838": "Awaiting independent review",
|
|
271
|
+
"\u5185\u5BB9": "Content",
|
|
272
|
+
"\u6587\u6863\u9605\u8BFB\u65B9\u5F0F": "Document view",
|
|
273
|
+
"\u4EBA\u7C7B\u7B80\u62A5": "Reader brief",
|
|
274
|
+
"AI \u6267\u884C\u6587\u6863": "AI execution document",
|
|
275
|
+
"\u6BD4\u8F83": "Compare",
|
|
276
|
+
"\u5DF2\u4EA4\u4ED8\u5DE5\u4F5C\u9879\u7684\u672C\u5730\u8349\u7A3F\u4E0E\u5DF2\u4FDD\u5B58\u7248\u672C\u4E0D\u540C\u3002\u8349\u7A3F\u5DF2\u4FDD\u7559\uFF0C\u53EF\u67E5\u770B\u539F\u6587\u5E76\u590D\u5236\u5230\u65B0\u5DE5\u4F5C\u9879\u3002": "The local draft differs from the saved revision of this delivered work item. Your draft is preserved; view its source and copy it to a new work item.",
|
|
277
|
+
"\u670D\u52A1\u5668\u5DF2\u6709\u65B0\u7248\u672C\uFF0C\u5F53\u524D\u672C\u5730\u8349\u7A3F\u5DF2\u4FDD\u7559\u3002\u8BF7\u6BD4\u8F83\u5185\u5BB9\u540E\u5904\u7406\u51B2\u7A81\u3002": "A newer server revision is available. Your local draft is preserved. Compare the content to resolve the conflict.",
|
|
278
|
+
"\u6BD4\u8F83\u51B2\u7A81": "Compare conflict",
|
|
279
|
+
"\u4EE5\u670D\u52A1\u5668\u7248\u672C\u4E3A\u57FA\u7EBF\u7EE7\u7EED\u5408\u5E76": "Continue merging from the server revision",
|
|
280
|
+
"\u4E22\u5F03\u8349\u7A3F\u5E76\u8F7D\u5165\u5F53\u524D\u7248\u672C": "Discard draft and load current revision",
|
|
281
|
+
"\u6D4F\u89C8\u5668\u5B58\u50A8\u4E0D\u53EF\u7528\uFF0C\u8349\u7A3F\u4EC5\u4FDD\u7559\u5728\u5F53\u524D\u7A97\u53E3\u3002": "Browser storage is unavailable. Your draft is kept only in this window.",
|
|
282
|
+
"\u8BF7\u67E5\u770B\u539F\u6587\u5E76\u590D\u5236\u5230\u65B0\u5DE5\u4F5C\u9879\u540E\u518D\u5173\u95ED\u3002": "View the source and copy it to a new work item before closing.",
|
|
283
|
+
"\u8BF7\u4FDD\u5B58\u65B0\u7248\u672C\u540E\u518D\u5173\u95ED\u3002": "Save a new revision before closing.",
|
|
284
|
+
"\u6B63\u5728\u67E5\u770B\u5386\u53F2\u7248\u672C\uFF0C\u6B63\u6587\u53EA\u8BFB\u3002": "Viewing a historical revision. The content is read-only.",
|
|
285
|
+
"\u6B63\u5728\u67E5\u770B\u5386\u53F2\u7248\u672C\uFF0C\u6B63\u6587\u5DF2\u9501\u5B9A\u3002\u4FDD\u5B58\u4E0E\u63A5\u7EB3\u4EC5\u9488\u5BF9\u5F53\u524D\u5019\u9009\u3002": "Viewing a historical revision. The content is locked. Only the current candidate can be saved or accepted.",
|
|
286
|
+
"\u5DF2\u5B8C\u6210\u9700\u6C42\u6F84\u6E05 \xB7 {value0} \u9879\u7B54\u590D\u5DF2\u8BB0\u5F55": "Requirements clarified \xB7 {value0} answers recorded",
|
|
287
|
+
"\u5F53\u524D\u89C4\u683C\u9700\u8981\u5148\u5B8C\u6210\u9700\u6C42\u6F84\u6E05\uFF0C\u518D\u590D\u6838\u4E0E\u63A5\u7EB3\u3002": "Complete requirements clarification before reviewing and accepting this specification.",
|
|
288
|
+
"\u8FDB\u5165\u9700\u6C42\u6F84\u6E05": "Open requirements clarification",
|
|
289
|
+
"\u7B80\u62A5\u57FA\u4E8E\u5DF2\u4FDD\u5B58\u7248\u672C\u3002\u672C\u5730\u8349\u7A3F\u5DF2\u4FDD\u7559\uFF0C\u53EF\u5728\u539F\u6587\u4E2D\u9009\u4E2D\u590D\u5236\uFF1B\u540E\u7EED\u9700\u6C42\u8BF7\u65B0\u5EFA\u5DE5\u4F5C\u9879\u3002": "The brief uses the saved revision. Your local draft is preserved and can be selected and copied from the source. Create a new work item for further requirements.",
|
|
290
|
+
"\u7B80\u62A5\u57FA\u4E8E\u9009\u5B9A\u7684\u5DF2\u4FDD\u5B58\u7248\u672C\u3002\u672C\u5730\u8349\u7A3F\u5C1A\u672A\u540C\u6B65\uFF0C\u4FDD\u5B58\u65B0\u7248\u672C\u540E\u7B80\u62A5\u4F1A\u66F4\u65B0\u3002": "The brief uses the selected saved revision. Your local draft is not included. Save a new revision to update the brief.",
|
|
291
|
+
"\u7B80\u62A5\u6682\u65F6\u65E0\u6CD5\u8F7D\u5165": "Brief temporarily unavailable",
|
|
292
|
+
"\u91CD\u65B0\u8F7D\u5165\u7B80\u62A5": "Reload brief",
|
|
293
|
+
"\u6B63\u5728\u8F7D\u5165\u6B64\u7248\u672C\u7684\u7B80\u62A5\u2026": "Loading the brief for this revision\u2026",
|
|
294
|
+
"\u6D41\u7A0B\u4EA7\u7269\u7B80\u62A5": "Workflow artifact brief",
|
|
295
|
+
"\u5BF9\u5E94\u6267\u884C\u6587\u6863": "Source execution document",
|
|
296
|
+
"\u5F53\u524D\u7248\u672C": "Current revision",
|
|
297
|
+
"\u5386\u53F2\u7248\u672C": "Historical revision",
|
|
298
|
+
"\u4FEE\u8BA2": "Revision",
|
|
299
|
+
"\u672C\u9875\u4E3A\u539F\u6587\u6458\u5F55\uFF0C\u53EF\u80FD\u7701\u7565\u4E0A\u4E0B\u6587\u3002": "This page contains excerpts and may omit context.",
|
|
300
|
+
"\u672C\u7B80\u62A5\u4E0E\u8BE5\u7248\u672C\u7684\u6267\u884C\u6587\u6863\u4E00\u540C\u4FDD\u5B58\u3002": "This brief was saved with this revision of the execution document.",
|
|
301
|
+
"\u67E5\u770B\u5B8C\u6574\u7EA6\u675F\u4E0E\u9A8C\u6536\u6761\u4EF6\uFF0C\u8BF7\u5207\u6362\u81F3 AI \u6267\u884C\u6587\u6863\u3002": "Switch to the AI execution document for the full constraints and acceptance criteria.",
|
|
302
|
+
"\u5BFC\u51FA\u4EBA\u7C7B\u7B80\u62A5": "Export reader brief",
|
|
303
|
+
"HTML \u9605\u8BFB\u9875": "HTML reading page",
|
|
304
|
+
"\u5B8C\u6574\u4FDD\u7559\u76EE\u6807\u3001\u7EA6\u675F\u548C\u9A8C\u6536\u6761\u4EF6\u3002": "Includes the full goals, constraints, and acceptance criteria.",
|
|
305
|
+
"\u5DF2\u4EA4\u4ED8\u5185\u5BB9\u53EA\u8BFB\u3002\u672C\u5730\u8349\u7A3F\u5DF2\u4FDD\u7559\uFF0C\u53EF\u9009\u4E2D\u590D\u5236\u5230\u65B0\u5DE5\u4F5C\u9879\u3002": "Delivered content is read-only. Your local draft is preserved and can be selected and copied to a new work item.",
|
|
306
|
+
"\u5DE5\u4F5C\u9879\u5DF2\u4EA4\u4ED8\uFF0C\u6B63\u6587\u53EA\u8BFB\uFF1B\u540E\u7EED\u9700\u6C42\u8BF7\u65B0\u5EFA\u5DE5\u4F5C\u9879\u3002": "This work item has been delivered. The content is read-only. Create a new work item for further requirements.",
|
|
307
|
+
"\u6B63\u5728\u9884\u89C8\u672C\u5730\u8349\u7A3F\uFF0C\u4FDD\u5B58\u540E\u9700\u91CD\u65B0\u590D\u6838\u3002": "Previewing your local draft. A new review is required after saving.",
|
|
308
|
+
"\u4FEE\u8BA2\u540E\u9700\u4FDD\u5B58\u65B0\u7248\u672C\u5E76\u91CD\u65B0\u590D\u6838\u3002": "After editing, save a new revision and request a new review.",
|
|
309
|
+
"\u6267\u884C\u6587\u6863\u6A21\u5F0F": "Execution document mode",
|
|
310
|
+
"Markdown \u9884\u89C8": "Markdown preview",
|
|
311
|
+
"\u7F16\u8F91\u539F\u6587": "Edit source",
|
|
312
|
+
"\u67E5\u770B\u539F\u6587": "View source",
|
|
313
|
+
"\u5DF2\u4EA4\u4ED8\u53EA\u8BFB": "Delivered \xB7 Read-only",
|
|
314
|
+
"\u5386\u53F2\u53EA\u8BFB": "Historical \xB7 Read-only",
|
|
315
|
+
"\u5F53\u524D": "Current",
|
|
316
|
+
"\u6587\u6863\u6B63\u6587": "Document content",
|
|
317
|
+
"\u670D\u52A1\u5668 {value0} \xB7 {value1}": "Server {value0} \xB7 {value1}",
|
|
318
|
+
"\u5DF2\u63A5\u7EB3 {value0} \xB7 {value1}": "Accepted {value0} \xB7 {value1}",
|
|
319
|
+
"\u9996\u6B21\u65B0\u589E \xB7 \u65E0\u5DF2\u63A5\u7EB3\u57FA\u7EBF": "First revision \xB7 No accepted baseline",
|
|
320
|
+
"\u672C\u5730\u8349\u7A3F \xB7 \u57FA\u4E8E {value0}": "Local draft \xB7 Based on {value0}",
|
|
321
|
+
"\u9009\u5B9A\u4FEE\u8BA2 {value0} \xB7 {value1}": "Selected revision {value0} \xB7 {value1}",
|
|
322
|
+
"\u670D\u52A1\u5668\u7248\u672C": "Server revision",
|
|
323
|
+
"\u5DF2\u63A5\u7EB3\u7248\u672C": "Accepted revision",
|
|
324
|
+
"\u9996\u6B21\u65B0\u589E": "First revision",
|
|
325
|
+
"\u672C\u5730\u8349\u7A3F": "Local draft",
|
|
326
|
+
"\u9009\u5B9A\u7248\u672C": "Selected revision",
|
|
327
|
+
"\u6BB5\u843D\u8BC4\u8BBA": "Paragraph comments",
|
|
328
|
+
"\u5728\u539F\u6587\u4E2D\u67E5\u627E": "Find in source",
|
|
329
|
+
"\u5F53\u524D\u539F\u6587\u4E2D\u672A\u627E\u5230\u6B64\u6587\u672C\uFF0C\u53EF\u80FD\u5DF2\u88AB\u8349\u7A3F\u4FEE\u8BA2\u3002": "This text was not found in the current source. It may have been changed in the draft.",
|
|
330
|
+
"\u5DF2\u5B9A\u4F4D\u539F\u6587\u4E2D\u7684\u552F\u4E00\u5339\u914D\u3002": "Located the only matching text in the source.",
|
|
331
|
+
"\u627E\u5230": "Found",
|
|
332
|
+
"\u5904\u76F8\u540C\u6587\u672C\uFF0C\u8BF7\u9009\u62E9\u4F4D\u7F6E\uFF1A": "matches. Select a location:",
|
|
333
|
+
"\u7B2C": "Match",
|
|
334
|
+
"\u5904 \xB7 \u884C": "\xB7 Line",
|
|
335
|
+
"\u627E\u5230 {count} \u5904\u76F8\u540C\u6587\u672C\uFF0C\u8BF7\u9009\u62E9\u4F4D\u7F6E\uFF1A": "Found {count} matches. Select a location:",
|
|
336
|
+
"\u7B2C {index} \u5904 \xB7 \u884C {line}": "Match {index} \xB7 Line {line}",
|
|
337
|
+
"\u5DE5\u4F5C\u9879\u5DF2\u4EA4\u4ED8\uFF0C\u6BB5\u843D\u8BC4\u8BBA\u8BB0\u5F55\u53EA\u8BFB\u3002": "This work item has been delivered. Paragraph comments are read-only.",
|
|
338
|
+
"\u9009\u4E2D\u6B63\u6587\u4E2D\u7684\u4E00\u6BB5\uFF0C\u53EF\u4EE5\u628A\u8BC4\u8BBA\u9489\u5728\u8BE5\u6BB5\u843D\u4E0A\u3002": "Select a passage to attach a comment to it.",
|
|
339
|
+
"\u5207\u6362\u81F3 AI \u6267\u884C\u6587\u6863\uFF0C\u9009\u4E2D\u6B63\u6587\u540E\u53EF\u5C06\u8BC4\u8BBA\u9489\u5728\u6BB5\u843D\u4E0A\u3002": "Switch to the AI execution document and select a passage to attach a comment.",
|
|
340
|
+
"\u5DF2\u9009\u4E2D\u6BB5\u843D\uFF1A": "Selected passage:",
|
|
341
|
+
"\u5DF2\u9009\u4E2D\u6BB5\u843D\uFF1A{text}": "Selected passage: {text}",
|
|
342
|
+
"\u8BB0\u5F55\u4E00\u4E2A\u95EE\u9898\u6216\u4FEE\u8BA2\u5EFA\u8BAE\u2026": "Record a question or suggested revision\u2026",
|
|
343
|
+
"\u8BC4\u8BBA\u5185\u5BB9": "Comment",
|
|
344
|
+
"\u8BC4\u8BBA\u5DF2\u4FDD\u5B58": "Comment saved",
|
|
345
|
+
"\u6DFB\u52A0\u8BC4\u8BBA": "Add comment",
|
|
346
|
+
"\u8D1F\u8D23\u4EBA": "Owner",
|
|
347
|
+
"\u4EA7\u7269\u8D1F\u8D23\u4EBA": "Artifact owner",
|
|
348
|
+
"\u6B64\u5DE5\u4F5C\u9879\u5DF2\u4EA4\u4ED8\u3002\u6587\u6863\u3001\u8BC4\u8BBA\u4E0E\u8D1F\u8D23\u4EBA\u53EA\u8BFB\uFF0C\u4FDD\u7559\u5386\u53F2\u3001\u6BD4\u8F83\u4E0E\u5BFC\u51FA\uFF1B\u540E\u7EED\u9700\u6C42\u8BF7\u65B0\u5EFA\u5DE5\u4F5C\u9879\u3002": "This work item has been delivered. Documents, comments, and owners are read-only. History, comparison, and export remain available. Create a new work item for further requirements.",
|
|
349
|
+
"\u5F53\u524D\u7248\u672C\u5DF2\u4FDD\u5B58\u5E76\u5B8C\u6210\u590D\u6838\u3002\u63A5\u7EB3\u65F6\u670D\u52A1\u4F1A\u91CD\u65B0\u68C0\u67E5\u8F93\u5165\u3001\u7248\u672C\u4E0E\u5DE5\u7A0B\u6761\u4EF6\u3002": "This revision is saved and reviewed. Acceptance checks the inputs, revision, and project conditions again.",
|
|
350
|
+
"\u672C\u5730\u8349\u7A3F\u5DF2\u4FDD\u7559 \xB7 \u67E5\u770B\u539F\u6587\u53EF\u9009\u4E2D\u590D\u5236\u5230\u65B0\u5DE5\u4F5C\u9879": "Local draft preserved \xB7 View source to copy it to a new work item",
|
|
351
|
+
"\u8349\u7A3F\u4EC5\u4FDD\u7559\u5728\u5F53\u524D\u7A97\u53E3 \xB7 \u8BF7\u4FDD\u5B58\u540E\u518D\u5173\u95ED": "Draft kept only in this window \xB7 Save before closing",
|
|
352
|
+
"\u672C\u5730\u8349\u7A3F\u5DF2\u4FDD\u7559 \xB7 Ctrl+S \u4FDD\u5B58": "Local draft preserved \xB7 Ctrl+S to save",
|
|
353
|
+
"\u66F4\u65B0\u4E8E {value0}": "Updated {value0}",
|
|
354
|
+
"\u4FDD\u5B58\u65B0\u7248\u672C": "Save new revision",
|
|
355
|
+
"\u5DF2\u68C0\u67E5\u5E76\u63A5\u7EB3\u5F53\u524D\u5185\u5BB9": "Reviewed and accepted the current content",
|
|
356
|
+
"\u4EA7\u7269\u5DF2\u63A5\u7EB3\uFF0C\u4E0B\u6E38\u53EF\u4EE5\u6D88\u8D39\u8BE5\u7248\u672C": "Artifact accepted. Downstream steps can use this revision.",
|
|
357
|
+
"\u63A5\u7EB3\u6B64\u7248\u672C": "Accept this revision",
|
|
358
|
+
"\u65B0\u589E": "Added",
|
|
359
|
+
"\u672A\u8DDF\u8E2A\u65B0\u589E": "Untracked",
|
|
360
|
+
"\u4FEE\u6539": "Modified",
|
|
361
|
+
"\u5220\u9664": "Deleted",
|
|
362
|
+
"\u91CD\u547D\u540D": "Renamed",
|
|
363
|
+
"\u7C7B\u578B\u53D8\u66F4": "Type changed",
|
|
364
|
+
"\u5019\u9009\u6216\u6587\u4EF6\u5DF2\u53D8\u66F4\uFF0C\u8BF7\u91CD\u65B0\u8F7D\u5165\u5DEE\u5F02\uFF0C\u907F\u514D\u6DF7\u7528\u4E0D\u540C\u7248\u672C\u3002": "The candidate or file has changed. Reload the diff to avoid mixing revisions.",
|
|
365
|
+
"\u6B64\u6587\u4EF6\u4E0D\u63D0\u4F9B\u6587\u672C\u6B63\u6587\u3002": "Text content is unavailable for this file.",
|
|
366
|
+
"\u65E0\u6CD5\u8BFB\u53D6\u6B63\u6587\uFF0C\u8BF7\u91CD\u8BD5\u3002": "Unable to read the content. Try again.",
|
|
367
|
+
"\u4E8C\u8FDB\u5236": "Binary",
|
|
368
|
+
"\u5B57\u8282": "bytes",
|
|
369
|
+
" \xB7 \u539F {value0} \u5B57\u8282": " \xB7 Previously {value0} bytes",
|
|
370
|
+
"\u539F SHA-256": "Original SHA-256",
|
|
371
|
+
"\u2192 \u65B0": "\u2192 New",
|
|
372
|
+
"\u4E8C\u8FDB\u5236\u6587\u4EF6": "Binary file",
|
|
373
|
+
"\u6B63\u6587\u4E0D\u4F5C\u6587\u672C\u89E3\u91CA\u3002\u8BF7\u4F9D\u636E\u6587\u4EF6\u8DEF\u5F84\u3001\u5927\u5C0F\u548C SHA-256 \u6838\u5BF9\u53D8\u66F4\u3002": "The content is not interpreted as text. Verify the change using the file path, size, and SHA-256.",
|
|
374
|
+
"\u539F SHA-256\uFF1A": "Original SHA-256:",
|
|
375
|
+
"\u65E0\u57FA\u7EBF\u6587\u4EF6": "No baseline file",
|
|
376
|
+
"\u65B0 SHA-256\uFF1A": "New SHA-256:",
|
|
377
|
+
"\u6587\u4EF6\u5DF2\u5220\u9664": "File deleted",
|
|
378
|
+
"\u5F53\u524D\u6750\u6599\u672A\u5B8C\u6574\u663E\u793A": "Some content is not displayed",
|
|
379
|
+
"\u6587\u4EF6\u6216\u8865\u4E01\u8D85\u8FC7\u9996\u6279\u663E\u793A\u5927\u5C0F\u3002": "The file or patch exceeds the initial display limit.",
|
|
380
|
+
"\u5DF2\u8FD4\u56DE": "Returned",
|
|
381
|
+
"\u5B57\u8282\u3002": "bytes.",
|
|
382
|
+
"\u8865\u4E01\u5DF2\u622A\u65AD\uFF0C\u5B8C\u6574\u6B63\u6587\u53EF\u5728\u4E0B\u65B9\u5206\u5757\u8BFB\u53D6\u3002": "The patch is truncated. Read the full content in chunks below.",
|
|
383
|
+
"\u589E\u5220\u7EDF\u8BA1\u4EC5\u8986\u76D6\u5DF2\u663E\u793A\u7684\u5DEE\u5F02\u3002": "Addition and deletion counts cover only the displayed diff.",
|
|
384
|
+
"\u6587\u4EF6\u8DEF\u5F84\u5DF2\u53D8\u66F4\uFF1B\u5185\u5BB9\u5DEE\u5F02\u89C1\u6B63\u6587\u3002": "The file path has changed. Read the content to compare it.",
|
|
385
|
+
"\u6B64\u6587\u4EF6\u6CA1\u6709\u53EF\u663E\u793A\u7684\u6587\u672C hunk\uFF0C\u53EF\u8BFB\u53D6\u539F\u6587\u6838\u5BF9\u3002": "This file has no displayable text hunks. Read the source to verify it.",
|
|
386
|
+
"\u8BFB\u53D6\u5019\u9009\u6B63\u6587": "Read candidate content",
|
|
387
|
+
"\u8BFB\u53D6\u57FA\u7EBF\u6B63\u6587": "Read baseline content",
|
|
388
|
+
"\u6B63\u5728\u8BFB\u53D6\u2026": "Reading\u2026",
|
|
389
|
+
"\u5019\u9009": "Candidate",
|
|
390
|
+
"\u57FA\u7EBF": "Baseline",
|
|
391
|
+
"\u5B8C\u6574\u6B63\u6587 \xB7 SHA-256": "full content \xB7 SHA-256",
|
|
392
|
+
"\u5B57\u8282 \xB7": "bytes \xB7",
|
|
393
|
+
"\u5DF2\u5B8C\u6574\u8BFB\u53D6": "Fully loaded",
|
|
394
|
+
"\u5206\u5757\u8BFB\u53D6\u4E2D": "Partially loaded",
|
|
395
|
+
"\u7EE7\u7EED\u8BFB\u53D6\u4E0B\u4E00\u5757": "Read next chunk",
|
|
396
|
+
"\u5DF2\u63A5\u7EB3\u4EE3\u7801": "Accepted code",
|
|
397
|
+
"\u5019\u9009\u4EE3\u7801": "Candidate code",
|
|
398
|
+
"\u67E5\u770B\u5DF2\u63A5\u7EB3\u7684\u4EE3\u7801\u5DEE\u5F02\u3001\u72EC\u7ACB\u590D\u6838\u4E0E\u9A8C\u8BC1\u8BC1\u636E\u3002": "View the accepted code diff, independent review, and verification evidence.",
|
|
399
|
+
"\u68C0\u67E5\u6587\u4EF6\u4E0E\u771F\u5B9E\u6E90\u7801\u5DEE\u5F02\uFF0C\u518D\u4F9D\u636E\u540C\u4E00\u7248\u672C\u7684\u8BC1\u636E\u63A5\u7EB3\u3002": "Inspect the files and source diff, then accept using evidence for the same revision.",
|
|
400
|
+
"\u4EE3\u7801\u6539\u52A8\u5C06\u5728\u8FD9\u91CC\u6C47\u96C6": "Code changes appear here",
|
|
401
|
+
"\u5148\u5B8C\u6210\u9700\u6C42\u3001\u8BBE\u8BA1\u548C\u4EFB\u52A1\u63A5\u7EB3\uFF0C\u518D\u8FD0\u884C\u4EE3\u7801\u5B9E\u73B0\u3002": "Accept the requirements, design, and tasks, then run implementation.",
|
|
402
|
+
"\u8865\u4E01\u5C1A\u672A\u8BFB\u53D6": "Patch not loaded",
|
|
403
|
+
"\u5019\u9009\u6811": "Candidate tree",
|
|
404
|
+
"\u6B63\u5728\u8BFB\u53D6\u5DEE\u5F02\u2026": "Loading diff\u2026",
|
|
405
|
+
"\u65E0\u6CD5\u8BFB\u53D6\u5DEE\u5F02": "Unable to load diff",
|
|
406
|
+
"\u91CD\u8BD5": "Retry",
|
|
407
|
+
"\u4E2A\u6587\u4EF6 \xB7": "files \xB7",
|
|
408
|
+
"{count} \u4E2A\u6587\u4EF6": "Files: {count}",
|
|
409
|
+
"\u6750\u6599\u5DF2\u5B8C\u6574\u8FD4\u56DE": "All content returned",
|
|
410
|
+
"\u90E8\u5206\u6750\u6599\u9700\u7EE7\u7EED\u8BFB\u53D6": "More content available to load",
|
|
411
|
+
"\u4EE3\u7801\u5DEE\u5F02\u663E\u793A\u65B9\u5F0F": "Code diff layout",
|
|
412
|
+
"\u7EDF\u4E00": "Unified",
|
|
413
|
+
"\u5206\u5C4F": "Split",
|
|
414
|
+
"\u6298\u53E0\u5168\u90E8": "Collapse all",
|
|
415
|
+
"\u5C55\u5F00\u5168\u90E8": "Expand all",
|
|
416
|
+
"\u91CD\u65B0\u8F7D\u5165\u5DEE\u5F02": "Reload diff",
|
|
417
|
+
"\u6B64\u5019\u9009\u6CA1\u6709\u4EE3\u7801\u5DEE\u5F02\u3002": "This candidate has no code changes.",
|
|
418
|
+
"\u4EE3\u7801\u5DF2\u63A5\u7EB3": "Code accepted",
|
|
419
|
+
"\u672C\u5019\u9009\u5DF2\u63A5\u7EB3\uFF0C\u76F8\u5173\u4EE3\u7801\u5DEE\u5F02\u3001\u72EC\u7ACB\u590D\u6838\u4E0E\u9A8C\u8BC1\u8BC1\u636E\u4FDD\u7559\u4F9B\u67E5\u9605\u3002\u540E\u7EED\u9700\u6C42\u8BF7\u65B0\u5EFA\u5DE5\u4F5C\u9879\u3002": "This candidate is accepted. Its code diff, independent review, and verification evidence remain available. Create a new work item for further requirements.",
|
|
420
|
+
"\u63A5\u7EB3\u8BB0\u5F55\u66F4\u65B0\u4E8E": "Acceptance updated",
|
|
421
|
+
"\xB7 \u4EE3\u7801": "\xB7 Code",
|
|
422
|
+
"\xB7 \u57FA\u7EBF": "\xB7 Baseline",
|
|
423
|
+
"\u63A5\u7EB3\u6761\u4EF6\u9884\u68C0": "Acceptance precheck",
|
|
424
|
+
"\u91CD\u65B0\u68C0\u67E5": "Check again",
|
|
425
|
+
"\u6B63\u5728\u68C0\u67E5\u5F53\u524D\u7248\u672C\u4E0E\u8BC1\u636E\u2026": "Checking the current revision and evidence\u2026",
|
|
426
|
+
"\u9884\u68C0\u8BFB\u53D6\u5931\u8D25\uFF1A": "Unable to load precheck:",
|
|
427
|
+
"\u622A\u81F3\u68C0\u67E5\u65F6\u523B\uFF0C\u670D\u52A1\u7AEF\u672A\u53D1\u73B0\u63A5\u7EB3\u963B\u585E\u3002": "No acceptance blockers were found at the time of this check.",
|
|
428
|
+
"\u5F53\u524D\u5B58\u5728\u4EE5\u4E0B\u63A5\u7EB3\u963B\u585E\uFF1A": "The following issues block acceptance:",
|
|
429
|
+
"\u68C0\u67E5\u4E8E": "Checked",
|
|
430
|
+
"\xB7 \u6811": "\xB7 Tree",
|
|
431
|
+
"\u9884\u68C0\u4E0E\u5DF2\u663E\u793A\u5DEE\u5F02\u7684\u5019\u9009\u6811\u4E0D\u540C\uFF0C\u8BF7\u91CD\u65B0\u8F7D\u5165\u5DEE\u5F02\u5E76\u68C0\u67E5\u3002": "The precheck and displayed diff refer to different candidate trees. Reload and inspect the diff.",
|
|
432
|
+
"\u9884\u68C0\u53EA\u8BF4\u660E\u68C0\u67E5\u65F6\u523B\u7684\u6761\u4EF6\uFF1B\u63A5\u7EB3\u65F6\u670D\u52A1\u4F1A\u518D\u6B21\u68C0\u67E5\u7248\u672C\u3001\u5DE5\u4F5C\u533A\u3001\u6D4B\u8BD5\u4E0E\u72EC\u7ACB\u590D\u6838\u8BC1\u636E\u3002": "The precheck reflects conditions at the time of checking. Acceptance checks the revision, workspace, tests, and independent review evidence again.",
|
|
433
|
+
"\u4EE3\u7801\u5DF2\u63A5\u7EB3 \xB7 \u63A5\u7EB3\u4E0E\u9A8C\u8BC1\u8BC1\u636E\u5DF2\u4FDD\u7559": "Code accepted \xB7 Acceptance and verification evidence preserved",
|
|
434
|
+
"\u8BE5\u5019\u9009\u6709\u72EC\u7ACB\u590D\u6838\u8BB0\u5F55": "This candidate has an independent review record",
|
|
435
|
+
"\u9700\u8981\u72EC\u7ACB\u4EE3\u7801\u590D\u6838": "Independent code review required",
|
|
436
|
+
"\u5019\u9009\u5DF2\u96C6\u6210\u5230\u5DE5\u4F5C\u9879\u5206\u652F": "Candidate integrated into the work item branch",
|
|
437
|
+
"\u63A5\u7EB3\u4EE3\u7801": "Accept code",
|
|
438
|
+
"\u9A8C\u8BC1\u8BC1\u636E": "Verification evidence",
|
|
439
|
+
"\u91CD\u65B0\u9A8C\u8BC1": "Run verification again",
|
|
440
|
+
"\u5DF2\u6267\u884C\u9A8C\u8BC1\u547D\u4EE4": "Verification commands executed",
|
|
441
|
+
"\u5185\u5BB9\u5DF2\u6539\u53D8": "Content changed",
|
|
442
|
+
"\u901A\u8FC7": "Passed",
|
|
443
|
+
"\u5931\u8D25": "Failed",
|
|
444
|
+
"\u4EE3\u7801": "Code",
|
|
445
|
+
"\xB7 \u9000\u51FA\u7801": "\xB7 Exit code",
|
|
446
|
+
"\u6B64\u5019\u9009\u672A\u8BB0\u5F55\u9A8C\u8BC1\u8BC1\u636E\u3002": "No verification evidence was recorded for this candidate.",
|
|
447
|
+
"\u5C1A\u672A\u4EA7\u751F\u9A8C\u8BC1\u8BC1\u636E\u3002\u53EF\u901A\u8FC7\u53F3\u4E0A\u89D2\u91CD\u65B0\u8FD0\u884C\u9A8C\u8BC1\u547D\u4EE4\u3002": "No verification evidence yet. Run verification again using the button above.",
|
|
448
|
+
"\u5B9E\u73B0\u4EFB\u52A1": "Implementation tasks",
|
|
449
|
+
"\u8FD8\u6CA1\u6709\u5B9E\u73B0\u4EFB\u52A1\u3002": "No implementation tasks yet.",
|
|
450
|
+
"\u590D\u6838\u53D1\u73B0": "Review findings",
|
|
451
|
+
"\u963B\u585E": "Blocker",
|
|
452
|
+
"\u963B\u585E\u95EE\u9898": "Blocker",
|
|
453
|
+
"\u8B66\u544A": "Warning",
|
|
454
|
+
"\u4F8B\u5916\u7406\u7531": "Waiver reason",
|
|
455
|
+
"\u8BF4\u660E\u4E3A\u4F55\u5141\u8BB8\u8BE5\u8B66\u544A\u8FDB\u5165\u540E\u7EED\u6B65\u9AA4": "Explain why this warning may proceed to later steps",
|
|
456
|
+
"\u53D6\u6D88": "Cancel",
|
|
457
|
+
"\u5DF2\u8BB0\u5F55\u4F8B\u5916\u51B3\u7B56": "Waiver decision recorded",
|
|
458
|
+
"\u786E\u8BA4\u4F8B\u5916": "Confirm waiver",
|
|
459
|
+
"\u8BB0\u5F55\u4F8B\u5916\u7406\u7531": "Record waiver reason",
|
|
460
|
+
"\u5F53\u524D\u6CA1\u6709\u672A\u89E3\u51B3\u7684\u590D\u6838\u53D1\u73B0": "No unresolved review findings",
|
|
461
|
+
"\u539F\u884C {value0}": "Original line {value0}",
|
|
462
|
+
"\u65B0\u884C {value0}": "New line {value0}",
|
|
463
|
+
"\u4E0A\u4E00\u5904\u53D8\u66F4": "Previous change",
|
|
464
|
+
"\u65E0\u53D8\u66F4": "No changes",
|
|
465
|
+
"\u4E0B\u4E00\u5904\u53D8\u66F4": "Next change",
|
|
466
|
+
"# \u9879\u76EE\u7AE0\u7A0B\n\n## \u5DE5\u7A0B\u539F\u5219\n- \u9700\u6C42\u4E0E\u4EFB\u52A1\u5177\u6709\u7A33\u5B9A ID\u3002\n- \u4EE3\u7801\u6539\u52A8\u5FC5\u987B\u6709\u53EF\u8FD0\u884C\u7684\u6D4B\u8BD5\u3002\n- \u9700\u6C42\u3001\u8BBE\u8BA1\u548C\u5B9E\u73B0\u9700\u8981\u72EC\u7ACB\u590D\u6838\u3002\n": "# Project Constitution\n\n## Engineering Principles\n- Requirements and tasks have stable IDs.\n- Code changes must have runnable tests.\n- Requirements, design, and implementation require independent review.\n",
|
|
467
|
+
"\u9879\u76EE\u7AE0\u7A0B\u5DF2\u4FDD\u5B58\u5230\u4ED3\u5E93\uFF1B\u65B0\u5C1D\u8BD5\u4F7F\u7528\u6B64\u5185\u5BB9": "Project constitution saved to the repository. New attempts use this content.",
|
|
468
|
+
"\u9879\u76EE\u7AE0\u7A0B": "Project constitution",
|
|
469
|
+
"\u9879\u76EE\u7AE0\u7A0B\u5DF2\u4ECE\u4ED3\u5E93\u91CD\u65B0\u8BFB\u53D6": "Project constitution reloaded from the repository",
|
|
470
|
+
"\u5237\u65B0\u8BFB\u53D6": "Reload",
|
|
471
|
+
"\u9879\u76EE\u7AE0\u7A0B\u8BFB\u53D6\u5931\u8D25": "Unable to read project constitution",
|
|
472
|
+
"\u8BF7\u4FEE\u590D\u6587\u4EF6\u5185\u5BB9\u540E\u5237\u65B0\u8BFB\u53D6\uFF0C\u8BFB\u53D6\u6062\u590D\u524D\u65E0\u6CD5\u542F\u52A8\u5DE5\u7A0B\u6B65\u9AA4\u3002": "Fix the file and reload it. Workflow steps cannot start until it can be read.",
|
|
473
|
+
"\u8BFB\u53D6\u4ED3\u5E93\u6839\u76EE\u5F55\u7684 AGENT.md \u548C AGENTS.md\u3002\u7AE0\u7A0B\u5185\u5BB9\u4F1A\u968F\u9700\u6C42\u3001\u8BBE\u8BA1\u3001\u5B9E\u73B0\u53CA\u590D\u6838\u56FA\u5B9A\u5230\u6BCF\u6B21\u5C1D\u8BD5\u4E2D\u3002": "Reads AGENT.md and AGENTS.md from the repository root. Each requirements, design, implementation, and review attempt retains a snapshot of the constitution.",
|
|
474
|
+
"\u9879\u76EE\u7AE0\u7A0B\u6587\u4EF6": "Project constitution file",
|
|
475
|
+
"\u5185\u5BB9 {value0}": "Content {value0}",
|
|
476
|
+
"\u4FDD\u5B58\u540E\u521B\u5EFA\u6B64\u6587\u4EF6": "This file will be created when saved",
|
|
477
|
+
"\u7AE0\u7A0B\u6B63\u6587": "Constitution content",
|
|
478
|
+
"\u9879\u76EE\u7AE0\u7A0B\u6B63\u6587": "Project constitution content",
|
|
479
|
+
"\u6D4F\u89C8\u5668\u5B58\u50A8\u4E0D\u53EF\u7528\uFF0C\u7AE0\u7A0B\u8349\u7A3F\u4EC5\u4FDD\u7559\u5728\u5F53\u524D\u7A97\u53E3\u3002\u8BF7\u4FDD\u5B58\u5230\u4ED3\u5E93\u540E\u518D\u5173\u95ED\u7A97\u53E3\u3002": "Browser storage is unavailable. The constitution draft is kept only in this window. Save it to the repository before closing.",
|
|
480
|
+
"\u4ED3\u5E93\u7AE0\u7A0B\u5DF2\u6709\u65B0\u5185\u5BB9\uFF0C\u8349\u7A3F\u5DF2\u4FDD\u7559": "The repository constitution has changed. Your draft is preserved.",
|
|
481
|
+
"\u67E5\u770B\u4ED3\u5E93\u5F53\u524D\u5185\u5BB9": "View current repository content",
|
|
482
|
+
"\u8F7D\u5165\u5F53\u524D\u5185\u5BB9": "Load current content",
|
|
483
|
+
"\u4FDD\u5B58\u5230\u4ED3\u5E93\u540E\u751F\u6548\uFF0C\u5DF2\u6709\u5DE5\u7A0B\u7ED3\u679C\u4F1A\u63D0\u793A\u8FC7\u671F\u3002Ctrl+S / Ctrl+Enter \u4FDD\u5B58\u3002": "Changes take effect after saving to the repository. Existing results will be marked stale. Ctrl+S / Ctrl+Enter to save.",
|
|
484
|
+
"\u4FDD\u5B58\u9879\u76EE\u7AE0\u7A0B": "Save project constitution",
|
|
485
|
+
"\u6700\u591A\u6DFB\u52A0 20 \u4EFD\u9700\u6C42\u6587\u6863": "You can add up to 20 requirements documents",
|
|
486
|
+
"\u652F\u6301 Markdown \u548C TXT\uFF0C\u8BF7\u5C06\u5176\u4ED6\u683C\u5F0F\u5BFC\u51FA\u4E3A\u6587\u672C\u540E\u4E0A\u4F20": "Markdown and TXT are supported. Export other formats as text before uploading.",
|
|
487
|
+
"{value0} \u8D85\u8FC7 512 KiB": "{value0} exceeds 512 KiB",
|
|
488
|
+
"{value0} \u5FC5\u987B\u4F7F\u7528 UTF-8 \u7F16\u7801": "{value0} must use UTF-8 encoding",
|
|
489
|
+
"{value0} \u4E3A\u7A7A\u6216\u5305\u542B\u4E8C\u8FDB\u5236\u5185\u5BB9": "{value0} is empty or contains binary content",
|
|
490
|
+
"\u6587\u6863\u5DF2\u52A0\u5165\u8349\u7A3F\uFF1B\u4FDD\u5B58\u9700\u6C42\u540E AI \u624D\u4F1A\u4F7F\u7528": "Documents added to the draft. Save the requirements before AI can use them.",
|
|
491
|
+
"\u9700\u6C42\u6587\u6863": "Requirements documents",
|
|
492
|
+
"\u4E0A\u4F20\u6587\u6863": "Upload documents",
|
|
493
|
+
"\u8865\u5145\u9700\u6C42-{value0}.md": "additional-requirements-{value0}.md",
|
|
494
|
+
"\u7C98\u8D34\u6587\u6863": "Paste document",
|
|
495
|
+
"\u4E0A\u4F20\u9700\u6C42\u6587\u6863": "Upload requirements documents",
|
|
496
|
+
"\u652F\u6301 UTF-8 Markdown / TXT\u3002\u6BCF\u4EFD\u4E0D\u8D85\u8FC7 512 KiB\uFF0C\u9700\u6C42\u603B\u8BA1\u4E0D\u8D85\u8FC7 1 MiB\u3002": "Supports UTF-8 Markdown / TXT. Up to 512 KiB per document and 1 MiB for all requirements.",
|
|
497
|
+
"\u4ED3\u5E93\u9700\u6C42\u6587\u6863\u8DEF\u5F84": "Repository requirements document path",
|
|
498
|
+
"\u4ED3\u5E93\u76F8\u5BF9\u8DEF\u5F84\uFF0C\u4F8B\u5982 docs/requirements.md": "Repository-relative path, for example docs/requirements.md",
|
|
499
|
+
"\u4ED3\u5E93\u6587\u6863\u5DF2\u52A0\u5165\u8349\u7A3F\uFF1B\u4FDD\u5B58\u540E\u4F7F\u7528\u6B64\u5185\u5BB9\u5FEB\u7167": "Repository document added to the draft. Its content snapshot will be used after saving.",
|
|
500
|
+
"\u4ECE\u4ED3\u5E93\u5BFC\u5165": "Import from repository",
|
|
501
|
+
"\u628A PRD\u3001\u9A8C\u6536\u6761\u4EF6\u6216\u80CC\u666F\u6750\u6599\u653E\u5728\u8FD9\u91CC": "Add PRDs, acceptance criteria, or background material here",
|
|
502
|
+
"\u6587\u6863\u6B63\u6587\u4F1A\u968F\u9700\u6C42\u7248\u672C\u4F20\u7ED9 AI\u3002\u53EA\u6709\u9700\u6C42\u6B63\u6587\u65F6\u4E5F\u53EF\u4EE5\u5F00\u59CB\u5206\u6790\u3002": "Document content is sent to AI with the requirements revision. You can also start analysis with just the requirements text.",
|
|
503
|
+
"\u4ED3\u5E93 \xB7 {value0}": "Repository \xB7 {value0}",
|
|
504
|
+
"\u672C\u5730\u4E0A\u4F20": "Local upload",
|
|
505
|
+
"\u5B57\u7B26": "characters",
|
|
506
|
+
"{count} \u5B57\u7B26": "Characters: {count}",
|
|
507
|
+
"\u6587\u6863\u540D\u79F0": "Document name",
|
|
508
|
+
"\u9700\u6C42\u6587\u6863 {value0} \u540D\u79F0": "Requirements document {value0} name",
|
|
509
|
+
"\u9700\u6C42\u6587\u6863 {value0} \u6B63\u6587": "Requirements document {value0} content",
|
|
510
|
+
"\u79FB\u9664\u6B64\u6587\u6863": "Remove document",
|
|
511
|
+
"\u9700\u6C42\u5DF2\u4FDD\u5B58\uFF1B\u65B0\u7684\u5206\u6790\u5C06\u8BFB\u53D6\u6B64\u7248\u672C": "Requirements saved. New analysis uses this revision.",
|
|
512
|
+
"\u9700\u6C42\u8F93\u5165": "Requirements input",
|
|
513
|
+
"\u63CF\u8FF0\u8981\u505A\u4EC0\u4E48\uFF0C\u628A\u5206\u6790\u4F9D\u636E\u653E\u5728\u540C\u4E00\u4E2A\u5730\u65B9\u3002": "Describe what to build and keep the analysis inputs together.",
|
|
514
|
+
"\u8FD4\u56DE\u5F00\u53D1\u6D41\u7A0B": "Back to workflow",
|
|
515
|
+
"\u7C98\u8D34\u9700\u6C42\uFF0C\u5199\u6E05\u7528\u6237\u573A\u666F\u3001\u529F\u80FD\u8FB9\u754C\u3001\u7EA6\u675F\u548C\u9A8C\u6536\u6761\u4EF6\u3002\u4E5F\u53EF\u4EE5\u901A\u8FC7\u4E0B\u65B9\u6587\u6863\u63D0\u4F9B\u5B8C\u6574\u9700\u6C42\u3002": "Paste requirements with user scenarios, scope, constraints, and acceptance criteria. You can also provide full requirements in the documents below.",
|
|
516
|
+
"\u9700\u6C42\u5DF2\u6709\u65B0\u7248\u672C\uFF0C\u5F53\u524D\u8349\u7A3F\u5DF2\u4FDD\u7559": "A newer requirements revision is available. Your draft is preserved.",
|
|
517
|
+
"\u53F3\u4FA7\u53EF\u67E5\u770B\u6700\u65B0\u7248\u672C\u3002\u6BD4\u8F83\u540E\u9009\u62E9\u5982\u4F55\u5904\u7406\u8349\u7A3F\u3002": "View the latest revision on the right. Compare it before deciding how to handle your draft.",
|
|
518
|
+
"\u4E22\u5F03\u8349\u7A3F\uFF0C\u8F7D\u5165\u6700\u65B0\u9700\u6C42": "Discard draft and load latest requirements",
|
|
519
|
+
"\u5DF2\u6BD4\u8F83\uFF0C\u4FDD\u7559\u6211\u7684\u8349\u7A3F": "Compared \xB7 Keep my draft",
|
|
520
|
+
"\u5DE5\u4F5C\u9879\u5DF2\u7ECF\u63A5\u7EB3\u3002\u540E\u7EED\u9700\u6C42\u8BF7\u521B\u5EFA\u65B0\u7684\u5DE5\u4F5C\u9879\u3002": "This work item has been accepted. Create a new work item for further requirements.",
|
|
521
|
+
"\u6D4F\u89C8\u5668\u5B58\u50A8\u7A7A\u95F4\u4E0D\u8DB3\uFF0C\u8349\u7A3F\u4EC5\u4FDD\u7559\u5728\u5F53\u524D\u7A97\u53E3\u3002\u8BF7\u5148\u4FDD\u5B58\u9700\u6C42\u518D\u5173\u95ED\u7A97\u53E3\u3002": "Browser storage is full. Your draft is kept only in this window. Save the requirements before closing.",
|
|
522
|
+
"\u6709\u672A\u4FDD\u5B58\u8349\u7A3F \xB7 AI \u4F7F\u7528\u5DF2\u4FDD\u5B58\u7248\u672C \xB7 Ctrl+S \u4FDD\u5B58": "Unsaved draft \xB7 AI uses the saved revision \xB7 Ctrl+S to save",
|
|
523
|
+
"\u5DF2\u4FDD\u5B58 \xB7 {value0}": "Saved \xB7 {value0}",
|
|
524
|
+
"\u653E\u5F03\u8349\u7A3F": "Discard draft",
|
|
525
|
+
"\u4FDD\u5B58\u9700\u6C42": "Save requirements",
|
|
526
|
+
"\u5DF2\u4FDD\u5B58\u7684\u5206\u6790\u4F9D\u636E": "Saved analysis inputs",
|
|
527
|
+
"\u65B0\u5C1D\u8BD5\u8BFB\u53D6\u5DF2\u4FDD\u5B58\u6B63\u6587\u548C\u5168\u90E8\u6587\u6863\u3002": "New attempts use the saved text and all documents.",
|
|
528
|
+
"\u67E5\u770B\u9700\u6C42\u5386\u53F2\u7248\u672C": "View requirements history",
|
|
529
|
+
" \xB7 \u5F53\u524D\u8F93\u5165": " \xB7 Current input",
|
|
530
|
+
" \xB7 \u5386\u53F2\u8BB0\u5F55": " \xB7 History",
|
|
531
|
+
"\u4EE5\u9644\u52A0\u9700\u6C42\u6587\u6863\u4E3A\u51C6": "See attached requirements documents",
|
|
532
|
+
"\u4FDD\u5B58\u65B0\u9700\u6C42\u540E\uFF0C\u5DF2\u6709\u5206\u6790\u3001\u590D\u6838\u53CA\u4E0B\u6E38\u7ED3\u679C\u4F1A\u63D0\u793A\u8FC7\u671F\u3002\u65E7\u5C1D\u8BD5\u4FDD\u7559\u5176\u539F\u59CB\u8F93\u5165\uFF0C\u4FBF\u4E8E\u5BF9\u6BD4\u3002": "Saving new requirements marks existing analysis, reviews, and downstream results as stale. Previous attempts retain their original inputs for comparison.",
|
|
533
|
+
"\u5DE5\u7A0B\u5DE5\u4F5C\u7A7A\u95F4": "Project workspace",
|
|
534
|
+
"\u9009\u62E9\u5DE5\u7A0B\u5DE5\u4F5C\u7A7A\u95F4": "Choose project workspace",
|
|
535
|
+
"\u6253\u5F00\u9879\u76EE\u76EE\u5F55\u521B\u5EFA\u5DE5\u4F5C\u7A7A\u95F4": "Open a project folder to create a workspace",
|
|
536
|
+
"\u5DE5\u7A0B\u5DE5\u4F5C\u7A7A\u95F4\u9009\u9879": "Project workspace options",
|
|
537
|
+
"\u5148\u8FD0\u884C": "Run",
|
|
538
|
+
"\uFF0C\u5E76\u5728 OpenCode \u4E2D\u914D\u7F6E\u6A21\u578B\u4F9B\u5E94\u5546\uFF0C\u518D\u4FDD\u5B58\u670D\u52A1\u8FDE\u63A5\u5E76\u5237\u65B0\u6A21\u578B\u76EE\u5F55\u3002": ", configure model providers in OpenCode, then save the service connection and refresh the model catalog.",
|
|
539
|
+
"\u8BF7\u4F7F\u7528\u53EF\u4FE1\u7684 OpenCode \u7528\u6237\u914D\u7F6E\u3002\u5F53\u524D\u4E0D\u52A0\u8F7D\u5DE5\u4F5C\u533A\u53CA\u7236\u76EE\u5F55\u4E2D\u7684\u9879\u76EE\u914D\u7F6E\u548C\u81EA\u5B9A\u4E49\u6269\u5C55\uFF1B\u4F9B\u5E94\u5546\u8BF7\u914D\u7F6E\u5728\u7528\u6237\u7EA7\u8BBE\u7F6E\u4E2D\u3002": "Use a trusted OpenCode user configuration. Project configurations and custom extensions in the workspace or parent directories are not loaded. Configure providers in user settings.",
|
|
540
|
+
"OpenCode \u670D\u52A1\u5730\u5740": "OpenCode service URL",
|
|
541
|
+
"\u7528\u6237\u540D \xB7 \u53EF\u9009": "Username \xB7 Optional",
|
|
542
|
+
"\u542F\u7528\u670D\u52A1\u8BA4\u8BC1\u65F6\u586B\u5199": "Enter if service authentication is enabled",
|
|
543
|
+
"\u5BC6\u7801 \xB7 \u53EF\u9009": "Password \xB7 Optional",
|
|
544
|
+
"\u5DF2\u4FDD\u5B58\uFF1B\u7559\u7A7A\u4FDD\u7559\u539F\u5BC6\u7801": "Saved; leave blank to keep the existing password",
|
|
545
|
+
"\u672A\u8BBE\u7F6E\u5BC6\u7801": "No password set",
|
|
546
|
+
"\u53D6\u6D88\u6E05\u9664\u5BC6\u7801": "Cancel password removal",
|
|
547
|
+
"\u6E05\u9664\u5DF2\u4FDD\u5B58\u5BC6\u7801": "Clear saved password",
|
|
548
|
+
"\u4FDD\u5B58\u8FDE\u63A5\u65F6\u5C06\u6E05\u9664\u5BC6\u7801\u3002": "Saving the connection will remove the password.",
|
|
549
|
+
"OpenCode \u670D\u52A1\u8FDE\u63A5\u5DF2\u4FDD\u5B58\uFF0C\u6A21\u578B\u76EE\u5F55\u5DF2\u5237\u65B0": "OpenCode service connection saved and model catalog refreshed",
|
|
550
|
+
"\u4FDD\u5B58 OpenCode \u8FDE\u63A5": "Save OpenCode connection",
|
|
551
|
+
"\u670D\u52A1\u8FDE\u63A5\u4FDD\u5B58\u5728\u672C\u673A\uFF0C\u4F9B\u6240\u6709\u5DE5\u7A0B\u4F7F\u7528\u3002\u89D2\u8272\u6A21\u578B\u548C\u6267\u884C\u5E95\u5EA7\u968F\u5F53\u524D\u5DE5\u7A0B\u4FDD\u5B58\u3002": "The service connection is stored locally for all projects. Role models and the execution harness are saved per project.",
|
|
552
|
+
"[\u56FE\u7247\uFF1A{value0}]": "[Image: {value0}]",
|
|
553
|
+
"\u6587\u6863\u76EE\u5F55": "Document contents",
|
|
554
|
+
"\u76EE\u5F55": "Contents",
|
|
555
|
+
"\u6536\u8D77\u4E0A\u4E0B\u6587": "Hide context",
|
|
556
|
+
"\u6B65\u9AA4\u4E0A\u4E0B\u6587": "Step context",
|
|
557
|
+
"\u8C03\u6574\u6B65\u9AA4\u4E0A\u4E0B\u6587\u5BBD\u5EA6": "Resize step context",
|
|
558
|
+
"\u5173\u95ED\u6B65\u9AA4\u4E0A\u4E0B\u6587": "Close step context",
|
|
559
|
+
"\u5F53\u524D\u5DE5\u4F5C\u9879": "Current work item",
|
|
560
|
+
"\u5173\u95ED\u8BE6\u60C5": "Close details"
|
|
561
|
+
};
|
|
562
|
+
|
|
563
|
+
// packages/i18n/web-workflow.ts
|
|
564
|
+
var messages3 = {
|
|
565
|
+
"\u9700\u6C42\u6709\u672A\u4FDD\u5B58\u8349\u7A3F\u6216\u7248\u672C\u51B2\u7A81\uFF0C\u8BF7\u5148\u4FDD\u5B58\u6216\u5904\u7406\u51B2\u7A81": "Requirements have an unsaved draft or a version conflict. Save them or resolve the conflict first.",
|
|
566
|
+
"\u5C1A\u672A\u9009\u62E9\u5F53\u524D\u5E95\u5EA7\u7684\u8FDE\u63A5\u4E0E\u6A21\u578B\uFF0C\u8BF7\u5728\u6B65\u9AA4\u4E0A\u4E0B\u6587\u4E2D\u914D\u7F6E": "No connection and model selected for this backend. Configure them in the step context.",
|
|
567
|
+
"\u5019\u9009\u4EE3\u7801\u5DF2\u63A5\u7EB3": "Candidate code accepted",
|
|
568
|
+
"\u9636\u6BB5\u5DF2\u6D3E\u53D1\uFF0C\u8FD0\u884C\u7ED3\u679C\u4F1A\u81EA\u52A8\u66F4\u65B0": "Step dispatched. Results will update automatically.",
|
|
569
|
+
" \u5DF2\u8FD0\u884C {value1} \u5206 {value2} \u79D2\u3002": " Running for {value1} min {value2} sec.",
|
|
570
|
+
"\u5386\u53F2\u8FD0\u884C\u7684\u6B65\u9AA4": "Step from a previous run",
|
|
571
|
+
"\u6B65\u9AA4\u4E0A\u4E0B\u6587": "Step context",
|
|
572
|
+
"\u9009\u62E9\u6B65\u9AA4": "Select a step",
|
|
573
|
+
"\u6267\u884C\u914D\u7F6E": "Execution settings",
|
|
574
|
+
"\u9009\u62E9\u8FDE\u63A5\u4E0E\u6A21\u578B": "Select a connection and model",
|
|
575
|
+
"\xB7 \u5F53\u524D\u914D\u7F6E": "\xB7 Current settings",
|
|
576
|
+
"\u5F53\u524D\u5E95\u5EA7\uFF1A{backend}\u3002\u8282\u70B9\u8986\u76D6\u4F18\u5148\u4E8E\u6D41\u7A0B\u89D2\u8272\u548C\u9879\u76EE\u9ED8\u8BA4\uFF0C\u66F4\u6362\u914D\u7F6E\u7528\u4E8E\u65B0\u5C1D\u8BD5\u3002": "Current backend: {backend}. Step overrides take precedence over workflow roles and project defaults. Changes apply to new attempts.",
|
|
577
|
+
"\u5F53\u524D\u6F84\u6E05\u4F7F\u7528 {target}\uFF1B\u672A\u91CD\u65B0\u9009\u62E9\u65F6\u6CBF\u7528\u539F\u6267\u884C\u914D\u7F6E\u3002": "This clarification uses {target}. Keep the original execution settings unless you select another target.",
|
|
578
|
+
"\u9879\u76EE\u7AE0\u7A0B": "Project constitution",
|
|
579
|
+
"\u8865\u5145\u5DE5\u7A0B\u89C4\u5219": "Additional engineering rules",
|
|
580
|
+
"\u5F53\u524D\u5185\u5BB9 {hash} \xB7 \u67E5\u770B / \u7F16\u8F91": "Current content {hash} \xB7 View / edit",
|
|
581
|
+
"\u8F93\u5165\u4F9D\u636E": "Input sources",
|
|
582
|
+
"\u5DF2\u4FDD\u5B58\u9700\u6C42\u4E0E\u6587\u6863": "Saved requirements and documents",
|
|
583
|
+
"\u7248\u672C {version} \xB7 {count} \u4EFD\u6587\u6863": "Version {version} \xB7 {count} documents",
|
|
584
|
+
" \xB7 \u672C\u5730\u53E6\u6709\u8349\u7A3F": " \xB7 Local draft available",
|
|
585
|
+
"\u5DF2\u63A5\u7EB3\u4F9D\u636E": "Accepted input",
|
|
586
|
+
"\u5F53\u524D\u5019\u9009": "Current candidate",
|
|
587
|
+
"\u7B49\u5F85\u7B26\u5408\u6761\u4EF6\u7684\u4E0A\u6E38\u4EA7\u7269": "Waiting for an eligible upstream artifact",
|
|
588
|
+
"\u4E0A\u65B9\u4E3A\u5F53\u524D\u6750\u6599\uFF1B\u672C\u6B21\u5386\u53F2\u6267\u884C\u5B9E\u9645\u4F7F\u7528\u7684\u7248\u672C\u89C1\u8FD0\u884C\u8BE6\u60C5\u3002": "The materials above are current. See run details for the versions used by this historical execution.",
|
|
589
|
+
"\u65B0\u5C1D\u8BD5\u56FA\u5B9A\u5F53\u524D\u7AE0\u7A0B\u4E0E\u5DF2\u4FDD\u5B58\u9700\u6C42\uFF1B\u539F\u6267\u884C\u7684\u51BB\u7ED3\u4F9D\u636E\u89C1\u8FD0\u884C\u8BE6\u60C5\u3002": "New attempts freeze the current constitution and saved requirements. See run details for the original execution's frozen inputs.",
|
|
590
|
+
"\u6267\u884C\u76EE\u6807": "Execution objective",
|
|
591
|
+
"\u6267\u884C\u9879\u76EE\u9A8C\u8BC1\u547D\u4EE4\uFF0C\u6838\u5BF9\u9000\u51FA\u7801\u4E0E\u5019\u9009\u4EE3\u7801\u54C8\u5E0C\u3002": "Run the project's verification commands and check exit codes and the candidate code hash.",
|
|
592
|
+
"\u68C0\u67E5\u5DE5\u7A0B\u6761\u4EF6\u5E76\u4FDD\u5B58\u63A5\u7EB3\u51B3\u7B56\u3002": "Check engineering conditions and save the acceptance decision.",
|
|
593
|
+
"\u7B2C {number} \u6B21\u5C1D\u8BD5 \xB7 \u67E5\u770B\u51BB\u7ED3\u8F93\u5165\u4E0E\u8EAB\u4EFD": "Attempt {number} \xB7 View frozen inputs and identity",
|
|
594
|
+
"\u5F53\u524D\u4EFB\u52A1": "Current task",
|
|
595
|
+
"\u56FA\u5B9A\u67E5\u770B": "Pinned view",
|
|
596
|
+
" \xB7 \u5386\u53F2\u8FD0\u884C": " \xB7 Historical run",
|
|
597
|
+
"\u8DDF\u968F\u5F53\u524D\u4EFB\u52A1": "Follow current task",
|
|
598
|
+
"\u5C1A\u65E0\u6B65\u9AA4": "No steps yet",
|
|
599
|
+
"\u56DE\u5230\u5F53\u524D\u4EFB\u52A1": "Back to current task",
|
|
600
|
+
"\u67E5\u770B\u5168\u90E8 {count} \u9879\u5F85\u5904\u7406": "View all {count} pending items",
|
|
601
|
+
"\u5F53\u524D\u8FD0\u884C\u4F7F\u7528\u65E7\u6A21\u677F\uFF1B\u65B0\u7248\u5DF2\u52A0\u5165\u72EC\u7ACB\u9700\u6C42\u6F84\u6E05\u3002\u5386\u53F2\u8FD0\u884C\u4F1A\u4FDD\u7559\u3002": "This run uses an older template. The latest template includes a separate clarification step. Historical runs are retained.",
|
|
602
|
+
"\u5DF2\u521B\u5EFA\u5305\u542B\u9700\u6C42\u6F84\u6E05\u7684\u65B0\u8FD0\u884C\uFF0C\u5386\u53F2\u8BB0\u5F55\u4FDD\u7559": "Created a new run with requirements clarification. History is retained.",
|
|
603
|
+
"\u542F\u7528\u542B\u6F84\u6E05\u7684\u65B0\u6D41\u7A0B": "Start a new workflow with clarification",
|
|
604
|
+
"\u5F53\u524D\u6709\u6548\u901A\u8FC7 {completed} / {total} \u6B65": "Currently valid: {completed} / {total} steps passed",
|
|
605
|
+
"\u5DE5\u4F5C\u9879\u5DF2\u4EA4\u4ED8": "Work item delivered",
|
|
606
|
+
"\u5DE5\u4F5C\u9879\u5C1A\u672A\u4EA4\u4ED8": "Work item not yet delivered",
|
|
607
|
+
"\u5F53\u524D\u6709\u6548\u901A\u8FC7\u6B65\u9AA4": "Currently valid passed steps",
|
|
608
|
+
"\u5F53\u524D\u6709\u6548\u901A\u8FC7 {completed} / {total} \u6B65\uFF1A\u6267\u884C\u5DF2\u7ED3\u675F\u3001\u95E8\u7981\u901A\u8FC7\u4E14\u7248\u672C\u6709\u6548\uFF0C\u9700\u4EBA\u5DE5\u63A5\u7EB3\u7684\u6B65\u9AA4\u5DF2\u63A5\u7EB3\uFF1B{awaitingAcceptance} \u6B65\u5F85\u4EBA\u5DE5\u63A5\u7EB3\uFF0C{stale} \u6B65\u4E0A\u6E38\u5DF2\u53D8\u66F4\u3002\u767E\u5206\u6BD4\u4E0D\u4EE3\u8868\u4EA4\u4ED8\u3002": "{completed} / {total} steps currently valid: execution completed, gates passed, versions current, and required human acceptance recorded. {awaitingAcceptance} steps await human acceptance; upstream inputs changed for {stale} steps. This percentage does not indicate delivery.",
|
|
609
|
+
"{count} \u6B65\u7684\u4E0A\u6E38\u4F9D\u636E\u5DF2\u53D8\u66F4\uFF0C\u6709\u6548\u901A\u8FC7\u8BA1\u6570\u968F\u4E4B\u56DE\u9000\u3002": "Upstream inputs changed for {count} steps, reducing the count of valid passed steps.",
|
|
610
|
+
"\u5F53\u524D\u6B65\u9AA4\u7684\u5DE5\u4F5C\u5185\u5BB9": "Current step workspace",
|
|
611
|
+
"\u8FD0\u884C\u6761\u4EF6": "Run conditions",
|
|
612
|
+
"\u68C0\u67E5\u4E2D": "Checking",
|
|
613
|
+
"\u8BFB\u53D6\u5931\u8D25": "Failed to load",
|
|
614
|
+
"\u670D\u52A1\u7AEF\u6EE1\u8DB3 \xB7 \u672C\u5730\u5F85\u5904\u7406": "Server ready \xB7 Local action needed",
|
|
615
|
+
"\u670D\u52A1\u7AEF\u6EE1\u8DB3": "Server ready",
|
|
616
|
+
"\u670D\u52A1\u7AEF\u6761\u4EF6\u4E0D\u8DB3": "Server conditions unmet",
|
|
617
|
+
"\u91CD\u8BD5\u68C0\u67E5": "Check again",
|
|
618
|
+
"\u4FDD\u5B58\u9700\u6C42 / \u5904\u7406\u51B2\u7A81": "Save requirements / resolve conflicts",
|
|
619
|
+
"\u4FEE\u590D\u9879\u76EE\u7AE0\u7A0B": "Repair project constitution",
|
|
620
|
+
"\u5F53\u524D\u7ED3\u679C\u5DF2\u8FC7\u671F\uFF0C\u4F7F\u7528\u6700\u65B0\u5DF2\u4FDD\u5B58\u4F9D\u636E\u521B\u5EFA\u65B0\u5C1D\u8BD5\u3002": "The current result is stale. Create a new attempt using the latest saved inputs.",
|
|
621
|
+
"\u9700\u8981\u7EE7\u7EED\u6B64\u6B65\u9AA4\u65F6\uFF0C\u8FD0\u884C\u6761\u4EF6\u4ECD\u987B\u5168\u90E8\u6EE1\u8DB3\u3002": "All run conditions must still be met to continue this step.",
|
|
622
|
+
"\u63A5\u7EB3\u5019\u9009\u4EE3\u7801": "Accept candidate code",
|
|
623
|
+
"\u8FD0\u884C\u6240\u9009\u6B65\u9AA4": "Run selected step",
|
|
624
|
+
"\u521B\u5EFA\u65B0\u5C1D\u8BD5": "Create new attempt",
|
|
625
|
+
"\u67E5\u770B {artifact}": "View {artifact}",
|
|
626
|
+
"\u4FEE\u8BA2 {revision} \xB7 \u4EE5\u9009\u5B9A\u4FEE\u8BA2\u7684\u63A5\u7EB3\u72B6\u6001\u4E3A\u51C6": "Revision {revision} \xB7 Acceptance follows the selected revision",
|
|
627
|
+
"\u5DE5\u7A0B\u6D41\u7A0B": "Engineering workflow",
|
|
628
|
+
"{count} \u4E2A\u6B65\u9AA4": "{count} steps",
|
|
629
|
+
"\u5206\u7EC4\u4EC5\u7528\u4E8E\u6D4F\u89C8\uFF0C\u6267\u884C\u987A\u5E8F\u4E0E\u4F9D\u8D56\u8BFB\u53D6\u6D41\u7A0B\u5B9A\u4E49\u3002": "Groups are for browsing. Execution order and dependencies follow the workflow definition.",
|
|
630
|
+
"\u7F16\u8F91\u6D41\u7A0B": "Edit workflow",
|
|
631
|
+
"\u6709\u6548\u901A\u8FC7 {count} / {total}": "Valid: {count} / {total} passed",
|
|
632
|
+
"\u9700\u8981\u5904\u7406": "Action needed",
|
|
633
|
+
"\u5DF2\u4FDD\u5B58\u9700\u6C42 \xB7 \u7248\u672C {version}": "Saved requirements \xB7 Version {version}",
|
|
634
|
+
"{count} \u4EFD\u6587\u6863": "{count} documents",
|
|
635
|
+
" + \u9700\u6C42\u6B63\u6587": " + requirement text",
|
|
636
|
+
" \xB7 \u53E6\u6709\u672C\u5730\u8349\u7A3F\uFF0C\u5C1A\u672A\u4F9B\u65B0\u6267\u884C\u4F7F\u7528": " \xB7 Local draft not yet used by new executions",
|
|
637
|
+
"\u67E5\u770B / \u7F16\u8F91": "View / edit",
|
|
638
|
+
"\u5DE5\u7A0B\u95E8\u7981\u4EE5\u771F\u5B9E\u4EA7\u7269\u7248\u672C\u3001\u9A8C\u8BC1\u8BC1\u636E\u548C\u590D\u6838\u7ED3\u679C\u4E3A\u4F9D\u636E\u3002": "Engineering gates use actual artifact versions, verification evidence, and review results.",
|
|
639
|
+
"\u5F85\u6267\u884C": "Pending",
|
|
640
|
+
"\u542F\u52A8\u4E2D": "Starting",
|
|
641
|
+
"\u8FD0\u884C\u4E2D": "Running",
|
|
642
|
+
"\u5F85\u4EA4\u4E92": "Awaiting interaction",
|
|
643
|
+
"\u5DF2\u7ED3\u675F": "Completed",
|
|
644
|
+
"\u5931\u8D25": "Failed",
|
|
645
|
+
"\u5DF2\u505C\u6B62": "Stopped",
|
|
646
|
+
"\u5F85\u6838\u5BF9": "Needs reconciliation",
|
|
647
|
+
"\u5F85\u68C0\u67E5": "Unchecked",
|
|
648
|
+
"\u901A\u8FC7": "Passed",
|
|
649
|
+
"\u963B\u585E": "Blocked",
|
|
650
|
+
"\u8FC7\u671F": "Stale",
|
|
651
|
+
"\u6267\u884C": "Execution",
|
|
652
|
+
"\u95E8\u7981": "Gate",
|
|
653
|
+
"\u65B0\u9C9C\u5EA6": "Freshness",
|
|
654
|
+
"\u5F53\u524D\u6709\u6548": "Current",
|
|
655
|
+
"\u4E0A\u6E38\u5DF2\u53D8\u66F4": "Upstream changed",
|
|
656
|
+
"\u63A5\u7EB3": "Acceptance",
|
|
657
|
+
"\u4EBA\u5DE5\u5DF2\u63A5\u7EB3": "Accepted by human",
|
|
658
|
+
"\u5F85\u4EBA\u5DE5\u63A5\u7EB3": "Awaiting human acceptance",
|
|
659
|
+
"\u7CFB\u7EDF\u5DF2\u786E\u8BA4": "Confirmed by system",
|
|
660
|
+
"\u65E0\u72EC\u7ACB\u63A5\u7EB3\u52A8\u4F5C": "No separate acceptance required",
|
|
661
|
+
"\u9700\u6C42": "Requirements",
|
|
662
|
+
"\u8BBE\u8BA1": "Design",
|
|
663
|
+
"\u4EFB\u52A1": "Tasks",
|
|
664
|
+
"\u5B9E\u73B0": "Implementation",
|
|
665
|
+
"\u4EA4\u4ED8": "Delivery",
|
|
666
|
+
"\u6D41\u7A0B\u6B65\u9AA4": "Workflow steps",
|
|
667
|
+
"\u6B63\u5728\u68C0\u67E5\u8FD0\u884C\u6761\u4EF6": "Checking run conditions",
|
|
668
|
+
"\u65E0\u6CD5\u68C0\u67E5\u8FD0\u884C\u6761\u4EF6\uFF1A{message}": "Unable to check run conditions: {message}",
|
|
669
|
+
"\u670D\u52A1\u7AEF\u6761\u4EF6\u5C1A\u672A\u6EE1\u8DB3": "Server conditions are not yet met",
|
|
670
|
+
"\u670D\u52A1\u7AEF\u8FD0\u884C\u68C0\u67E5": "Server readiness check",
|
|
671
|
+
"\u6B65\u9AA4\u8BB0\u5F55": "Step record",
|
|
672
|
+
"\u5BA2\u6237\u7AEF\u68C0\u67E5": "Client check",
|
|
673
|
+
"\u57FA\u4E8E\u5F53\u524D\u4F9D\u636E\u91CD\u65B0\u8FD0\u884C": "Rerun with current inputs",
|
|
674
|
+
"\u8FD0\u884C\u6B64\u6B65\u9AA4": "Run this step",
|
|
675
|
+
"\u670D\u52A1\u7AEF\u6761\u4EF6\u6EE1\u8DB3\uFF0C\u672C\u5730\u8F93\u5165\u5C1A\u9700\u5904\u7406\u3002": "Server conditions are met. Local inputs still need attention.",
|
|
676
|
+
"\u8FD0\u884C\u6761\u4EF6\u5DF2\u6EE1\u8DB3\uFF0C\u53EF\u57FA\u4E8E\u5DF2\u4FDD\u5B58\u7684\u6750\u6599\u5F00\u59CB\u3002": "Run conditions are met. Start using the saved materials.",
|
|
677
|
+
"\u65E0\u6CD5\u68C0\u67E5\u8FD0\u884C\u6761\u4EF6\uFF0C\u8BF7\u91CD\u8BD5\u68C0\u67E5\u3002": "Unable to check run conditions. Try again.",
|
|
678
|
+
"\u6B63\u5728\u68C0\u67E5\u8FD0\u884C\u6761\u4EF6\u2026": "Checking run conditions\u2026",
|
|
679
|
+
"\u5F53\u524D\u6B65\u9AA4\u8FD8\u7F3A\u5C11\u8FD0\u884C\u6761\u4EF6\u3002": "This step still has unmet run conditions.",
|
|
680
|
+
"\u67E5\u770B\u4EA4\u4ED8\u8BC1\u636E": "View delivery evidence",
|
|
681
|
+
"\u6B64\u5DE5\u4F5C\u9879\u5DF2\u4EA4\u4ED8\u3002\u6B65\u9AA4\u767E\u5206\u6BD4\u4E0E\u4EA4\u4ED8\u72B6\u6001\u5206\u522B\u8BB0\u5F55\u3002": "This work item has been delivered. Step progress and delivery status are recorded separately.",
|
|
682
|
+
"\u56DE\u7B54\u9700\u6C42\u6F84\u6E05": "Answer requirements questions",
|
|
683
|
+
"\u5904\u7406\u95EE\u9898\u6216\u6388\u6743": "Answer questions or authorize",
|
|
684
|
+
" \xB7 \u8FD8\u6709 {value1} \u9879\u5F85\u5904\u7406": " \xB7 {value1} more pending items",
|
|
685
|
+
"\u6838\u5BF9\u539F\u6267\u884C": "Reconcile original execution",
|
|
686
|
+
"\u67E5\u770B\u672C\u6B21\u6267\u884C": "View this execution",
|
|
687
|
+
"\u539F\u6267\u884C\u72B6\u6001\u5F85\u6838\u5BF9\uFF0C\u8BF7\u5148\u786E\u8BA4\u539F\u6267\u884C\u8EAB\u4EFD\u4E0E\u72B6\u6001\u3002": "The original execution needs reconciliation. Confirm its identity and state first.",
|
|
688
|
+
"\u6B63\u5728\u7B49\u5F85\u4EA4\u4E92\u72B6\u6001\u540C\u6B65\uFF0C\u53EF\u67E5\u770B\u539F\u6267\u884C\u3002": "Waiting for interaction state to sync. You can view the original execution.",
|
|
689
|
+
"\u672C\u6B21\u6267\u884C\u6B63\u5728\u8FDB\u884C\uFF0C\u8FD0\u884C\u8BE6\u60C5\u4FDD\u7559\u539F\u6267\u884C\u8EAB\u4EFD\u4E0E\u53EF\u7528\u63A7\u5236\u3002": "This execution is in progress. Run details retain the original execution identity and available controls.",
|
|
690
|
+
"\u67E5\u770B\u5931\u8D25\u4E0E\u6062\u590D\u5165\u53E3": "View failure and recovery options",
|
|
691
|
+
"\u67E5\u770B\u5DF2\u505C\u6B62\u7684\u6267\u884C": "View stopped execution",
|
|
692
|
+
"\u5148\u68C0\u67E5\u539F\u6267\u884C\u7ED3\u679C\uFF0C\u518D\u51B3\u5B9A\u6062\u590D\u6216\u521B\u5EFA\u65B0\u5C1D\u8BD5\u3002": "Check the original execution result before resuming or creating a new attempt.",
|
|
693
|
+
"\u5BA1\u9605\u5E76\u63A5\u7EB3\u5DF2\u590D\u6838\u4EA7\u7269": "Review and accept reviewed artifact",
|
|
694
|
+
"{title} \xB7 \u5148\u68C0\u67E5\u590D\u6838\u8BC1\u636E\u548C\u63A5\u7EB3\u6761\u4EF6\u3002": "{title} \xB7 Check review evidence and acceptance conditions first.",
|
|
695
|
+
"\u9605\u8BFB\u4EA7\u7269\u4E0E\u63A5\u7EB3\u6761\u4EF6": "Read artifact and acceptance conditions",
|
|
696
|
+
"\u6267\u884C\u5DF2\u7ED3\u675F\uFF0C\u5DE5\u7A0B\u72B6\u6001\u8BF7\u5206\u522B\u67E5\u770B\u95E8\u7981\u3001\u63A5\u7EB3\u4E0E\u65B0\u9C9C\u5EA6\u3002": "Execution completed. Check gate, acceptance, and freshness separately.",
|
|
697
|
+
"\u67E5\u770B\u7ED3\u679C\u4E0E\u8BC1\u636E": "View results and evidence",
|
|
698
|
+
"\u6267\u884C\u5DF2\u7ED3\u675F\uFF1B\u67E5\u770B\u5B8C\u6574\u7ED3\u679C\u53CA\u5176\u51BB\u7ED3\u4F9D\u636E\u3002": "Execution completed. View the full result and its frozen inputs.",
|
|
699
|
+
"\u6D41\u7A0B\u5DF2\u6682\u505C": "Workflow paused",
|
|
700
|
+
"\u6B64\u6D41\u7A0B\u6682\u4E0D\u542F\u52A8\u65B0\u6B65\u9AA4": "New steps are unavailable for this workflow",
|
|
701
|
+
"\u5F53\u524D\u6D41\u7A0B\u4E0D\u4F1A\u542F\u52A8\u65B0\u6B65\u9AA4\uFF0C\u5DF2\u6709\u6267\u884C\u4ECD\u53EF\u67E5\u770B\u548C\u6838\u5BF9\u3002": "This workflow will not start new steps. Existing executions can still be viewed and reconciled.",
|
|
702
|
+
"\u91CD\u8BD5\u8FD0\u884C\u6761\u4EF6\u68C0\u67E5": "Retry run condition check",
|
|
703
|
+
"\u5904\u7406\u9700\u6C42\u8349\u7A3F": "Resolve requirements draft",
|
|
704
|
+
" \u6B64\u6B65\u9AA4\u4F7F\u7528\u7684\u4E0A\u6E38\u4F9D\u636E\u5DF2\u53D8\u66F4\uFF0C\u9700\u8981\u91CD\u65B0\u6838\u5B9E\u3002": " This step's upstream inputs have changed and need to be checked again.",
|
|
705
|
+
" \u6D41\u7A0B\u5DF2\u6682\u505C\u540E\u7EED\u6D3E\u53D1\uFF0C\u5F53\u524D\u6267\u884C\u672A\u56E0\u6B64\u6682\u505C\u3002": " Further dispatch is paused. The current execution continues.",
|
|
706
|
+
"\u5148\u6F84\u6E05\uFF0C\u518D\u8BBE\u8BA1": "Clarify before designing",
|
|
707
|
+
"\u8FD0\u884C\u6B64\u6B65\u9AA4\u68C0\u67E5\u89C4\u683C\u4E2D\u7684\u5173\u952E\u672A\u77E5\u4FE1\u606F\u3002\u6709\u95EE\u9898\u65F6\u5728\u8FD9\u91CC\u56DE\u7B54\uFF1B\u7B54\u590D\u4F1A\u5199\u5165\u65B0\u7684\u89C4\u683C\u7248\u672C\u3002": "Run this step to check key unknowns in the specification. Answer questions here; your answers will be recorded in a new specification revision.",
|
|
708
|
+
"\u65E7\u95EE\u7B54\u4F9D\u636E\u5DF2\u66F4\u65B0": "The previous Q&A inputs have changed",
|
|
709
|
+
"\u8BF7\u57FA\u4E8E\u5F53\u524D\u89C4\u683C\u91CD\u65B0\u8FD0\u884C\u6F84\u6E05\u3002\u5386\u53F2\u95EE\u9898\u548C\u672C\u5730\u7B54\u590D\u8349\u7A3F\u4FDD\u7559\u5728\u4E0B\u65B9\u3002": "Rerun clarification using the current specification. Historical questions and local answer drafts are retained below.",
|
|
710
|
+
"\u9700\u6C42\u6F84\u6E05\u5DF2\u5B8C\u6210": "Requirements clarification complete",
|
|
711
|
+
"{length} \u9879\u7B54\u590D\u5DF2\u8BB0\u5F55\u5230\u4FEE\u8BA2\u540E\u7684\u89C4\u683C\uFF0C\u4E0B\u4E00\u6B65\u590D\u6838\u6B64\u7248\u672C\u3002": "{length} answers recorded in the revised specification. Review this version next.",
|
|
712
|
+
"\u5DF2\u68C0\u67E5\u89C4\u683C\uFF0C\u5F53\u524D\u65E0\u9700\u989D\u5916\u63D0\u95EE\u3002\u4E0B\u4E00\u6B65\u590D\u6838\u6B64\u7248\u672C\u3002": "The specification has been checked. No additional questions are needed. Review this version next.",
|
|
713
|
+
"\u67E5\u770B\u4FEE\u8BA2\u89C4\u683C": "View revised specification",
|
|
714
|
+
"\u6B63\u5728\u5206\u6790\u6F84\u6E05\u4F9D\u636E": "Analyzing clarification inputs",
|
|
715
|
+
"\u5206\u6790\u89C4\u683C\u548C\u5DF2\u63D0\u4EA4\u7684\u7B54\u590D\uFF0C\u68C0\u67E5\u662F\u5426\u8FD8\u9700\u8981\u786E\u8BA4\u5173\u952E\u51B3\u7B56\u3002": "Analyzing the specification and submitted answers to identify any remaining key decisions.",
|
|
716
|
+
"\u67E5\u770B\u5386\u53F2\u95EE\u7B54\u4E0E\u7B54\u590D\u8349\u7A3F": "View historical Q&A and answer drafts",
|
|
717
|
+
"\u67E5\u770B\u5386\u53F2\u95EE\u7B54": "View historical Q&A",
|
|
718
|
+
"\u5C1A\u672A\u8BB0\u5F55\u7B54\u590D": "No answer recorded yet",
|
|
719
|
+
"\u7B54\u590D\u8349\u7A3F\u5DF2\u4FDD\u5B58\u5230\u5DE5\u7A0B\u8BB0\u5F55": "Answer draft saved to project records",
|
|
720
|
+
"\uFF1B\u5F53\u524D\u9875\u9762\u8349\u7A3F\u4ECD\u4FDD\u7559": "; the draft on this page is retained",
|
|
721
|
+
"\u6B63\u5728\u4FDD\u5B58\u7B54\u590D\u8349\u7A3F\u2026": "Saving answer draft\u2026",
|
|
722
|
+
"\u7B54\u590D\u5DF2\u8BB0\u5F55\uFF0C\u6B63\u5728\u7EE7\u7EED\u6F84\u6E05\u5E76\u4FEE\u8BA2\u89C4\u683C": "Answers recorded. Continuing clarification and revising the specification.",
|
|
723
|
+
"\u9700\u6C42\u6F84\u6E05\u95EE\u7B54": "Requirements clarification Q&A",
|
|
724
|
+
"\u786E\u8BA4\u5F71\u54CD\u8BBE\u8BA1\u7684\u5173\u952E\u95EE\u9898": "Confirm decisions that affect the design",
|
|
725
|
+
"\u672C\u8F6E {count} \u4E2A\u95EE\u9898 \xB7 \u4F1A\u8BDD\u7D2F\u8BA1 {total} / 5": "{count} questions this round \xB7 {total} / 5 in this session",
|
|
726
|
+
"\xB7 \u5DF2\u7B54\u590D": "\xB7 Answered",
|
|
727
|
+
"\u4F60\u7684\u7B54\u590D": "Your answer",
|
|
728
|
+
"\u6F84\u6E05\u7B54\u590D {id}": "Clarification answer {id}",
|
|
729
|
+
"\u9009\u62E9\u5EFA\u8BAE\u7B54\u590D\uFF0C\u6216\u5199\u4E0B\u4F60\u7684\u51B3\u5B9A\u3002\u4E0D\u786E\u5B9A\u65F6\u8BF4\u660E\u76EE\u524D\u672A\u77E5\u7684\u4FE1\u606F\u3002": "Choose a suggested answer or write your decision. If you are unsure, describe what is still unknown.",
|
|
730
|
+
"\u8BF7\u5148\u4FDD\u5B58\u9700\u6C42\u8349\u7A3F\u6216\u4FEE\u590D\u9879\u76EE\u7AE0\u7A0B\u8BFB\u53D6\u95EE\u9898\uFF0C\u518D\u63D0\u4EA4\u6F84\u6E05\u7B54\u590D\u3002": "Save the requirements draft or fix the project constitution before submitting clarification answers.",
|
|
731
|
+
"\u6D4F\u89C8\u5668\u5B58\u50A8\u4E0D\u53EF\u7528\uFF0C\u672A\u540C\u6B65\u7684\u7B54\u590D\u4EC5\u4FDD\u7559\u5728\u5F53\u524D\u7A97\u53E3\u3002\u8BF7\u7B49\u5F85\u8349\u7A3F\u540C\u6B65\u5230\u5DE5\u7A0B\u8BB0\u5F55\u540E\u518D\u5173\u95ED\u7A97\u53E3\u3002": "Browser storage is unavailable. Unsynced answers are kept only in this window. Wait for the draft to sync to project records before closing.",
|
|
732
|
+
"\u5DF2\u6BD4\u8F83\uFF0C\u4FDD\u5B58\u6211\u7684\u8349\u7A3F": "Compared. Save my draft",
|
|
733
|
+
"\u67E5\u770B\u5DF2\u4FDD\u5B58\u7684\u7B54\u590D\u8349\u7A3F": "View saved answer draft",
|
|
734
|
+
"\u672A\u586B\u5199": "Not answered",
|
|
735
|
+
"\u672C\u8F6E\u95EE\u7B54\u5DF2\u4FDD\u7559\u4E3A\u5386\u53F2\uFF0C\u53EF\u4EE5\u91CD\u65B0\u8FD0\u884C\u9700\u6C42\u6F84\u6E05": "This round's Q&A is retained in history. You can rerun requirements clarification.",
|
|
736
|
+
"\u91CD\u65B0\u5206\u6790": "Analyze again",
|
|
737
|
+
"\u63D0\u4EA4\u7B54\u590D\u5E76\u7EE7\u7EED\u6F84\u6E05": "Submit answers and continue clarification",
|
|
738
|
+
"\u7B54\u590D\u5DF2\u63D0\u4EA4\uFF0C\u6267\u884C\u7ED3\u679C\u4EE5\u5E95\u5EA7\u786E\u8BA4\u72B6\u6001\u4E3A\u51C6": "Answer submitted. Execution results follow the backend's confirmed state.",
|
|
739
|
+
"\u65E0\u6CD5\u89E3\u6790\u6267\u884C\u8BF7\u6C42": "Unable to parse execution request",
|
|
740
|
+
"\u8BF7\u6C42\u5B57\u6BB5\u4E0D\u5B8C\u6574\u3002\u8BF7\u4FDD\u7559\u539F\u6267\u884C\u5E76\u6838\u5BF9\uFF0C\u5C1A\u672A\u63D0\u4EA4\u4EFB\u4F55\u7B54\u590D\u3002": "Required request fields are missing. Retain and reconcile the original execution. No answer has been submitted.",
|
|
741
|
+
"\u67E5\u770B\u539F\u59CB\u8BF7\u6C42": "View raw request",
|
|
742
|
+
"\u5F85\u5904\u7406\u6267\u884C\u4EA4\u4E92": "Pending execution interaction",
|
|
743
|
+
"\u8865\u5145\u5DE5\u7A0B\u4FE1\u606F": "Provide engineering information",
|
|
744
|
+
"\u5B8C\u6210\u6267\u884C\u4FE1\u606F": "Complete execution information",
|
|
745
|
+
"\u786E\u8BA4\u5DE5\u5177\u64CD\u4F5C": "Confirm tool operation",
|
|
746
|
+
"\u786E\u8BA4\u6267\u884C\u8303\u56F4": "Confirm execution scope",
|
|
747
|
+
"\u6267\u884C\u95EE\u9898 {value1}": "Execution question {value1}",
|
|
748
|
+
"\u8BF7\u9009\u62E9": "Select an option",
|
|
749
|
+
"\u672C\u6B21\u8BF7\u6C42\u9700\u8981\u660E\u786E\u6388\u6743\u3002": "This request requires explicit authorization.",
|
|
750
|
+
"\u8BF7\u6C42\u53C2\u6570": "Request parameters",
|
|
751
|
+
"\u5B58\u50A8\u4E0D\u53EF\u7528\uFF0C\u8349\u7A3F\u4EC5\u4FDD\u7559\u5728\u5F53\u524D\u7A97\u53E3\u3002": "Storage is unavailable. The draft is kept only in this window.",
|
|
752
|
+
"\u63D0\u4EA4\u4E2D\u2026": "Submitting\u2026",
|
|
753
|
+
"\u63D0\u4EA4\u56DE\u7B54": "Submit answers",
|
|
754
|
+
"\u63D0\u4EA4\u8868\u5355": "Submit form",
|
|
755
|
+
"\u62D2\u7EDD": "Decline",
|
|
756
|
+
"Enter \u6362\u884C \xB7 Ctrl/Cmd+Enter \u63D0\u4EA4": "Enter for a new line \xB7 Ctrl/Cmd+Enter to submit",
|
|
757
|
+
"\u5141\u8BB8\u4E00\u6B21": "Allow once",
|
|
758
|
+
"\u505C\u6B62\u8BF7\u6C42\u5DF2\u63D0\u4EA4\uFF0C\u4EE5\u786E\u8BA4\u540E\u7684\u6267\u884C\u72B6\u6001\u4E3A\u51C6": "Stop requested. The confirmed execution state is authoritative.",
|
|
759
|
+
"\u6062\u590D\u8BF7\u6C42\u5DF2\u63D0\u4EA4\uFF0C\u4FDD\u7559\u539F\u6267\u884C\u8EAB\u4EFD\u94FE": "Resume requested. The original execution identity chain is retained.",
|
|
760
|
+
"\u5DF2\u63D0\u4EA4\u539F\u6267\u884C\u6838\u5BF9\u8BF7\u6C42": "Original execution reconciliation requested",
|
|
761
|
+
"\u8FD8\u6CA1\u6709\u8FD0\u884C\u8BB0\u5F55": "No run history yet",
|
|
762
|
+
"\u6BCF\u6B21\u5C1D\u8BD5\u4FDD\u7559\u56FA\u5B9A\u8F93\u5165\u3001\u6A21\u578B\u76EE\u6807\u4E0E\u6267\u884C\u8EAB\u4EFD\u3002": "Each attempt retains frozen inputs, its model target, and execution identity.",
|
|
763
|
+
"\u8FD0\u884C\u8BE6\u60C5": "Run details",
|
|
764
|
+
"\u6B63\u5728\u8BFB\u53D6\u5B8C\u6574\u8FD0\u884C\u6750\u6599\u2026": "Loading complete run materials\u2026",
|
|
765
|
+
"\u65E0\u6CD5\u8BFB\u53D6\u5B8C\u6574\u8FD0\u884C\u6750\u6599": "Unable to load complete run materials",
|
|
766
|
+
"\u91CD\u65B0\u8BFB\u53D6\u8BE6\u60C5": "Reload details",
|
|
767
|
+
"\u5386\u53F2\u6B65\u9AA4": "Historical step",
|
|
768
|
+
"\u5C1D\u8BD5 {number}": "Attempt {number}",
|
|
769
|
+
"\u6240\u5C5E\u6B65\u9AA4\u5F53\u524D\u72B6\u6001": "Current state of the parent step",
|
|
770
|
+
"\u8F93\u5165 Token": "Input tokens",
|
|
771
|
+
"\u8F93\u51FA Token": "Output tokens",
|
|
772
|
+
"\u5B9E\u9645\u8D39\u7528": "Actual cost",
|
|
773
|
+
"\u4E0D\u8C03\u7528 API": "No API call",
|
|
774
|
+
"\u672A\u77E5": "Unknown",
|
|
775
|
+
"\u6267\u884C\u8EAB\u4EFD": "Execution identity",
|
|
776
|
+
"\u6062\u590D\u7ED1\u5B9A": "Resume binding",
|
|
777
|
+
"\u521D\u59CB\u7ED1\u5B9A": "Initial binding",
|
|
778
|
+
"\u5C1A\u672A\u53D6\u5F97\u6267\u884C\u8EAB\u4EFD\uFF0C\u4E0D\u80FD\u636E\u6B64\u91CD\u590D\u6D3E\u53D1\u3002": "No execution identity has been obtained. Do not use this as a reason to dispatch again.",
|
|
779
|
+
"\u672C\u6B21\u4F7F\u7528\u7684\u9700\u6C42": "Requirements used by this attempt",
|
|
780
|
+
"\u5386\u53F2\u7248\u672C": "Historical version",
|
|
781
|
+
" \xB7 \u5F53\u524D\u9700\u6C42\u5DF2\u66F4\u65B0": " \xB7 Current requirements have changed",
|
|
782
|
+
"\u672C\u6B21\u4F7F\u7528\u7684\u9879\u76EE\u7AE0\u7A0B": "Project constitution used by this attempt",
|
|
783
|
+
"\u5185\u5BB9": "Content",
|
|
784
|
+
" \xB7 \u5F53\u524D\u7AE0\u7A0B\u5DF2\u66F4\u65B0": " \xB7 Current constitution has changed",
|
|
785
|
+
"\u53CC\u89C6\u89D2\u590D\u6838\u62A5\u544A": "Review reports from both perspectives",
|
|
786
|
+
"\u67E5\u770B\u56FA\u5B9A\u8F93\u5165\u4E0E\u4E0A\u4E0B\u6587": "View frozen inputs and context",
|
|
787
|
+
"\u8F93\u5165\u54C8\u5E0C": "Input hash",
|
|
788
|
+
"\u9636\u6BB5\u8F93\u51FA": "Step output",
|
|
789
|
+
"\u6B63\u5728\u63D0\u4EA4\u63A7\u5236\u8BF7\u6C42\u2026": "Submitting control request\u2026",
|
|
790
|
+
"\u505C\u6B62\u672C\u6B21\u6267\u884C": "Stop this execution",
|
|
791
|
+
"\u6062\u590D\u539F\u6267\u884C": "Resume original execution",
|
|
792
|
+
"{backend} \u4E0D\u652F\u6301\u6062\u590D\u539F\u6267\u884C\uFF1B\u53EF\u5148\u6838\u5BF9\u7ED3\u679C\uFF0C\u518D\u521B\u5EFA\u65B0\u5C1D\u8BD5\u3002": "{backend} does not support resuming the original execution. Reconcile its result before creating a new attempt.",
|
|
793
|
+
"\u539F\u6267\u884C\u72B6\u6001\u5C1A\u672A\u786E\u8BA4\u3002\u8BF7\u5148\u6838\u5BF9\u8EAB\u4EFD\uFF0C\u907F\u514D\u521B\u5EFA\u91CD\u590D\u6267\u884C\u3002": "The original execution state is unconfirmed. Reconcile its identity first to avoid duplicate execution.",
|
|
794
|
+
"\u6B63\u5728\u66F4\u65B0\u8FD0\u884C\u8BE6\u60C5\u2026": "Updating run details\u2026",
|
|
795
|
+
"\u9700\u8981\u4FEE\u8BA2": "Revision needed",
|
|
796
|
+
"\u8BC1\u636E\u4E0D\u8DB3": "Insufficient evidence",
|
|
797
|
+
"\u9700\u6C42\u8986\u76D6\u68C0\u67E5": "Requirements coverage check",
|
|
798
|
+
"\u53CD\u4F8B\u4E0E\u5931\u8D25\u8DEF\u5F84\u68C0\u67E5": "Counterexample and failure path check",
|
|
799
|
+
"\u5F85\u786E\u8BA4": "Needs confirmation",
|
|
800
|
+
"\u8BC1\u636E\u4E0E\u53CD\u4F8B": "Evidence and counterexamples",
|
|
801
|
+
"\u53CD\u4F8B\uFF1A": "Counterexample:",
|
|
802
|
+
"\u5DF2\u6392\u9664": "Ruled out",
|
|
803
|
+
"\u5DF2\u590D\u73B0": "Reproduced",
|
|
804
|
+
"\u5C1A\u672A\u6838\u9A8C": "Not yet verified",
|
|
805
|
+
"\u5386\u53F2\u95EE\u9898\u590D\u9A8C \xB7 {count}": "Historical finding recheck \xB7 {count}",
|
|
806
|
+
"\u5DF2\u4FEE\u590D": "Fixed",
|
|
807
|
+
"\u672A\u89E3\u51B3": "Unresolved",
|
|
808
|
+
"\u590D\u6838\u6279\u6B21 {group} \xB7 \u4E24\u4EFD\u72EC\u7ACB\u8BC1\u636E\u5171\u540C\u51B3\u5B9A\u95E8\u7981": "Review group {group} \xB7 Two independent reports determine the gate",
|
|
809
|
+
"\u8FD0\u884C\u8BB0\u5F55": "Run history",
|
|
810
|
+
"\u6B65\u9AA4": "Step",
|
|
811
|
+
"\u7B5B\u9009\u8FD0\u884C\u6B65\u9AA4": "Filter runs by step",
|
|
812
|
+
"\u5168\u90E8\u6B65\u9AA4": "All steps",
|
|
813
|
+
"\u72B6\u6001": "State",
|
|
814
|
+
"\u7B5B\u9009\u8FD0\u884C\u72B6\u6001": "Filter runs by state",
|
|
815
|
+
"\u5168\u90E8\u72B6\u6001": "All states",
|
|
816
|
+
"\u6B63\u5728\u8BFB\u53D6\u8FD0\u884C\u5217\u8868": "Loading run list",
|
|
817
|
+
"\u91CD\u8BD5\u8BFB\u53D6\u5217\u8868": "Reload run list",
|
|
818
|
+
"\u6CA1\u6709\u5339\u914D\u7684\u8FD0\u884C\u8BB0\u5F55\u3002": "No matching runs.",
|
|
819
|
+
"\u8FD0\u884C\u6B65\u9AA4\u540E\uFF0C\u5C1D\u8BD5\u4F1A\u51FA\u73B0\u5728\u8FD9\u91CC\u3002": "Attempts will appear here after you run a step.",
|
|
820
|
+
"\u9700\u6C42\u8986\u76D6": "Requirements coverage",
|
|
821
|
+
"\u53CD\u4F8B\u68C0\u67E5": "Counterexample check",
|
|
822
|
+
"\u4E0A\u4E00\u9875": "Previous",
|
|
823
|
+
"0 \u9879": "0 items",
|
|
824
|
+
"\u4E0B\u4E00\u9875": "Next",
|
|
825
|
+
"\u6B65\u9AA4\u7684\u56DB\u9879\u5DE5\u7A0B\u4E8B\u5B9E": "The step's four engineering facts",
|
|
826
|
+
"{label} \xB7 \u670D\u52A1\u7AEF\u539F\u503C {raw}": "{label} \xB7 Raw server value: {raw}",
|
|
827
|
+
"{length} \u4E2A\u95EE\u9898 \xB7 \u89C4\u683C {value2}": "{length} questions \xB7 Specification {value2}",
|
|
828
|
+
"\u56DE\u7B54\u6267\u884C\u95EE\u9898": "Answer execution questions",
|
|
829
|
+
"\u586B\u5199\u6267\u884C\u8868\u5355": "Complete execution form",
|
|
830
|
+
"\u786E\u8BA4\u672C\u6B21\u5DE5\u5177\u64CD\u4F5C": "Confirm this tool operation",
|
|
831
|
+
"\u6267\u884C\u8BF7\u6C42": "Execution request",
|
|
832
|
+
"{value1} \xB7 \u5C1D\u8BD5 {value2}": "{value1} \xB7 Attempt {value2}",
|
|
833
|
+
"\u5904\u7406\u963B\u585E\u53D1\u73B0": "Resolve blocking finding",
|
|
834
|
+
"\u5BA1\u9605\u590D\u6838\u8B66\u544A": "Review warning",
|
|
835
|
+
"\u5BA1\u9605": "Review",
|
|
836
|
+
"\u4F9D\u636E\u5DF2\u53D8\u66F4": "Inputs changed",
|
|
837
|
+
"\u5DF2\u6709\u72EC\u7ACB\u590D\u6838": "Independent review available",
|
|
838
|
+
"\u9700\u8981\u72EC\u7ACB\u590D\u6838": "Independent review required",
|
|
839
|
+
"\u7248\u672C {value1} \xB7 {value2}": "Version {value1} \xB7 {value2}",
|
|
840
|
+
"\u8865\u4E01": "Patch",
|
|
841
|
+
"Sandbox \u793A\u4F8B": "Sandbox demo",
|
|
842
|
+
"\u5C1A\u672A\u914D\u7F6E": "Not configured",
|
|
843
|
+
"\u5176\u4ED6\u7F16\u8F91\u8005\u5DF2\u66F4\u65B0\u7B54\u590D\u8349\u7A3F\uFF0C\u8BF7\u6BD4\u8F83\u540E\u4FDD\u5B58": "Another editor updated the answer draft. Compare it before saving.",
|
|
844
|
+
"\u7B54\u590D\u8349\u7A3F\u4ECD\u5728\u4FDD\u5B58\uFF0C\u8BF7\u7B49\u5F85\u540E\u518D\u5904\u7406\u51B2\u7A81": "The answer draft is still saving. Wait before resolving the conflict.",
|
|
845
|
+
"\uFF1A": ": ",
|
|
846
|
+
"\u672C\u5730\u9A8C\u6536\u540E\u7AEF": "Local acceptance backend"
|
|
847
|
+
};
|
|
848
|
+
|
|
849
|
+
// packages/i18n/server.ts
|
|
850
|
+
var messages4 = {
|
|
851
|
+
"\u6682\u65F6\u5185\u7F6E\u4ECE\u7B7E\u540D\u6B63\u5F0F\u6E90\u7801\u6784\u5EFA\u7684 Maka 0.2.0 Runtime Host\uFF0C\u540E\u7EED\u5207\u6362\u5230\u6B63\u5F0F npm \u4F9D\u8D56\uFF1B\u59CB\u7EC8\u7981\u6B62\u5F00\u53D1\u6216\u9884\u53D1\u5E03\u7248\u672C\u3002": "The bundled Maka 0.2.0 Runtime Host is built from the signed official source release until an official npm package is available. Development and prerelease builds are always prohibited.",
|
|
852
|
+
"\u89C4\u683C\u9A71\u52A8\u5F00\u53D1": "Specification-driven Development",
|
|
853
|
+
"\u9700\u6C42\u89C4\u683C": "Requirements Specification",
|
|
854
|
+
"\u9700\u6C42\u6F84\u6E05": "Requirements Clarification",
|
|
855
|
+
"\u89C4\u683C\u590D\u6838": "Specification Review",
|
|
856
|
+
"\u5DE5\u7A0B\u8BBE\u8BA1": "Engineering Design",
|
|
857
|
+
"\u8BBE\u8BA1\u590D\u6838": "Design Review",
|
|
858
|
+
"\u4EFB\u52A1\u62C6\u89E3": "Task Breakdown",
|
|
859
|
+
"\u4EFB\u52A1\u590D\u6838": "Task Review",
|
|
860
|
+
"\u4EE3\u7801\u5B9E\u73B0": "Implementation",
|
|
861
|
+
"\u6D4B\u8BD5\u4E0E\u68C0\u67E5": "Tests and Checks",
|
|
862
|
+
"\u4EE3\u7801\u590D\u6838": "Code Review",
|
|
863
|
+
"\u6536\u655B\u4E0E\u5BF9\u9F50": "Convergence and Alignment",
|
|
864
|
+
"\u6536\u655B\u590D\u6838": "Convergence Review",
|
|
865
|
+
"\u63A5\u7EB3\u4EE3\u7801": "Accept Code",
|
|
866
|
+
"\u8282\u70B9 ID \u91CD\u590D": "Duplicate node ID",
|
|
867
|
+
"\u4E0A\u6E38\u672A\u63D0\u4F9B {0}": "An upstream node does not provide {0}",
|
|
868
|
+
"\u6A21\u578B\u8282\u70B9\u9700\u8981\u914D\u7F6E\u89D2\u8272": "Model nodes require a role",
|
|
869
|
+
"\u590D\u6838\u5FC5\u987B\u58F0\u660E\u5F53\u524D\u5019\u9009\u4EA7\u7269\uFF0C\u5DF2\u63A5\u7EB3\u8F93\u5165\u4EC5\u4F5C\u4E3A\u53C2\u8003\u4F9D\u636E": "A review must declare the current candidate artifact; accepted inputs are references only",
|
|
870
|
+
"\u9700\u6C42\u6F84\u6E05\u4F7F\u7528 analyst \u89D2\u8272\uFF0C\u8BFB\u53D6\u5019\u9009 spec \u5E76\u4FEE\u8BA2 spec": "Requirements clarification must use the analyst role, read the candidate spec and revise spec",
|
|
871
|
+
"{0} \u9700\u8981\u5728\u540E\u7EED\u6A21\u578B\u6D88\u8D39\u524D\u72EC\u7ACB\u590D\u6838": "{0} requires independent review before a later model consumes it",
|
|
872
|
+
"\u6D41\u7A0B\u8981\u6C42\u5728\u89C4\u683C\u590D\u6838\u548C\u5DE5\u7A0B\u8BBE\u8BA1\u524D\u5B8C\u6210\u9700\u6C42\u6F84\u6E05": "This workflow requires requirements clarification before specification review and engineering design",
|
|
873
|
+
"\u6D88\u8D39\u89C4\u683C\u7684\u590D\u6838\u6216\u8BBE\u8BA1\u6B65\u9AA4\u5FC5\u987B\u4F4D\u4E8E\u9700\u6C42\u6F84\u6E05\u4E4B\u540E": "Steps that consume the specification must follow requirements clarification",
|
|
874
|
+
"\u6D41\u7A0B\u7F3A\u5C11\u5FC5\u9700\u9A8C\u8BC1\u8282\u70B9": "The workflow is missing a required verification node",
|
|
875
|
+
"\u4EFB\u52A1\u4E0D\u80FD\u4F9D\u8D56\u81EA\u8EAB": "A task cannot depend on itself",
|
|
876
|
+
"\u4EFB\u52A1\u6587\u6863\u9700\u8981 - [ ] T001 \u5F62\u5F0F\u7684\u4EFB\u52A1\u548C\u9A8C\u6536\u6761\u4EF6": "The task document must contain tasks in the - [ ] T001 format with acceptance conditions",
|
|
877
|
+
"\u4EFB\u52A1 ID \u5FC5\u987B\u552F\u4E00": "Task IDs must be unique",
|
|
878
|
+
"\u4EFB\u52A1\u4F9D\u8D56\u7F3A\u5931\u6216\u5F62\u6210\u73AF": "Task dependencies are missing or contain a cycle",
|
|
879
|
+
"\u6587\u6863\u6B63\u5728\u63A5\u7EB3\u6216\u96C6\u6210\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5": "Documents are being accepted or integrated. Try again later",
|
|
880
|
+
"\u4EE3\u7801\u6B63\u5728\u96C6\u6210\uFF0C\u8BF7\u5B8C\u6210\u540E\u518D\u4FEE\u8BA2\u6587\u6863": "Code is being integrated. Wait before revising documents",
|
|
881
|
+
"\u4EA7\u7269\u540D\u79F0\u683C\u5F0F\u4E0D\u5408\u6CD5": "Invalid artifact name format",
|
|
882
|
+
"\u4EA7\u7269\u63A5\u7EB3\u6B63\u5728\u6267\u884C": "Artifact acceptance is in progress",
|
|
883
|
+
"\u4EA7\u7269\u5DF2\u53D8\u5316\uFF0C\u8BF7\u6BD4\u8F83\u6700\u65B0\u5185\u5BB9": "The artifact has changed. Compare the latest content",
|
|
884
|
+
"\u89C4\u683C\u5DF2\u66F4\u65B0\uFF0C\u8BF7\u91CD\u65B0\u6F84\u6E05": "The specification has changed. Run clarification again",
|
|
885
|
+
"\u9605\u8BFB\u526F\u672C\u5199\u5165\u5931\u8D25\uFF0C\u5B8C\u6574\u6587\u6863\u4E0E\u64CD\u4F5C\u8BB0\u5F55\u5DF2\u4FDD\u7559\uFF1B\u8BF7\u4FEE\u590D\u76EE\u5F55\u6216\u6743\u9650\u540E\u91CD\u8BD5\u63A5\u7EB3": "Could not write the reading copy. The complete document and operation record are preserved; fix the directory or permissions, then retry acceptance",
|
|
886
|
+
"\u7F3A\u5C11 {0}": "Missing {0}",
|
|
887
|
+
"{0} \u5C1A\u672A\u63A5\u7EB3": "{0} has not been accepted",
|
|
888
|
+
"{0} \u5DF2\u7F16\u8F91\uFF0C\u5F53\u524D\u7248\u672C\u5C1A\u672A\u63A5\u7EB3": "{0} was edited and its current revision has not been accepted",
|
|
889
|
+
"{0} \u4F9D\u8D56\u7684\u9700\u6C42\u3001\u7AE0\u7A0B\u6216\u4E0A\u6E38\u7248\u672C\u5DF2\u53D8\u5316": "The requirements, guidance or upstream revision used by {0} has changed",
|
|
890
|
+
"{0} \u6709\u672A\u89E3\u51B3\u7684\u590D\u6838\u53D1\u73B0": "{0} has unresolved review findings",
|
|
891
|
+
"\u4E0A\u6E38\u4EA7\u7269\u5DF2\u53D8\u66F4\uFF0C\u8BF7\u521B\u5EFA\u65B0\u5C1D\u8BD5\u6216\u91CD\u65B0\u68C0\u67E5": "An upstream artifact has changed. Create a new attempt or check again",
|
|
892
|
+
"\u4EE3\u7801\u6B63\u5728\u96C6\u6210\uFF0C\u8BF7\u5B8C\u6210\u540E\u518D\u63A5\u7EB3\u6587\u6863": "Code is being integrated. Wait before accepting documents",
|
|
893
|
+
"\u4EA7\u7269\u6B63\u5728\u63A5\u7EB3": "Artifact acceptance is in progress",
|
|
894
|
+
"\u4EA7\u7269\u7248\u672C\u5DF2\u53D8\u5316": "The artifact revision has changed",
|
|
895
|
+
"\u4EA7\u7269\u4F9D\u8D56\u7684\u9700\u6C42\u3001\u7AE0\u7A0B\u6216\u4E0A\u6E38\u5DF2\u8FC7\u671F": "The requirements, guidance or upstream dependencies of this artifact are stale",
|
|
896
|
+
"\u4EA7\u7269\u5185\u5BB9\u4E0D\u8DB3\u6216\u4ECD\u6709\u672A\u51B3\u95EE\u9898": "The artifact lacks sufficient content or still has unresolved questions",
|
|
897
|
+
"\u5F53\u524D\u7248\u672C\u9700\u8981\u53CC\u89C6\u89D2\u72EC\u7ACB\u590D\u6838\u540E\u624D\u80FD\u63A5\u7EB3": "The current revision requires independent review from both perspectives before acceptance",
|
|
898
|
+
"\u5F53\u524D\u7248\u672C\u4ECD\u6709\u963B\u585E\u590D\u6838\u53D1\u73B0": "The current revision still has blocking review findings",
|
|
899
|
+
"\u5DE5\u4F5C\u7A7A\u95F4\u6587\u6863\u5728\u5E94\u7528\u5916\u53D1\u751F\u53D8\u66F4\uFF0C\u8BF7\u5BFC\u5165\u5E76\u6BD4\u8F83\u540E\u518D\u63A5\u7EB3": "A workspace document changed outside the app. Import and compare it before accepting",
|
|
900
|
+
"\u63A5\u7EB3\u671F\u95F4\u9700\u6C42\u3001\u7AE0\u7A0B\u6216\u4E0A\u6E38\u5DF2\u53D8\u5316": "Requirements, guidance or upstream artifacts changed during acceptance",
|
|
901
|
+
"\u6587\u6863\u5728\u5199\u5165\u524D\u53D1\u751F\u53D8\u5316": "The document changed before it could be written",
|
|
902
|
+
"\u63A5\u7EB3\u76EE\u6807\u5DF2\u53D8\u5316": "The acceptance target has changed",
|
|
903
|
+
"\u63A5\u7EB3\u76EE\u6807\u4F9D\u8D56\u7684\u9700\u6C42\u3001\u7AE0\u7A0B\u6216\u4E0A\u6E38\u5DF2\u8FC7\u671F": "The requirements, guidance or upstream dependencies of the acceptance target are stale",
|
|
904
|
+
"\u8BF7\u5148\u751F\u6210\u9700\u6C42\u89C4\u683C\uFF0C\u518D\u5B8C\u6210\u9700\u6C42\u6F84\u6E05": "Generate the requirements specification before completing clarification",
|
|
905
|
+
"\u5F53\u524D\u89C4\u683C\u5C1A\u672A\u5B8C\u6210\u9700\u6C42\u6F84\u6E05\uFF0C\u8BF7\u5148\u8FD0\u884C\u6F84\u6E05\u5E76\u63D0\u4EA4\u5FC5\u8981\u7B54\u590D": "The current specification has not completed clarification. Run clarification and submit the required answers",
|
|
906
|
+
"{0} \u5FC5\u987B\u662F\u5927\u5C0F\u4E0D\u8D85\u8FC7 128 KiB \u7684\u6587\u672C\u6587\u4EF6": "{0} must be a text file no larger than 128 KiB",
|
|
907
|
+
"{0} \u8D85\u8FC7 128 KiB": "{0} exceeds 128 KiB",
|
|
908
|
+
"{0} \u5FC5\u987B\u4F7F\u7528 UTF-8 \u7F16\u7801": "{0} must use UTF-8 encoding",
|
|
909
|
+
"{0} \u4E3A\u7A7A\u6216\u5305\u542B\u4E8C\u8FDB\u5236\u5185\u5BB9": "{0} is empty or contains binary data",
|
|
910
|
+
"\u9879\u76EE\u7AE0\u7A0B\u5DF2\u66F4\u65B0\uFF0C\u8BF7\u91CD\u65B0\u5206\u6790\u9700\u6C42": "Project guidance has changed. Analyze the requirements again",
|
|
911
|
+
"\u9879\u76EE\u7AE0\u7A0B\u6216\u5DE5\u7A0B\u89C4\u5219\u5DF2\u66F4\u65B0\uFF0C\u8BF7\u57FA\u4E8E\u5F53\u524D\u7248\u672C\u91CD\u65B0\u68C0\u67E5": "Project guidance or rules have changed. Check again using the current revision",
|
|
912
|
+
"\u9879\u76EE\u7AE0\u7A0B\u5FC5\u987B\u662F\u975E\u7A7A UTF-8 \u6587\u672C\uFF0C\u5927\u5C0F\u4E0D\u8D85\u8FC7 128 KiB": "Project guidance must be non-empty UTF-8 text no larger than 128 KiB",
|
|
913
|
+
"\u9879\u76EE\u7AE0\u7A0B\u6B63\u5728\u4FDD\u5B58": "Project guidance is being saved",
|
|
914
|
+
"\u9879\u76EE\u7AE0\u7A0B\u5DF2\u5728\u5E94\u7528\u5916\u66F4\u65B0\uFF0C\u8BF7\u5237\u65B0\u5E76\u6BD4\u8F83\u540E\u4FDD\u5B58": "Project guidance changed outside the app. Refresh and compare it before saving",
|
|
915
|
+
"\u9879\u76EE\u7AE0\u7A0B\u5728\u4FDD\u5B58\u671F\u95F4\u5DF2\u53D8\u5316": "Project guidance changed while it was being saved",
|
|
916
|
+
"\u4ED3\u5E93 {0}": "Repository {0}",
|
|
917
|
+
"\u7528\u6237\u4E0A\u4F20": "Uploaded by user",
|
|
918
|
+
"\u7528\u6237\u7F16\u5199": "Written by user",
|
|
919
|
+
"\u9700\u6C42\u6B63\u6587\u4E0D\u80FD\u5305\u542B\u4E8C\u8FDB\u5236\u5185\u5BB9": "Requirements cannot contain binary data",
|
|
920
|
+
"\u6700\u591A\u6DFB\u52A0 20 \u4EFD\u6587\u6863\uFF0C\u6587\u6863\u6807\u8BC6\u5FC5\u987B\u552F\u4E00": "Add at most 20 documents with unique IDs",
|
|
921
|
+
"\u8BF7\u586B\u5199\u9700\u6C42\u6B63\u6587\u6216\u6DFB\u52A0\u9700\u6C42\u6587\u6863": "Enter requirements or add requirement documents",
|
|
922
|
+
"\u6587\u6863\u9700\u8981\u540D\u79F0\uFF0C\u652F\u6301 Markdown \u548C TXT": "Documents need a name and must use Markdown or TXT",
|
|
923
|
+
"\u6BCF\u4EFD\u9700\u6C42\u6587\u6863\u4E0D\u80FD\u8D85\u8FC7 512 KiB": "Each requirement document must be no larger than 512 KiB",
|
|
924
|
+
"\u4ED3\u5E93\u6587\u6863\u7F3A\u5C11\u76F8\u5BF9\u8DEF\u5F84": "The repository document has no relative path",
|
|
925
|
+
"\u9700\u6C42\u6B63\u6587\u548C\u6587\u6863\u5408\u8BA1\u4E0D\u80FD\u8D85\u8FC7 1 MiB": "Requirements and documents must not exceed 1 MiB in total",
|
|
926
|
+
"\u6B64\u5DE5\u4F5C\u9879\u5DF2\u63A5\u7EB3\uFF0C\u8BF7\u65B0\u5EFA\u5DE5\u4F5C\u9879\u8BB0\u5F55\u540E\u7EED\u9700\u6C42": "This work item is accepted. Create a new work item for further requirements",
|
|
927
|
+
"\u9700\u6C42\u5DF2\u6709\u65B0\u7248\u672C\uFF0C\u8349\u7A3F\u5DF2\u4FDD\u7559\uFF0C\u8BF7\u6BD4\u8F83\u6700\u65B0\u9700\u6C42\u540E\u518D\u4FDD\u5B58": "A newer requirements revision exists. Your draft is preserved; compare the latest requirements before saving",
|
|
928
|
+
"\u9700\u6C42\u8F93\u5165\u5DF2\u66F4\u65B0\uFF0C\u8BF7\u91CD\u65B0\u751F\u6210\u89C4\u683C\u5E76\u6F84\u6E05": "Requirements inputs changed. Generate the specification and clarify it again",
|
|
929
|
+
"\u9700\u6C42\u8F93\u5165\u5DF2\u53D8\u66F4\uFF0C\u8BF7\u57FA\u4E8E\u65B0\u9700\u6C42\u91CD\u65B0\u5206\u6790\u6216\u590D\u6838": "Requirements inputs changed. Analyze or review the new requirements",
|
|
930
|
+
"\u4ED3\u5E93\u9700\u6C42\u6587\u6863\u4EC5\u652F\u6301 Markdown \u548C TXT": "Repository requirement documents support Markdown and TXT only",
|
|
931
|
+
"\u8BF7\u9009\u62E9\u4E00\u4E2A\u9700\u6C42\u6587\u6863\u6587\u4EF6": "Select a requirement document file",
|
|
932
|
+
"\u9700\u6C42\u6587\u6863\u5FC5\u987B\u4F7F\u7528 UTF-8 \u7F16\u7801": "Requirement documents must use UTF-8 encoding",
|
|
933
|
+
"\u590D\u6838\u4F9D\u636E\u5305\u542B\u4E92\u76F8\u51B2\u7A81\u7684\u4E0A\u6E38\u7248\u672C": "Review references contain conflicting upstream revisions",
|
|
934
|
+
"\u4EE3\u7801\u590D\u6838\u81F3\u5C11\u9700\u8981\u4E00\u4E2A\u5DF2\u914D\u7F6E\u7684\u786E\u5B9A\u6027\u9A8C\u8BC1\u547D\u4EE4": "Code review requires at least one configured deterministic verification command",
|
|
935
|
+
"\u590D\u6838\u7F3A\u5C11\u5F53\u524D\u4EE3\u7801\u7684\u6709\u6548 {0} \u9A8C\u8BC1\uFF0C\u8BF7\u5148\u8FD0\u884C\u6D4B\u8BD5\u4E0E\u68C0\u67E5": "The current code has no valid {0} verification. Run Tests and Checks first",
|
|
936
|
+
"\u672C\u5730\u9A8C\u6536\u540E\u7AEF": "Local Acceptance Backend",
|
|
937
|
+
"\u786E\u5B9A\u6027\u9A8C\u6536\u540E\u7AEF\uFF0C\u4E0D\u8C03\u7528\u6A21\u578B\uFF1B\u4EC5\u5141\u8BB8\u7528\u4E8E\u793A\u4F8B\u4ED3\u5E93\u548C\u5951\u7EA6\u6D4B\u8BD5": "Deterministic acceptance backend without model calls; restricted to the demo repository and contract tests",
|
|
938
|
+
"\u4ECD\u6709\u672A\u89E3\u51B3\u95EE\u9898\u6216\u5360\u4F4D\u7B26\uFF0C\u8BF7\u4FEE\u8BA2\u540E\u91CD\u65B0\u590D\u6838": "Unresolved questions or placeholders remain. Revise and review again",
|
|
939
|
+
"\u9A8C\u6536\u540E\u7AEF\u8FDB\u7A0B\u91CD\u542F\uFF1B\u8BF7\u521B\u5EFA\u65B0\u7684\u786E\u5B9A\u6027\u5C1D\u8BD5": "The acceptance backend restarted. Create a new deterministic attempt",
|
|
940
|
+
"\u9A8C\u6536\u540E\u7AEF\u4E0D\u63D0\u4F9B\u6A21\u578B\u4EA4\u4E92": "The acceptance backend does not provide model interactions",
|
|
941
|
+
"\u91CD\u542F\u540E\u8BF7\u521B\u5EFA\u65B0\u5C1D\u8BD5": "Create a new attempt after restarting",
|
|
942
|
+
"\u65E0\u6CD5\u6062\u590D\u9A8C\u6536\u5C1D\u8BD5": "The acceptance attempt cannot be resumed",
|
|
943
|
+
"\u5F53\u524D\u670D\u52A1\u6CA1\u6709\u542F\u7528\u5E95\u5EA7\u914D\u7F6E": "Runtime configuration is not enabled in this service",
|
|
944
|
+
"\u9636\u6BB5\u6B63\u5728\u51C6\u5907\u6216\u5E95\u5EA7\u914D\u7F6E\u6B63\u5728\u4FDD\u5B58\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5": "A stage is being prepared or runtime configuration is being saved. Try again later",
|
|
945
|
+
"OpenCode \u4ECD\u6709\u6267\u884C\u6216\u5F85\u6838\u5BF9\u5C1D\u8BD5\uFF0C\u8BF7\u5148\u5B8C\u6210\u6216\u786E\u8BA4\u505C\u6B62\u540E\u518D\u4FEE\u6539\u670D\u52A1\u914D\u7F6E": "OpenCode has active attempts or attempts awaiting reconciliation. Complete them or confirm they have stopped before changing service configuration",
|
|
946
|
+
"\u9A8C\u6536\u540E\u7AEF\u4EC5\u7528\u4E8E\u5185\u7F6E\u9694\u79BB\u793A\u4F8B\u4ED3\u5E93": "The acceptance backend is restricted to the built-in isolated demo repository",
|
|
947
|
+
"\u89D2\u8272\u9ED8\u8BA4\u6A21\u578B\u5FC5\u987B\u5C5E\u4E8E\u5DE5\u7A0B\u6240\u9009\u5E95\u5EA7": "Default role models must belong to the project execution backend",
|
|
948
|
+
"\u542F\u52A8\u4E2D\u65AD\u4E14\u5C1A\u672A\u53D6\u5F97\u6267\u884C\u8EAB\u4EFD\uFF0C\u8BF7\u521B\u5EFA\u65B0\u5C1D\u8BD5\uFF1B\u672A\u81EA\u52A8\u91CD\u53D1": "Startup was interrupted before an execution identity was obtained. Create a new attempt; the request was not automatically resent",
|
|
949
|
+
"\u542F\u52A8\u4E2D\u65AD\uFF0C\u672A\u81EA\u52A8\u91CD\u53D1\uFF1B\u8BF7\u521B\u5EFA\u65B0\u5C1D\u8BD5\u91CD\u65B0\u6267\u884C\u6574\u4E2A\u590D\u6838\u6279\u6B21": "Startup was interrupted and the request was not automatically resent. Create a new attempt to rerun the entire review group",
|
|
950
|
+
"\u8FD0\u884C\u5DF2\u4E2D\u65AD\uFF0C\u6B63\u5728\u6838\u5BF9\u539F\u6267\u884C\u8EAB\u4EFD": "The run was interrupted. Reconciling the original execution identity",
|
|
951
|
+
"\u6E90\u4ED3\u5E93\u5305\u542B\u672A\u63D0\u4EA4\u6539\u52A8\uFF0C\u8BF7\u5148\u9009\u62E9\u5E72\u51C0\u57FA\u7EBF\uFF1B\u5E94\u7528\u4E0D\u4F1A\u81EA\u52A8\u63D0\u4EA4\u6216\u91CD\u7F6E": "The source repository has uncommitted changes. Select a clean baseline; the app does not commit or reset them automatically",
|
|
952
|
+
"\u9636\u6BB5\u6B63\u5728\u51C6\u5907\u6216\u4EE3\u7801\u6B63\u5728\u63A5\u7EB3\uFF0C\u8BF7\u7A0D\u540E\u4FDD\u5B58\u9700\u6C42": "A stage is being prepared or code is being accepted. Save requirements later",
|
|
953
|
+
"\u9879\u76EE\u9636\u6BB5\u6B63\u5728\u51C6\u5907\u6216\u4EE3\u7801\u6B63\u5728\u63A5\u7EB3\uFF0C\u8BF7\u7A0D\u540E\u4FDD\u5B58\u7AE0\u7A0B": "A project stage is being prepared or code is being accepted. Save guidance later",
|
|
954
|
+
"\u6D41\u7A0B\u6821\u9A8C\u5931\u8D25": "Workflow validation failed",
|
|
955
|
+
"\u5DF2\u63A5\u7EB3\u7684\u5DE5\u4F5C\u9879\u8BF7\u901A\u8FC7\u65B0\u5DE5\u4F5C\u9879\u7EE7\u7EED\u5F00\u53D1": "Continue development of an accepted work item through a new work item",
|
|
956
|
+
"\u5F53\u524D\u6D41\u7A0B\u4ECD\u5728\u6267\u884C\u6216\u7B49\u5F85\u7B54\u590D\uFF0C\u8BF7\u5148\u5B8C\u6210\u6216\u505C\u6B62\u5F53\u524D\u9636\u6BB5": "The workflow is executing or waiting for an answer. Complete or stop the current stage first",
|
|
957
|
+
"\u8BF7\u4E3A\u5F53\u524D\u9636\u6BB5\u914D\u7F6E\u8FDE\u63A5\u548C\u6A21\u578B": "Configure a connection and model for this stage",
|
|
958
|
+
"\u9879\u76EE\u7AE0\u7A0B\u8BFB\u53D6\u5931\u8D25\uFF1A{0}": "Could not read project guidance: {0}",
|
|
959
|
+
"\u8BF7\u5728\u5DE5\u7A0B\u8BBE\u7F6E\u4E2D\u914D\u7F6E\u9879\u76EE\u7AE0\u7A0B\u6216\u8865\u5145\u5DE5\u7A0B\u89C4\u5219": "Configure project guidance or additional rules in Project Settings",
|
|
960
|
+
"\u6D41\u7A0B\u5DF2\u6682\u505C\u6216\u7ED3\u675F": "The workflow is paused or finished",
|
|
961
|
+
"\u5F53\u524D\u9636\u6BB5\u4ECD\u5728\u6267\u884C\u6216\u5F85\u6838\u5BF9": "The current stage is executing or awaiting reconciliation",
|
|
962
|
+
"\u4E32\u884C\u6D41\u7A0B\u6B63\u5728\u5904\u7406 {0}": "The sequential workflow is processing {0}",
|
|
963
|
+
"\u8BF7\u5148\u586B\u5199\u9700\u6C42\u6B63\u6587\u6216\u6DFB\u52A0\u9700\u6C42\u6587\u6863": "Enter requirements or add requirement documents first",
|
|
964
|
+
"{0} \u5C1A\u672A\u901A\u8FC7\u53CC\u89C6\u89D2\u72EC\u7ACB\u590D\u6838": "{0} has not passed independent review from both perspectives",
|
|
965
|
+
"\u5C1A\u65E0\u5019\u9009\u4EE3\u7801": "No candidate code yet",
|
|
966
|
+
"\u6F84\u6E05\u4F9D\u636E\u5DF2\u66F4\u65B0\uFF0C\u8BF7\u91CD\u65B0\u5206\u6790\u89C4\u683C": "Clarification references changed. Analyze the specification again",
|
|
967
|
+
"\u6F84\u6E05\u9636\u6BB5\u6B63\u5728\u542F\u52A8": "The clarification stage is starting",
|
|
968
|
+
"\u6F84\u6E05\u95EE\u9898\u6216\u4F9D\u636E\u5DF2\u66F4\u65B0\uFF0C\u5F53\u524D\u7B54\u590D\u8349\u7A3F\u5DF2\u4FDD\u7559": "Clarification questions or references changed. Your answer draft is preserved",
|
|
969
|
+
"\u6F84\u6E05\u4F9D\u636E\u5DF2\u53D8\u5316\uFF0C\u8BF7\u91CD\u65B0\u5206\u6790": "Clarification references changed. Analyze again",
|
|
970
|
+
"\u8BF7\u56DE\u7B54\u672C\u8F6E\u6240\u6709\u95EE\u9898\uFF1B\u4E0D\u786E\u5B9A\u65F6\u8BF7\u660E\u786E\u8BF4\u660E\u672A\u77E5\u4FE1\u606F": "Answer all questions in this round. State explicitly when information is unknown",
|
|
971
|
+
"\u6BCF\u9879\u6F84\u6E05\u7B54\u590D\u6700\u591A 4000 \u5B57\u7B26": "Each clarification answer is limited to 4,000 characters",
|
|
972
|
+
"\u8BF7\u5148\u7B49\u5F85\u6216\u505C\u6B62\u5F53\u524D\u6A21\u578B\u6267\u884C": "Wait for or stop the current model execution first",
|
|
973
|
+
"\u7B54\u590D\u8349\u7A3F\u9700\u8981\u5BF9\u5E94\u672C\u4F1A\u8BDD\u7684\u95EE\u9898\uFF0C\u6BCF\u9879\u6700\u591A 4000 \u5B57\u7B26": "Draft answers must match this session\u2019s questions, with at most 4,000 characters each",
|
|
974
|
+
"\u5176\u4ED6\u7F16\u8F91\u8005\u5DF2\u66F4\u65B0\u7B54\u590D\u8349\u7A3F\uFF0C\u8BF7\u6BD4\u8F83\u540E\u4FDD\u5B58": "Another editor updated the answer draft. Compare before saving",
|
|
975
|
+
"\u5DE5\u7A0B\u670D\u52A1\u6B63\u5728\u5173\u95ED\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5": "The engineering service is shutting down. Try again later",
|
|
976
|
+
"\u5E95\u5EA7\u914D\u7F6E\u6B63\u5728\u4FDD\u5B58\uFF0C\u8BF7\u7A0D\u540E\u542F\u52A8\u9636\u6BB5": "Runtime configuration is being saved. Start the stage later",
|
|
977
|
+
"\u5DE5\u4F5C\u9879\u6B63\u5728\u51C6\u5907\u5019\u9009\u6216\u96C6\u6210\u4EE3\u7801": "The work item is preparing a candidate or integrating code",
|
|
978
|
+
"\u5F53\u524D\u5DE5\u4F5C\u9879\u6709\u6B63\u5728\u542F\u52A8\u7684\u9636\u6BB5": "A stage in this work item is starting",
|
|
979
|
+
"\u8282\u70B9\u72B6\u6001\u5DF2\u53D8\u5316\uFF0C\u8BF7\u5237\u65B0": "The node state changed. Refresh the page",
|
|
980
|
+
"\u9A8C\u8BC1\u6B63\u5728\u6267\u884C": "Verification is in progress",
|
|
981
|
+
"\u4ECD\u6709\u963B\u585E\u53D1\u73B0": "Blocking findings remain",
|
|
982
|
+
"\u6267\u884C\u5E95\u5EA7\u4E0D\u53EF\u7528": "The execution backend is unavailable",
|
|
983
|
+
"\u8BE5\u5E95\u5EA7\u7684\u53EA\u8BFB\u590D\u6838\u80FD\u529B\u5C1A\u672A\u901A\u8FC7\u9A8C\u8BC1": "This backend\u2019s read-only review capability has not been validated",
|
|
984
|
+
"\u6240\u9009\u6A21\u578B\u6240\u5C5E\u5E95\u5EA7\u8EAB\u4EFD\u5DF2\u53D8\u5316\uFF0C\u8BF7\u5237\u65B0\u76EE\u5F55\u5E76\u91CD\u65B0\u9009\u62E9": "The selected model\u2019s backend identity changed. Refresh the catalog and select it again",
|
|
985
|
+
"\u6240\u9009\u6A21\u578B\u672A\u5728\u5F53\u524D\u5E95\u5EA7\u542F\u7528": "The selected model is not enabled on the current backend",
|
|
986
|
+
"\u5F53\u524D\u5DE5\u4F5C\u9879\u6709\u6B63\u5728\u51C6\u5907\u7684\u4EE3\u7801\u6267\u884C": "This work item has a code execution being prepared",
|
|
987
|
+
"\u5F53\u524D\u5DE5\u4F5C\u9879\u6709\u672A\u7ED3\u675F\u7684\u4EE3\u7801\u6267\u884C": "This work item has an unfinished code execution",
|
|
988
|
+
"\u9636\u6BB5\u51C6\u5907\u671F\u95F4\u9700\u6C42\u3001\u7AE0\u7A0B\u6216\u8F93\u5165\u4EA7\u7269\u5DF2\u66F4\u65B0\uFF0C\u8BF7\u91CD\u65B0\u8FD0\u884C\u4E0A\u6E38\u9636\u6BB5": "Requirements, guidance or input artifacts changed while preparing the stage. Rerun the upstream stage",
|
|
989
|
+
"\u590D\u6838\u6B65\u9AA4\u5FC5\u987B\u58F0\u660E\u5F85\u590D\u6838\u4EA7\u7269": "A review step must declare the artifacts to review",
|
|
990
|
+
"\u590D\u6838\u4F9D\u636E\u5DF2\u53D8\u5316\uFF0C\u6574\u4E2A\u590D\u6838\u6279\u6B21\u9700\u8981\u91CD\u65B0\u6267\u884C": "Review references changed. Rerun the entire review group",
|
|
991
|
+
"\u5F53\u524D\u5019\u9009\u4EE3\u7801\u5DF2\u66FF\u6362\uFF0C\u8BF7\u91CD\u65B0\u590D\u6838": "The current code candidate was replaced. Review it again",
|
|
992
|
+
"\u590D\u6838\u671F\u95F4\u4EE3\u7801\u53D1\u751F\u53D8\u66F4\uFF0C\u590D\u6838\u7ED3\u679C\u65E0\u6548": "Code changed during review. The review result is invalid",
|
|
993
|
+
"\u590D\u6838\u671F\u95F4\u9A8C\u8BC1\u547D\u4EE4\u6216\u8BC1\u636E\u5DF2\u53D8\u5316\uFF0C\u8BF7\u91CD\u65B0\u590D\u6838": "Verification commands or evidence changed during review. Review again",
|
|
994
|
+
"{0} \u7F3A\u5C11\u5019\u9009\u4EE3\u7801\u4F9D\u636E\uFF0C\u8BF7\u91CD\u65B0\u751F\u6210\u4EA7\u7269\u540E\u590D\u6838": "{0} has no candidate code reference. Regenerate the artifact before reviewing",
|
|
995
|
+
"{0} \u5BF9\u5E94\u7684\u5019\u9009\u5DF2\u66FF\u6362\uFF0C\u8BF7\u91CD\u65B0\u751F\u6210\u4EA7\u7269": "The candidate associated with {0} was replaced. Regenerate the artifact",
|
|
996
|
+
"{0} \u7684\u4EE3\u7801\u4F9D\u636E\u5DF2\u53D8\u66F4\uFF0C\u8BF7\u91CD\u65B0\u751F\u6210\u548C\u590D\u6838\u4EA7\u7269": "The code reference for {0} changed. Regenerate and review the artifact",
|
|
997
|
+
"\u65E7\u590D\u6838\u5C1D\u8BD5\u7F3A\u5C11\u8BC1\u636E\u534F\u8BAE\uFF0C\u8BF7\u521B\u5EFA\u65B0\u7684\u590D\u6838\u5C1D\u8BD5": "This older review attempt has no evidence protocol. Create a new review attempt",
|
|
998
|
+
"\u590D\u6838\u4E0D\u80FD\u751F\u6210\u4EA7\u7269\uFF0C\u5FC5\u987B\u663E\u5F0F\u8FD4\u56DE findings \u548C\u7ED3\u6784\u5316 review \u62A5\u544A": "Reviews cannot generate artifacts and must explicitly return findings and a structured review report",
|
|
999
|
+
"\u590D\u6838\u53D1\u73B0\u6307\u5411\u672A\u58F0\u660E\u7684\u4EA7\u7269": "A review finding refers to an undeclared artifact",
|
|
1000
|
+
"\u53CC\u89C6\u89D2\u590D\u6838\u8BC1\u636E\u4E0D\u5B8C\u6574": "Evidence for review from both perspectives is incomplete",
|
|
1001
|
+
"\u4E24\u6B21\u590D\u6838\u5FC5\u987B\u4F7F\u7528\u540C\u4E00\u6279\u51BB\u7ED3\u6750\u6599\u4E0E\u914D\u7F6E": "Both reviews must use the same frozen materials and configuration",
|
|
1002
|
+
"\u5386\u53F2\u95EE\u9898\u590D\u9A8C": "Prior Finding Recheck",
|
|
1003
|
+
"\u9700\u6C42\u8986\u76D6\u6838\u5BF9\u5DF2\u7ED3\u675F\uFF0C\u6B63\u5728\u72EC\u7ACB\u68C0\u67E5\u53CD\u4F8B\u4E0E\u5931\u8D25\u8DEF\u5F84": "Requirements coverage review finished. Independently checking counterexamples and failure paths",
|
|
1004
|
+
"\u53CC\u89C6\u89D2\u590D\u9A8C\u901A\u8FC7\uFF1A{0}": "Review from both perspectives passed: {0}",
|
|
1005
|
+
"\u53CC\u89C6\u89D2\u590D\u6838\u672A\u901A\u8FC7\uFF0C\u8BF7\u4FEE\u8BA2\u95EE\u9898\u540E\u91CD\u65B0\u590D\u6838\uFF1B\u8BC1\u636E\u4E0D\u8DB3\u4E5F\u4F1A\u963B\u585E": "Review from both perspectives did not pass. Revise the findings and review again; insufficient evidence also blocks acceptance",
|
|
1006
|
+
"\u542F\u52A8\u51C6\u5907\u8D85\u8FC7\u9636\u6BB5\u65F6\u95F4\u4E0A\u9650": "Startup preparation exceeded the stage timeout",
|
|
1007
|
+
"\u9636\u6BB5\u9A8C\u6536\u901A\u8FC7": "Stage acceptance passed",
|
|
1008
|
+
"\u9636\u6BB5\u65F6\u95F4\u4E0A\u9650\u5DF2\u5230\uFF0C\u505C\u6B62\u6D3E\u53D1\u540E\u7EED\u4EFB\u52A1": "The stage timeout was reached. No further tasks will be dispatched",
|
|
1009
|
+
"\u9700\u6C42\u3001\u7AE0\u7A0B\u6216\u4E0A\u6E38\u5DF2\u53D8\u5316\uFF0C\u505C\u6B62\u6D3E\u53D1\u65E7\u4EFB\u52A1": "Requirements, guidance or upstream artifacts changed. Old tasks will no longer be dispatched",
|
|
1010
|
+
"\u4EFB\u52A1\u4F9D\u8D56\u65E0\u6CD5\u8C03\u5EA6": "Task dependencies cannot be scheduled",
|
|
1011
|
+
"\u4EFB\u52A1\u6267\u884C\u671F\u95F4\u9700\u6C42\u3001\u7AE0\u7A0B\u6216\u4E0A\u6E38\u5DF2\u53D8\u5316\uFF0C\u8BF7\u521B\u5EFA\u65B0\u5C1D\u8BD5": "Requirements, guidance or upstream artifacts changed during task execution. Create a new attempt",
|
|
1012
|
+
"\u4EFB\u52A1\u9A8C\u8BC1\u5931\u8D25\uFF0C\u9700\u4FEE\u8BA2\u540E\u91CD\u65B0\u6267\u884C": "Task verification failed. Revise and run again",
|
|
1013
|
+
"\u4EFB\u52A1\u5217\u8868\u4E3A\u7A7A": "The task list is empty",
|
|
1014
|
+
"\u9636\u6BB5\u5FC5\u987B\u8FD4\u56DE\u7B26\u5408\u4EA7\u7269\u5951\u7EA6\u7684 JSON\uFF1B\u8BF7\u67E5\u770B\u8FD0\u884C\u7ED3\u679C\u5E76\u4FEE\u8BA2\u6307\u4EE4": "The stage must return JSON matching the artifact contract. Inspect the result and revise the instructions",
|
|
1015
|
+
"\u6267\u884C\u7ED3\u679C\u4E0D\u660E\uFF0C\u5148\u6838\u5BF9\u539F\u8EAB\u4EFD": "The execution result is unknown. Reconcile the original identity first",
|
|
1016
|
+
"\u6267\u884C\u672A\u5B8C\u6210": "Execution did not finish",
|
|
1017
|
+
"\u6267\u884C\u671F\u95F4\u9700\u6C42\u3001\u9879\u76EE\u7AE0\u7A0B\u6216\u4E0A\u6E38\u53D1\u751F\u53D8\u66F4\uFF0C\u539F\u7ED3\u679C\u4E0D\u80FD\u653E\u884C\uFF0C\u8BF7\u521B\u5EFA\u65B0\u5C1D\u8BD5": "Requirements, project guidance or upstream artifacts changed during execution. The original result cannot proceed; create a new attempt",
|
|
1018
|
+
"\u9700\u6C42\u6F84\u6E05\u5FC5\u987B\u8FD4\u56DE\u7ED3\u6784\u5316 clarification \u7ED3\u679C": "Requirements clarification must return a structured clarification result",
|
|
1019
|
+
"\u672C\u8F6E\u6F84\u6E05\u7684\u89C4\u683C\u6216\u8F93\u5165\u5DF2\u66F4\u65B0": "The specification or inputs for this clarification round changed",
|
|
1020
|
+
"\u6F84\u6E05\u63D0\u95EE\u65F6\u4E0D\u751F\u6210\u89C4\u683C\uFF0C\u6574\u4E2A\u4F1A\u8BDD\u6700\u591A 5 \u4E2A\u5173\u952E\u95EE\u9898": "Do not generate a specification while asking clarification questions. The session permits at most 5 key questions",
|
|
1021
|
+
"\u6F84\u6E05\u95EE\u9898 ID \u5FC5\u987B\u552F\u4E00\uFF0C\u4E0D\u80FD\u91CD\u590D\u5DF2\u56DE\u7B54\u7684\u95EE\u9898": "Clarification question IDs must be unique and cannot repeat answered questions",
|
|
1022
|
+
"\u8BF7\u63D0\u4EA4\u6F84\u6E05\u7B54\u590D\uFF0C\u7B54\u590D\u4F1A\u5199\u5165\u4FEE\u8BA2\u540E\u7684\u89C4\u683C": "Submit clarification answers. They will be included in the revised specification",
|
|
1023
|
+
"\u5B8C\u6210\u6F84\u6E05\u524D\u5FC5\u987B\u8BB0\u5F55\u6240\u6709\u5DF2\u63D0\u51FA\u95EE\u9898\u7684\u7B54\u590D": "Record answers to every question before completing clarification",
|
|
1024
|
+
"\u5B8C\u6210\u6F84\u6E05\u65F6\u5FC5\u987B\u8FD4\u56DE\u5B8C\u6574\u7684 spec \u6587\u6863": "Completing clarification must return the complete spec document",
|
|
1025
|
+
"\u6F84\u6E05\u540E\u7684\u89C4\u683C\u4ECD\u6709\u672A\u51B3\u4FE1\u606F\uFF0C\u8BF7\u7EE7\u7EED\u6F84\u6E05": "The clarified specification still has unresolved information. Continue clarification",
|
|
1026
|
+
"\u5B9E\u9645\u4EA7\u7269\u4E0E\u9636\u6BB5\u58F0\u660E\u4E0D\u5339\u914D": "The actual artifacts do not match the stage declaration",
|
|
1027
|
+
"\u751F\u6210\u62A5\u544A\u671F\u95F4\u4EE3\u7801\u4F9D\u636E\u5DF2\u53D8\u5316\uFF0C\u8BF7\u91CD\u65B0\u751F\u6210": "The code reference changed while generating the report. Generate it again",
|
|
1028
|
+
"\u9636\u6BB5\u53D1\u73B0\u5FC5\u987B\u6307\u5411\u5F53\u524D\u4EA7\u7269\u6216\u51BB\u7ED3\u7684\u4E0A\u6E38\u4EA7\u7269": "Stage findings must refer to a current artifact or frozen upstream artifact",
|
|
1029
|
+
"\u4F9D\u636E\u6821\u9A8C\u53D1\u73B0\u963B\u585E\u95EE\u9898\uFF0C\u8BF7\u4FEE\u8BA2\u540E\u91CD\u65B0\u590D\u6838": "Reference validation found blocking issues. Revise and review again",
|
|
1030
|
+
"\u7B49\u5F85\u5F53\u524D\u4EA7\u7269\u72EC\u7ACB\u590D\u6838\u4E0E\u4EBA\u5DE5\u63A5\u7EB3": "Waiting for independent artifact review and human acceptance",
|
|
1031
|
+
"\u4EE3\u7801\u6B63\u5728\u96C6\u6210\uFF0C\u8BF7\u7A0D\u540E\u9A8C\u8BC1": "Code is being integrated. Verify later",
|
|
1032
|
+
"\u5F53\u524D\u5019\u9009\u6B63\u5728\u9A8C\u8BC1": "This candidate is being verified",
|
|
1033
|
+
"\u9879\u76EE\u5C1A\u672A\u914D\u7F6E\u786E\u5B9A\u6027\u9A8C\u8BC1\u547D\u4EE4": "No deterministic verification commands are configured for this project",
|
|
1034
|
+
"\u5FC5\u9700\u9A8C\u8BC1\u672A\u901A\u8FC7\uFF0C\u8BF7\u67E5\u770B\u547D\u4EE4\u8F93\u51FA": "Required verification did not pass. Inspect the command output",
|
|
1035
|
+
"\u5F53\u524D\u7248\u672C\u6B63\u5728\u590D\u6838\uFF0C\u8BF7\u7B49\u5F85\u590D\u6838\u7ED3\u679C": "The current revision is being reviewed. Wait for the results",
|
|
1036
|
+
"\u6B64\u5DE5\u4F5C\u9879\u5DF2\u7ECF\u63A5\u7EB3": "This work item is already accepted",
|
|
1037
|
+
"\u5019\u9009\u5DF2\u88AB\u65B0\u7684\u5C1D\u8BD5\u66FF\u4EE3": "A newer attempt superseded this candidate",
|
|
1038
|
+
"\u5DE5\u7A0B\u9636\u6BB5\u6B63\u5728\u542F\u52A8": "An engineering stage is starting",
|
|
1039
|
+
"\u5DE5\u4F5C\u9879\u8FD8\u6709\u6B63\u5728\u6267\u884C\u7684\u5019\u9009\u9A8C\u8BC1": "Candidate verification is still running for this work item",
|
|
1040
|
+
"\u5DE5\u4F5C\u9879\u8FD8\u6709\u672A\u7ED3\u675F\u6216\u5F85\u6838\u5BF9\u7684\u6267\u884C": "The work item has executions that are unfinished or awaiting reconciliation",
|
|
1041
|
+
"\u5DE5\u4F5C\u9879\u8FD8\u6709\u672A\u7ED3\u675F\u7684\u6267\u884C\u6216\u9A8C\u8BC1": "The work item has unfinished execution or verification",
|
|
1042
|
+
"\u9879\u76EE\u7AE0\u7A0B\u6216\u89C4\u5219\u5DF2\u53D8\u5316\uFF0C\u8BF7\u5237\u65B0\u5DE5\u4F5C\u9879\u540E\u91CD\u65B0\u68C0\u67E5": "Project guidance or rules changed. Refresh the work item and check again",
|
|
1043
|
+
"\u5DE5\u7A0B\u6587\u6863\u5728\u5E94\u7528\u5916\u53D8\u5316\uFF0C\u8BF7\u5237\u65B0\u5E76\u6BD4\u8F83\u540E\u91CD\u65B0\u68C0\u67E5": "Engineering documents changed outside the app. Refresh, compare and check again",
|
|
1044
|
+
"\u5019\u9009\u4EE3\u7801\u7684\u6267\u884C\u6216\u539F\u59CB\u5DE5\u7A0B\u8F93\u5165\u5DF2\u65E0\u6548": "The candidate execution or original engineering inputs are invalid",
|
|
1045
|
+
"\u5019\u9009\u4EFB\u52A1\u5C1A\u672A\u5168\u90E8\u901A\u8FC7\u9A8C\u8BC1\u4E0E\u590D\u6838": "Not all candidate tasks passed verification and review",
|
|
1046
|
+
"\u5F53\u524D\u4EE3\u7801\u5185\u5BB9\u6CA1\u6709\u6709\u6548\u7684\u53CC\u89C6\u89D2\u72EC\u7ACB\u590D\u6838": "The current code has no valid independent review from both perspectives",
|
|
1047
|
+
"\u5F53\u524D\u4EE3\u7801\u7F3A\u5C11\u6709\u6548 {0} \u9A8C\u8BC1": "The current code has no valid {0} verification",
|
|
1048
|
+
"\u5F53\u524D\u4EE3\u7801\u6709\u963B\u585E\u53D1\u73B0": "The current code has blocking findings",
|
|
1049
|
+
"{0} \u5F53\u524D\u7248\u672C\u7F3A\u5C11\u53CC\u89C6\u89D2\u590D\u6838": "The current revision of {0} has not been reviewed from both perspectives",
|
|
1050
|
+
"\u5DE5\u4F5C\u9879\u57FA\u7EBF\u6216\u6E90\u4EE3\u7801\u5DF2\u7ECF\u53D8\u5316\uFF0C\u8BF7\u6BD4\u8F83\u5DEE\u5F02\u540E\u96C6\u6210": "The work item baseline or source code changed. Compare the differences before integrating",
|
|
1051
|
+
"\u68C0\u67E5\u671F\u95F4\u5DE5\u7A0B\u72B6\u6001\u53D8\u5316\uFF0C\u8BF7\u91CD\u65B0\u68C0\u67E5": "Engineering state changed during the check. Check again",
|
|
1052
|
+
"\u68C0\u67E5\u671F\u95F4\u539F\u59CB\u5DE5\u7A0B\u8F93\u5165\u53D8\u5316\uFF0C\u8BF7\u91CD\u65B0\u68C0\u67E5": "Original engineering inputs changed during the check. Check again",
|
|
1053
|
+
"\u5DE5\u4F5C\u9879\u6B63\u5728\u96C6\u6210": "The work item is being integrated",
|
|
1054
|
+
"\u9009\u5B9A\u5019\u9009\u5DF2\u88AB\u65B0\u5C1D\u8BD5\u66FF\u4EE3\uFF0C\u8BF7\u91CD\u65B0\u5BA1\u9605\u5F53\u524D\u5019\u9009": "A newer attempt superseded the selected candidate. Review the current candidate",
|
|
1055
|
+
"\u5019\u9009\u4EE3\u7801\u5728\u63A5\u7EB3\u51C6\u5907\u671F\u95F4\u53D1\u751F\u53D8\u5316\uFF0C\u9700\u91CD\u65B0\u9A8C\u8BC1": "Candidate code changed while preparing acceptance. Verify it again",
|
|
1056
|
+
"\u6587\u6863\u5728\u96C6\u6210\u671F\u95F4\u53D1\u751F\u53D8\u66F4": "Documents changed during integration",
|
|
1057
|
+
"\u96C6\u6210\u7ED3\u679C\u4E0E\u5DF2\u9A8C\u8BC1\u5019\u9009\u4E0D\u4E00\u81F4": "The integration result differs from the verified candidate",
|
|
1058
|
+
"\u786E\u5B9A\u6027\u9A8C\u8BC1\u4E0E\u72EC\u7ACB\u590D\u6838\u901A\u8FC7\u540E\u4EBA\u5DE5\u63A5\u7EB3": "Accepted by a human after deterministic verification and independent review passed",
|
|
1059
|
+
"\u542F\u52A8\u671F\u95F4\u672A\u53D6\u5F97\u6267\u884C\u8EAB\u4EFD\uFF0C\u4E0D\u80FD\u81EA\u52A8\u91CD\u53D1": "No execution identity was obtained during startup. The request cannot be automatically resent",
|
|
1060
|
+
"\u8BE5\u5C1D\u8BD5\u5DF2\u7531\u65B0\u7684\u6267\u884C\u63A5\u66FF\uFF0C\u4E0D\u80FD\u66F4\u6539\u5F53\u524D\u6B65\u9AA4\u72B6\u6001": "A newer execution superseded this attempt. It cannot change the current step state",
|
|
1061
|
+
"\u4E2D\u65AD\u4EFB\u52A1\u6838\u5BF9\u5931\u8D25\uFF0C\u8BF7\u521B\u5EFA\u65B0\u5C1D\u8BD5": "Could not reconcile the interrupted task. Create a new attempt",
|
|
1062
|
+
"\u4E2D\u65AD\u4EFB\u52A1\u7684\u51BB\u7ED3\u4F9D\u636E\u5DF2\u53D8\u5316\uFF0C\u8BF7\u521B\u5EFA\u65B0\u5C1D\u8BD5": "The interrupted task\u2019s frozen references changed. Create a new attempt",
|
|
1063
|
+
"\u4E2D\u65AD\u4EFB\u52A1\u7684\u786E\u5B9A\u6027\u9A8C\u8BC1\u672A\u901A\u8FC7\uFF0C\u8BF7\u521B\u5EFA\u65B0\u5C1D\u8BD5": "Deterministic verification of the interrupted task failed. Create a new attempt",
|
|
1064
|
+
"\u5DF2\u6838\u5BF9\u4E2D\u65AD\u4EFB\u52A1\uFF1B\u4EFB\u52A1\u5217\u8868\u5C1A\u672A\u5168\u90E8\u9A8C\u8BC1\uFF0C\u672A\u81EA\u52A8\u6D3E\u53D1\u5269\u4F59\u4EFB\u52A1\uFF0C\u8BF7\u521B\u5EFA\u65B0\u5C1D\u8BD5": "The interrupted task was reconciled, but the task list is not fully verified. Remaining tasks were not dispatched automatically; create a new attempt",
|
|
1065
|
+
"\u672A\u786E\u8BA4\u6267\u884C\u8EAB\u4EFD\uFF0C\u65E0\u6CD5\u505C\u6B62": "Cannot stop execution before its identity is confirmed",
|
|
1066
|
+
"\u5DE5\u4F5C\u9879\u6B63\u5728\u51C6\u5907\u6267\u884C\u6216\u96C6\u6210\u4EE3\u7801": "The work item is preparing execution or integrating code",
|
|
1067
|
+
"\u7F3A\u5C11\u6267\u884C\u8EAB\u4EFD": "Missing execution identity",
|
|
1068
|
+
"\u8BE5\u5C1D\u8BD5\u5DF2\u7531\u65B0\u7684\u6267\u884C\u63A5\u66FF\uFF0C\u8BF7\u67E5\u770B\u5F53\u524D\u5C1D\u8BD5": "A newer execution superseded this attempt. View the current attempt",
|
|
1069
|
+
"\u5DE5\u4F5C\u9879\u6B63\u5728\u96C6\u6210\u4EE3\u7801": "The work item is integrating code",
|
|
1070
|
+
"\u53EA\u80FD\u6062\u590D\u5DF2\u7ECF\u4E2D\u65AD\u7684\u6267\u884C": "Only interrupted executions can be resumed",
|
|
1071
|
+
"\u539F\u8FD0\u884C\u8F93\u5165\u5DF2\u8FC7\u671F\uFF0C\u8BF7\u521B\u5EFA\u65B0\u5C1D\u8BD5": "The original run inputs are stale. Create a new attempt",
|
|
1072
|
+
"\u5E95\u5EA7\u65E0\u6CD5\u6062\u590D": "The backend cannot resume this execution",
|
|
1073
|
+
"\u8BE5\u4EA4\u4E92\u5DF2\u7ECF\u5904\u7406": "This interaction has already been handled",
|
|
1074
|
+
"\u8BF7\u8BB0\u5F55\u5904\u7406\u7406\u7531": "Record a reason for this decision",
|
|
1075
|
+
"\u963B\u585E\u53D1\u73B0\u5FC5\u987B\u4FEE\u8BA2\u76EE\u6807\u4EA7\u7269\u5E76\u901A\u8FC7\u53CC\u89C6\u89D2\u590D\u9A8C\uFF1B\u5355\u6B21\u6D4B\u8BD5\u901A\u8FC7\u4E0D\u80FD\u66FF\u4EE3\u95EE\u9898\u590D\u6838": "Blocking findings require revision of the target artifact and review from both perspectives. Passing one test cannot replace review of the finding",
|
|
1076
|
+
"\u89E3\u51B3\u963B\u585E\u95EE\u9898\u9700\u8981\u9A8C\u8BC1\u6216\u65B0\u590D\u6838\u8BC1\u636E": "Resolving a blocking finding requires verification or new review evidence",
|
|
1077
|
+
"\u8BC1\u636E\u6CA1\u6709\u901A\u8FC7\u9A8C\u8BC1\u6216\u5C5E\u4E8E\u5176\u4ED6\u5DE5\u4F5C\u9879": "The evidence did not pass verification or belongs to another work item",
|
|
1078
|
+
"\u963B\u585E\u95EE\u9898\u4E0D\u80FD\u4EC5\u4EE5\u7406\u7531\u8C41\u514D": "Blocking findings cannot be waived with a reason alone",
|
|
1079
|
+
"\u9879\u76EE\u9636\u6BB5\u6B63\u5728\u51C6\u5907\u6216\u4EE3\u7801\u6B63\u5728\u63A5\u7EB3\uFF0C\u8BF7\u7A0D\u540E\u66F4\u65B0\u5DE5\u7A0B\u8BBE\u7F6E": "A project stage is being prepared or code is being accepted. Update project settings later",
|
|
1080
|
+
"\u7B5B\u9009\u8282\u70B9\u4E0D\u5C5E\u4E8E\u5F53\u524D\u5DE5\u4F5C\u9879": "The filtered node does not belong to this work item",
|
|
1081
|
+
"\u8BB0\u5F55\u4E0D\u5B58\u5728": "The record does not exist",
|
|
1082
|
+
"\u8BB0\u5F55\u5DF2\u7ECF\u53D8\u5316\uFF0C\u8BF7\u6BD4\u8F83\u6700\u65B0\u7248\u672C": "The record changed. Compare the latest revision",
|
|
1083
|
+
"\u8BB0\u5F55\u5DF2\u88AB\u53E6\u4E00\u8FDB\u7A0B\u4FEE\u6539": "Another process modified the record",
|
|
1084
|
+
"\u4E8B\u4EF6\u6E38\u6807\u5FC5\u987B\u4E3A\u975E\u8D1F\u5B89\u5168\u6574\u6570": "The event cursor must be a non-negative safe integer",
|
|
1085
|
+
"\u5E42\u7B49\u952E\u5DF2\u7ECF\u7528\u4E8E\u4E0D\u540C\u64CD\u4F5C": "This idempotency key was already used for a different operation",
|
|
1086
|
+
"Git \u64CD\u4F5C\u5931\u8D25": "Git operation failed",
|
|
1087
|
+
"Git \u8F93\u51FA\u8FBE\u5230\u5B8C\u6574\u8BFB\u53D6\u4E0A\u9650\uFF0C\u8BF7\u7F29\u5C0F\u5019\u9009\u6539\u52A8\uFF1B\u4E0D\u80FD\u7528\u622A\u65AD\u7684\u5DEE\u5F02\u4F5C\u4E3A\u590D\u6838\u4F9D\u636E": "Git output exceeded the complete-read limit. Reduce the candidate changes; truncated differences cannot serve as review evidence",
|
|
1088
|
+
"\u65B0\u589E\u6587\u4EF6 {0} \u8D85\u8FC7\u590D\u6838\u6750\u6599\u4E0A\u9650\uFF0C\u8BF7\u62C6\u5C0F\u5019\u9009\u6539\u52A8": "New file {0} exceeds the review material limit. Reduce the candidate changes",
|
|
1089
|
+
"\u4E8C\u8FDB\u5236\u5185\u5BB9 SHA-256\uFF1A{0}\uFF1B\u6B63\u6587\u672A\u4F5C\u8BED\u4E49\u6838\u9A8C": "Binary content SHA-256: {0}; its contents have not been semantically reviewed",
|
|
1090
|
+
"\u5019\u9009\u8865\u4E01\u8D85\u8FC7\u590D\u6838\u6750\u6599\u4E0A\u9650\uFF0C\u8BF7\u62C6\u5C0F\u5019\u9009\u6539\u52A8": "The candidate patch exceeds the review material limit. Reduce the candidate changes",
|
|
1091
|
+
"Maka {0} \u4E0E\u56FA\u5B9A\u7248\u672C\u4E0D\u5339\u914D\uFF0C\u62D2\u7EDD\u81EA\u52A8\u4FEE\u6539": "Maka {0} does not match the pinned version. Automatic modification was refused",
|
|
1092
|
+
"\u9636\u6BB5\u8F93\u5165\u8D85\u8FC7 Maka \u6B63\u5F0F\u7248 0.2.0 \u7684 48 KiB UTF-8 \u6587\u672C\u4E0A\u9650\u3002\u8BF7\u7F29\u5C0F\u9700\u6C42\u3001\u4EA7\u7269\u6216\u5019\u9009\u8865\u4E01\u540E\u91CD\u8BD5\uFF1B\u5B8C\u6574\u5BA1\u6838\u4F9D\u636E\u4E0D\u80FD\u622A\u65AD\u3002": "Stage input exceeds the 48 KiB UTF-8 text limit of the official Maka 0.2.0 release. Reduce the requirements, artifacts or candidate patch and retry; complete review references cannot be truncated.",
|
|
1093
|
+
"\u8BF7\u5148\u8FD0\u884C npm run maka:setup": "Run npm run maka:setup first",
|
|
1094
|
+
"Maka Host \u65E0\u6CD5\u8FDE\u63A5\uFF1A{0}": "Cannot connect to Maka Host: {0}",
|
|
1095
|
+
"\u8BF7\u5148\u8FD0\u884C npm run build \u751F\u6210\u5DE5\u4F5C\u533A\u6269\u5C55": "Run npm run build first to build the workspace extension",
|
|
1096
|
+
"\u5DE5\u4F5C\u7A7A\u95F4\u5DE5\u5177\u6269\u5C55\u672A\u5C31\u7EEA": "The workspace tool extension is not ready",
|
|
1097
|
+
"\u4F7F\u7528 Host plan/explore \u53EA\u8BFB\u7B56\u7565\uFF1B\u771F\u5B9E\u4F9B\u5E94\u5546\u9A8C\u6536\u5F85\u8FDE\u63A5\u914D\u7F6E": "Uses the Host plan/explore read-only policy; real-provider validation awaits connection configuration",
|
|
1098
|
+
"\u6A21\u578B\u76EE\u5F55\u5DF2\u53D8\u5316\uFF0C\u8BF7\u5237\u65B0": "The model catalog changed. Refresh the page",
|
|
1099
|
+
"\u5E95\u5EA7\u62D2\u7EDD\u542F\u52A8\u9636\u6BB5": "The backend refused to start the stage",
|
|
1100
|
+
"\u6267\u884C\u5E95\u5EA7\u8EAB\u4EFD\u5DF2\u53D8\u5316\uFF0C\u4E0D\u80FD\u7EE7\u7EED\u539F\u8FD0\u884C": "The execution backend identity changed. The original run cannot continue",
|
|
1101
|
+
"\u65E0\u6CD5\u6062\u590D": "Cannot resume",
|
|
1102
|
+
"Maka \u6B63\u5F0F\u7248\u4E0D\u652F\u6301\u6B64\u8FDE\u63A5\u534F\u8BAE": "The official Maka release does not support this connection protocol",
|
|
1103
|
+
"\u8FDE\u63A5\u540D\u79F0\u6216\u6A21\u578B\u76EE\u5F55\u5DF2\u53D8\u5316\uFF0C\u8BF7\u5237\u65B0": "The connection name or model catalog changed. Refresh the page",
|
|
1104
|
+
"\u7981\u6B62\u4F7F\u7528 Maka \u5F00\u53D1\u6216\u9884\u53D1\u5E03\u7248\u672C\uFF1A{0}\uFF1B\u5185\u7F6E\u8FD0\u884C\u65F6\u53EA\u63A5\u53D7\u6B63\u5F0F release": "Maka development or prerelease versions are prohibited: {0}; the bundled runtime accepts official releases only",
|
|
1105
|
+
"Maka \u7248\u672C\u4E0D\u5339\u914D\uFF1A\u9700\u8981\u6B63\u5F0F release {0}\uFF0C\u5F53\u524D {1}": "Maka version mismatch: official release {0} is required; current version: {1}",
|
|
1106
|
+
"Maka \u6B63\u5F0F\u6E90\u7801\u6279\u51C6\u4FE1\u606F\u4E0D\u5B8C\u6574": "Official Maka source approval information is incomplete",
|
|
1107
|
+
"Maka \u6B63\u5F0F npm \u6279\u51C6\u4FE1\u606F\u4E0D\u5B8C\u6574": "Official Maka npm approval information is incomplete",
|
|
1108
|
+
"Maka \u6B63\u5F0F\u53D1\u5E03\u6765\u6E90\u6821\u9A8C\u5931\u8D25\uFF1A{0}": "Official Maka release provenance validation failed: {0}",
|
|
1109
|
+
"Maka \u6B63\u5F0F\u6E90\u7801\u6765\u6E90\u6821\u9A8C\u5931\u8D25\uFF1A{0}": "Official Maka source provenance validation failed: {0}",
|
|
1110
|
+
"Maka \u6E90\u7801\u6784\u5EFA\u9A8C\u8BC1\u8BB0\u5F55\u4E0D\u5B8C\u6574": "Maka source build verification records are incomplete",
|
|
1111
|
+
"OpenCode HTTP API \u6CA1\u6709\u539F\u8FD0\u884C\u7684\u5B89\u5168\u6062\u590D\u534F\u8BAE\uFF1B\u53EF\u4EE5\u91CD\u65B0\u6838\u5BF9\u539F\u4F1A\u8BDD\u72B6\u6001\uFF0C\u7EE7\u7EED\u6267\u884C\u9700\u521B\u5EFA\u65B0\u5C1D\u8BD5\u3002": "The OpenCode HTTP API has no safe resume protocol for the original run. You can reconcile the original session state; continuing execution requires a new attempt.",
|
|
1112
|
+
"OpenCode \u6B65\u6570\u91C7\u7528\u4F1A\u8BDD\u8F6E\u8BE2\u76D1\u6D4B\u548C\u5DE5\u5177\u6388\u6743\u9884\u7B97\uFF0C\u975E\u539F\u751F\u786C\u4E0A\u9650\uFF1B\u81EA\u52A8\u5141\u8BB8\u7684\u8BFB\u53D6\u53CA\u4E24\u6B21\u8F6E\u8BE2\u4E4B\u95F4\u53EF\u80FD\u7EE7\u7EED\u6267\u884C\u3002": "OpenCode step limits use session polling and a tool authorization budget, rather than a native hard limit. Automatically allowed reads and execution between polls can continue.",
|
|
1113
|
+
"\u53EA\u8BFB\u6267\u884C\u4F9D\u8D56\u53EF\u4FE1\u7684\u7528\u6237\u7EA7 OpenCode \u5DE5\u5177\u4E0E\u63D2\u4EF6\u914D\u7F6E\uFF1BHTTP API \u65E0\u6CD5\u8FA8\u8BA4\u540C\u540D\u5DE5\u5177\u8986\u76D6\uFF0C\u7528\u6237\u7EA7\u63D2\u4EF6\u4ECD\u53EF\u80FD\u8D8A\u8FC7\u5DE5\u5177\u6743\u9650\u3002\u5DE5\u4F5C\u533A\u672C\u5730\u914D\u7F6E\u4E0E\u6269\u5C55\u5728\u6FC0\u6D3B\u524D\u62D2\u7EDD\uFF1B\u5DE5\u7A0B\u9636\u6BB5\u53E6\u6709\u5DE5\u4F5C\u6811\u53D8\u5316\u68C0\u67E5\u963B\u585E\u5F02\u5E38\u5199\u5165\u3002": "Read-only execution depends on trusted user-level OpenCode tools and plugins. The HTTP API cannot detect overridden tool names, and user-level plugins can bypass tool permissions. Workspace-local configuration and extensions are rejected before activation; engineering stages also block unexpected writes through working-tree checks.",
|
|
1114
|
+
"OpenCode \u670D\u52A1\u5730\u5740\u5FC5\u987B\u662F\u6709\u6548\u7684\u672C\u673A HTTP(S) \u5730\u5740": "The OpenCode service URL must be a valid local HTTP(S) address",
|
|
1115
|
+
"OpenCode \u670D\u52A1\u5730\u5740\u53EA\u652F\u6301 localhost\u3001127.0.0.1 \u6216 [::1] \u7684 HTTP(S) \u6839\u5730\u5740\uFF0C\u4E0D\u63A5\u53D7\u5185\u5D4C\u51ED\u636E\u3001\u8DEF\u5F84\u6216\u67E5\u8BE2\u53C2\u6570": "The OpenCode service URL must be an HTTP(S) root URL on localhost, 127.0.0.1 or [::1], without embedded credentials, paths or query parameters",
|
|
1116
|
+
"OpenCode \u670D\u52A1\u6216\u914D\u7F6E\u6765\u6E90\u5DF2\u53D8\u5316\uFF0C\u4E0D\u80FD\u7EE7\u7EED\u539F\u8FD0\u884C": "The OpenCode service or configuration provenance changed. The original run cannot continue",
|
|
1117
|
+
"OpenCode \u6267\u884C\u5F15\u7528\u65E0\u6548": "Invalid OpenCode execution reference",
|
|
1118
|
+
"OpenCode \u5DE5\u4F5C\u533A\u5FC5\u987B\u4F4D\u4E8E SpecFlow \u5DE5\u4F5C\u533A\u76EE\u5F55\u5185": "The OpenCode workspace must be within the SpecFlow workspace directory",
|
|
1119
|
+
"OpenCode \u6267\u884C\u76EE\u5F55\u6216\u5176\u9879\u76EE\u7956\u5148\u5305\u542B\u672C\u5730\u914D\u7F6E/\u6269\u5C55 {0}\uFF1B\u4E3A\u907F\u514D\u5728\u6743\u9650\u5EFA\u7ACB\u524D\u52A0\u8F7D\u4EE3\u7801\uFF0C\u5DF2\u963B\u6B62\u5DE5\u4F5C\u533A\u8FDE\u63A5\u3002\u8BF7\u5C06\u7ECF\u8FC7\u4FE1\u4EFB\u5BA1\u67E5\u7684 OpenCode \u914D\u7F6E\u79FB\u81F3\u7528\u6237\u7EA7\u914D\u7F6E\u76EE\u5F55\u3002": "The OpenCode execution directory or one of its project ancestors contains local configuration/extensions: {0}. The workspace connection was blocked to avoid loading code before permissions are established. Move trusted and reviewed OpenCode configuration to the user-level configuration directory.",
|
|
1120
|
+
"\u6CA1\u6709\u6B64 OpenCode \u6267\u884C\u7684\u6301\u4E45\u5316\u8BB0\u5F55\uFF0C\u4E0D\u80FD\u63A5\u7BA1\u6216\u91CD\u65B0\u6D3E\u53D1": "There is no persistent record for this OpenCode execution. It cannot be taken over or dispatched again",
|
|
1121
|
+
"OpenCode \u4F1A\u8BDD\u5F15\u7528\u4E0E\u6301\u4E45\u5316\u8BB0\u5F55\u4E0D\u5339\u914D": "The OpenCode session reference does not match its persistent record",
|
|
1122
|
+
"OpenCode \u5DE5\u4F5C\u533A\u8DEF\u5F84\u5DF2\u53D8\u5316\uFF0C\u4E0D\u80FD\u7EE7\u7EED\u539F\u8FD0\u884C": "The OpenCode workspace path changed. The original run cannot continue",
|
|
1123
|
+
"OpenCode \u8FDE\u63A5\u5DF2\u5173\u95ED": "The OpenCode connection is closed",
|
|
1124
|
+
"OpenCode \u8BF7\u6C42\u672A\u786E\u8BA4\uFF1A\u670D\u52A1\u4E0D\u53EF\u8FBE\u3001\u8D85\u65F6\u6216\u8FD4\u56DE\u4E86\u91CD\u5B9A\u5411\uFF1B\u8BF7\u6838\u5BF9\u539F\u8FD0\u884C\u72B6\u6001": "The OpenCode request is unconfirmed: the service is unreachable, timed out or returned a redirect. Reconcile the original run state",
|
|
1125
|
+
"OpenCode \u8BF7\u6C42\u5931\u8D25\uFF08HTTP {0}\uFF09": "OpenCode request failed (HTTP {0})",
|
|
1126
|
+
"OpenCode \u8FD4\u56DE\u4E86\u65E0\u6548\u7684 JSON \u54CD\u5E94": "OpenCode returned an invalid JSON response",
|
|
1127
|
+
"OpenCode \u6CA1\u6709\u8FD4\u56DE\u53EF\u6838\u5BF9\u7684\u670D\u52A1\u8DEF\u5F84\u8EAB\u4EFD": "OpenCode did not return a verifiable service path identity",
|
|
1128
|
+
"OpenCode \u670D\u52A1\u8FD4\u56DE\u7684\u6267\u884C\u76EE\u5F55\u4E0E SpecFlow \u5DE5\u4F5C\u533A\u4E0D\u7B26": "The execution directory returned by OpenCode does not match the SpecFlow workspace",
|
|
1129
|
+
"OpenCode \u670D\u52A1\u7684\u6570\u636E\u6216\u914D\u7F6E\u76EE\u5F55\u8EAB\u4EFD\u5DF2\u53D8\u5316\uFF0C\u4E0D\u80FD\u7EE7\u7EED\u539F\u8FD0\u884C": "The OpenCode service data or configuration directory identity changed. The original run cannot continue",
|
|
1130
|
+
"OpenCode \u5065\u5EB7\u68C0\u67E5\u54CD\u5E94\u65E0\u6548": "Invalid OpenCode health check response",
|
|
1131
|
+
"OpenCode \u6A21\u578B\u76EE\u5F55\u54CD\u5E94\u65E0\u6548": "Invalid OpenCode model catalog response",
|
|
1132
|
+
"\u6A21\u578B\u76EE\u6807\u5C5E\u4E8E\u5176\u4ED6 OpenCode \u670D\u52A1\uFF0C\u8BF7\u5237\u65B0\u6A21\u578B\u5217\u8868": "The model target belongs to another OpenCode service. Refresh the model list",
|
|
1133
|
+
"\u6267\u884C\u6B65\u6570\u5FC5\u987B\u4E3A\u6B63\u6574\u6570": "The execution step limit must be a positive integer",
|
|
1134
|
+
"\u539F OpenCode \u5C1D\u8BD5\u7684\u51BB\u7ED3\u8F93\u5165\u6216\u5E95\u5EA7\u8EAB\u4EFD\u5DF2\u53D8\u5316": "The original OpenCode attempt\u2019s frozen inputs or backend identity changed",
|
|
1135
|
+
"OpenCode \u4F1A\u8BDD\u521B\u5EFA\u7ED3\u679C\u672A\u786E\u8BA4\uFF1B\u8BF7\u6838\u5BF9\u540E\u521B\u5EFA\u65B0\u5C1D\u8BD5": "OpenCode session creation is unconfirmed. Reconcile it before creating a new attempt",
|
|
1136
|
+
"OpenCode \u672A\u786E\u8BA4\u9694\u79BB\u4F1A\u8BDD\u7684\u6267\u884C\u76EE\u5F55\u548C\u6743\u9650\u89C4\u5219\uFF0C\u9636\u6BB5\u672A\u6D3E\u53D1": "OpenCode did not confirm the isolated session\u2019s execution directory and permissions. The stage was not dispatched",
|
|
1137
|
+
"OpenCode \u9636\u6BB5\u51BB\u7ED3\u8F93\u5165\u5DF2\u53D8\u5316": "The OpenCode stage\u2019s frozen inputs changed",
|
|
1138
|
+
"{0}\uFF1B\u6D3E\u53D1\u610F\u56FE\u5DF2\u4FDD\u5B58\uFF0C\u4E0D\u4F1A\u81EA\u52A8\u91CD\u65B0\u53D1\u9001\u3002": "{0}; dispatch intent was saved and the request will not be automatically resent.",
|
|
1139
|
+
"OpenCode \u539F\u4F1A\u8BDD\u7684\u76EE\u5F55\u6216\u6743\u9650\u89C4\u5219\u5DF2\u53D8\u5316\uFF0C\u65E0\u6CD5\u7EE7\u7EED\u63A5\u7BA1": "The original OpenCode session\u2019s directory or permissions changed. It cannot be taken over",
|
|
1140
|
+
"OpenCode \u4F1A\u8BDD\u6D88\u606F\u6216\u72B6\u6001\u54CD\u5E94\u65E0\u6548": "Invalid OpenCode session messages or status response",
|
|
1141
|
+
"OpenCode \u89C2\u6D4B\u6B65\u6570\u8D85\u8FC7\u9636\u6BB5\u9884\u7B97\uFF0C\u5DF2\u505C\u6B62\u539F\u4F1A\u8BDD": "Observed OpenCode steps exceeded the stage budget. The original session was stopped",
|
|
1142
|
+
"OpenCode \u6267\u884C\u5931\u8D25": "OpenCode execution failed",
|
|
1143
|
+
"OpenCode \u89C2\u6D4B\u6B65\u6570\u8D85\u8FC7\u9636\u6BB5\u9884\u7B97": "Observed OpenCode steps exceeded the stage budget",
|
|
1144
|
+
"OpenCode \u4EA4\u4E92\u54CD\u5E94\u65E0\u6548": "Invalid OpenCode interaction response",
|
|
1145
|
+
"\u53EA\u8BFB OpenCode \u4F1A\u8BDD\u51FA\u73B0\u4E0D\u5141\u8BB8\u7684\u5DE5\u5177\u6388\u6743\u8BF7\u6C42\uFF0C\u5DF2\u62D2\u7EDD": "A disallowed tool authorization request in a read-only OpenCode session was denied",
|
|
1146
|
+
"\u5141\u8BB8\u6267\u884C {0}\uFF1A{1}": "Allow {0}: {1}",
|
|
1147
|
+
"\u5DE5\u5177\u8C03\u7528\u5931\u8D25": "Tool call failed",
|
|
1148
|
+
"\u7528\u6237\u62D2\u7EDD\u4E86 OpenCode \u5DE5\u5177\u64CD\u4F5C\uFF0C\u539F\u4F1A\u8BDD\u5DF2\u7EC8\u6B62": "The user denied the OpenCode tool operation. The original session was terminated",
|
|
1149
|
+
"OpenCode \u5DE5\u5177\u8C03\u7528\u5931\u8D25\uFF1A{0}": "OpenCode tool call failed: {0}",
|
|
1150
|
+
"OpenCode \u4F1A\u8BDD\u5DF2\u51C6\u5907\uFF0C\u9636\u6BB5\u5C1A\u672A\u6D3E\u53D1": "The OpenCode session is ready, but the stage has not been dispatched",
|
|
1151
|
+
"OpenCode \u4F1A\u8BDD\u7A7A\u95F2\uFF0C\u4F46\u7F3A\u5C11\u7ED1\u5B9A\u672C\u6B21\u6D88\u606F\u7684\u7EC8\u6B62\u51ED\u636E\uFF1B\u4E0D\u4F1A\u81EA\u52A8\u91CD\u65B0\u53D1\u9001\u6216\u6062\u590D": "The OpenCode session is idle, but no terminal receipt is bound to this message. It will not be automatically resent or resumed",
|
|
1152
|
+
"\u6B64 OpenCode \u8BF7\u6C42\u5DF2\u7ED3\u675F\u6216\u4E0D\u5C5E\u4E8E\u5F53\u524D\u8FD0\u884C": "This OpenCode request ended or does not belong to the current run",
|
|
1153
|
+
"OpenCode \u4EA4\u4E92\u7B54\u590D\u65E0\u6548": "Invalid OpenCode interaction answer",
|
|
1154
|
+
"OpenCode \u4EC5\u652F\u6301\u672C\u6B21\u5141\u8BB8\u6216\u62D2\u7EDD\u5DE5\u5177\u6388\u6743": "OpenCode supports allowing once or denying tool authorization only",
|
|
1155
|
+
"OpenCode \u5DE5\u5177\u6388\u6743\u9884\u7B97\u5DF2\u7528\u5B8C\uFF0C\u8BF7\u505C\u6B62\u539F\u5C1D\u8BD5": "The OpenCode tool authorization budget is exhausted. Stop the original attempt",
|
|
1156
|
+
"\u8BF7\u6309\u987A\u5E8F\u5B8C\u6574\u56DE\u7B54 OpenCode \u95EE\u9898": "Answer every OpenCode question in order",
|
|
1157
|
+
"OpenCode \u95EE\u9898\u8981\u6C42\u9009\u62E9\u7ED9\u5B9A\u9009\u9879": "This OpenCode question requires selecting a provided option",
|
|
1158
|
+
"OpenCode \u4EA4\u4E92\u7C7B\u578B\u65E0\u6548": "Invalid OpenCode interaction type",
|
|
1159
|
+
"\u6267\u884C\u5E95\u5EA7\u5DF2\u6CE8\u518C": "The execution backend is already registered",
|
|
1160
|
+
"\u6267\u884C\u5E95\u5EA7 {0} \u672A\u6CE8\u518C": "Execution backend {0} is not registered",
|
|
1161
|
+
"\u6A21\u578B\u76EE\u5F55\u8BFB\u53D6\u5931\u8D25\uFF0C\u8BF7\u68C0\u67E5\u5E95\u5EA7\u914D\u7F6E\u540E\u5237\u65B0": "Could not read the model catalog. Check the backend configuration and refresh",
|
|
1162
|
+
"\u6267\u884C\u5E95\u5EA7\u65E0\u6CD5\u8FDE\u63A5\uFF0C\u8BF7\u68C0\u67E5\u914D\u7F6E": "Cannot connect to the execution backend. Check its configuration",
|
|
1163
|
+
"\u5BA1\u6838\u62A5\u544A\u65E0\u6548\uFF1A{0}": "Invalid review report: {0}",
|
|
1164
|
+
"{0} \u5F15\u7528\u4E86\u672A\u77E5\u6750\u6599 {1}": "{0} references unknown material {1}",
|
|
1165
|
+
"{0} \u7684\u8BC1\u636E\u5FC5\u987B\u5305\u542B\u5177\u4F53\u539F\u6587\uFF0C\u4E0D\u80FD\u4F7F\u7528\u7A7A\u6CDB\u7ED3\u8BBA": "Evidence for {0} must include specific source text, rather than a generic conclusion",
|
|
1166
|
+
"{0} \u7684\u5F15\u6587\u4E0D\u5C5E\u4E8E\u51BB\u7ED3\u6750\u6599 {1}": "The quotation for {0} does not appear in frozen material {1}",
|
|
1167
|
+
"\u7ED3\u6784\u4E0D\u7B26\u5408\u5BA1\u6838\u534F\u8BAE": "The structure does not match the review protocol",
|
|
1168
|
+
"\u5BA1\u6838\u6279\u6B21\u6216\u5BA1\u6838\u89C6\u89D2\u4E0D\u5339\u914D": "The review group or perspective does not match",
|
|
1169
|
+
"\u51BB\u7ED3\u6750\u6599 ID \u91CD\u590D": "Duplicate frozen material IDs",
|
|
1170
|
+
"\u5BA1\u6838\u51C6\u5219\u4E3A\u7A7A\u6216 ID \u91CD\u590D": "Review criteria are empty or have duplicate IDs",
|
|
1171
|
+
"\u5305\u542B\u672A\u77E5\u51C6\u5219 {0}": "Unknown criterion {0}",
|
|
1172
|
+
"\u91CD\u590D\u68C0\u67E5\u51C6\u5219 {0}": "Duplicate check for criterion {0}",
|
|
1173
|
+
"\u51C6\u5219 {0} \u6CA1\u6709\u6392\u9664\u53CD\u4F8B\uFF0C\u4E0D\u80FD\u5224\u5B9A\u901A\u8FC7": "Criterion {0} did not rule out its counterexample and cannot pass",
|
|
1174
|
+
"\u51C6\u5219 {0} \u7684\u5931\u8D25\u7ED3\u8BBA\u4E0E\u53CD\u4F8B\u7ED3\u679C\u77DB\u76FE": "The failure conclusion for criterion {0} conflicts with its counterexample result",
|
|
1175
|
+
"\u7F3A\u5C11\u51C6\u5219 {0} \u7684\u68C0\u67E5": "Missing check for criterion {0}",
|
|
1176
|
+
"\u7F3A\u5C11\u53EF\u6838\u5BF9\u7684\u539F\u59CB\u9700\u6C42\u6750\u6599": "No verifiable original requirements material",
|
|
1177
|
+
"\u672A\u5F15\u7528\u539F\u59CB\u9700\u6C42\u6750\u6599 {0}": "Original requirements material {0} was not cited",
|
|
1178
|
+
"\u7F3A\u5C11\u5BA1\u6838\u5BF9\u8C61 {0} \u5F53\u524D\u7248\u672C\u7684\u8BC1\u636E": "Missing current-revision evidence for review subject {0}",
|
|
1179
|
+
"\u672A\u6838\u5BF9\u51BB\u7ED3\u7684 {0} \u6750\u6599 {1}": "Frozen {0} material {1} was not checked",
|
|
1180
|
+
"\u7F3A\u5C11\u4EBA\u7C7B\u7B80\u62A5\u4E0E\u6B63\u6587\u7684\u4E00\u81F4\u6027\u68C0\u67E5": "Missing consistency check between the human reading brief and complete document",
|
|
1181
|
+
"\u4EBA\u7C7B\u7B80\u62A5 {0} \u7F3A\u5C11\u5BF9\u5E94\u7684\u6B63\u6587\u6750\u6599": "Human reading brief {0} has no corresponding complete document material",
|
|
1182
|
+
"\u4EBA\u7C7B\u7B80\u62A5\u4E00\u81F4\u6027\u68C0\u67E5\u5FC5\u987B\u540C\u65F6\u5F15\u7528 {0} \u53CA\u5BF9\u5E94\u6B63\u6587 {1}": "The human brief consistency check must cite both {0} and its complete document {1}",
|
|
1183
|
+
"\u4EE3\u7801\u5BA1\u6838\u7F3A\u5C11 {0} \u6750\u6599\u8BC1\u636E": "Code review is missing {0} evidence",
|
|
1184
|
+
"\u5386\u53F2\u95EE\u9898 ID \u91CD\u590D": "Duplicate prior finding IDs",
|
|
1185
|
+
"\u5305\u542B\u672A\u77E5\u5386\u53F2\u95EE\u9898 {0}": "Unknown prior finding {0}",
|
|
1186
|
+
"\u91CD\u590D\u5904\u7406\u5386\u53F2\u95EE\u9898 {0}": "Duplicate resolution for prior finding {0}",
|
|
1187
|
+
"\u5386\u53F2\u95EE\u9898 {0}": "Prior finding {0}",
|
|
1188
|
+
"\u5386\u53F2\u95EE\u9898 {0} \u58F0\u79F0\u5DF2\u4FEE\u590D\uFF0C\u4F46\u672A\u63D0\u4F9B\u5BA1\u6838\u5BF9\u8C61\u5F53\u524D\u7248\u672C\u7684\u8BC1\u636E": "Prior finding {0} is claimed fixed without current-revision evidence from the review subject",
|
|
1189
|
+
"\u5386\u53F2\u4EE3\u7801\u95EE\u9898 {0} \u58F0\u79F0\u5DF2\u4FEE\u590D\uFF0C\u4F46\u672A\u63D0\u4F9B\u5B9E\u9645\u4EE3\u7801\u8BC1\u636E": "Prior code finding {0} is claimed fixed without actual code evidence",
|
|
1190
|
+
"\u7F3A\u5C11\u5386\u53F2\u95EE\u9898 {0} \u7684\u5904\u7406\u7ED3\u8BBA": "Missing resolution for prior finding {0}",
|
|
1191
|
+
"\u901A\u8FC7\u7ED3\u8BBA\u9700\u8981\u5168\u90E8\u51C6\u5219\u901A\u8FC7\u3001\u5168\u90E8\u53CD\u4F8B\u88AB\u6392\u9664\u4E14\u5386\u53F2\u963B\u585E\u95EE\u9898\u5DF2\u4FEE\u590D": "A pass verdict requires all criteria to pass, all counterexamples to be ruled out and all prior blockers to be fixed",
|
|
1192
|
+
"\u8981\u6C42\u4FEE\u8BA2\u65F6\u5FC5\u987B\u6307\u51FA\u5931\u8D25\u68C0\u67E5\u6216\u4ECD\u5B58\u5728\u7684\u95EE\u9898": "A revise verdict must identify a failed check or an unresolved finding",
|
|
1193
|
+
"\u65E0\u6CD5\u786E\u5B9A\u65F6\u5FC5\u987B\u8BF4\u660E\u672A\u786E\u8BA4\u7684\u68C0\u67E5\u3001\u53CD\u4F8B\u6216\u5386\u53F2\u95EE\u9898": "An inconclusive verdict must identify an unconfirmed check, counterexample or prior finding",
|
|
1194
|
+
"\u4EA7\u7269\u8DEF\u5F84\u5FC5\u987B\u4F4D\u4E8E\u5DE5\u4F5C\u7A7A\u95F4\u5185": "The artifact path must stay within the workspace",
|
|
1195
|
+
"\u4EA7\u7269\u8DEF\u5F84\u8D8A\u51FA\u5DE5\u4F5C\u7A7A\u95F4": "The artifact path escapes the workspace",
|
|
1196
|
+
"\u4EA7\u7269\u8DEF\u5F84\u5305\u542B\u8D8A\u754C\u94FE\u63A5": "The artifact path contains a link that escapes the workspace",
|
|
1197
|
+
"\u4EE3\u7801\u5185\u5BB9\u54C8\u5E0C\u4E0D\u63A5\u53D7\u7B26\u53F7\u94FE\u63A5\uFF1A{0}": "Code content hashing does not accept symbolic links: {0}",
|
|
1198
|
+
"\u547D\u4EE4\u53C2\u6570\u5305\u542B\u975E\u6CD5\u5B57\u7B26": "Command arguments contain invalid characters",
|
|
1199
|
+
"Windows \u6279\u5904\u7406\u53C2\u6570\u5305\u542B\u4E0D\u652F\u6301\u7684\u63A7\u5236\u5B57\u7B26": "Windows batch arguments contain unsupported control characters",
|
|
1200
|
+
"\u6267\u884C\u5DF2\u53D6\u6D88": "Execution was cancelled",
|
|
1201
|
+
"\u8BF7\u901A\u8FC7 SpecFlow \u684C\u9762\u5E94\u7528\u8BBF\u95EE": "Access this service through the SpecFlow desktop app",
|
|
1202
|
+
"\u8BF7\u901A\u8FC7\u672C\u5730\u5730\u5740\u8BBF\u95EE": "Access this service through a local address",
|
|
1203
|
+
"\u672C\u5730\u5DE5\u7A0B\u63A5\u53E3\u4E0D\u63A5\u53D7\u6B64\u6765\u6E90": "The local engineering API does not accept this origin",
|
|
1204
|
+
"\u672C\u5730\u5E94\u7528\u4F1A\u8BDD\u5DF2\u8FC7\u671F\uFF0C\u8BF7\u5237\u65B0\u9875\u9762": "The local app session expired. Refresh the page",
|
|
1205
|
+
"\u8BF7\u6C42\u5B57\u6BB5\u4E0D\u7B26\u5408\u5951\u7EA6": "Request fields do not match the contract",
|
|
1206
|
+
"\u5185\u90E8\u64CD\u4F5C\u5931\u8D25": "An internal operation failed",
|
|
1207
|
+
"\u5199\u64CD\u4F5C\u9700\u8981\u5E42\u7B49\u952E": "Write operations require an idempotency key",
|
|
1208
|
+
"\u540C\u4E00\u4E2A\u64CD\u4F5C\u6B63\u5728\u6267\u884C": "The same operation is already in progress",
|
|
1209
|
+
"\u5F53\u524D\u540E\u7AEF\u4E0D\u652F\u6301\u8FDE\u63A5\u7BA1\u7406": "The current backend does not support connection management",
|
|
1210
|
+
"\u5BFC\u5165\u5185\u5BB9\u4FDD\u6301\u5019\u9009\u72B6\u6001\uFF0C\u9700\u5728\u672C\u673A\u91CD\u65B0\u590D\u6838\u4E0E\u63A5\u7EB3": "Imported content remains a candidate and must be reviewed and accepted again on this computer",
|
|
1211
|
+
"\u4E8B\u4EF6\u6E38\u6807\u4E0D\u53EF\u6062\u590D\uFF0C\u8BF7\u91CD\u65B0\u540C\u6B65\u5FEB\u7167": "The event cursor cannot be restored. Synchronize the snapshot again",
|
|
1212
|
+
"\u63A5\u53E3\u4E0D\u5B58\u5728": "The API endpoint does not exist",
|
|
1213
|
+
"\u672C\u673A\u5E95\u5EA7\u914D\u7F6E\u65E0\u6CD5\u8BFB\u53D6\uFF0C\u8BF7\u4FEE\u590D runtime-connections.json \u540E\u91CD\u542F\uFF1B\u672A\u8986\u76D6\u5DF2\u6709\u914D\u7F6E": "Cannot read local backend configuration. Fix runtime-connections.json and restart; existing configuration was not overwritten",
|
|
1214
|
+
"OpenCode \u7528\u6237\u540D\u5305\u542B\u65E0\u6548\u5B57\u7B26": "The OpenCode username contains invalid characters",
|
|
1215
|
+
"\u8BFB\u53D6\u4F4D\u7F6E\u5FC5\u987B\u4F4D\u4E8E UTF-8 \u5B57\u7B26\u8FB9\u754C": "The read offset must be on a UTF-8 character boundary",
|
|
1216
|
+
"Git \u8BFB\u53D6\u5931\u8D25": "Could not read Git data",
|
|
1217
|
+
"\u4E8C\u8FDB\u5236\u6B63\u6587\u672A\u4F5C\u8BED\u4E49\u6838\u9A8C": "Binary contents have not been semantically reviewed",
|
|
1218
|
+
"\u5F53\u524D\u4EC5\u8FD4\u56DE\u6587\u672C\u9996\u5757\u6216\u90E8\u5206\u8865\u4E01\uFF1B\u8BF7\u7EE7\u7EED\u6309\u5757\u8BFB\u53D6\u5B8C\u6574\u6B63\u6587": "Only the first text chunk or part of the patch is included. Continue reading chunks for the complete contents",
|
|
1219
|
+
"\u8BFB\u53D6\u5DEE\u5F02\u671F\u95F4\u5019\u9009\u53D1\u751F\u53D8\u5316\uFF0C\u8BF7\u91CD\u65B0\u52A0\u8F7D": "The candidate changed while reading differences. Reload it",
|
|
1220
|
+
"\u8BE5\u6587\u4EF6\u5C5E\u4E8E\u6392\u9664\u76EE\u5F55": "This file belongs to an excluded directory",
|
|
1221
|
+
"\u6587\u4EF6\u4E0D\u5728\u5F53\u524D\u5019\u9009\u5DEE\u5F02\u4E2D": "This file is not in the current candidate differences",
|
|
1222
|
+
"\u8BE5\u4FA7\u4E0D\u5B58\u5728\u6587\u4EF6\u6B63\u6587": "This side has no file content",
|
|
1223
|
+
"\u8BFB\u53D6\u4F4D\u7F6E\u8D85\u51FA\u6587\u4EF6\u5927\u5C0F": "The read offset exceeds the file size",
|
|
1224
|
+
"\u8BFB\u53D6\u6B63\u6587\u671F\u95F4\u5019\u9009\u53D1\u751F\u53D8\u5316\uFF0C\u8BF7\u91CD\u65B0\u52A0\u8F7D": "The candidate changed while reading its contents. Reload it",
|
|
1225
|
+
"\u540E\u7EED\u6B63\u6587\u5C1A\u672A\u63D0\u4F9B": "The remaining content has not been provided"
|
|
1226
|
+
};
|
|
1227
|
+
var openCodeCapabilityNotices = [
|
|
1228
|
+
"OpenCode HTTP API \u6CA1\u6709\u539F\u8FD0\u884C\u7684\u5B89\u5168\u6062\u590D\u534F\u8BAE\uFF1B\u53EF\u4EE5\u91CD\u65B0\u6838\u5BF9\u539F\u4F1A\u8BDD\u72B6\u6001\uFF0C\u7EE7\u7EED\u6267\u884C\u9700\u521B\u5EFA\u65B0\u5C1D\u8BD5\u3002",
|
|
1229
|
+
"OpenCode \u6B65\u6570\u91C7\u7528\u4F1A\u8BDD\u8F6E\u8BE2\u76D1\u6D4B\u548C\u5DE5\u5177\u6388\u6743\u9884\u7B97\uFF0C\u975E\u539F\u751F\u786C\u4E0A\u9650\uFF1B\u81EA\u52A8\u5141\u8BB8\u7684\u8BFB\u53D6\u53CA\u4E24\u6B21\u8F6E\u8BE2\u4E4B\u95F4\u53EF\u80FD\u7EE7\u7EED\u6267\u884C\u3002",
|
|
1230
|
+
"\u53EA\u8BFB\u6267\u884C\u4F9D\u8D56\u53EF\u4FE1\u7684\u7528\u6237\u7EA7 OpenCode \u5DE5\u5177\u4E0E\u63D2\u4EF6\u914D\u7F6E\uFF1BHTTP API \u65E0\u6CD5\u8FA8\u8BA4\u540C\u540D\u5DE5\u5177\u8986\u76D6\uFF0C\u7528\u6237\u7EA7\u63D2\u4EF6\u4ECD\u53EF\u80FD\u8D8A\u8FC7\u5DE5\u5177\u6743\u9650\u3002\u5DE5\u4F5C\u533A\u672C\u5730\u914D\u7F6E\u4E0E\u6269\u5C55\u5728\u6FC0\u6D3B\u524D\u62D2\u7EDD\uFF1B\u5DE5\u7A0B\u9636\u6BB5\u53E6\u6709\u5DE5\u4F5C\u6811\u53D8\u5316\u68C0\u67E5\u963B\u585E\u5F02\u5E38\u5199\u5165\u3002"
|
|
1231
|
+
];
|
|
1232
|
+
messages4[openCodeCapabilityNotices.join(" ")] = openCodeCapabilityNotices.map((source) => messages4[source]).join(" ");
|
|
1233
|
+
|
|
1234
|
+
// packages/i18n/desktop.ts
|
|
1235
|
+
var messages5 = {
|
|
1236
|
+
"\u9009\u62E9\u6587\u4EF6\u5939": "Select Folder",
|
|
1237
|
+
"\u5BFC\u51FA": "Export",
|
|
1238
|
+
"\u684C\u9762\u63A5\u53E3\u4E0D\u63A5\u53D7\u6B64\u8C03\u7528\u6765\u6E90": "The desktop API does not accept requests from this source",
|
|
1239
|
+
"\u5B89\u88C5\u5305\u7F3A\u5C11 Node.js \u8FD0\u884C\u65F6\uFF0C\u8BF7\u91CD\u65B0\u5B89\u88C5\u6216\u8FD0\u884C npm run desktop:prepare\u3002": "The Node.js runtime is missing. Reinstall SpecFlow or run npm run desktop:prepare.",
|
|
1240
|
+
"\u672A\u627E\u5230\u53EF\u7528\u7684 Git\u3002Windows \u8BF7\u5B89\u88C5 Git for Windows\uFF1BmacOS \u8BF7\u5B89\u88C5 Xcode Command Line Tools \u6216 Git\uFF0C\u5B8C\u6210\u540E\u91CD\u65B0\u6253\u5F00 SpecFlow\u3002": "Git could not be found. Install Git for Windows on Windows, or Xcode Command Line Tools or Git on macOS, then reopen SpecFlow.",
|
|
1241
|
+
"SpecFlow \u670D\u52A1\u5DF2\u505C\u6B62": "SpecFlow service stopped",
|
|
1242
|
+
"\u5DE5\u7A0B\u670D\u52A1\u610F\u5916\u9000\u51FA\uFF0C\u8BF7\u91CD\u65B0\u6253\u5F00\u5E94\u7528\u3002\u8BCA\u65AD\u65E5\u5FD7\uFF1A{0}": "The engineering service stopped unexpectedly. Reopen the app. Diagnostic log: {0}",
|
|
1243
|
+
"\u5DE5\u7A0B\u670D\u52A1\u542F\u52A8\u8D85\u65F6\u3002\u8BCA\u65AD\u65E5\u5FD7\uFF1A{0}": "The engineering service timed out while starting. Diagnostic log: {0}",
|
|
1244
|
+
"\u5DE5\u7A0B\u670D\u52A1\u542F\u52A8\u5931\u8D25\uFF08{0}\uFF09\u3002\u8BCA\u65AD\u65E5\u5FD7\uFF1A{1}": "The engineering service failed to start ({0}). Diagnostic log: {1}",
|
|
1245
|
+
"\u6587\u4EF6": "File",
|
|
1246
|
+
"\u6253\u5F00\u6570\u636E\u76EE\u5F55": "Open Data Directory",
|
|
1247
|
+
"\u6253\u5F00\u8BCA\u65AD\u65E5\u5FD7": "Open Diagnostic Logs",
|
|
1248
|
+
"\u5173\u95ED\u7A97\u53E3": "Close Window",
|
|
1249
|
+
"\u9000\u51FA SpecFlow": "Quit SpecFlow",
|
|
1250
|
+
"\u7F16\u8F91": "Edit",
|
|
1251
|
+
"\u89C6\u56FE": "View",
|
|
1252
|
+
"\u5E2E\u52A9": "Help",
|
|
1253
|
+
"\u5173\u4E8E SpecFlow": "About SpecFlow",
|
|
1254
|
+
"\u64A4\u9500": "Undo",
|
|
1255
|
+
"\u91CD\u505A": "Redo",
|
|
1256
|
+
"\u526A\u5207": "Cut",
|
|
1257
|
+
"\u590D\u5236": "Copy",
|
|
1258
|
+
"\u7C98\u8D34": "Paste",
|
|
1259
|
+
"\u5168\u9009": "Select All",
|
|
1260
|
+
"\u91CD\u65B0\u52A0\u8F7D": "Reload",
|
|
1261
|
+
"\u5B9E\u9645\u5927\u5C0F": "Actual Size",
|
|
1262
|
+
"\u653E\u5927": "Zoom In",
|
|
1263
|
+
"\u7F29\u5C0F": "Zoom Out",
|
|
1264
|
+
"\u5207\u6362\u5168\u5C4F": "Toggle Full Screen",
|
|
1265
|
+
"\u9690\u85CF SpecFlow": "Hide SpecFlow",
|
|
1266
|
+
"\u9690\u85CF\u5176\u4ED6\u5E94\u7528": "Hide Others",
|
|
1267
|
+
"\u663E\u793A\u5168\u90E8": "Show All",
|
|
1268
|
+
"\u8F6F\u4EF6\u5DE5\u7A0B\u6D41\u7A0B\u5DE5\u4F5C\u53F0 \xB7 Maka Runtime Host\n{0}\n\u771F\u5B9E\u6A21\u578B\u8FDE\u63A5\u53EF\u5728\u5DE5\u7A0B\u8BBE\u7F6E\u4E2D\u6DFB\u52A0\u3002": "Software engineering workflow workbench \xB7 Maka Runtime Host\n{0}\nAdd model connections in Project Settings.",
|
|
1269
|
+
"SpecFlow \u66F4\u65B0\u5931\u8D25": "SpecFlow update failed",
|
|
1270
|
+
"\u8BF7\u91CD\u65B0\u6253\u5F00\u5E94\u7528\uFF0C\u6216\u4F7F\u7528\u65B0\u7248\u5B89\u88C5\u5305\u8986\u76D6\u5B89\u88C5\u3002\u5DE5\u7A0B\u6570\u636E\u5DF2\u4FDD\u7559\u3002\u8BCA\u65AD\u65E5\u5FD7\uFF1A{0}": "Reopen the app or install the latest package over this installation. Your project data has been preserved. Diagnostic log: {0}",
|
|
1271
|
+
"\u9009\u62E9 Git \u4ED3\u5E93": "Select a Git Repository",
|
|
1272
|
+
"\u65E0\u6548\u7684\u5DE5\u4F5C\u9879\u89C6\u56FE\u6807\u8BC6": "Invalid work item view ID",
|
|
1273
|
+
"\u65E0\u6548\u7684\u5DE5\u4F5C\u9879\u6807\u8BC6": "Invalid work item ID",
|
|
1274
|
+
"\u5BFC\u51FA\u5DE5\u7A0B\u8BB0\u5F55": "Export Project Evidence",
|
|
1275
|
+
"\u5DE5\u7A0B\u8BB0\u5F55": "Project Evidence",
|
|
1276
|
+
"\u5DE5\u7A0B\u8BB0\u5F55\u5BFC\u51FA\u5931\u8D25": "Could not export project evidence",
|
|
1277
|
+
"SpecFlow \u542F\u52A8\u5931\u8D25": "SpecFlow failed to start",
|
|
1278
|
+
"\u89C6\u56FE\u5B9A\u4F4D\u5B57\u6BB5\u4E0D\u7B26\u5408\u5951\u7EA6": "The view location fields do not match the contract",
|
|
1279
|
+
"\u8BED\u8A00\u8BBE\u7F6E\u65E0\u6548": "Invalid language setting",
|
|
1280
|
+
"\u6E90\u7801\u8FD0\u884C\u6A21\u5F0F\u4E0D\u5B89\u88C5\u66F4\u65B0\u3002\u8BF7\u5B89\u88C5\u6B63\u5F0F\u684C\u9762\u5305\uFF0C\u6216\u66F4\u65B0\u6E90\u7801\u540E\u91CD\u65B0\u6784\u5EFA\u3002": "Updates cannot be installed when running from source. Install an official desktop package or update the source and rebuild.",
|
|
1281
|
+
"\u5B89\u88C5\u5305\u7F3A\u5C11\u6709\u6548\u7684\u66F4\u65B0\u914D\u7F6E\u3002\u8BF7\u4ECE\u4E0B\u8F7D\u4E0E\u53D1\u884C\u8BF4\u660E\u9875\u9762\u83B7\u53D6\u65B0\u7248\u5B89\u88C5\u5305\u3002": "This installation has no valid update configuration. Get the latest installer from Downloads and Release Notes.",
|
|
1282
|
+
"\u6B63\u5728\u68C0\u67E5\u66F4\u65B0\u2026": "Checking for Updates\u2026",
|
|
1283
|
+
"\u53D1\u73B0\u65B0\u7248\u672C {0}": "Version {0} is available",
|
|
1284
|
+
"\u6B63\u5728\u4E0B\u8F7D {0}\uFF08{1}%\uFF09": "Downloading {0} ({1}%)",
|
|
1285
|
+
"{0} \u5DF2\u4E0B\u8F7D\uFF0C\u7B49\u5F85\u91CD\u542F\u5B89\u88C5": "{0} is downloaded and ready to install on restart",
|
|
1286
|
+
"\u6B63\u5728\u5173\u95ED\u5DE5\u7A0B\u670D\u52A1\u5E76\u5B89\u88C5\u66F4\u65B0\u2026": "Stopping the engineering service and installing the update\u2026",
|
|
1287
|
+
"\u6700\u8FD1\u68C0\u67E5\uFF1A{0}": "Last checked: {0}",
|
|
1288
|
+
"\u5C1A\u672A\u68C0\u67E5\u66F4\u65B0": "No update check yet",
|
|
1289
|
+
"\u68C0\u67E5\u66F4\u65B0\u2026": "Check for Updates\u2026",
|
|
1290
|
+
"\u4E0B\u8F7D\u66F4\u65B0\u2026": "Download Update\u2026",
|
|
1291
|
+
"SpecFlow \u66F4\u65B0": "SpecFlow Update",
|
|
1292
|
+
"\u5F53\u524D\u5DF2\u662F\u6700\u65B0\u7248\u672C\uFF08{0}\uFF09": "You are up to date ({0})",
|
|
1293
|
+
"\u53D1\u5E03\u65B9\u5C1A\u672A\u63D0\u4F9B\u6B63\u5F0F\u7248\u672C\u6216\u66F4\u65B0\u6587\u4EF6\u65F6\uFF0C\u4E5F\u4F1A\u51FA\u73B0\u6B64\u63D0\u793A\u3002\u5DE5\u7A0B\u6570\u636E\u4E0D\u53D7\u5F71\u54CD\u3002": "This can also happen when an official release or update files are unavailable. Your project data is unaffected.",
|
|
1294
|
+
"\u5F53\u524D\u7248\u672C\uFF1A{0}": "Current version: {0}",
|
|
1295
|
+
"\u786E\u5B9A": "OK",
|
|
1296
|
+
"\u5B89\u88C5 SpecFlow \u66F4\u65B0": "Install SpecFlow Update",
|
|
1297
|
+
"\u91CD\u542F\u5E76\u5B89\u88C5 {0}\uFF1F": "Restart and install {0}?",
|
|
1298
|
+
"\u8BF7\u5148\u4FDD\u5B58\u7F16\u8F91\u5185\u5BB9\u5E76\u7B49\u5F85\u6B63\u5728\u8FD0\u884C\u7684\u4EFB\u52A1\u7ED3\u675F\u3002\u5B89\u88C5\u5C06\u5173\u95ED\u5F53\u524D\u7A97\u53E3\u548C\u5DE5\u7A0B\u670D\u52A1\uFF0C\u5B8C\u6210\u540E\u91CD\u65B0\u6253\u5F00\u5E94\u7528\u3002\u5DE5\u7A0B\u6570\u636E\u4FDD\u5B58\u5728\u7528\u6237\u76EE\u5F55\u3002": "Save your edits and wait for running tasks to finish. Installation closes this window and the engineering service, then reopens the app. Project data is stored in your user directory.",
|
|
1299
|
+
"\u7A0D\u540E": "Later",
|
|
1300
|
+
"\u91CD\u542F\u5E76\u5B89\u88C5": "Restart and Install",
|
|
1301
|
+
"SpecFlow \u6709\u65B0\u7248\u672C": "SpecFlow Update Available",
|
|
1302
|
+
"\u5F53\u524D\u7248\u672C\uFF1A{0}\u3002\u4E0B\u8F7D\u671F\u95F4\u53EF\u7EE7\u7EED\u4F7F\u7528\uFF0C\u4E0B\u8F7D\u5B8C\u6210\u540E\u7531\u4F60\u51B3\u5B9A\u4F55\u65F6\u91CD\u542F\u3002": "Current version: {0}. You can keep working during the download and choose when to restart.",
|
|
1303
|
+
"\u5F53\u524D\u7248\u672C\uFF1A{0}\u3002\u6B64\u5B89\u88C5\u5305\u4F7F\u7528\u624B\u52A8\u66F4\u65B0\uFF0C\u8BF7\u4E0B\u8F7D\u5BF9\u5E94\u67B6\u6784\u7684\u5B89\u88C5\u5305\u8986\u76D6\u5B89\u88C5\u3002macOS \u5E94\u7528\u5185\u5B89\u88C5\u66F4\u65B0\u9700\u8981\u5DF2\u7B7E\u540D\u7684\u6B63\u5F0F\u7248\u672C\u3002": "Current version: {0}. This package requires manual updates. Download the installer for your architecture and install it over this version. Updates installed within the macOS app require a signed official release.",
|
|
1304
|
+
"\u4E0B\u8F7D\u66F4\u65B0": "Download Update",
|
|
1305
|
+
"\u6253\u5F00\u4E0B\u8F7D\u9875\u9762": "Open Downloads",
|
|
1306
|
+
"\u64CD\u4F5C\u5931\u8D25\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5\u3002": "The operation failed. Try again later.",
|
|
1307
|
+
"{0} \u53EF\u7528\u3002\u70B9\u51FB\u67E5\u770B\uFF0C\u6216\u4ECE\u201C\u5E2E\u52A9 \u2192 \u68C0\u67E5\u66F4\u65B0\u201D\u7EE7\u7EED\u3002": "{0} is available. Click to view it, or continue from Help \u2192 Check for Updates.",
|
|
1308
|
+
"\u91CD\u542F\u5E76\u5B89\u88C5\u66F4\u65B0\u2026": "Restart and Install Update\u2026",
|
|
1309
|
+
"\u4E0B\u8F7D\u4E0E\u53D1\u884C\u8BF4\u660E": "Downloads and Release Notes",
|
|
1310
|
+
"\u65E0\u6CD5\u5B8C\u6210\u66F4\u65B0\u3002\u8BF7\u68C0\u67E5\u7F51\u7EDC\uFF0C\u6216\u524D\u5F80\u4E0B\u8F7D\u4E0E\u53D1\u884C\u8BF4\u660E\u9875\u9762\u624B\u52A8\u5B89\u88C5\u540E\u91CD\u8BD5\u3002": "The update could not be completed. Check your connection or install it manually from Downloads and Release Notes.",
|
|
1311
|
+
"{0} \u9605\u8BFB\u6458\u8981": "{0} Reading Summary",
|
|
1312
|
+
"\u6587\u6863\u8981\u70B9": "Document Highlights",
|
|
1313
|
+
"\u9605\u8BFB\u63D0\u793A": "Reading Note",
|
|
1314
|
+
"\u6B63\u6587\u6CA1\u6709\u53EF\u6458\u5F55\u7684\u6BB5\u843D\uFF0C\u8BF7\u67E5\u770B AI \u6267\u884C\u6587\u6863\u3002": "There are no paragraphs to excerpt. Read the AI execution document.",
|
|
1315
|
+
"\u8BF7\u67E5\u770B\u5B8C\u6574\u6267\u884C\u6587\u6863\u4E2D\u7684\u8BE6\u7EC6\u5185\u5BB9\u3002": "Read the complete execution document for details.",
|
|
1316
|
+
"\u9605\u8BFB\u7B80\u62A5": "READING BRIEF",
|
|
1317
|
+
"\u672C\u9875\u662F\u5BF9\u5E94\u4FEE\u8BA2\u7684\u4EBA\u7C7B\u7B80\u62A5\u3002": "This page is the human reading brief for the corresponding revision.",
|
|
1318
|
+
"\u672C\u9875\u6458\u5F55\u539F\u6587\u4E2D\u7684\u90E8\u5206\u6BB5\u843D\uFF0C\u53EF\u80FD\u7701\u7565\u4E0A\u4E0B\u6587\u3002": "This page excerpts selected paragraphs from the source and may omit context.",
|
|
1319
|
+
"\u540E\u7EED\u6267\u884C\u3001\u590D\u6838\u4E0E\u63A5\u7EB3\u4EE5\u5B8C\u6574 AI \u6267\u884C\u6587\u6863\u4E3A\u51C6\u3002": "Use the complete AI execution document for subsequent execution, review and acceptance.",
|
|
1320
|
+
"\u5B8C\u6574\u6587\u6863\uFF1A": "Complete document: ",
|
|
1321
|
+
"\u6765\u6E90\u7248\u672C\uFF1A": "Source revision: ",
|
|
1322
|
+
"\u672C\u9875\u968F\u6765\u6E90\u7248\u672C\u751F\u6210\uFF0C\u53EF\u79BB\u7EBF\u9605\u8BFB\u4E0E\u6253\u5370\u3002": "Generated with the source revision. Available for offline reading and printing."
|
|
1323
|
+
};
|
|
1324
|
+
|
|
1325
|
+
// packages/i18n/defaults.ts
|
|
1326
|
+
var messages6 = {
|
|
1327
|
+
"CSV \u5BFC\u5165\u9A8C\u6536\u9879\u76EE": "CSV import demo",
|
|
1328
|
+
"\u4E3A\u73B0\u6709\u9879\u76EE\u589E\u52A0 CSV \u5BFC\u5165": "Add CSV import to an existing project",
|
|
1329
|
+
"\u652F\u6301\u666E\u901A\u5B57\u6BB5\u3001\u5F15\u53F7\u4E2D\u9017\u53F7\u3001\u53CC\u5F15\u53F7\u8F6C\u4E49\u3001CRLF \u548C\u9519\u8BEF\u8F93\u5165\u3002": "Support plain fields, quoted commas, escaped quotes, CRLF, and invalid input.",
|
|
1330
|
+
"\u89C4\u683C\u9A71\u52A8\u5F00\u53D1": "Spec-driven development",
|
|
1331
|
+
"\u9700\u6C42\u89C4\u683C": "Requirements specification",
|
|
1332
|
+
"\u9700\u6C42\u6F84\u6E05": "Requirements clarification",
|
|
1333
|
+
"\u89C4\u683C\u590D\u6838": "Specification review",
|
|
1334
|
+
"\u5DE5\u7A0B\u8BBE\u8BA1": "Technical design",
|
|
1335
|
+
"\u8BBE\u8BA1\u590D\u6838": "Design review",
|
|
1336
|
+
"\u4EFB\u52A1\u62C6\u89E3": "Task breakdown",
|
|
1337
|
+
"\u4EFB\u52A1\u590D\u6838": "Task review",
|
|
1338
|
+
"\u4EE3\u7801\u5B9E\u73B0": "Implementation",
|
|
1339
|
+
"\u6D4B\u8BD5\u4E0E\u68C0\u67E5": "Tests and checks",
|
|
1340
|
+
"\u4EE3\u7801\u590D\u6838": "Code review",
|
|
1341
|
+
"\u6536\u655B\u4E0E\u5BF9\u9F50": "Convergence and alignment",
|
|
1342
|
+
"\u6536\u655B\u590D\u6838": "Convergence review",
|
|
1343
|
+
"\u63A5\u7EB3\u4EE3\u7801": "Accept code",
|
|
1344
|
+
"\u5B9E\u73B0\u8BF4\u660E": "Implementation notes",
|
|
1345
|
+
"\u5BF9\u9F50\u62A5\u544A": "Alignment report",
|
|
1346
|
+
"\u5206\u6790\u9700\u6C42\u548C\u4ED3\u5E93\uFF0C\u4EA7\u51FA\u5177\u6709\u9A8C\u6536\u6807\u51C6\u7684\u9700\u6C42\u89C4\u683C\u3002\u5B58\u5728\u672A\u77E5\u4FE1\u606F\u65F6\u63D0\u51FA\u660E\u786E\u95EE\u9898\u3002": "Analyze the requirements and repository. Produce a requirements specification with acceptance criteria, and ask clear questions about unknowns.",
|
|
1347
|
+
"\u68C0\u67E5\u89C4\u683C\u7684\u529F\u80FD\u8FB9\u754C\u3001\u5F02\u5E38\u573A\u666F\u3001\u6570\u636E\u7EA6\u675F\u548C\u9A8C\u6536\u6807\u51C6\u3002\u4EC5\u8BE2\u95EE\u5F71\u54CD\u8BBE\u8BA1\u548C\u9A8C\u8BC1\u7684\u5173\u952E\u95EE\u9898\uFF0C\u6574\u4E2A\u6F84\u6E05\u4F1A\u8BDD\u6700\u591A 5 \u4E2A\u95EE\u9898\u3002\u8BFB\u53D6\u5DF2\u6709\u7B54\u590D\uFF0C\u4FDD\u7559\u9700\u6C42 ID\uFF0C\u628A\u5DF2\u786E\u8BA4\u7684\u51B3\u7B56\u5199\u56DE\u5B8C\u6574\u9700\u6C42\u89C4\u683C\u3002": "Check functional boundaries, failure cases, data constraints, and acceptance criteria. Ask only questions that affect design or verification, with at most five questions in the entire clarification session. Read existing answers, preserve requirement IDs, and incorporate confirmed decisions into the complete specification.",
|
|
1348
|
+
"\u72EC\u7ACB\u68C0\u67E5\u89C4\u683C\u7684\u5B8C\u6574\u6027\u3001\u6B67\u4E49\u548C\u53EF\u9A8C\u8BC1\u6027\u3002": "Independently review the specification for completeness, ambiguity, and verifiability.",
|
|
1349
|
+
"\u4F9D\u636E\u5DF2\u63A5\u7EB3\u89C4\u683C\u5206\u6790\u73B0\u6709\u4EE3\u7801\uFF0C\u4EA7\u51FA\u6A21\u5757\u3001\u63A5\u53E3\u3001\u8BBE\u8BA1\u51B3\u7B56\u548C\u98CE\u9669\u3002": "Analyze the existing code against the accepted specification. Document modules, interfaces, design decisions, and risks.",
|
|
1350
|
+
"\u72EC\u7ACB\u68C0\u67E5\u5DE5\u7A0B\u8BBE\u8BA1\u662F\u5426\u6EE1\u8DB3\u9700\u6C42\uFF0C\u5B9A\u4F4D\u5177\u4F53\u95EE\u9898\u3002": "Independently check whether the technical design meets the requirements and identify specific issues.",
|
|
1351
|
+
"\u62C6\u89E3\u5B9E\u73B0\u4EFB\u52A1\u3002\u6BCF\u9879\u4EFB\u52A1\u5305\u542B\u552F\u4E00 ID\u3001\u4F9D\u8D56\u548C\u9A8C\u6536\u6761\u4EF6\u3002": "Break the implementation into tasks. Give each task a unique ID, dependencies, and acceptance criteria.",
|
|
1352
|
+
"\u68C0\u67E5\u4EFB\u52A1\u8986\u76D6\u3001\u4F9D\u8D56\u548C\u9A8C\u6536\u6761\u4EF6\u3002": "Review task coverage, dependencies, and acceptance criteria.",
|
|
1353
|
+
"\u6309\u5DF2\u63A5\u7EB3\u4EFB\u52A1\u6539\u52A8\u4EE3\u7801\uFF0C\u8FD0\u884C\u76F8\u5173\u6D4B\u8BD5\u5E76\u8BB0\u5F55\u5B9E\u73B0\u8BF4\u660E\u3002": "Implement the accepted tasks, run the relevant tests, and document the implementation.",
|
|
1354
|
+
"\u72EC\u7ACB\u68C0\u67E5\u8865\u4E01\u4E0E\u89C4\u683C\u3001\u4EFB\u52A1\u3001\u6D4B\u8BD5\u8986\u76D6\u662F\u5426\u4E00\u81F4\u3002": "Independently check that the patch, specification, tasks, and test coverage agree.",
|
|
1355
|
+
"\u6838\u5BF9\u9700\u6C42\u3001\u4EFB\u52A1\u3001\u4EE3\u7801\u4E0E\u9A8C\u8BC1\u8BC1\u636E\uFF0C\u4EA7\u51FA\u5BF9\u9F50\u62A5\u544A\u3002": "Cross-check requirements, tasks, code, and verification evidence. Produce an alignment report.",
|
|
1356
|
+
"\u590D\u6838\u5BF9\u9F50\u62A5\u544A\uFF0C\u786E\u8BA4\u6CA1\u6709\u9057\u6F0F\u9700\u6C42\u548C\u8BC1\u636E\u3002": "Review the alignment report and confirm that no requirements or evidence are missing.",
|
|
1357
|
+
"\u4EE3\u7801\u5FC5\u987B\u53EF\u9A8C\u8BC1\uFF1B\u9700\u6C42\u4E0E\u4EFB\u52A1\u5177\u6709\u7A33\u5B9A ID\uFF1B\u6240\u6709 AI \u4EA7\u7269\u9700\u8981\u72EC\u7ACB\u590D\u6838\uFF1B\u9A8C\u8BC1\u8BC1\u636E\u7ED1\u5B9A\u4EE3\u7801\u7248\u672C\u3002": "Code must be verifiable. Requirements and tasks must have stable IDs. All AI artifacts require independent review. Verification evidence must be bound to the code version."
|
|
1358
|
+
};
|
|
1359
|
+
|
|
1360
|
+
// packages/i18n/plugin.ts
|
|
1361
|
+
var messages7 = {
|
|
1362
|
+
"\u5DF2\u5173\u8054\u5F53\u524D\u5BF9\u8BDD\u5DE5\u7A0B": "Linked to the current chat project",
|
|
1363
|
+
"\u6062\u590D\u5DF2\u4FDD\u5B58\u56DE\u7B54": "Restore saved answers",
|
|
1364
|
+
"\u53D6\u6D88\u914D\u7F6E\u4FEE\u6539": "Discard configuration changes",
|
|
1365
|
+
"\u53D6\u6D88\u56DE\u7B54\u4FEE\u6539": "Discard answer changes",
|
|
1366
|
+
"\u6709\u672A\u4FDD\u5B58\u7684\u7F16\u8F91\u3002\u4FDD\u5B58\u6216\u53D6\u6D88\u7F16\u8F91\u540E\uFF0C\u5373\u53EF\u5207\u6362\u5DE5\u7A0B\u6216\u5DE5\u4F5C\u9879\u3002": "You have unsaved edits. Save or cancel them before switching projects or work items.",
|
|
1367
|
+
"\u6B63\u5728\u5173\u8054\u5F53\u524D\u5BF9\u8BDD\u5DE5\u7A0B\u2026": "Linking the current chat project\u2026",
|
|
1368
|
+
"\u5F53\u524D\u5BF9\u8BDD\u76EE\u5F55\u5DF2\u53D8\u5316\uFF0C\u4FDD\u5B58\u6216\u53D6\u6D88\u7F16\u8F91\u540E\u5C06\u81EA\u52A8\u5173\u8054\u3002": "The chat directory changed. Save or cancel your edits to link its project.",
|
|
1369
|
+
"\u65E0\u6CD5\u81EA\u52A8\u5173\u8054\u5F53\u524D\u5BF9\u8BDD\u76EE\u5F55\uFF0C\u8BF7\u624B\u52A8\u9009\u62E9\u5DE5\u7A0B\u6216\u6253\u5F00 Git \u4ED3\u5E93\u3002": "Could not link the chat directory. Select a project or open a Git repository.",
|
|
1370
|
+
"\u5F53\u524D\u4F1A\u8BDD\u7684\u5DE5\u7A0B\u76EE\u5F55\u4E0D\u53EF\u7528\uFF0C\u8BF7\u6253\u5F00\u5176\u4ED6\u672C\u5730 Git \u4ED3\u5E93\u3002": "The current chat project directory is unavailable. Open another local Git repository.",
|
|
1371
|
+
"\u8BED\u8A00\u8BBE\u7F6E\u672A\u80FD\u4FDD\u5B58\uFF0C\u8BF7\u91CD\u8BD5\u3002": "Could not save the language setting. Try again.",
|
|
1372
|
+
"\u4E3A {0} \u521B\u5EFA\u5DE5\u4F5C\u9879\u3002\u6BCF\u4E2A\u5DE5\u4F5C\u9879\u4F1A\u4F7F\u7528\u72EC\u7ACB\u7684\u5206\u652F\u4E0E\u5DE5\u4F5C\u533A\u3002": "Create a work item for {0}. Each work item uses a separate branch and workspace.",
|
|
1373
|
+
"\u63A5\u7EB3\u4EE5\u5B8C\u6574\u6267\u884C\u6587\u6863\u4E3A\u51C6\uFF1B\u672C\u7B80\u62A5\u4E0E\u4FEE\u8BA2 {0} \u5BF9\u5E94\u3002": "Acceptance uses the complete execution document. This brief corresponds to revision {0}.",
|
|
1374
|
+
"Specflow \u5DE5\u7A0B\u5DE5\u4F5C\u53F0": "Specflow Workbench",
|
|
1375
|
+
"\u4ECE\u9700\u6C42\u3001\u89C4\u683C\u5230\u590D\u6838\u4E0E\u9A8C\u6536": "From requirements and specifications to review and acceptance",
|
|
1376
|
+
"\u5F85\u6267\u884C": "Pending",
|
|
1377
|
+
"\u542F\u52A8\u4E2D": "Starting",
|
|
1378
|
+
"\u6267\u884C\u4E2D": "Running",
|
|
1379
|
+
"\u5F85\u56DE\u7B54": "Awaiting Answer",
|
|
1380
|
+
"\u5DF2\u7ED3\u675F": "Finished",
|
|
1381
|
+
"\u5931\u8D25": "Failed",
|
|
1382
|
+
"\u5DF2\u505C\u6B62": "Stopped",
|
|
1383
|
+
"\u5F85\u6838\u5BF9": "Awaiting Reconciliation",
|
|
1384
|
+
"\u5DF2\u901A\u8FC7": "Passed",
|
|
1385
|
+
"\u88AB\u963B\u585E": "Blocked",
|
|
1386
|
+
"\u5DF2\u8FC7\u671F": "Stale",
|
|
1387
|
+
"\u5DF2\u63A5\u7EB3": "Accepted",
|
|
1388
|
+
"\u8FDB\u884C\u4E2D": "Active",
|
|
1389
|
+
"\u5F85\u9A8C\u6536": "Ready for Acceptance",
|
|
1390
|
+
"\u5B9E\u73B0\u4E2D": "Implementing",
|
|
1391
|
+
"\u5F85\u63A5\u7EB3": "Candidate",
|
|
1392
|
+
"\u9700\u6C42\u89C4\u683C": "Requirements Specification",
|
|
1393
|
+
"\u5DE5\u7A0B\u8BBE\u8BA1": "Engineering Design",
|
|
1394
|
+
"\u4EFB\u52A1\u62C6\u89E3": "Task Breakdown",
|
|
1395
|
+
"\u5B9E\u73B0\u8BF4\u660E": "Implementation Notes",
|
|
1396
|
+
"\u5BF9\u9F50\u62A5\u544A": "Alignment Report",
|
|
1397
|
+
"\u64CD\u4F5C\u5931\u8D25\uFF0C\u8BF7\u5237\u65B0\u540E\u91CD\u8BD5\u3002": "The operation failed. Refresh and try again.",
|
|
1398
|
+
"\u4E0A\u6B21\u5199\u5165\u7684\u7ED3\u679C\u5C1A\u672A\u786E\u8BA4\uFF0C\u8BF7\u5237\u65B0\u5E76\u6838\u5BF9\u5DE5\u7A0B\u8BB0\u5F55\u540E\u7EE7\u7EED\u3002": "The previous write has not been confirmed. Refresh and reconcile the project records before continuing.",
|
|
1399
|
+
"\u8BF7\u5148\u5237\u65B0\u5DE5\u7A0B\u72B6\u6001\uFF0C\u518D\u6267\u884C\u64CD\u4F5C\u3002": "Refresh the project state before continuing.",
|
|
1400
|
+
"\u64CD\u4F5C\u5DF2\u8BB0\u5F55\uFF0C\u6B63\u5728\u540C\u6B65\u5DE5\u7A0B\u72B6\u6001\u3002": "The operation was recorded. Synchronizing project state.",
|
|
1401
|
+
"\u5199\u5165\u7ED3\u679C\u5C1A\u672A\u786E\u8BA4\uFF0C\u8BF7\u5237\u65B0\u5E76\u6838\u5BF9\u8FD0\u884C\u8BB0\u5F55\u3002": "The write result is unconfirmed. Refresh and reconcile the run records.",
|
|
1402
|
+
"\u5237\u65B0\u5DE5\u7A0B\u72B6\u6001": "Refresh Project State",
|
|
1403
|
+
"\u5DE5\u7A0B": "Project",
|
|
1404
|
+
"\uFF0B \u6253\u5F00\u4ED3\u5E93": "\uFF0B Open Repository",
|
|
1405
|
+
"\u9009\u62E9\u672C\u5730\u5DE5\u7A0B": "Select a Local Project",
|
|
1406
|
+
"\u5DE5\u4F5C\u9879": "Work Item",
|
|
1407
|
+
"\uFF0B \u65B0\u9700\u6C42": "\uFF0B New Requirement",
|
|
1408
|
+
"\u9009\u62E9\u5DE5\u4F5C\u9879": "Select a Work Item",
|
|
1409
|
+
"\u6B64\u5DE5\u7A0B\u8FD8\u6CA1\u6709\u9700\u6C42": "This project has no requirements yet",
|
|
1410
|
+
"\u6709\u672A\u4FDD\u5B58\u7684\u6B63\u6587\u7F16\u8F91\u3002\u4FDD\u5B58\u6216\u53D6\u6D88\u7F16\u8F91\u540E\uFF0C\u5373\u53EF\u5207\u6362\u5DE5\u7A0B\u6216\u5DE5\u4F5C\u9879\u3002": "You have unsaved content edits. Save or cancel them before switching projects or work items.",
|
|
1411
|
+
"\u5237\u65B0\u6838\u5BF9": "Refresh and Reconcile",
|
|
1412
|
+
"\u5DE5\u7A0B\u5DE5\u4F5C\u533A": "Project Workspace",
|
|
1413
|
+
"\u6D41\u7A0B": "Workflow",
|
|
1414
|
+
"\u6587\u6863": "Documents",
|
|
1415
|
+
"\u4EE3\u7801": "Code",
|
|
1416
|
+
"\u8FD0\u884C": "Runs",
|
|
1417
|
+
"\u6B63\u5728\u8BFB\u53D6\u672C\u5730\u5DE5\u7A0B\u2026": "Loading local project\u2026",
|
|
1418
|
+
"\u628A\u9700\u6C42\u53D8\u6210\u53EF\u9A8C\u8BC1\u7684\u5DE5\u7A0B": "Turn requirements into verifiable engineering",
|
|
1419
|
+
"\u6253\u5F00\u4E00\u4E2A\u672C\u5730 Git \u4ED3\u5E93\uFF0C\u4ECE\u9700\u6C42\u89C4\u683C\u5F00\u59CB\u5EFA\u7ACB\u5B8C\u6574\u7684\u5F00\u53D1\u8BB0\u5F55\u3002": "Open a local Git repository and start building a complete development record from the requirements specification.",
|
|
1420
|
+
"\u4ECE\u4E00\u4E2A\u65B0\u9700\u6C42\u5F00\u59CB": "Start with a new requirement",
|
|
1421
|
+
"\u4E3A": "Create a work item for",
|
|
1422
|
+
"\u521B\u5EFA\u5DE5\u4F5C\u9879\u3002\u6BCF\u4E2A\u5DE5\u4F5C\u9879\u4F1A\u4F7F\u7528\u72EC\u7ACB\u7684\u5206\u652F\u4E0E\u5DE5\u4F5C\u533A\u3002": ". Each work item uses a separate branch and workspace.",
|
|
1423
|
+
"\u672C\u5730\u5DE5\u7A0B\u8BB0\u5F55": "Local Project Records",
|
|
1424
|
+
"\u6B63\u5728\u64CD\u4F5C": "Working",
|
|
1425
|
+
"\u540C\u6B65\u4E2D": "Synchronizing",
|
|
1426
|
+
"DSH \u63D2\u4EF6": "DSH Plugin",
|
|
1427
|
+
"\u6253\u5F00\u672C\u5730 Git \u4ED3\u5E93": "Open a Local Git Repository",
|
|
1428
|
+
"\u521B\u5EFA\u65B0\u9700\u6C42": "Create a New Requirement",
|
|
1429
|
+
"\u5DE5\u7A0B\u540D\u79F0\uFF08\u53EF\u9009\uFF09": "Project Name (Optional)",
|
|
1430
|
+
"\u9700\u6C42\u540D\u79F0": "Requirement Name",
|
|
1431
|
+
"\u4ED3\u5E93\u7EDD\u5BF9\u8DEF\u5F84": "Absolute Repository Path",
|
|
1432
|
+
"\u9700\u6C42\u4E0E\u9A8C\u6536\u9884\u671F": "Requirements and Acceptance Expectations",
|
|
1433
|
+
"\u5E0C\u671B\u5B9E\u73B0\u4EC0\u4E48\uFF1F\u54EA\u4E9B\u884C\u4E3A\u4EE3\u8868\u5B8C\u6210\uFF1F": "What should be implemented? Which behaviors indicate completion?",
|
|
1434
|
+
"\u53D6\u6D88": "Cancel",
|
|
1435
|
+
"\u6253\u5F00\u5DE5\u7A0B": "Open Project",
|
|
1436
|
+
"\u521B\u5EFA\u5DE5\u4F5C\u9879": "Create Work Item",
|
|
1437
|
+
"\u5DE5\u7A0B\u6D41\u7A0B": "Engineering Workflow",
|
|
1438
|
+
"\u4E2A\u6B65\u9AA4\u5DF2\u901A\u8FC7": "steps passed",
|
|
1439
|
+
"\u6536\u8D77\u6B65\u9AA4": "Collapse Steps",
|
|
1440
|
+
"\u5207\u6362\u6B65\u9AA4": "Switch Step",
|
|
1441
|
+
"\u5EFA\u7ACB\u6D41\u7A0B": "Create Workflow",
|
|
1442
|
+
"\u6D41\u7A0B\u6B65\u9AA4": "Workflow Steps",
|
|
1443
|
+
"\u8FDE\u63A5\u4E0E\u6A21\u578B": "Connection and Model",
|
|
1444
|
+
"\u5728 DSH \u4E2D\u914D\u7F6E\u6A21\u578B\u540E\u5237\u65B0": "Configure models in DSH, then refresh",
|
|
1445
|
+
"\u8BF7\u5148\u5728 DSH \u914D\u7F6E\u53EF\u7528\u6A21\u578B\uFF0C\u518D\u5237\u65B0\u5DE5\u7A0B\u72B6\u6001\u3002": "Configure an available model in DSH, then refresh the project state.",
|
|
1446
|
+
"\u9700\u6C42\u6B63\u6587\u6709\u672A\u4FDD\u5B58\u7684\u7F16\u8F91\uFF0C\u8BF7\u5148\u4FDD\u5B58\u6216\u53D6\u6D88\uFF0C\u518D\u542F\u52A8\u6B65\u9AA4\u3002": "The requirements have unsaved edits. Save or cancel them before starting a step.",
|
|
1447
|
+
"\u505C\u6B62\u5F53\u524D\u5C1D\u8BD5": "Stop Current Attempt",
|
|
1448
|
+
"\u6838\u5BF9\u4EE3\u7801\u5E76\u9A8C\u6536": "Review and Accept Code",
|
|
1449
|
+
"\u542F\u52A8\u6B64\u6B65\u9AA4": "Start This Step",
|
|
1450
|
+
"\u91CD\u65B0\u6267\u884C": "Run Again",
|
|
1451
|
+
"\u4E0A\u4F20\u8D44\u6599": "Uploaded Material",
|
|
1452
|
+
"\u4ED3\u5E93\u8D44\u6599": "Repository Material",
|
|
1453
|
+
"\u7C98\u8D34\u8D44\u6599": "Pasted Material",
|
|
1454
|
+
"\u5DF2\u6709\u9700\u6C42\u8D44\u6599 \xB7": "Existing Requirement Documents \xB7",
|
|
1455
|
+
"\u4EFD": "documents",
|
|
1456
|
+
"\u9700\u6C42\u5DF2\u6709\u65B0\u4FEE\u8BA2\uFF0C\u5F53\u524D\u8349\u7A3F\u5DF2\u4FDD\u7559\u3002\u8BF7\u6BD4\u8F83\u6700\u65B0\u9700\u6C42\u540E\u7EE7\u7EED\u7F16\u8F91\u3002": "The requirements have a newer revision. Your draft is preserved; compare the latest requirements before editing further.",
|
|
1457
|
+
"\u539F\u59CB\u9700\u6C42\u4E0E\u5DE5\u4F5C\u533A": "Original Requirements and Workspace",
|
|
1458
|
+
"\u7F16\u8F91\u9700\u6C42\u6B63\u6587": "Edit Requirements",
|
|
1459
|
+
"\u57FA\u4E8E": "Based on",
|
|
1460
|
+
"\u4FDD\u5B58\u4F1A\u521B\u5EFA\u65B0\u7684\u9700\u6C42\u4FEE\u8BA2\uFF0C\u5DF2\u6709\u8D44\u6599\u4F1A\u4E00\u5E76\u4FDD\u7559\uFF1B\u53D7\u5F71\u54CD\u7684\u6B65\u9AA4\u9700\u8981\u91CD\u65B0\u5206\u6790\u6216\u590D\u6838\u3002": "Saving creates a new requirements revision and preserves existing documents. Affected steps must be analyzed or reviewed again.",
|
|
1461
|
+
"\u9700\u6C42\u5DF2\u6709\u65B0\u4FEE\u8BA2\u3002\u4F60\u7684\u6B63\u6587\u8349\u7A3F\u548C\u8D44\u6599\u5DF2\u4FDD\u7559\uFF0C\u8BF7\u5148\u6BD4\u8F83\u6700\u65B0\u9700\u6C42\u3002": "The requirements have a newer revision. Your content draft and documents are preserved; compare the latest requirements first.",
|
|
1462
|
+
"\u67E5\u770B\u6700\u65B0\u9700\u6C42": "View Latest Requirements",
|
|
1463
|
+
"\u4EE5\u6700\u65B0\u4FEE\u8BA2\u7EE7\u7EED\u7F16\u8F91": "Continue Editing from Latest Revision",
|
|
1464
|
+
"\u4FDD\u7559\u4F60\u7684\u6B63\u6587\u8349\u7A3F\uFF0C\u5E76\u91C7\u7528\u6700\u65B0\u4FEE\u8BA2\u4E2D\u7684\u9700\u6C42\u8D44\u6599\u3002": "Keep your content draft and use the requirement documents from the latest revision.",
|
|
1465
|
+
"\u9700\u6C42\u6B63\u6587": "Requirements",
|
|
1466
|
+
"\u53D6\u6D88\u7F16\u8F91\u9700\u6C42": "Cancel Requirements Editing",
|
|
1467
|
+
"\u6B63\u5728\u4FDD\u5B58\u2026": "Saving\u2026",
|
|
1468
|
+
"\u4FDD\u5B58\u9700\u6C42": "Save Requirements",
|
|
1469
|
+
"\u9700\u6C42\u4FEE\u8BA2": "Requirements Revision",
|
|
1470
|
+
"\u7F16\u8F91\u9700\u6C42": "Edit Requirements",
|
|
1471
|
+
"\u5C1A\u672A\u586B\u5199\u9700\u6C42\u8BF4\u660E\u3002": "No requirements description yet.",
|
|
1472
|
+
"\u9700\u8981\u4F60\u7684\u51B3\u5B9A": "Your Decision Is Needed",
|
|
1473
|
+
"\u8865\u5168\u9700\u6C42\u4E2D\u7684\u5173\u952E\u95EE\u9898": "Resolve key questions in the requirements",
|
|
1474
|
+
"\u56DE\u7B54\u4F1A\u5199\u5165\u5F53\u524D\u89C4\u683C\uFF0C\u968F\u540E\u7EE7\u7EED\u6F84\u6E05\u3002\u6682\u65F6\u79BB\u5F00\u524D\u53EF\u4EE5\u4FDD\u5B58\u8349\u7A3F\u3002": "Answers are included in the current specification before clarification continues. Save a draft before leaving.",
|
|
1475
|
+
"\u4FDD\u5B58\u8349\u7A3F": "Save Draft",
|
|
1476
|
+
"\u63D0\u4EA4\u56DE\u7B54\u5E76\u7EE7\u7EED": "Submit Answers and Continue",
|
|
1477
|
+
'\u547D\u4EE4\u53C2\u6570\u8BF7\u586B\u5199 JSON \u5B57\u7B26\u4E32\u6570\u7EC4\uFF0C\u4F8B\u5982 ["run", "test"]\u3002': 'Enter command arguments as a JSON string array, such as ["run", "test"].',
|
|
1478
|
+
"\u5DE5\u7A0B\u914D\u7F6E\u4E0E\u9A8C\u8BC1\u547D\u4EE4": "Project Configuration and Verification Commands",
|
|
1479
|
+
"\u5206\u6790": "Analysis",
|
|
1480
|
+
"\u8BBE\u8BA1": "Design",
|
|
1481
|
+
"\u5F00\u53D1": "Development",
|
|
1482
|
+
"\u590D\u6838": "Review",
|
|
1483
|
+
"\u9ED8\u8BA4\u6A21\u578B": "Default Model",
|
|
1484
|
+
"\u6BCF\u6B21\u542F\u52A8\u65F6\u9009\u62E9": "Select When Starting Each Run",
|
|
1485
|
+
"\u5DE5\u7A0B\u89C4\u5219": "Project Rules",
|
|
1486
|
+
"\u9A8C\u8BC1\u547D\u4EE4": "Verification Command",
|
|
1487
|
+
"\u547D\u4EE4\u53C2\u6570\uFF08JSON \u6570\u7EC4\uFF09": "Command Arguments (JSON Array)",
|
|
1488
|
+
'\u9A8C\u8BC1\u5728\u5DE5\u4F5C\u9879\u7684\u72EC\u7ACB\u5DE5\u4F5C\u533A\u4E2D\u6267\u884C\u3002npm \u9879\u76EE\u53EF\u4F7F\u7528 npm \u4E0E ["run", "test"]\u3002': 'Verification runs in the work item\u2019s separate workspace. For npm projects, use npm with ["run", "test"].',
|
|
1489
|
+
"\u4FDD\u5B58\u5DE5\u7A0B\u914D\u7F6E": "Save Project Configuration",
|
|
1490
|
+
"\u4EA7\u7269\u4F1A\u51FA\u73B0\u5728\u8FD9\u91CC": "Artifacts will appear here",
|
|
1491
|
+
"\u5B8C\u6210\u9700\u6C42\u89C4\u683C\u3001\u5DE5\u7A0B\u8BBE\u8BA1\u6216\u4EFB\u52A1\u62C6\u89E3\u540E\uFF0C\u53EF\u9605\u8BFB\u5B8C\u6574\u6587\u6863\u5E76\u4EBA\u5DE5\u63A5\u7EB3\u3002": "After completing the requirements specification, engineering design or task breakdown, read the complete documents and accept them manually.",
|
|
1492
|
+
"\u6587\u6863\u5DF2\u6709\u65B0\u4FEE\u8BA2\uFF0C\u7F16\u8F91\u8349\u7A3F\u5DF2\u4FDD\u7559\u3002\u8BF7\u6BD4\u8F83\u6700\u65B0\u6587\u6863\u540E\u7EE7\u7EED\u7F16\u8F91\u3002": "The document has a newer revision. Your draft is preserved; compare the latest document before editing further.",
|
|
1493
|
+
"\u5DE5\u7A0B\u6587\u6863": "Project Documents",
|
|
1494
|
+
"\u4FEE\u8BA2": "Revision",
|
|
1495
|
+
"\u5DF2\u72EC\u7ACB\u590D\u6838": "Independently Reviewed",
|
|
1496
|
+
"\u5F85\u72EC\u7ACB\u590D\u6838": "Awaiting Independent Review",
|
|
1497
|
+
"\u7F16\u8F91\u6587\u6863": "Edit Document",
|
|
1498
|
+
"\u65B0\u5019\u9009\u6587\u6863\u5DF2\u4FDD\u5B58\uFF0C\u6B63\u5728\u540C\u6B65\u3002\u5B8C\u6210\u72EC\u7ACB\u590D\u6838\u540E\u624D\u80FD\u63A5\u7EB3\u3002": "The new candidate document is saved and synchronizing. Acceptance requires independent review.",
|
|
1499
|
+
"\u7F16\u8F91\u5B8C\u6574\u6267\u884C\u6587\u6863": "Edit Complete Execution Document",
|
|
1500
|
+
"\u4EBA\u5DE5\u4FEE\u6539\u4F1A\u751F\u6210\u65B0\u7684\u5019\u9009\u4FEE\u8BA2\uFF0C\u9700\u8981\u91CD\u65B0\u72EC\u7ACB\u590D\u6838\u4E0E\u63A5\u7EB3\u3002": "Manual edits create a new candidate revision requiring independent review and acceptance again.",
|
|
1501
|
+
"\u6587\u6863\u5DF2\u6709\u65B0\u4FEE\u8BA2\u3002\u4F60\u7684\u7F16\u8F91\u8349\u7A3F\u5DF2\u4FDD\u7559\uFF0C\u8BF7\u5148\u6BD4\u8F83\u6700\u65B0\u6587\u6863\u3002": "The document has a newer revision. Your draft is preserved; compare the latest document first.",
|
|
1502
|
+
"\u67E5\u770B\u6700\u65B0\u6587\u6863": "View Latest Document",
|
|
1503
|
+
"\u4FDD\u7559\u4F60\u7684\u6B63\u6587\u8349\u7A3F\uFF0C\u5C06\u6700\u65B0\u6587\u6863\u8BBE\u4E3A\u4FDD\u5B58\u57FA\u7EBF\u3002": "Keep your content draft and use the latest document as the save baseline.",
|
|
1504
|
+
"\u6587\u6863 Markdown \u6B63\u6587": "Document Markdown Content",
|
|
1505
|
+
"\u53D6\u6D88\u7F16\u8F91\u6587\u6863": "Cancel Document Editing",
|
|
1506
|
+
"\u4FDD\u5B58\u65B0\u5019\u9009": "Save New Candidate",
|
|
1507
|
+
"\u6587\u6863\u9605\u8BFB\u65B9\u5F0F": "Document Reading Mode",
|
|
1508
|
+
"\u9605\u8BFB\u7B80\u62A5": "Reading Brief",
|
|
1509
|
+
"\u5B8C\u6574\u6267\u884C\u6587\u6863": "Complete Execution Document",
|
|
1510
|
+
"\u4EBA\u7C7B\u9605\u8BFB\u7B80\u62A5": "Human Reading Brief",
|
|
1511
|
+
"\u539F\u6587\u6458\u5F55": "Source Excerpts",
|
|
1512
|
+
"\u63A5\u7EB3\u4EE5\u5B8C\u6574\u6267\u884C\u6587\u6863\u4E3A\u51C6\uFF1B\u672C\u7B80\u62A5\u4E0E\u4FEE\u8BA2": "Acceptance uses the complete execution document. This brief corresponds to revision",
|
|
1513
|
+
"\u5BF9\u5E94\u3002": ".",
|
|
1514
|
+
"\u6B63\u5728\u751F\u6210\u9605\u8BFB\u89C6\u56FE\u2026": "Preparing reading view\u2026",
|
|
1515
|
+
"\u5F53\u524D\u6587\u6863\u5DF2\u63A5\u7EB3": "The current document is accepted",
|
|
1516
|
+
"\u590D\u6838\u5DF2\u5B8C\u6210\uFF0C\u53EF\u6838\u5BF9\u5E76\u63A5\u7EB3": "Review is complete. Check and accept the document",
|
|
1517
|
+
"\u5B8C\u6210\u72EC\u7ACB\u590D\u6838\u540E\u624D\u80FD\u63A5\u7EB3": "Independent review is required before acceptance",
|
|
1518
|
+
"\u5728 DSH Specflow \u9762\u677F\u4E2D\u6838\u5BF9\u5E76\u63A5\u7EB3": "Reviewed and accepted in the DSH Specflow panel",
|
|
1519
|
+
"\u63A5\u7EB3\u6B64\u4FEE\u8BA2": "Accept This Revision",
|
|
1520
|
+
"\u963B\u65AD\u9879": "Blocker",
|
|
1521
|
+
"\u590D\u6838\u5EFA\u8BAE": "Review Suggestion",
|
|
1522
|
+
"\u7B49\u5F85\u4EE3\u7801\u5019\u9009": "Waiting for Candidate Code",
|
|
1523
|
+
"\u5B9E\u73B0\u9636\u6BB5\u4F1A\u5728\u72EC\u7ACB\u5DE5\u4F5C\u533A\u4E2D\u4FEE\u6539\u4EE3\u7801\uFF0C\u9A8C\u8BC1\u4E0E\u590D\u6838\u8BB0\u5F55\u4F1A\u4FDD\u5B58\u5728\u8FD9\u91CC\u3002": "The implementation stage modifies code in a separate workspace. Verification and review records are kept here.",
|
|
1524
|
+
"\u4EE3\u7801\u5019\u9009": "Candidate Code",
|
|
1525
|
+
"\u57FA\u7EBF": "Baseline",
|
|
1526
|
+
"\u5019\u9009": "Candidate",
|
|
1527
|
+
"\u4EE3\u7801\u5DEE\u5F02": "Code Differences",
|
|
1528
|
+
"\u5F53\u524D\u5019\u9009\u6CA1\u6709\u6587\u672C\u5DEE\u5F02\u3002": "This candidate has no text differences.",
|
|
1529
|
+
"\u6B63\u5728\u8BFB\u53D6\u4EE3\u7801\u5DEE\u5F02\u2026": "Loading code differences\u2026",
|
|
1530
|
+
"\u9A8C\u8BC1\u8BC1\u636E": "Verification Evidence",
|
|
1531
|
+
"\xB7 \u5DF2\u8FC7\u671F": "\xB7 Stale",
|
|
1532
|
+
"\u9000\u51FA\u7801 {0}": "Exit code {0}",
|
|
1533
|
+
"\u6211\u5DF2\u6838\u5BF9\u4EE3\u7801\u5DEE\u5F02\u4E0E\u9A8C\u8BC1\u8BC1\u636E\uFF0C\u786E\u8BA4\u5C06\u5019\u9009\u6574\u5408\u5230\u5DE5\u7A0B": "I reviewed the code differences and verification evidence and approve integrating this candidate into the project",
|
|
1534
|
+
"\u8FD0\u884C\u9A8C\u8BC1": "Run Verification",
|
|
1535
|
+
"\u63A5\u7EB3\u4EE3\u7801": "Accept Code",
|
|
1536
|
+
"\u8FD0\u884C\u8BB0\u5F55\u4ECE\u9996\u6B21\u6D3E\u53D1\u5F00\u59CB": "Run records begin with the first dispatch",
|
|
1537
|
+
"\u6BCF\u6B21\u5C1D\u8BD5\u4FDD\u7559\u539F\u59CB\u6A21\u578B\u3001\u6267\u884C\u5E95\u5EA7\u3001\u7ED3\u679C\u548C\u9519\u8BEF\uFF0C\u65B9\u4FBF\u5B9A\u4F4D\u95EE\u9898\u3002": "Every attempt preserves its original model, backend, result and errors for troubleshooting.",
|
|
1538
|
+
"\u6267\u884C\u5C1D\u8BD5": "Execution Attempt",
|
|
1539
|
+
"\u5C1D\u8BD5 #": "Attempt #",
|
|
1540
|
+
"\u6267\u884C\u5E95\u5EA7": "Execution Backend",
|
|
1541
|
+
"\u8FDE\u63A5 / \u6A21\u578B": "Connection / Model",
|
|
1542
|
+
"\u542F\u52A8\u65F6\u95F4": "Started",
|
|
1543
|
+
"\u7ED3\u675F\u65F6\u95F4": "Finished",
|
|
1544
|
+
"\u6267\u884C\u4F1A\u8BDD": "Execution Session",
|
|
1545
|
+
"\u5C1A\u672A\u7ED1\u5B9A": "Not Bound Yet",
|
|
1546
|
+
"\u505C\u6B62": "Stop",
|
|
1547
|
+
"\u6838\u5BF9\u6267\u884C\u7ED3\u679C": "Reconcile Execution Result",
|
|
1548
|
+
"\u5C1D\u8BD5\u6062\u590D\u539F\u6267\u884C": "Try Resuming Original Execution",
|
|
1549
|
+
"\u539F\u6267\u884C\u4E0D\u652F\u6301\u6062\u590D\u3002\u6838\u5BF9\u7ED3\u679C\u540E\uFF0C\u53EF\u5728\u6D41\u7A0B\u4E2D\u91CD\u65B0\u6267\u884C\u6B64\u6B65\u9AA4\u3002": "The original execution cannot be resumed. Reconcile the result, then rerun this workflow step.",
|
|
1550
|
+
"\u8FD0\u884C\u8F93\u51FA": "Run Output",
|
|
1551
|
+
"\u5F53\u524D\u6CA1\u6709\u5DF2\u6301\u4E45\u5316\u7684\u8F93\u51FA\u3002": "No persisted output is available yet.",
|
|
1552
|
+
"\u539F\u59CB\u6267\u884C\u63D0\u793A": "Original Execution Prompt",
|
|
1553
|
+
"\u6B63\u5728\u8BFB\u53D6\u2026": "Loading\u2026",
|
|
1554
|
+
"\u8FD0\u884C\u6B63\u5728\u7B49\u5F85\u4F60\u7684\u56DE\u7B54": "The run is waiting for your answer",
|
|
1555
|
+
"\u56DE\u7B54\uFF08\u6587\u672C\u6216 JSON\uFF09": "Answer (Text or JSON)",
|
|
1556
|
+
"\u63D0\u4EA4\u7ED9\u5F53\u524D\u8FD0\u884C": "Submit to Current Run",
|
|
1557
|
+
"Specflow \u63D2\u4EF6\u6B63\u5728\u505C\u7528": "The Specflow plugin is stopping",
|
|
1558
|
+
"\u8BF7\u91CD\u65B0\u8BFB\u53D6 Specflow \u5FEB\u7167": "Read the Specflow snapshot again",
|
|
1559
|
+
"\u76F8\u540C\u547D\u4EE4\u6B63\u5728\u6267\u884C": "The same command is already running",
|
|
1560
|
+
"\u8BF7\u6C42\u5B57\u6BB5\u4E0D\u7B26\u5408 Specflow \u5951\u7EA6": "Request fields do not match the Specflow contract",
|
|
1561
|
+
"Specflow \u64CD\u4F5C\u5931\u8D25": "Specflow operation failed",
|
|
1562
|
+
"\u8BF7\u6C42\u5FC5\u987B\u4E3A JSON": "The request must be JSON",
|
|
1563
|
+
"Connection RPC envelope \u65E0\u6548": "Invalid Connection RPC envelope",
|
|
1564
|
+
"RPC endpoint \u4E0E method \u4E0D\u4E00\u81F4": "The RPC endpoint does not match its method",
|
|
1565
|
+
"\u8BF7\u6C42\u5DF2\u53D6\u6D88": "The request was cancelled",
|
|
1566
|
+
"DSH \u4E0D\u652F\u6301\u7EE7\u7EED\u539F\u6765\u7684\u4E2D\u65AD turn\uFF1B\u91CD\u542F\u540E\u53EA\u6838\u5BF9\u6301\u4E45\u4F1A\u8BDD\uFF0C\u4E0D\u81EA\u52A8\u6062\u590D\u6216\u91CD\u590D\u6D3E\u53D1\u3002": "DSH cannot continue an interrupted turn. After a restart, only persistent sessions are reconciled; execution is not automatically resumed or dispatched again.",
|
|
1567
|
+
"DSH profile \u6216\u6267\u884C\u8EAB\u4EFD\u5DF2\u53D8\u5316\uFF0C\u4E0D\u80FD\u63A5\u7BA1\u539F\u8FD0\u884C": "The DSH profile or execution identity changed. The original run cannot be taken over",
|
|
1568
|
+
"DSH \u6267\u884C\u5F15\u7528\u65E0\u6548": "Invalid DSH execution reference",
|
|
1569
|
+
"DSH \u5DE5\u4F5C\u533A\u5FC5\u987B\u4F4D\u4E8E Specflow \u7684\u9694\u79BB\u5DE5\u4F5C\u533A\u76EE\u5F55\u5185": "The DSH workspace must be within Specflow\u2019s isolated workspace directory",
|
|
1570
|
+
"\u6CA1\u6709\u539F DSH \u6267\u884C\u7684\u6301\u4E45\u8BB0\u5F55\uFF0C\u4E0D\u80FD\u91CD\u65B0\u6D3E\u53D1": "No persistent record exists for the original DSH execution. It cannot be dispatched again",
|
|
1571
|
+
"DSH \u5F15\u7528\u4E0E\u6301\u4E45\u8BB0\u5F55\u4E0D\u5339\u914D": "The DSH reference does not match its persistent record",
|
|
1572
|
+
"DSH \u9694\u79BB\u5DE5\u4F5C\u533A\u8EAB\u4EFD\u5DF2\u53D8\u5316": "The DSH isolated workspace identity changed",
|
|
1573
|
+
"DSH \u7F3A\u5C11 agents\u3001llm\u3001sessions \u6216 sessionPersistence \u670D\u52A1": "Required DSH services are missing: agents, llm, sessions or sessionPersistence",
|
|
1574
|
+
"\u8BF7\u5148\u5728 DSH \u4E2D\u914D\u7F6E\u53EF\u7528\u7684\u6A21\u578B\u63D0\u4F9B\u65B9\u3002": "Configure an available model provider in DSH first.",
|
|
1575
|
+
"DSH \u63D2\u4EF6\u6B63\u5728\u5173\u95ED": "The DSH plugin is shutting down",
|
|
1576
|
+
"\u6A21\u578B\u76EE\u6807\u5C5E\u4E8E\u5176\u4ED6 DSH profile\uFF0C\u8BF7\u5237\u65B0\u6A21\u578B\u76EE\u5F55": "The model target belongs to another DSH profile. Refresh the model catalog",
|
|
1577
|
+
"\u6700\u5927\u6B65\u6570\u5FC5\u987B\u4E3A\u6B63\u6574\u6570": "The maximum step count must be a positive integer",
|
|
1578
|
+
"\u539F DSH \u5C1D\u8BD5\u7684\u51BB\u7ED3\u8F93\u5165\u5DF2\u53D8\u5316": "The original DSH attempt\u2019s frozen inputs changed",
|
|
1579
|
+
"DSH \u6D3E\u53D1\u672A\u786E\u8BA4\uFF0C\u8BF7\u6838\u5BF9\u539F\u4F1A\u8BDD\uFF1A{0}": "DSH dispatch is unconfirmed. Reconcile the original session: {0}",
|
|
1580
|
+
"DSH \u4F1A\u8BDD\u7684\u5DE5\u4F5C\u533A\u4E0E\u539F\u5C1D\u8BD5\u4E0D\u7B26": "The DSH session workspace does not match the original attempt",
|
|
1581
|
+
"Specflow \u4F1A\u8BDD\u53EA\u5141\u8BB8\u5F53\u524D\u9694\u79BB\u5DE5\u4F5C\u533A\u7684\u4E13\u7528\u5DE5\u5177": "The Specflow session only permits dedicated tools for its current isolated workspace",
|
|
1582
|
+
"DSH \u6301\u4E45\u4F1A\u8BDD\u4E0E\u9694\u79BB\u5DE5\u4F5C\u533A\u4E0D\u5339\u914D": "The persistent DSH session does not match its isolated workspace",
|
|
1583
|
+
"DSH \u5C1D\u8BD5\u5C1A\u672A\u6D3E\u53D1\u3002": "The DSH attempt has not been dispatched.",
|
|
1584
|
+
"\u65E0\u6CD5\u6838\u5BF9\u539F DSH \u4F1A\u8BDD\uFF1A{0}": "Cannot reconcile the original DSH session: {0}",
|
|
1585
|
+
"\u539F DSH \u8F93\u5165\u5C1A\u65E0\u6301\u4E45\u63A5\u6536\u51ED\u636E\uFF0C\u4E0D\u4F1A\u81EA\u52A8\u91CD\u53D1\u3002": "The original DSH input has no persistent acceptance receipt and will not be automatically resent.",
|
|
1586
|
+
"DSH \u8F93\u5165\u7F3A\u5C11\u53EF\u6838\u5BF9\u7684 turn \u8EAB\u4EFD\u3002": "The DSH input has no verifiable turn identity.",
|
|
1587
|
+
"\u539F DSH turn \u6CA1\u6709\u7EC8\u6001\uFF1B\u8BF7\u6838\u5BF9\u4F1A\u8BDD\uFF0C\u4E0D\u4F1A\u81EA\u52A8\u91CD\u53D1\u3002": "The original DSH turn has no terminal state. Reconcile the session; the request will not be automatically resent.",
|
|
1588
|
+
"DSH \u6267\u884C\u8FBE\u5230\u6700\u5927 {0} \u6B65\uFF0C\u5DF2\u505C\u6B62\u3002": "The DSH execution reached its {0}-step limit and was stopped.",
|
|
1589
|
+
"DSH turn \u5B8C\u6210\u4F46\u672A\u8FD4\u56DE\u9636\u6BB5\u7ED3\u679C\u3002": "The DSH turn finished without returning a stage result.",
|
|
1590
|
+
"\u539F DSH turn \u88AB\u5BBF\u4E3B\u4E2D\u65AD\uFF1B\u4FDD\u7559\u539F\u8EAB\u4EFD\uFF0C\u9700\u4EBA\u5DE5\u6838\u5BF9\u540E\u521B\u5EFA\u65B0\u5C1D\u8BD5\u3002": "The host interrupted the original DSH turn. Its identity is preserved; reconcile it manually before creating a new attempt.",
|
|
1591
|
+
"DSH turn \u672A\u6210\u529F\u5B8C\u6210\uFF08{0}\uFF09\u3002": "The DSH turn did not finish successfully ({0}).",
|
|
1592
|
+
"\u6B64\u7248\u672C\u628A\u6F84\u6E05\u95EE\u9898\u4FDD\u5B58\u5728\u9636\u6BB5\u4EA7\u7269\u4E2D\uFF0C\u4E0D\u63D0\u4F9B\u4F1A\u8BDD\u5916\u7684\u6388\u6743\u6216\u95EE\u9898\u56DE\u590D": "This version stores clarification questions in stage artifacts and does not support authorization or question answers outside the session",
|
|
1593
|
+
"\u5DE5\u5177\u53C2\u6570\u5FC5\u987B\u4E3A\u5BF9\u8C61": "Tool arguments must be an object",
|
|
1594
|
+
"{0} \u5FC5\u987B\u4E3A\u5B57\u7B26\u4E32": "{0} must be a string",
|
|
1595
|
+
"old_text \u5FC5\u987B\u5728\u6587\u4EF6\u4E2D\u51FA\u73B0\u4E14\u53EA\u51FA\u73B0\u4E00\u6B21": "old_text must occur exactly once in the file",
|
|
1596
|
+
"\u53EA\u5141\u8BB8\u5DE5\u4F5C\u533A\u76F8\u5BF9\u8DEF\u5F84": "Only workspace-relative paths are permitted",
|
|
1597
|
+
"\u8DEF\u5F84\u8D8A\u8FC7\u5DE5\u4F5C\u533A\u6216\u6307\u5411 .git/\u7279\u6B8A\u8DEF\u5F84": "The path escapes the workspace or points to .git or a special path",
|
|
1598
|
+
"\u7B26\u53F7\u94FE\u63A5\u6307\u5411\u5DE5\u4F5C\u533A\u4E4B\u5916": "The symbolic link points outside the workspace",
|
|
1599
|
+
"\u5B9E\u9645\u8DEF\u5F84\u6307\u5411 .git": "The resolved path points to .git",
|
|
1600
|
+
"\u7236\u76EE\u5F55\u4F4D\u4E8E\u5DE5\u4F5C\u533A\u4E4B\u5916": "The parent directory is outside the workspace",
|
|
1601
|
+
"\u7236\u76EE\u5F55\u6307\u5411 .git": "The parent directory points to .git",
|
|
1602
|
+
"\u6587\u4EF6\u8DEF\u5F84\u5728\u6253\u5F00\u65F6\u53D1\u751F\u53D8\u5316": "The file path changed while opening it",
|
|
1603
|
+
"\u53EA\u652F\u6301\u4E0D\u8D85\u8FC7 1 MiB \u7684\u666E\u901A UTF-8 \u6587\u4EF6\uFF0C\u62D2\u7EDD\u786C\u94FE\u63A5": "Only regular UTF-8 files no larger than 1 MiB are supported; hard links are rejected",
|
|
1604
|
+
"\u6587\u4EF6\u4E0D\u662F\u652F\u6301\u7684 UTF-8 \u6587\u672C\u6216\u8D85\u51FA\u5927\u5C0F\u9650\u5236": "The file is not supported UTF-8 text or exceeds the size limit",
|
|
1605
|
+
"expected_hash \u5FC5\u987B\u4E3A\u8BFB\u53D6\u8FD4\u56DE\u7684 SHA-256\uFF0C\u65B0\u6587\u4EF6\u4F7F\u7528\u7A7A\u5B57\u7B26\u4E32": "expected_hash must be the SHA-256 returned by a read; use an empty string for new files",
|
|
1606
|
+
"\u53EA\u80FD\u5199\u5165\u4E0D\u8D85\u8FC7 1 MiB \u7684 UTF-8 \u6587\u672C": "Only UTF-8 text no larger than 1 MiB can be written",
|
|
1607
|
+
"\u6587\u4EF6\u5185\u5BB9\u5DF2\u53D8\u5316\uFF0C\u8BF7\u91CD\u65B0\u8BFB\u53D6\u5E76\u786E\u8BA4 expected_hash": "The file content changed. Read it again and confirm expected_hash",
|
|
1608
|
+
"\u62D2\u7EDD\u4FEE\u6539\u975E\u666E\u901A\u6587\u4EF6\u6216\u786C\u94FE\u63A5\u6587\u4EF6": "Modifying non-regular files or files with hard links is prohibited",
|
|
1609
|
+
"\u6587\u4EF6\u5199\u5165\u672A\u53D6\u5F97\u8FDB\u5C55": "The file write made no progress"
|
|
1610
|
+
};
|
|
1611
|
+
|
|
1612
|
+
// packages/i18n/execution.ts
|
|
1613
|
+
var messages8 = {
|
|
1614
|
+
"\u6267\u884C\u81EA\u7136\u7ED3\u675F": "Execution finished naturally",
|
|
1615
|
+
"\u6B65\u6570\u4E0A\u9650": "Step limit",
|
|
1616
|
+
"\u6D3E\u53D1\u6B21\u6570\u4E0A\u9650": "Dispatch limit",
|
|
1617
|
+
"\u6267\u884C\u65F6\u9650\u5DF2\u5230": "Execution deadline reached",
|
|
1618
|
+
"\u7528\u6237\u8BF7\u6C42\u505C\u6B62": "User requested a stop",
|
|
1619
|
+
"\u6388\u6743\u88AB\u62D2\u7EDD": "Permission denied",
|
|
1620
|
+
"\u4F9B\u5E94\u5546\u6267\u884C\u9519\u8BEF": "Provider execution error",
|
|
1621
|
+
"\u8F93\u5165\u5DF2\u53D8\u5316": "Inputs changed",
|
|
1622
|
+
"\u8FDE\u7EED\u65E0\u8FDB\u5C55": "No progress across successive rounds",
|
|
1623
|
+
"\u539F\u56E0\u672A\u77E5": "Unknown reason",
|
|
1624
|
+
"{value} + {count} \u9879\u672A\u77E5": "{value} + {count} unknown measurements",
|
|
1625
|
+
"\u6267\u884C\u63A7\u5236\u4E0E\u7528\u91CF": "Execution controls and usage",
|
|
1626
|
+
"\u6267\u884C\u622A\u6B62\u65F6\u95F4": "Execution deadline",
|
|
1627
|
+
"\u5386\u53F2\u8BB0\u5F55\u672A\u63D0\u4F9B": "Not available in this historical record",
|
|
1628
|
+
"\u505C\u6B62\u539F\u56E0": "Stop reason",
|
|
1629
|
+
"\u505C\u6B62\u786E\u8BA4": "Stop confirmation",
|
|
1630
|
+
"\u5DF2\u786E\u8BA4\u7EC8\u6001": "Terminal state confirmed",
|
|
1631
|
+
"\u6B63\u5728\u8BF7\u6C42\u505C\u6B62": "Requesting a stop",
|
|
1632
|
+
"\u5355\u6B21\u6267\u884C\u6B65\u6570": "Steps per execution",
|
|
1633
|
+
"\u539F\u751F\u4E0A\u9650": "Native limit",
|
|
1634
|
+
"\u89C2\u6D4B\u4FDD\u62A4": "Observed protection",
|
|
1635
|
+
"\u80FD\u529B\u672A\u77E5": "Capability unknown",
|
|
1636
|
+
"\u7D2F\u8BA1\u6D3E\u53D1\u4E0A\u9650": "Cumulative dispatch limits",
|
|
1637
|
+
"\u672C\u5C1D\u8BD5 {attempt} \xB7 \u672C\u6D41\u7A0B {run}": "This attempt: {attempt} \xB7 Workflow: {run}",
|
|
1638
|
+
"\u7528\u91CF\u53EF\u80FD\u4E0D\u5B8C\u6574\uFF0C\u672A\u77E5\u9879\u6CA1\u6709\u6309\u96F6\u8BA1\u7B97\u3002": "Usage may be incomplete. Unknown measurements are not counted as zero.",
|
|
1639
|
+
"\u89C2\u6D4B\u4FDD\u62A4\u4F1A\u8BF7\u6C42\u505C\u6B62\uFF0C\u4E0D\u80FD\u4FDD\u8BC1\u8FD0\u884C\u6070\u597D\u505C\u5728\u6307\u5B9A\u6B65\u6570\u3002": "Observed protection requests a stop; it cannot guarantee stopping at the exact step limit.",
|
|
1640
|
+
"\u505C\u6B62\u8BF7\u6C42\u5C1A\u672A\u786E\u8BA4\uFF1B\u8BF7\u6838\u5BF9\u539F\u6267\u884C\uFF0C\u4E0D\u80FD\u636E\u6B64\u5F00\u59CB\u65B0\u7684\u5199\u5165\u3002": "The stop is unconfirmed. Reconcile the original execution before starting another write.",
|
|
1641
|
+
"\u672C\u6B21\u4E0A\u4E0B\u6587\u6E05\u5355": "Context manifest for this attempt",
|
|
1642
|
+
"\u5B8C\u6574\u63D0\u793A\u8BCD {bytes} \u5B57\u8282": "Full prompt: {bytes} bytes",
|
|
1643
|
+
"{bytes} \u5B57\u8282": "{bytes} bytes",
|
|
1644
|
+
"\u5FC5\u9700\u6750\u6599": "Required source",
|
|
1645
|
+
"\u8F85\u52A9\u6750\u6599": "Supporting source",
|
|
1646
|
+
"\u81EA\u52A8\u63A8\u8FDB\u4E0E\u6709\u9650\u4FEE\u8BA2": "Automatic progression and bounded repair",
|
|
1647
|
+
"\u81EA\u52A8\u63A8\u8FDB\u8FD0\u884C\u5230\u9700\u8981\u4F60\u63A5\u7EB3\u3001\u6F84\u6E05\u6216\u6388\u6743\u7684\u4F4D\u7F6E\u3002\u81EA\u52A8\u4FEE\u8BA2\u53EA\u5904\u7406\u5F53\u524D\u76EE\u6807\uFF0C\u4FDD\u7559\u4EBA\u5DE5\u63A5\u7EB3\u3002": "Progress until acceptance, clarification, or permission needs your input. Repair stays within the current target and preserves human acceptance.",
|
|
1648
|
+
"\u63A8\u8FDB\u65F6\u5141\u8BB8\u6709\u9650\u81EA\u52A8\u4FEE\u8BA2": "Allow bounded repair during progression",
|
|
1649
|
+
"\u6700\u591A\u4FEE\u8BA2\u8F6E\u6570": "Maximum repair rounds",
|
|
1650
|
+
"\u505C\u6B62\u81EA\u52A8\u63A8\u8FDB": "Stop automatic progression",
|
|
1651
|
+
"\u8FD0\u884C\u5230\u4E0B\u4E00\u5904\u5F85\u5904\u7406": "Run until input is needed",
|
|
1652
|
+
"\u505C\u6B62\u81EA\u52A8\u4FEE\u8BA2": "Stop automatic repair",
|
|
1653
|
+
"\u81EA\u52A8\u4FEE\u8BA2\u5F53\u524D\u4EA7\u7269": "Repair the current artifact",
|
|
1654
|
+
"\u4FEE\u8BA2\u8FDB\u5EA6 {round} / {max}": "Repair progress: {round} / {max}",
|
|
1655
|
+
"\u6B63\u5728\u81EA\u52A8\u4FEE\u8BA2": "Automatic repair in progress",
|
|
1656
|
+
"\u6B63\u5728\u81EA\u52A8\u63A8\u8FDB": "Automatic progression in progress",
|
|
1657
|
+
"\u5DF2\u6682\u505C": "Paused",
|
|
1658
|
+
"\u68C0\u67E5\u5DF2\u901A\u8FC7": "Checks passed",
|
|
1659
|
+
"\u4FEE\u8BA2\u8F6E\u6570\u5DF2\u7528\u5B8C": "Repair round limit reached",
|
|
1660
|
+
"\u5019\u9009\u4EE3\u7801\u5DF2\u53D8\u5316": "Candidate code changed",
|
|
1661
|
+
"\u539F\u6267\u884C\u4ECD\u5F85\u6838\u5BF9": "The original execution needs reconciliation",
|
|
1662
|
+
"\u6267\u884C\u9884\u7B97\u5DF2\u7528\u5B8C": "Execution budget exhausted",
|
|
1663
|
+
"\u9700\u8981\u4EBA\u5DE5\u5904\u7406": "Manual action required",
|
|
1664
|
+
"\u81EA\u52A8\u5316\u64CD\u4F5C\u5DF2\u63D0\u4EA4": "Automation request submitted",
|
|
1665
|
+
"\u6B63\u5728\u7B49\u5F85\u6F84\u6E05\u6216\u6388\u6743": "Waiting for clarification or permission",
|
|
1666
|
+
"\u7B49\u5F85\u4EBA\u5DE5\u63A5\u7EB3": "Waiting for human acceptance",
|
|
1667
|
+
"\u9700\u8981\u660E\u786E\u91CD\u8BD5": "An explicit retry is required",
|
|
1668
|
+
"\u5DE5\u7A0B\u68C0\u67E5\u672A\u901A\u8FC7": "Engineering checks did not pass",
|
|
1669
|
+
"\u5DE5\u7A0B\u6761\u4EF6\u5F85\u786E\u8BA4": "Engineering conditions need confirmation",
|
|
1670
|
+
"\u6D41\u7A0B\u5C1A\u672A\u6FC0\u6D3B": "Workflow is not active",
|
|
1671
|
+
"{key} \u5FC5\u987B\u4E3A\u6B63\u5B89\u5168\u6574\u6570": "{key} must be a positive safe integer",
|
|
1672
|
+
"maxCostUsd \u5FC5\u987B\u4E3A\u6709\u9650\u6B63\u6570": "maxCostUsd must be a finite positive number",
|
|
1673
|
+
"strictCostLimit \u5FC5\u987B\u4E3A\u5E03\u5C14\u503C": "strictCostLimit must be a boolean",
|
|
1674
|
+
"\u4E25\u683C\u8D39\u7528\u9650\u5236\u5FC5\u987B\u63D0\u4F9B maxCostUsd": "A strict cost limit requires maxCostUsd",
|
|
1675
|
+
"\u5F53\u524D\u6267\u884C\u5E95\u5EA7\u4E0D\u652F\u6301\u4E25\u683C\u8D39\u7528\u4E0A\u9650\uFF1B\u4E0D\u80FD\u5C06\u5176\u9759\u9ED8\u6539\u6210\u89C2\u6D4B\u9608\u503C": "The execution backend does not support a strict cost ceiling; it cannot silently become an observed threshold",
|
|
1676
|
+
"\u6267\u884C\u622A\u6B62\u65F6\u95F4\u65E0\u6548": "The execution deadline is invalid",
|
|
1677
|
+
"\u6D3E\u53D1\u610F\u56FE\u7F3A\u5C11\u5E42\u7B49\u952E\u6216\u8F93\u5165\u54C8\u5E0C": "The dispatch intent is missing an idempotency key or input hash",
|
|
1678
|
+
"\u6D3E\u53D1\u7B56\u7565\u542B\u65E0\u6548\u9884\u7B97": "The dispatch policy has an invalid budget",
|
|
1679
|
+
"\u9884\u7559\u6B65\u6570\u5FC5\u987B\u4E3A\u6B63\u5B89\u5168\u6574\u6570": "Reserved steps must be a positive safe integer",
|
|
1680
|
+
"\u6D3E\u53D1\u5E42\u7B49\u952E\u5DF2\u7528\u4E8E\u4E0D\u540C\u7684\u8F93\u5165\u6216\u7B56\u7565": "The dispatch idempotency key was used for different inputs or policy",
|
|
1681
|
+
"\u5DF2\u91CA\u653E\u7684\u6D3E\u53D1\u610F\u56FE\u4E0D\u80FD\u91CD\u590D\u4F7F\u7528": "A released dispatch intent cannot be reused",
|
|
1682
|
+
"\u6D3E\u53D1\u5C1D\u8BD5\u4E0D\u5C5E\u4E8E\u6307\u5B9A\u6D41\u7A0B": "The attempt does not belong to this workflow",
|
|
1683
|
+
"\u4E0D\u80FD\u66F4\u6539\u5C1D\u8BD5\u51BB\u7ED3\u7684\u6267\u884C\u7B56\u7565": "The frozen execution policy cannot be changed",
|
|
1684
|
+
"\u672C\u6B21\u5C1D\u8BD5\u7684\u7D2F\u8BA1\u6D3E\u53D1\u6B21\u6570\u5DF2\u7528\u5B8C": "The attempt dispatch budget is exhausted",
|
|
1685
|
+
"\u672C\u6D41\u7A0B\u7684\u7D2F\u8BA1\u6D3E\u53D1\u6B21\u6570\u5DF2\u7528\u5B8C": "The workflow dispatch budget is exhausted",
|
|
1686
|
+
"\u65E0\u6CD5\u5C06\u4E0D\u540C\u5E95\u5EA7\u7684\u6B65\u6570\u76F8\u52A0\u4E3A\u540C\u4E00\u9884\u7B97": "Steps from different backends cannot be combined into one budget",
|
|
1687
|
+
"\u672C\u6B21\u5C1D\u8BD5\u7684\u7D2F\u8BA1\u9884\u7559\u6B65\u6570\u5DF2\u7528\u5B8C": "The attempt reserved step budget is exhausted",
|
|
1688
|
+
"\u65E0\u6CD5\u5728\u4E0D\u540C\u8BA1\u91CF\u5355\u4F4D\u95F4\u5151\u73B0\u6D41\u7A0B\u6B65\u6570\u4E0A\u9650\uFF0C\u8BF7\u4F7F\u7528\u6D3E\u53D1\u6B21\u6570\u9650\u5236": "A workflow step limit cannot span incompatible units; use a dispatch limit",
|
|
1689
|
+
"\u672C\u6D41\u7A0B\u7684\u7D2F\u8BA1\u9884\u7559\u6B65\u6570\u5DF2\u7528\u5B8C": "The workflow reserved step budget is exhausted",
|
|
1690
|
+
"\u5DF2\u77E5\u8D39\u7528\u8FBE\u5230\u89C2\u6D4B\u9608\u503C\uFF0C\u505C\u6B62\u540E\u7EED\u6D3E\u53D1": "Known costs reached the observed threshold; further dispatches are blocked",
|
|
1691
|
+
"\u6D3E\u53D1\u610F\u56FE\u72B6\u6001\u8F6C\u79FB\u65E0\u6548": "Invalid dispatch state transition",
|
|
1692
|
+
"\u53EA\u6709\u786E\u8BA4\u4ECE\u672A\u6D3E\u53D1\u7684\u64CD\u4F5C\u624D\u53EF\u91CA\u653E\u9884\u7B97": "Budget can only be released for operations confirmed never dispatched",
|
|
1693
|
+
"\u5B9E\u9645\u6B65\u6570\u5FC5\u987B\u6765\u81EA\u5DF2\u786E\u8BA4\u7EC8\u6001\u4E14\u4E3A\u975E\u8D1F\u6574\u6570": "Actual steps must be a nonnegative integer from a confirmed terminal state",
|
|
1694
|
+
"\u6D3E\u53D1\u610F\u56FE\u4E0D\u80FD\u66FF\u6362\u539F\u6267\u884C\u8EAB\u4EFD": "A dispatch intent cannot replace the original execution identity",
|
|
1695
|
+
"\u7528\u91CF {key} \u5FC5\u987B\u662F\u975E\u8D1F\u6570\u6216 null": "Usage {key} must be nonnegative or null",
|
|
1696
|
+
"\u7528\u91CF\u5FC5\u987B\u58F0\u660E\u8BA1\u91CF\u5668\u8303\u56F4": "Usage must declare its meter scope",
|
|
1697
|
+
"\u589E\u91CF\u7528\u91CF\u5FC5\u987B\u63D0\u4F9B\u7A33\u5B9A\u4E8B\u4EF6 ID": "Delta usage requires a stable event ID",
|
|
1698
|
+
"\u7D2F\u8BA1\u7528\u91CF\u5E8F\u53F7\u5FC5\u987B\u662F\u975E\u8D1F\u6574\u6570": "The cumulative usage sequence must be a nonnegative integer",
|
|
1699
|
+
"\u540C\u4E00\u8BA1\u91CF\u5668\u4E0D\u80FD\u6DF7\u5408\u7D2F\u8BA1\u4E0E\u589E\u91CF\u8BFB\u6570": "A meter cannot mix cumulative and delta readings",
|
|
1700
|
+
"\u540C\u4E00\u7528\u91CF\u4E8B\u4EF6\u8FD4\u56DE\u4E0D\u540C\u6570\u636E": "The same usage event returned conflicting data",
|
|
1701
|
+
"\u4E0A\u4E0B\u6587\u6750\u6599\u5FC5\u987B\u5177\u6709 sourceId": "Context sources must have a sourceId",
|
|
1702
|
+
"\u4E0A\u4E0B\u6587\u6750\u6599 {id} \u7684\u5185\u5BB9\u54C8\u5E0C\u4E0D\u5339\u914D": "Content hash mismatch for context source {id}",
|
|
1703
|
+
"\u4E0A\u4E0B\u6587\u6750\u6599 {id} \u5B58\u5728\u51B2\u7A81\u7248\u672C": "Context source {id} has conflicting versions",
|
|
1704
|
+
"\u4E0A\u4E0B\u6587\u5B57\u8282\u4E0A\u9650\u5FC5\u987B\u4E3A\u6B63\u6574\u6570": "The context byte limit must be a positive integer",
|
|
1705
|
+
"\u68C0\u67E5\u6D3E\u53D1\u5B57\u8282\u4E0A\u9650\u5FC5\u987B\u63D0\u4F9B\u5B9E\u9645\u5B8C\u6574\u63D0\u793A\u8BCD": "The complete actual prompt is required to check the dispatch byte limit",
|
|
1706
|
+
"\u5B8C\u6574\u9636\u6BB5\u8F93\u5165\u8D85\u8FC7\u5E95\u5EA7\u6587\u672C\u4E0A\u9650\uFF1B\u8BF7\u7F29\u5C0F\u6750\u6599\uFF0C\u4E0D\u5F97\u9759\u9ED8\u622A\u65AD": "The full step input exceeds the backend text limit; reduce the sources without silent truncation",
|
|
1707
|
+
"\u4EFB\u52A1\u6587\u6863\u9700\u8981\u7ED3\u6784\u5316 TaskSpec \u6216 - [ ] T001 \u5F62\u5F0F\u7684\u4EFB\u52A1": "The task document requires structured TaskSpec or - [ ] T001 tasks",
|
|
1708
|
+
"\u4EFB\u52A1\u4F9D\u8D56\u4E0D\u80FD\u91CD\u590D": "Task dependencies must be unique",
|
|
1709
|
+
"\u4EFB\u52A1\u4F9D\u8D56\u6307\u5411\u4E0D\u5B58\u5728\u7684\u4EFB\u52A1": "A dependency refers to a missing task",
|
|
1710
|
+
"\u4EFB\u52A1\u5141\u8BB8\u8DEF\u5F84\u4E0D\u80FD\u8D8A\u51FA\u5DE5\u4F5C\u533A": "Allowed task paths must remain inside the workspace",
|
|
1711
|
+
"\u7ED3\u6784\u5316\u4EFB\u52A1\u4E0D\u662F\u6709\u6548 JSON": "The structured task document is not valid JSON",
|
|
1712
|
+
"\u7ED3\u6784\u5316\u4EFB\u52A1\u5FC5\u987B\u7B26\u5408 TaskSpec v1\uFF0C\u5E76\u663E\u5F0F\u63D0\u4F9B\u4F9D\u8D56\u53CA\u9A8C\u6536\u6761\u4EF6": "Structured tasks must follow TaskSpec v1 with explicit dependencies and acceptance criteria",
|
|
1713
|
+
"\u4EFB\u52A1\u4F9D\u8D56\u5FC5\u987B\u4F7F\u7528\u660E\u786E\u4EFB\u52A1 ID\uFF1B\u4E0D\u80FD\u6839\u636E\u81EA\u7136\u8BED\u8A00\u731C\u6D4B": "Dependencies require explicit task IDs; they cannot be inferred from prose",
|
|
1714
|
+
"\u4EFB\u52A1\u6307\u5B9A\u7684\u9A8C\u8BC1\u547D\u4EE4\u672A\u5728\u5DE5\u7A0B\u914D\u7F6E\u4E2D\u767B\u8BB0": "A task verification command is not registered in the project configuration",
|
|
1715
|
+
"\u6700\u7EC8\u5FC5\u9700\u9A8C\u8BC1\u547D\u4EE4\u672A\u914D\u7F6E": "A required final verification command is not configured",
|
|
1716
|
+
"\u6211\u5DF2\u786E\u8BA4\u672C\u673A\u9A8C\u8BC1\u547D\u4EE4\u53CA\u5176\u5B50\u8FDB\u7A0B\u5DF2\u5168\u90E8\u7ED3\u675F\u3002": "I have confirmed that the local verification commands and all their child processes have ended.",
|
|
1717
|
+
"\u53EA\u6709\u786E\u8BA4\u672C\u673A\u9A8C\u8BC1\u547D\u4EE4\u53CA\u5176\u5B50\u8FDB\u7A0B\u5168\u90E8\u7ED3\u675F\u540E\uFF0C\u624D\u53EF\u89E3\u9664\u6B64\u963B\u585E\u3002\u662F\u5426\u786E\u8BA4\uFF1F": "Only clear this block after confirming that the local verification commands and all child processes have ended. Confirm?",
|
|
1718
|
+
"\u9A8C\u8BC1\u8FDB\u7A0B\u7684\u7EC8\u6001\u5C1A\u672A\u786E\u8BA4\u3002\u8BF7\u5148\u68C0\u67E5\u672C\u673A\u8FDB\u7A0B\uFF1B\u786E\u8BA4\u524D\u4E0D\u4F1A\u5F00\u59CB\u65B0\u7684\u5199\u5165\u6216\u63A5\u7EB3\u3002": "The verification process has no confirmed terminal state. Check local processes first; new writes and acceptance stay blocked until confirmation.",
|
|
1719
|
+
"\u786E\u8BA4\u9A8C\u8BC1\u8FDB\u7A0B\u5DF2\u5168\u90E8\u7ED3\u675F": "Confirm all verification processes have ended",
|
|
1720
|
+
"\u505C\u6B62\u9A8C\u8BC1\u8BF7\u6C42\u5DF2\u63D0\u4EA4": "Verification stop requested",
|
|
1721
|
+
"\u505C\u6B62\u9A8C\u8BC1\u547D\u4EE4": "Stop verification commands",
|
|
1722
|
+
"\u9A8C\u8BC1\u8FDB\u7A0B\u786E\u8BA4\u5DF2\u8BB0\u5F55": "Verification process confirmation recorded",
|
|
1723
|
+
"\u81EA\u52A8\u5316\u6B63\u5728\u7BA1\u7406\u6B64\u6D41\u7A0B\uFF0C\u8BF7\u5148\u505C\u6B62\u81EA\u52A8\u63A8\u8FDB\u6216\u4FEE\u8BA2\u518D\u624B\u52A8\u6D3E\u53D1\u3002": "Automation is managing this workflow. Stop automatic progression or repair before dispatching manually.",
|
|
1724
|
+
"\u9A8C\u8BC1\u8FDB\u7A0B\u8FD8\u672A\u786E\u8BA4\u505C\u6B62\u3002\u6838\u5BF9\u672C\u673A\u8FDB\u7A0B\u540E\uFF0C\u624B\u52A8\u786E\u8BA4\u89E3\u9664\u963B\u585E\u3002": "The verification process has not been confirmed stopped. Check local processes, then confirm manually to clear the block.",
|
|
1725
|
+
"\u6838\u5BF9\u9A8C\u8BC1\u8FDB\u7A0B": "Check verification processes"
|
|
1726
|
+
};
|
|
1727
|
+
|
|
1728
|
+
// packages/i18n/execution-diagnostics.ts
|
|
1729
|
+
var messages9 = {
|
|
1730
|
+
"\u6267\u884C\u5DF2\u8BF7\u6C42\u505C\u6B62\uFF0C\u4E0D\u80FD\u6D3E\u53D1\u540E\u7EED\u64CD\u4F5C": "A stop was requested; further actions cannot be dispatched",
|
|
1731
|
+
"\u9636\u6BB5\u65F6\u95F4\u4E0A\u9650\u5DF2\u5230\uFF0C\u4E0D\u80FD\u6D3E\u53D1\u540E\u7EED\u64CD\u4F5C": "The step deadline was reached; further actions cannot be dispatched",
|
|
1732
|
+
"\u8BF7\u9009\u62E9\u9700\u8981\u4FEE\u8BA2\u7684\u751F\u6210\u9636\u6BB5\uFF1B\u590D\u6838\u5BF9\u8C61\u6CA1\u6709\u552F\u4E00\u751F\u6210\u5C1D\u8BD5": "Select the producer step to repair; the review subjects do not have one unique producer attempt",
|
|
1733
|
+
"\u5F53\u524D\u9636\u6BB5\u6CA1\u6709\u53EF\u4FEE\u8BA2\u7684\u751F\u6210\u5C1D\u8BD5": "This step has no producer attempt to repair",
|
|
1734
|
+
"\u4FEE\u8BA2\u5FC5\u987B\u6307\u5411\u5F53\u524D\u6D41\u7A0B\u4E2D\u7684\u751F\u6210\u9636\u6BB5": "Repair must target a producer step in the current workflow",
|
|
1735
|
+
"\u4FEE\u8BA2\u6240\u5C5E\u6D41\u7A0B\u5DF2\u6682\u505C\u6216\u7ED3\u675F": "The workflow containing this repair is paused or finished",
|
|
1736
|
+
"\u4FEE\u8BA2\u7684\u9700\u6C42\u3001\u7AE0\u7A0B\u6216\u4E0A\u6E38\u5DF2\u53D8\u5316": "The repair requirements, constitution, or upstream inputs changed",
|
|
1737
|
+
"\u4FEE\u8BA2\u7684\u8F93\u5165\u3001\u9A8C\u8BC1\u914D\u7F6E\u6216\u63A5\u7EB3\u57FA\u7EBF\u5DF2\u53D8\u5316": "The repair inputs, verification configuration, or acceptance baseline changed",
|
|
1738
|
+
"\u4FEE\u8BA2\u76EE\u6807\u6587\u6863\u5728\u81EA\u52A8\u5316\u671F\u95F4\u88AB\u5176\u4ED6\u64CD\u4F5C\u4FEE\u6539": "Another operation changed the repair target document during automation",
|
|
1739
|
+
"\u4FEE\u8BA2\u7F3A\u5C11\u590D\u6838\u9636\u6BB5\u8BB0\u5F55": "The repair is missing its review step record",
|
|
1740
|
+
"\u4FEE\u8BA2\u5E95\u5EA7\u7F3A\u5C11\u590D\u6838\u6A21\u578B\uFF0C\u8BF7\u5148\u914D\u7F6E\u540C\u4E00\u5E95\u5EA7\u7684\u590D\u6838\u89D2\u8272": "Configure a reviewer model on the repair backend before continuing",
|
|
1741
|
+
"\u9636\u6BB5\u72B6\u6001\u5DF2\u53D8\u5316\uFF0C\u8BF7\u5237\u65B0\u540E\u91CD\u65B0\u9009\u62E9\u4FEE\u8BA2": "The step changed; refresh before selecting repair again",
|
|
1742
|
+
"\u5F53\u524D\u5DE5\u4F5C\u9879\u6B63\u5728\u51C6\u5907\u81EA\u52A8\u5316": "Automation is being prepared for this work item",
|
|
1743
|
+
"\u5DE5\u4F5C\u9879\u5DF2\u6709\u6D3B\u52A8\u4FEE\u8BA2\u5468\u671F": "The work item already has an active repair cycle",
|
|
1744
|
+
"\u5DE5\u4F5C\u9879\u4ECD\u6709\u6D3B\u52A8\u6216\u672A\u786E\u8BA4\u6267\u884C\uFF0C\u4E0D\u80FD\u53E6\u5EFA\u4FEE\u8BA2\u5C1D\u8BD5": "The work item has active or unconfirmed execution; another repair attempt cannot start",
|
|
1745
|
+
"\u53EA\u6709\u5DF2\u786E\u8BA4\u5B8C\u6210\u7684\u751F\u6210\u5C1D\u8BD5\u53EF\u4EE5\u4FEE\u8BA2\uFF1B\u5148\u6838\u5BF9\u5931\u8D25\u6216\u53D6\u6D88\u7684\u6267\u884C": "Only a producer with confirmed completion can be repaired; reconcile failed or cancelled execution first",
|
|
1746
|
+
"\u6267\u884C\u56E0\u6743\u9650\u3001\u53D6\u6D88\u3001\u65F6\u9650\u6216\u5E95\u5EA7\u6545\u969C\u505C\u6B62\uFF0C\u4E0D\u80FD\u81EA\u52A8\u4FEE\u6539\u4EE3\u7801": "Execution stopped for permission, cancellation, deadline, or backend failure; automatic code repair is blocked",
|
|
1747
|
+
"\u539F\u5C1D\u8BD5\u7684\u51BB\u7ED3\u8F93\u5165\u5DF2\u8FC7\u671F": "The original attempt has stale frozen inputs",
|
|
1748
|
+
"\u53EA\u6709\u4EE3\u7801\u5B9E\u73B0\u9636\u6BB5\u53EF\u4EE5\u521B\u5EFA\u4EE3\u7801\u4FEE\u8BA2": "Only an implementation step can create a code repair",
|
|
1749
|
+
"\u5931\u8D25\u5019\u9009\u5DF2\u88AB\u66FF\u6362": "The failed candidate was replaced",
|
|
1750
|
+
"\u5931\u8D25\u5019\u9009\u6CA1\u6709\u7A33\u5B9A\u7EC8\u6001\u5FEB\u7167\u6216\u5DF2\u88AB\u5916\u90E8\u4FEE\u6539\uFF0C\u8BF7\u5148\u6838\u5BF9": "Reconcile the failed candidate: it has no stable terminal snapshot or was changed externally",
|
|
1751
|
+
"\u5F53\u524D\u6CA1\u6709\u5DF2\u8BB0\u5F55\u7684\u5931\u8D25\u8BC1\u636E\u9700\u8981\u4FEE\u8BA2": "There is no recorded failure evidence requiring repair",
|
|
1752
|
+
"\u4FEE\u8BA2\u51C6\u5907\u671F\u95F4\u9636\u6BB5\u53D1\u751F\u53D8\u5316": "The step changed while repair was being prepared",
|
|
1753
|
+
"\u4FEE\u8BA2\u5FEB\u7167\u5DF2\u53D1\u751F\u51B2\u7A81\uFF0C\u4E0D\u80FD\u81EA\u52A8\u91CD\u8BD5": "The repair snapshot has a conflict and cannot retry automatically",
|
|
1754
|
+
"\u5931\u8D25\u5019\u9009\u5DF2\u88AB\u53E6\u4E00\u5019\u9009\u66FF\u6362": "Another candidate replaced the failed candidate",
|
|
1755
|
+
"\u5931\u8D25\u5019\u9009\u5728\u4FEE\u8BA2\u5F00\u59CB\u524D\u88AB\u4FEE\u6539": "The failed candidate changed before repair started",
|
|
1756
|
+
"\u4FEE\u8BA2\u5468\u671F\u5DF2\u7ECF\u505C\u6B62": "The repair cycle has stopped",
|
|
1757
|
+
"\u6D3E\u751F\u671F\u95F4\u539F\u5019\u9009\u53D1\u751F\u53D8\u5316": "The parent candidate changed while its successor was being created",
|
|
1758
|
+
"\u5019\u9009\u6FC0\u6D3B\u524D\u5DF2\u88AB\u5176\u4ED6\u64CD\u4F5C\u66FF\u6362": "Another operation replaced the candidate before activation",
|
|
1759
|
+
"\u4FEE\u8BA2\u6B65\u9AA4\u7F3A\u5C11\u5DF2\u6301\u4E45\u5316\u7684\u6267\u884C\u8EAB\u4EFD": "The repair step has no persisted execution identity",
|
|
1760
|
+
"\u4FEE\u8BA2\u7ED3\u675F\u540E\u7684\u5019\u9009\u5185\u5BB9\u53D1\u751F\u53D8\u5316": "The candidate changed after repair finished",
|
|
1761
|
+
"\u751F\u6210\u671F\u95F4\u76EE\u6807\u6587\u6863\u88AB\u5176\u4ED6\u64CD\u4F5C\u66FF\u6362": "Another operation replaced the target document during generation",
|
|
1762
|
+
"\u5F53\u524D\u76EE\u6807\u7F3A\u5C11\u5FC5\u9700\u72EC\u7ACB\u590D\u6838": "The current target is missing its required independent review",
|
|
1763
|
+
"\u590D\u6838\u9636\u6BB5\u8BB0\u5F55\u7F3A\u5931": "The review step record is missing",
|
|
1764
|
+
"\u6D41\u7A0B\u5DF2\u7ECF\u53D8\u5316\uFF0C\u8BF7\u5237\u65B0": "The workflow changed; refresh before continuing",
|
|
1765
|
+
"\u53EA\u6709\u6D3B\u52A8\u6D41\u7A0B\u53EF\u4EE5\u5F00\u542F\u81EA\u52A8\u63A8\u8FDB": "Automatic progression requires an active workflow",
|
|
1766
|
+
"\u8BF7\u9009\u62E9\u81EA\u52A8\u63A8\u8FDB\u6216\u81EA\u52A8\u4FEE\u8BA2": "Select automatic progression or automatic repair",
|
|
1767
|
+
"\u4FEE\u8BA2\u8F6E\u6570\u5FC5\u987B\u4E3A 1 \u5230 10 \u7684\u6574\u6570": "Repair rounds must be an integer from 1 to 10",
|
|
1768
|
+
"\u5DE5\u4F5C\u9879\u5DF2\u6709\u6D3B\u52A8\u81EA\u52A8\u5316": "The work item already has active automation",
|
|
1769
|
+
"\u65E0\u8FDB\u5C55\u4E0A\u9650\u5FC5\u987B\u4E3A\u6B63\u6574\u6570": "The no-progress limit must be a positive integer",
|
|
1770
|
+
"\u4EE3\u7801\u4FEE\u8BA2\u5FC5\u987B\u7ED1\u5B9A\u5931\u8D25\u5019\u9009": "Code repair must be bound to the failed candidate",
|
|
1771
|
+
"\u4FEE\u8BA2\u5FC5\u987B\u56FA\u5B9A\u76EE\u6807\u3001\u4E0A\u6E38\u548C\u63A5\u7EB3\u57FA\u7EBF": "Repair must freeze its target, upstream inputs, and acceptance baseline",
|
|
1772
|
+
"\u4FEE\u8BA2\u5468\u671F\u672A\u5904\u4E8E\u6D3B\u52A8\u72B6\u6001": "The repair cycle is not active",
|
|
1773
|
+
"\u524D\u4E00\u8F6E\u5C1A\u672A\u5B8C\u6210\u6216\u5DF2\u7ECF\u901A\u8FC7": "The previous round is unfinished or has already passed",
|
|
1774
|
+
"\u4FEE\u8BA2\u8F6E\u6570\u5DF2\u8017\u5C3D": "The repair round budget is exhausted",
|
|
1775
|
+
"\u5F53\u524D\u6CA1\u6709\u6D3B\u52A8\u4FEE\u8BA2\u8F6E": "There is no active repair round",
|
|
1776
|
+
"\u4FEE\u8BA2\u6B65\u9AA4\u4E0D\u80FD\u5012\u9000\u6216\u8DF3\u8FC7\u9A8C\u8BC1\u4E0E\u590D\u6838": "Repair cannot move backwards or skip verification and review",
|
|
1777
|
+
"\u4FEE\u8BA2\u8BC4\u4F30\u5FC5\u987B\u901A\u8FC7 assessRepairRound": "Repair assessment must use assessRepairRound",
|
|
1778
|
+
"\u540C\u4E00\u8F6E\u4FEE\u8BA2\u7684\u6267\u884C\u8EAB\u4EFD\u4E0D\u80FD\u66FF\u6362": "A repair round cannot replace its execution identity",
|
|
1779
|
+
"\u6210\u529F\u4FEE\u8BA2\u5FC5\u987B\u5B8C\u6210\u9A8C\u8BC1\u548C\u590D\u6838\uFF1B\u8F93\u51FA\u6216\u9A8C\u8BC1\u5931\u8D25\u65F6\u53EF\u76F4\u63A5\u8BC4\u4F30\u5931\u8D25": "Successful repair requires verification and review; invalid output or failed verification may be assessed as failed immediately",
|
|
1780
|
+
"\u9A8C\u8BC1\u671F\u95F4\u4E2D\u65AD\uFF0C\u8BF7\u6838\u5BF9\u672C\u673A\u9A8C\u8BC1\u8FDB\u7A0B\u505C\u6B62\u540E\u518D\u91CD\u65B0\u9A8C\u8BC1": "Verification was interrupted; confirm local verification processes have stopped before verifying again",
|
|
1781
|
+
"\u6D3E\u53D1\u51C6\u5907\u5DF2\u7ECF\u5F00\u59CB\uFF0C\u6062\u590D\u65F6\u53EA\u6838\u5BF9\u539F\u8EAB\u4EFD": "Dispatch preparation has started; recovery only reconciles the original identity",
|
|
1782
|
+
"\u542F\u52A8\u4E2D\u65AD\u4E14\u5C1A\u672A\u53D6\u5F97\u6267\u884C\u8EAB\u4EFD\uFF0C\u672A\u81EA\u52A8\u91CD\u53D1\uFF1B\u8BF7\u6838\u5BF9\u540E\u521B\u5EFA\u65B0\u5C1D\u8BD5": "Startup was interrupted before an identity was obtained; no automatic resend occurred. Reconcile before creating a new attempt",
|
|
1783
|
+
"\u542F\u52A8\u4E2D\u65AD\u4E14\u6267\u884C\u8EAB\u4EFD\u672A\u77E5\uFF0C\u672A\u81EA\u52A8\u91CD\u53D1": "Startup was interrupted with an unknown execution identity; no automatic resend occurred",
|
|
1784
|
+
"\u5DE5\u4F5C\u9879\u6B63\u5728\u51C6\u5907\u6216\u96C6\u6210": "The work item is being prepared or integrated",
|
|
1785
|
+
"\u539F\u6267\u884C\u6216\u9A8C\u8BC1\u5C1A\u672A\u786E\u8BA4\u505C\u6B62": "The original execution or verification has not been confirmed stopped",
|
|
1786
|
+
"\u5F53\u524D\u5DE5\u4F5C\u9879\u6B63\u5728\u81EA\u52A8\u4FEE\u8BA2\uFF0C\u8BF7\u5148\u505C\u6B62\u4FEE\u8BA2\u5468\u671F": "Stop the active repair cycle before manually dispatching this work item",
|
|
1787
|
+
"\u5F53\u524D\u6D41\u7A0B\u7531\u81EA\u52A8\u5316\u6267\u884C\uFF0C\u8BF7\u5148\u505C\u6B62\u81EA\u52A8\u5316\u518D\u624B\u52A8\u6D3E\u53D1": "Stop automation before manually dispatching this workflow",
|
|
1788
|
+
"\u6240\u5C5E\u6D41\u7A0B\u5DF2\u6682\u505C\u6216\u7ED3\u675F": "The parent workflow is paused or finished",
|
|
1789
|
+
"\u81EA\u52A8\u63A8\u8FDB\u5DF2\u7ECF\u505C\u6B62\uFF0C\u4E0D\u80FD\u7EE7\u7EED\u6D3E\u53D1": "Automatic progression stopped; further dispatch is blocked",
|
|
1790
|
+
"\u4FEE\u8BA2\u5468\u671F\u6216\u5F53\u524D\u8F6E\u6B21\u5DF2\u7ECF\u53D8\u5316\uFF0C\u4E0D\u80FD\u7EE7\u7EED\u6D3E\u53D1": "The repair cycle or round changed; further dispatch is blocked",
|
|
1791
|
+
"\u6240\u5C5E\u81EA\u52A8\u63A8\u8FDB\u5DF2\u7ECF\u505C\u6B62": "The parent automatic progression has stopped",
|
|
1792
|
+
"\u6D3E\u53D1\u5DF2\u51C6\u5907\u6216\u7ED3\u679C\u672A\u77E5\uFF0C\u4E0D\u80FD\u91CD\u590D\u542F\u52A8": "Dispatch is prepared or its outcome is unknown; it cannot be started again",
|
|
1793
|
+
"\u6240\u5C5E\u6D41\u7A0B\u6216\u5F53\u524D\u5C1D\u8BD5\u5DF2\u7ECF\u53D8\u5316\uFF0C\u4E0D\u80FD\u7EE7\u7EED\u6D3E\u53D1": "The parent workflow or current attempt changed; further dispatch is blocked",
|
|
1794
|
+
"\u4FEE\u8BA2\u5468\u671F\u5DF2\u505C\u6B62": "The repair cycle stopped",
|
|
1795
|
+
"\u81EA\u52A8\u63A8\u8FDB\u5DF2\u505C\u6B62": "Automatic progression stopped",
|
|
1796
|
+
"\u6D3E\u53D1\u524D\u53D1\u73B0\u9700\u6C42\u3001\u7AE0\u7A0B\u6216\u8F93\u5165\u5DF2\u7ECF\u53D8\u5316": "Requirements, constitution, or inputs changed before dispatch",
|
|
1797
|
+
"\u4FEE\u8BA2\u7684\u539F\u59CB\u9700\u6C42\u3001\u7AE0\u7A0B\u6216\u4E0A\u6E38\u5DF2\u8FC7\u671F": "The repair has stale original requirements, constitution, or upstream inputs",
|
|
1798
|
+
"\u4FEE\u8BA2\u7684\u63A5\u7EB3\u57FA\u7EBF\u5DF2\u7ECF\u53D8\u5316": "The repair acceptance baseline changed",
|
|
1799
|
+
"\u539F\u6267\u884C\u5C1A\u672A\u786E\u8BA4\u505C\u6B62": "The original execution has not been confirmed stopped",
|
|
1800
|
+
"\u5F53\u524D\u4FEE\u8BA2\u8F6E\u5DF2\u6D3E\u53D1": "The current repair round has already been dispatched",
|
|
1801
|
+
"\u53EA\u8BFB\u8F93\u51FA\u4FEE\u8BA2\u671F\u95F4\u5019\u9009\u4EE3\u7801\u53D1\u751F\u53D8\u5316": "Candidate code changed during read-only output repair",
|
|
1802
|
+
"\u4FEE\u8BA2\u540E\u7684\u786E\u5B9A\u6027\u9A8C\u8BC1\u672A\u901A\u8FC7": "Deterministic verification failed after repair",
|
|
1803
|
+
"\u53EA\u8BFB\u683C\u5F0F\u4FEE\u8BA2\u4E0D\u80FD\u6D3E\u53D1\u672A\u5B8C\u6210\u7684\u4EE3\u7801\u4EFB\u52A1": "Read-only output repair cannot dispatch unfinished coding tasks",
|
|
1804
|
+
"\u6700\u7EC8\u5019\u9009\u5168\u91CF\u9A8C\u8BC1\u672A\u901A\u8FC7": "Full verification failed for the final candidate",
|
|
1805
|
+
"\u5E95\u5EA7\u5C1A\u672A\u786E\u8BA4\u6267\u884C\u7EC8\u6B62": "The backend has not confirmed execution termination",
|
|
1806
|
+
"\u9A8C\u8BC1\u8FDB\u7A0B\u505C\u6B62\u72B6\u6001\u5C1A\u672A\u786E\u8BA4": "The verification process has not been confirmed stopped",
|
|
1807
|
+
"\u9636\u6BB5\u65F6\u95F4\u4E0A\u9650\u5DF2\u5230\uFF0C\u6267\u884C\u5DF2\u505C\u6B62": "The step deadline was reached and execution stopped",
|
|
1808
|
+
"\u505C\u6B62\u5DF2\u786E\u8BA4\uFF1B\u8FDF\u5230\u7ED3\u679C\u4FDD\u7559\u4F9B\u5BA1\u9605": "The stop was confirmed; late results are retained for review",
|
|
1809
|
+
"\u6267\u884C\u505C\u6B62\uFF0C\u7ED3\u679C\u672A\u81EA\u52A8\u653E\u884C": "Execution stopped; its results were not automatically approved",
|
|
1810
|
+
"\u5019\u9009\u4ECD\u6709\u672A\u7ED3\u675F\u6216\u5F85\u6838\u5BF9\u6267\u884C\uFF0C\u4E0D\u80FD\u540C\u65F6\u9A8C\u8BC1": "The candidate has unfinished or unresolved execution; concurrent verification is blocked",
|
|
1811
|
+
"\u4EFB\u52A1\u5F15\u7528\u4E86\u672A\u914D\u7F6E\u7684\u9A8C\u8BC1\u547D\u4EE4": "The task references an unconfigured verification command",
|
|
1812
|
+
"\u9A8C\u8BC1\u5DF2\u8BF7\u6C42\u505C\u6B62\uFF0C\u4E0D\u80FD\u542F\u52A8\u540E\u7EED\u547D\u4EE4": "Verification stop was requested; further commands cannot start",
|
|
1813
|
+
"\u9A8C\u8BC1\u9636\u6BB5\u65F6\u95F4\u4E0A\u9650\u5DF2\u5230": "The verification deadline was reached",
|
|
1814
|
+
"\u5F53\u524D\u6CA1\u6709\u53EF\u505C\u6B62\u7684\u9A8C\u8BC1": "There is no verification to stop",
|
|
1815
|
+
"\u4EC5\u53EF\u5728\u6838\u5BF9\u4E2D\u65AD\u9A8C\u8BC1\u8FDB\u7A0B\u505C\u6B62\u540E\u8BB0\u5F55\u5904\u7406\u7406\u7531": "Only confirm an interrupted verification after checking that its processes have stopped",
|
|
1816
|
+
"\u4EBA\u5DE5\u5DF2\u786E\u8BA4\u9A8C\u8BC1\u8FDB\u7A0B\u505C\u6B62\uFF0C\u8BF7\u91CD\u65B0\u8FD0\u884C\u9A8C\u8BC1": "Verification processes were manually confirmed stopped; run verification again",
|
|
1817
|
+
"\u6062\u590D\u6D3E\u53D1\u56DE\u6267\u4E22\u5931\uFF0C\u4E0D\u80FD\u5C06\u65E7\u6267\u884C\u7EC8\u6001\u5F53\u4F5C\u65B0\u6267\u884C\u7ED3\u679C": "The resume receipt was lost; the old terminal state cannot represent the new execution",
|
|
1818
|
+
"\u9A8C\u8BC1\u671F\u95F4\u4E2D\u65AD\uFF0C\u539F\u9A8C\u8BC1\u8FDB\u7A0B\u505C\u6B62\u72B6\u6001\u5C1A\u672A\u786E\u8BA4\uFF0C\u8BF7\u4EBA\u5DE5\u6838\u5BF9\u8FDB\u7A0B\u540E\u5904\u7406": "Verification was interrupted and its processes are unconfirmed; manually check them before continuing",
|
|
1819
|
+
"\u539F\u5C1D\u8BD5\u65F6\u9650\u5DF2\u5230\uFF0C\u6062\u590D\u4E0D\u80FD\u91CD\u7F6E\u65F6\u9650": "The original attempt deadline was reached; resume cannot reset it",
|
|
1820
|
+
"\u539F\u9A8C\u8BC1\u8FDB\u7A0B\u505C\u6B62\u72B6\u6001\u5C1A\u672A\u786E\u8BA4": "The original verification processes have not been confirmed stopped",
|
|
1821
|
+
"\u5E95\u5EA7\u65E0\u6CD5\u8BC1\u660E\u6062\u590D\u4F1A\u7EE7\u627F\u5269\u4F59\u6B65\u6570\uFF0C\u4E25\u683C\u7D2F\u8BA1\u6B65\u6570\u7B56\u7565\u7981\u6B62\u6062\u590D": "The backend cannot prove resume preserves remaining steps; a strict cumulative step policy blocks resume",
|
|
1822
|
+
"\u6062\u590D\u6D3E\u53D1\u7ED3\u679C\u5C1A\u672A\u786E\u8BA4\uFF0C\u4E0D\u80FD\u91CD\u590D\u6062\u590D": "The resume dispatch is unconfirmed and cannot be repeated",
|
|
1823
|
+
"\u6240\u5C5E\u81EA\u52A8\u4FEE\u8BA2\u5DF2\u505C\u6B62\uFF0C\u4E0D\u80FD\u521B\u5EFA\u6216\u6D3E\u53D1\u4FEE\u8BA2": "The parent automatic repair stopped; no repair can be created or dispatched",
|
|
1824
|
+
"\u4FEE\u8BA2\u5019\u9009\u7684\u5F53\u524D\u7248\u672C\u9A8C\u8BC1\u672A\u901A\u8FC7": "Verification failed for the current repaired candidate",
|
|
1825
|
+
"\u72EC\u7ACB\u590D\u6838\u5DF2\u901A\u8FC7\uFF0C\u7B49\u5F85\u4EBA\u5DE5\u63A5\u7EB3\u5F53\u524D\u4EA7\u7269": "Independent review passed; the current artifact awaits human acceptance",
|
|
1826
|
+
"\u4FEE\u8BA2\u5FEB\u7167\u64CD\u4F5C\u9700\u8981\u4EBA\u5DE5\u6838\u5BF9": "The repair snapshot operation needs manual reconciliation",
|
|
1827
|
+
"\u539F\u6267\u884C\u6216\u9A8C\u8BC1\u5C1A\u672A\u786E\u8BA4\u505C\u6B62\uFF0C\u5DE5\u4F5C\u533A\u4ECD\u88AB\u5360\u7528": "Original execution or verification is unconfirmed; the workspace remains occupied",
|
|
1828
|
+
"\u5E95\u5EA7\u8FD4\u56DE\u7684\u6267\u884C\u8EAB\u4EFD\u4E0E\u51BB\u7ED3\u76EE\u6807\u4E0D\u4E00\u81F4\uFF0C\u672A\u6D3E\u53D1\u6A21\u578B": "The backend returned an execution identity that differs from the frozen target; the model was not dispatched",
|
|
1829
|
+
"\u4FEE\u8BA2\u5E95\u5EA7\u8EAB\u4EFD\u5DF2\u53D8\u5316\uFF0C\u8BF7\u6838\u5BF9\u539F\u6267\u884C\u76EE\u6807": "The repair backend identity changed; reconcile the original target",
|
|
1830
|
+
"\u51BB\u7ED3\u7684\u4FEE\u8BA2\u6A21\u578B\u672A\u5728\u539F\u5E95\u5EA7\u542F\u7528": "The frozen repair model is not available on the original backend",
|
|
1831
|
+
"\u53EA\u8BFB\u9636\u6BB5\u7684\u5DE5\u4F5C\u533A\u5185\u5BB9\u53D1\u751F\u53D8\u5316\uFF0C\u4E0D\u80FD\u53D1\u5E03\u4EA7\u7269": "The workspace changed during a read-only stage; its artifacts cannot be published",
|
|
1832
|
+
"\u4EFB\u52A1\u4FEE\u6539\u8D85\u51FA\u5DF2\u6279\u51C6\u8DEF\u5F84\u8303\u56F4\uFF0C\u505C\u6B62\u540E\u7EED\u6D3E\u53D1\u5E76\u4FDD\u7559\u5019\u9009": "Task changes exceeded the approved paths; further dispatches stopped and the candidate was preserved"
|
|
1833
|
+
};
|
|
1834
|
+
|
|
1835
|
+
// packages/i18n/index.ts
|
|
1836
|
+
var englishMessages = Object.freeze({ ...messages7, ...messages4, ...messages5, ...messages6, ...messages, ...messages2, ...messages3, ...messages8, ...messages9 });
|
|
1837
|
+
function normalizeLocale(value) {
|
|
1838
|
+
const languageList = typeof value === "string" ? value : value?.join(",") || "";
|
|
1839
|
+
const preferences = languageList.split(",").map((entry, index) => {
|
|
1840
|
+
const [language, ...parameters] = entry.trim().split(";");
|
|
1841
|
+
const quality = parameters.find((parameter) => parameter.trim().startsWith("q="));
|
|
1842
|
+
return { language: language.toLowerCase(), weight: quality ? Number(quality.trim().slice(2)) : 1, index };
|
|
1843
|
+
}).filter((entry) => entry.weight > 0 && entry.weight <= 1).sort((a, b) => b.weight - a.weight || a.index - b.index);
|
|
1844
|
+
for (const { language } of preferences) {
|
|
1845
|
+
if (/^en(?:[-_]|$)/.test(language)) return "en";
|
|
1846
|
+
if (/^zh(?:[-_]|$)/.test(language)) return "zh-CN";
|
|
1847
|
+
}
|
|
1848
|
+
return "zh-CN";
|
|
1849
|
+
}
|
|
1850
|
+
var escapePattern = (value) => value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
1851
|
+
var placeholder = /\{([a-zA-Z0-9_]+)\}/g;
|
|
1852
|
+
var interpolate = (message, values) => message.replace(placeholder, (match, key) => Object.hasOwn(values, key) ? String(values[key] ?? "") : match);
|
|
1853
|
+
var patterns = Object.entries(englishMessages).filter(([source]) => /\{[a-zA-Z0-9_]+\}/.test(source)).map(([source, translated]) => {
|
|
1854
|
+
const keys = [];
|
|
1855
|
+
let offset = 0, pattern = "";
|
|
1856
|
+
for (const match of source.matchAll(placeholder)) {
|
|
1857
|
+
pattern += escapePattern(source.slice(offset, match.index)) + "([\\s\\S]*?)";
|
|
1858
|
+
keys.push(match[1]);
|
|
1859
|
+
offset = match.index + match[0].length;
|
|
1860
|
+
}
|
|
1861
|
+
pattern += escapePattern(source.slice(offset));
|
|
1862
|
+
return { pattern: new RegExp(`^${pattern}$`), keys, translated, specificity: source.replace(placeholder, "").length };
|
|
1863
|
+
}).sort((a, b) => b.specificity - a.specificity);
|
|
1864
|
+
function translate(source, locale2, values = {}) {
|
|
1865
|
+
if (locale2 !== "en") return interpolate(source, values);
|
|
1866
|
+
if (Object.hasOwn(englishMessages, source)) return interpolate(englishMessages[source], values);
|
|
1867
|
+
if (source.length <= 32768 && /\p{Script=Han}/u.test(source)) for (const entry of patterns) {
|
|
1868
|
+
const match = entry.pattern.exec(source);
|
|
1869
|
+
if (match) return interpolate(entry.translated, Object.fromEntries(entry.keys.map((key, index) => [key, match[index + 1]])));
|
|
1870
|
+
}
|
|
1871
|
+
return interpolate(source, values);
|
|
1872
|
+
}
|
|
1873
|
+
function formatDate(date, locale2) {
|
|
1874
|
+
if (!date) return "\u2014";
|
|
1875
|
+
const value = new Date(date);
|
|
1876
|
+
if (!Number.isFinite(value.getTime())) return "\u2014";
|
|
1877
|
+
return new Intl.DateTimeFormat(locale2 === "en" ? "en-US" : "zh-CN", { month: "2-digit", day: "2-digit", hour: "2-digit", minute: "2-digit", hour12: false, timeZone: Intl.DateTimeFormat().resolvedOptions().timeZone }).format(value);
|
|
1878
|
+
}
|
|
1879
|
+
|
|
1880
|
+
// apps/web/src/i18n.ts
|
|
1881
|
+
var preferenceKey = "specflow-locale";
|
|
1882
|
+
function initialLocale() {
|
|
1883
|
+
if (typeof window === "undefined") return "zh-CN";
|
|
1884
|
+
if (window.specflowDesktop?.initialLocale) return window.specflowDesktop.initialLocale;
|
|
1885
|
+
try {
|
|
1886
|
+
const saved = localStorage.getItem(preferenceKey);
|
|
1887
|
+
if (saved === "en" || saved === "zh-CN") return saved;
|
|
1888
|
+
} catch {
|
|
1889
|
+
}
|
|
1890
|
+
return normalizeLocale(navigator.languages?.length ? navigator.languages : navigator.language);
|
|
1891
|
+
}
|
|
1892
|
+
var locale = initialLocale();
|
|
1893
|
+
var listeners = /* @__PURE__ */ new Set();
|
|
1894
|
+
var getLocale = () => locale;
|
|
1895
|
+
var t = (source, values) => translate(source, locale, values);
|
|
1896
|
+
var localizedDate = (date) => formatDate(date, locale);
|
|
1897
|
+
var subscribe = (listener) => {
|
|
1898
|
+
listeners.add(listener);
|
|
1899
|
+
return () => {
|
|
1900
|
+
listeners.delete(listener);
|
|
1901
|
+
};
|
|
1902
|
+
};
|
|
1903
|
+
var useLocale = () => (0, import_react.useSyncExternalStore)(subscribe, getLocale, getLocale);
|
|
1904
|
+
function applyDocumentLocale() {
|
|
1905
|
+
if (typeof document === "undefined") return;
|
|
1906
|
+
document.documentElement.lang = locale;
|
|
1907
|
+
document.title = t("SpecFlow \xB7 \u5DE5\u7A0B\u5DE5\u4F5C\u53F0");
|
|
1908
|
+
}
|
|
1909
|
+
async function setLocale(next, options = {}) {
|
|
1910
|
+
if (next !== "en" && next !== "zh-CN") return;
|
|
1911
|
+
if (typeof window !== "undefined" && window.specflowDesktop?.setLocale) await window.specflowDesktop.setLocale(next);
|
|
1912
|
+
locale = next;
|
|
1913
|
+
try {
|
|
1914
|
+
localStorage.setItem(preferenceKey, next);
|
|
1915
|
+
} catch {
|
|
1916
|
+
}
|
|
1917
|
+
if (options.updateDocument !== false) applyDocumentLocale();
|
|
1918
|
+
for (const listener of listeners) listener();
|
|
1919
|
+
}
|
|
1920
|
+
var localizedLabels = (labels2) => new Proxy(labels2, { get: (target, key, receiver) => {
|
|
1921
|
+
const value = Reflect.get(target, key, receiver);
|
|
1922
|
+
return typeof value === "string" ? t(value) : value;
|
|
1923
|
+
} });
|
|
1924
|
+
|
|
1925
|
+
// plugins/deepseek-specflow/src/client.tsx
|
|
1926
|
+
var import_react4 = require("react");
|
|
1927
|
+
|
|
1928
|
+
// apps/web/src/workflowCopy.ts
|
|
1929
|
+
var workflowSources = [
|
|
1930
|
+
"\u89C4\u683C\u9A71\u52A8\u5F00\u53D1",
|
|
1931
|
+
"\u9700\u6C42\u89C4\u683C",
|
|
1932
|
+
"\u9700\u6C42\u6F84\u6E05",
|
|
1933
|
+
"\u89C4\u683C\u590D\u6838",
|
|
1934
|
+
"\u5DE5\u7A0B\u8BBE\u8BA1",
|
|
1935
|
+
"\u8BBE\u8BA1\u590D\u6838",
|
|
1936
|
+
"\u4EFB\u52A1\u62C6\u89E3",
|
|
1937
|
+
"\u4EFB\u52A1\u590D\u6838",
|
|
1938
|
+
"\u4EE3\u7801\u5B9E\u73B0",
|
|
1939
|
+
"\u6D4B\u8BD5\u4E0E\u68C0\u67E5",
|
|
1940
|
+
"\u4EE3\u7801\u590D\u6838",
|
|
1941
|
+
"\u6536\u655B\u4E0E\u5BF9\u9F50",
|
|
1942
|
+
"\u6536\u655B\u590D\u6838",
|
|
1943
|
+
"\u63A5\u7EB3\u4EE3\u7801",
|
|
1944
|
+
"\u5206\u6790\u9700\u6C42\u548C\u4ED3\u5E93\uFF0C\u4EA7\u51FA\u5177\u6709\u9A8C\u6536\u6807\u51C6\u7684\u9700\u6C42\u89C4\u683C\u3002\u5B58\u5728\u672A\u77E5\u4FE1\u606F\u65F6\u63D0\u51FA\u660E\u786E\u95EE\u9898\u3002",
|
|
1945
|
+
"\u68C0\u67E5\u89C4\u683C\u7684\u529F\u80FD\u8FB9\u754C\u3001\u5F02\u5E38\u573A\u666F\u3001\u6570\u636E\u7EA6\u675F\u548C\u9A8C\u6536\u6807\u51C6\u3002\u4EC5\u8BE2\u95EE\u5F71\u54CD\u8BBE\u8BA1\u548C\u9A8C\u8BC1\u7684\u5173\u952E\u95EE\u9898\uFF0C\u6574\u4E2A\u6F84\u6E05\u4F1A\u8BDD\u6700\u591A 5 \u4E2A\u95EE\u9898\u3002\u8BFB\u53D6\u5DF2\u6709\u7B54\u590D\uFF0C\u4FDD\u7559\u9700\u6C42 ID\uFF0C\u628A\u5DF2\u786E\u8BA4\u7684\u51B3\u7B56\u5199\u56DE\u5B8C\u6574\u9700\u6C42\u89C4\u683C\u3002",
|
|
1946
|
+
"\u72EC\u7ACB\u68C0\u67E5\u89C4\u683C\u7684\u5B8C\u6574\u6027\u3001\u6B67\u4E49\u548C\u53EF\u9A8C\u8BC1\u6027\u3002",
|
|
1947
|
+
"\u4F9D\u636E\u5DF2\u63A5\u7EB3\u89C4\u683C\u5206\u6790\u73B0\u6709\u4EE3\u7801\uFF0C\u4EA7\u51FA\u6A21\u5757\u3001\u63A5\u53E3\u3001\u8BBE\u8BA1\u51B3\u7B56\u548C\u98CE\u9669\u3002",
|
|
1948
|
+
"\u72EC\u7ACB\u68C0\u67E5\u5DE5\u7A0B\u8BBE\u8BA1\u662F\u5426\u6EE1\u8DB3\u9700\u6C42\uFF0C\u5B9A\u4F4D\u5177\u4F53\u95EE\u9898\u3002",
|
|
1949
|
+
"\u62C6\u89E3\u5B9E\u73B0\u4EFB\u52A1\u3002\u6BCF\u9879\u4EFB\u52A1\u5305\u542B\u552F\u4E00 ID\u3001\u4F9D\u8D56\u548C\u9A8C\u6536\u6761\u4EF6\u3002",
|
|
1950
|
+
"\u68C0\u67E5\u4EFB\u52A1\u8986\u76D6\u3001\u4F9D\u8D56\u548C\u9A8C\u6536\u6761\u4EF6\u3002",
|
|
1951
|
+
"\u6309\u5DF2\u63A5\u7EB3\u4EFB\u52A1\u6539\u52A8\u4EE3\u7801\uFF0C\u8FD0\u884C\u76F8\u5173\u6D4B\u8BD5\u5E76\u8BB0\u5F55\u5B9E\u73B0\u8BF4\u660E\u3002",
|
|
1952
|
+
"\u72EC\u7ACB\u68C0\u67E5\u8865\u4E01\u4E0E\u89C4\u683C\u3001\u4EFB\u52A1\u3001\u6D4B\u8BD5\u8986\u76D6\u662F\u5426\u4E00\u81F4\u3002",
|
|
1953
|
+
"\u6838\u5BF9\u9700\u6C42\u3001\u4EFB\u52A1\u3001\u4EE3\u7801\u4E0E\u9A8C\u8BC1\u8BC1\u636E\uFF0C\u4EA7\u51FA\u5BF9\u9F50\u62A5\u544A\u3002",
|
|
1954
|
+
"\u590D\u6838\u5BF9\u9F50\u62A5\u544A\uFF0C\u786E\u8BA4\u6CA1\u6709\u9057\u6F0F\u9700\u6C42\u548C\u8BC1\u636E\u3002"
|
|
1955
|
+
];
|
|
1956
|
+
var canonicalSources = /* @__PURE__ */ new Map();
|
|
1957
|
+
for (const source of workflowSources) {
|
|
1958
|
+
canonicalSources.set(source, source);
|
|
1959
|
+
if (messages6[source]) canonicalSources.set(messages6[source], source);
|
|
1960
|
+
if (englishMessages[source]) canonicalSources.set(englishMessages[source], source);
|
|
1961
|
+
}
|
|
1962
|
+
function workflowText(text) {
|
|
1963
|
+
const source = canonicalSources.get(text);
|
|
1964
|
+
if (!source) return text;
|
|
1965
|
+
return getLocale() === "en" ? englishMessages[source] || messages6[source] || text : source;
|
|
1966
|
+
}
|
|
1967
|
+
|
|
1968
|
+
// apps/web/src/flowSelectors.ts
|
|
1969
|
+
var executionLabels = {
|
|
1970
|
+
pending: "\u5F85\u6267\u884C",
|
|
1971
|
+
starting: "\u542F\u52A8\u4E2D",
|
|
1972
|
+
running: "\u8FD0\u884C\u4E2D",
|
|
1973
|
+
waiting_interaction: "\u5F85\u4EA4\u4E92",
|
|
1974
|
+
completed: "\u5DF2\u7ED3\u675F",
|
|
1975
|
+
failed: "\u5931\u8D25",
|
|
1976
|
+
cancelled: "\u5DF2\u505C\u6B62",
|
|
1977
|
+
reconciling: "\u5F85\u6838\u5BF9"
|
|
1978
|
+
};
|
|
1979
|
+
var gateLabels = { unchecked: "\u5F85\u68C0\u67E5", passed: "\u901A\u8FC7", blocked: "\u963B\u585E", stale: "\u8FC7\u671F" };
|
|
1980
|
+
function requiresHumanAcceptance(definition) {
|
|
1981
|
+
return !!definition?.requireAcceptance || definition?.type === "human";
|
|
1982
|
+
}
|
|
1983
|
+
function getStepStatus(node, definition) {
|
|
1984
|
+
const human = requiresHumanAcceptance(definition || node);
|
|
1985
|
+
return {
|
|
1986
|
+
execution: { label: t("\u6267\u884C"), value: t(executionLabels[node.execution]), raw: node.execution, tone: node.execution === "failed" ? "danger" : ["waiting_interaction", "reconciling"].includes(node.execution) ? "warning" : "neutral" },
|
|
1987
|
+
gate: { label: t("\u95E8\u7981"), value: t(gateLabels[node.gate]), raw: node.gate, tone: node.gate === "passed" ? "success" : node.gate === "blocked" ? "danger" : node.gate === "stale" ? "warning" : "neutral" },
|
|
1988
|
+
freshness: { label: t("\u65B0\u9C9C\u5EA6"), value: node.freshness === "fresh" ? t("\u5F53\u524D\u6709\u6548") : t("\u4E0A\u6E38\u5DF2\u53D8\u66F4"), raw: node.freshness, tone: node.freshness === "fresh" ? "neutral" : "warning" },
|
|
1989
|
+
acceptance: { label: t("\u63A5\u7EB3"), value: human ? node.acceptance === "accepted" ? t("\u4EBA\u5DE5\u5DF2\u63A5\u7EB3") : t("\u5F85\u4EBA\u5DE5\u63A5\u7EB3") : node.acceptance === "accepted" ? t("\u7CFB\u7EDF\u5DF2\u786E\u8BA4") : t("\u65E0\u72EC\u7ACB\u63A5\u7EB3\u52A8\u4F5C"), raw: node.acceptance, tone: human && node.acceptance !== "accepted" ? "warning" : node.acceptance === "accepted" ? "success" : "neutral" },
|
|
1990
|
+
effectivelyPassed: node.execution === "completed" && node.gate === "passed" && node.freshness === "fresh" && (!human || node.acceptance === "accepted")
|
|
1991
|
+
};
|
|
1992
|
+
}
|
|
1993
|
+
function selectCurrentNode(run, nodes) {
|
|
1994
|
+
if (!run) return void 0;
|
|
1995
|
+
const ordered = run.definition.nodes.map((definition) => nodes.find((node) => node.workflowRunId === run.id && node.nodeId === definition.id)).filter((node) => !!node);
|
|
1996
|
+
const priority = [["waiting_interaction"], ["reconciling"], ["starting", "running"], ["failed", "cancelled"]];
|
|
1997
|
+
for (const states of priority) {
|
|
1998
|
+
const node = ordered.find((node2) => states.includes(node2.execution));
|
|
1999
|
+
if (node) return node;
|
|
2000
|
+
}
|
|
2001
|
+
return ordered.find((node) => node.freshness === "stale") || ordered.find((node) => node.execution === "pending") || ordered.find((node) => !getStepStatus(node, run.definition.nodes.find((definition) => definition.id === node.nodeId)).effectivelyPassed) || ordered.at(-1);
|
|
2002
|
+
}
|
|
2003
|
+
|
|
2004
|
+
// apps/web/src/MarkdownView.tsx
|
|
2005
|
+
var import_react2 = require("react");
|
|
2006
|
+
|
|
2007
|
+
// apps/web/src/review-model.ts
|
|
2008
|
+
function safeMarkdownHref(href) {
|
|
2009
|
+
const value = href.trim();
|
|
2010
|
+
if (/^(?:https?:\/\/|mailto:|#)/i.test(value) && !/[\u0000-\u0020\u007f]/.test(value)) return value;
|
|
2011
|
+
return void 0;
|
|
2012
|
+
}
|
|
2013
|
+
|
|
2014
|
+
// apps/web/src/MarkdownView.tsx
|
|
2015
|
+
var import_jsx_runtime = require("react/jsx-runtime");
|
|
2016
|
+
function inline(text) {
|
|
2017
|
+
const token = /(`[^`]+`|\*\*[^*]+\*\*|__[^_]+__|\*[^*]+\*|!?\[[^\]]+\]\([^)]+\))/g;
|
|
2018
|
+
const output = [];
|
|
2019
|
+
let offset = 0, match;
|
|
2020
|
+
while (match = token.exec(text)) {
|
|
2021
|
+
output.push(text.slice(offset, match.index));
|
|
2022
|
+
const value = match[0], key = match.index;
|
|
2023
|
+
if (value.startsWith("`")) output.push(/* @__PURE__ */ (0, import_jsx_runtime.jsx)("code", { children: value.slice(1, -1) }, key));
|
|
2024
|
+
else if (value.startsWith("**") || value.startsWith("__")) output.push(/* @__PURE__ */ (0, import_jsx_runtime.jsx)("strong", { children: value.slice(2, -2) }, key));
|
|
2025
|
+
else if (value.startsWith("*")) output.push(/* @__PURE__ */ (0, import_jsx_runtime.jsx)("em", { children: value.slice(1, -1) }, key));
|
|
2026
|
+
else {
|
|
2027
|
+
const link = /^(!?)\[([^\]]+)\]\(([^)]+)\)$/.exec(value);
|
|
2028
|
+
const href = safeMarkdownHref(link[3]);
|
|
2029
|
+
output.push(href && !link[1] ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("a", { href, target: href.startsWith("#") ? void 0 : "_blank", rel: "noreferrer", children: link[2] }, key) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react2.Fragment, { children: link[1] ? t("[\u56FE\u7247\uFF1A{value0}]", { value0: link[2] }) : link[2] }, key));
|
|
2030
|
+
}
|
|
2031
|
+
offset = token.lastIndex;
|
|
2032
|
+
}
|
|
2033
|
+
output.push(text.slice(offset));
|
|
2034
|
+
return output;
|
|
2035
|
+
}
|
|
2036
|
+
function MarkdownView({ content, idPrefix = "document", onSelectText }) {
|
|
2037
|
+
const imagePlaceholder = t("[\u56FE\u7247\uFF1A{value0}]", { value0: "" });
|
|
2038
|
+
const parsed = (0, import_react2.useMemo)(() => {
|
|
2039
|
+
const blocks = [], headings = [];
|
|
2040
|
+
const lines = content.replace(/\r\n/g, "\n").split("\n");
|
|
2041
|
+
let i = 0;
|
|
2042
|
+
const isBoundary = (line) => /^(?:\s*$|#{1,6}\s|```|~~~|\s*[-*+]\s|\s*\d+\.\s|>\s?|\s*(?:---+|\*\*\*+)\s*$)/.test(line);
|
|
2043
|
+
while (i < lines.length) {
|
|
2044
|
+
const start = i, line = lines[i];
|
|
2045
|
+
if (!line.trim()) {
|
|
2046
|
+
i++;
|
|
2047
|
+
continue;
|
|
2048
|
+
}
|
|
2049
|
+
const fence = /^\s*(`{3,}|~{3,})(.*)$/.exec(line);
|
|
2050
|
+
if (fence) {
|
|
2051
|
+
i++;
|
|
2052
|
+
const code = [];
|
|
2053
|
+
while (i < lines.length && !lines[i].trimStart().startsWith(fence[1])) code.push(lines[i++]);
|
|
2054
|
+
i++;
|
|
2055
|
+
blocks.push(/* @__PURE__ */ (0, import_jsx_runtime.jsx)("pre", { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("code", { children: code.join("\n") }) }, start));
|
|
2056
|
+
continue;
|
|
2057
|
+
}
|
|
2058
|
+
const heading = /^(#{1,6})\s+(.+?)\s*#*\s*$/.exec(line);
|
|
2059
|
+
if (heading) {
|
|
2060
|
+
const depth = heading[1].length, id = `${idPrefix}-heading-${headings.length}`;
|
|
2061
|
+
headings.push({ id, text: heading[2], depth });
|
|
2062
|
+
const Tag = `h${depth}`;
|
|
2063
|
+
blocks.push(/* @__PURE__ */ (0, import_jsx_runtime.jsx)(Tag, { id, tabIndex: -1, children: inline(heading[2]) }, start));
|
|
2064
|
+
i++;
|
|
2065
|
+
continue;
|
|
2066
|
+
}
|
|
2067
|
+
if (/^\s*(?:---+|\*\*\*+)\s*$/.test(line)) {
|
|
2068
|
+
blocks.push(/* @__PURE__ */ (0, import_jsx_runtime.jsx)("hr", {}, start));
|
|
2069
|
+
i++;
|
|
2070
|
+
continue;
|
|
2071
|
+
}
|
|
2072
|
+
if (/^>/.test(line)) {
|
|
2073
|
+
const quote = [];
|
|
2074
|
+
while (i < lines.length && /^>/.test(lines[i])) quote.push(lines[i++].replace(/^>\s?/, ""));
|
|
2075
|
+
blocks.push(/* @__PURE__ */ (0, import_jsx_runtime.jsx)("blockquote", { children: inline(quote.join("\n")) }, start));
|
|
2076
|
+
continue;
|
|
2077
|
+
}
|
|
2078
|
+
const list = /^\s*(?:([-*+])|(\d+)\.)\s+(.+)$/.exec(line);
|
|
2079
|
+
if (list) {
|
|
2080
|
+
const ordered = !!list[2], items = [];
|
|
2081
|
+
while (i < lines.length) {
|
|
2082
|
+
const item = /^\s*(?:([-*+])|(\d+)\.)\s+(.+)$/.exec(lines[i]);
|
|
2083
|
+
if (!item || !!item[2] !== ordered) break;
|
|
2084
|
+
items.push(/* @__PURE__ */ (0, import_jsx_runtime.jsx)("li", { children: inline(item[3]) }, i));
|
|
2085
|
+
i++;
|
|
2086
|
+
}
|
|
2087
|
+
blocks.push(ordered ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("ol", { start: Number(list[2]), children: items }, start) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)("ul", { children: items }, start));
|
|
2088
|
+
continue;
|
|
2089
|
+
}
|
|
2090
|
+
if (line.includes("|") && i + 1 < lines.length && /^\s*\|?\s*:?-{3,}/.test(lines[i + 1])) {
|
|
2091
|
+
const cells = (value) => value.trim().replace(/^\||\|$/g, "").split("|").map((value2) => value2.trim());
|
|
2092
|
+
const header = cells(line);
|
|
2093
|
+
i += 2;
|
|
2094
|
+
const rows = [];
|
|
2095
|
+
while (i < lines.length && lines[i].includes("|") && lines[i].trim()) rows.push(cells(lines[i++]));
|
|
2096
|
+
blocks.push(/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "markdown-table-scroll", children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("table", { children: [
|
|
2097
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("thead", { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("tr", { children: header.map((cell, n) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)("th", { children: inline(cell) }, n)) }) }),
|
|
2098
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("tbody", { children: rows.map((row, n) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)("tr", { children: row.map((cell, c) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)("td", { children: inline(cell) }, c)) }, n)) })
|
|
2099
|
+
] }) }, start));
|
|
2100
|
+
continue;
|
|
2101
|
+
}
|
|
2102
|
+
const paragraph = [line];
|
|
2103
|
+
i++;
|
|
2104
|
+
while (i < lines.length && !isBoundary(lines[i])) paragraph.push(lines[i++]);
|
|
2105
|
+
blocks.push(/* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { children: inline(paragraph.join("\n")) }, start));
|
|
2106
|
+
}
|
|
2107
|
+
return { blocks, headings };
|
|
2108
|
+
}, [content, idPrefix, imagePlaceholder]);
|
|
2109
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "markdown-layout", children: [
|
|
2110
|
+
parsed.headings.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("nav", { className: "markdown-toc", "aria-label": t("\u6587\u6863\u76EE\u5F55"), children: [
|
|
2111
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("strong", { children: t("\u76EE\u5F55") }),
|
|
2112
|
+
parsed.headings.map((heading) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)("a", { href: `#${heading.id}`, style: { paddingInlineStart: `${Math.min(heading.depth - 1, 3) * 10}px` }, children: heading.text }, heading.id))
|
|
2113
|
+
] }),
|
|
2114
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("article", { className: "markdown-document", "aria-label": t("Markdown \u9884\u89C8"), onMouseUp: () => {
|
|
2115
|
+
const selection = window.getSelection();
|
|
2116
|
+
if (selection && selection.toString()) onSelectText?.(selection.toString());
|
|
2117
|
+
}, children: parsed.blocks })
|
|
2118
|
+
] });
|
|
2119
|
+
}
|
|
2120
|
+
|
|
2121
|
+
// apps/web/src/AutomationControls.tsx
|
|
2122
|
+
var import_react3 = require("react");
|
|
2123
|
+
var import_jsx_runtime2 = require("react/jsx-runtime");
|
|
2124
|
+
function automationReason(reason) {
|
|
2125
|
+
const labels2 = { completed: "\u68C0\u67E5\u5DF2\u901A\u8FC7", workflow_finished: "\u68C0\u67E5\u5DF2\u901A\u8FC7", round_limit: "\u4FEE\u8BA2\u8F6E\u6570\u5DF2\u7528\u5B8C", no_progress: "\u8FDE\u7EED\u65E0\u8FDB\u5C55", input_stale: "\u8F93\u5165\u5DF2\u53D8\u5316", candidate_drift: "\u5019\u9009\u4EE3\u7801\u5DF2\u53D8\u5316", permission_denied: "\u6388\u6743\u88AB\u62D2\u7EDD", execution_unknown: "\u539F\u6267\u884C\u4ECD\u5F85\u6838\u5BF9", budget_exhausted: "\u6267\u884C\u9884\u7B97\u5DF2\u7528\u5B8C", user_cancelled: "\u7528\u6237\u8BF7\u6C42\u505C\u6B62", unrepairable: "\u9700\u8981\u4EBA\u5DE5\u5904\u7406", waiting_for_input: "\u6B63\u5728\u7B49\u5F85\u6F84\u6E05\u6216\u6388\u6743", human_action_required: "\u7B49\u5F85\u4EBA\u5DE5\u63A5\u7EB3", artifact_acceptance_required: "\u7B49\u5F85\u4EBA\u5DE5\u63A5\u7EB3", explicit_retry_required: "\u9700\u8981\u660E\u786E\u91CD\u8BD5", gate_blocked: "\u5DE5\u7A0B\u68C0\u67E5\u672A\u901A\u8FC7", gate_unchecked: "\u5DE5\u7A0B\u6761\u4EF6\u5F85\u786E\u8BA4", readiness_unknown: "\u5DE5\u7A0B\u6761\u4EF6\u5F85\u786E\u8BA4", workflow_inactive: "\u6D41\u7A0B\u5C1A\u672A\u6FC0\u6D3B", automation_inactive: "\u5DF2\u6682\u505C", node_missing: "\u9700\u8981\u4EBA\u5DE5\u5904\u7406", workflow_invalid: "\u9700\u8981\u4EBA\u5DE5\u5904\u7406" };
|
|
2126
|
+
return reason ? t(labels2[reason] || reason) : "";
|
|
2127
|
+
}
|
|
2128
|
+
function AutomationControls({ workflowRun, node, definition, repairs = [], automations = [], disabled, startBlocked, compact = false, onCommand }) {
|
|
2129
|
+
const id = (0, import_react3.useId)(), [autoRepair, setAutoRepair] = (0, import_react3.useState)(false), [maxRounds, setMaxRounds] = (0, import_react3.useState)(2);
|
|
2130
|
+
const repair = repairs.filter((repair2) => repair2.workflowRunId === workflowRun.id).at(-1);
|
|
2131
|
+
const automation = automations.filter((automation2) => automation2.workflowRunId === workflowRun.id).at(-1);
|
|
2132
|
+
const repairActive = repair?.state === "active", automationActive = automation?.state === "active";
|
|
2133
|
+
const nodeActive = !!node && ["starting", "running", "waiting_interaction", "reconciling"].includes(node.execution);
|
|
2134
|
+
const canRepair = !!node && ["agent", "review", "verify"].includes(node.type) && node.gate === "blocked" && node.freshness === "fresh" && !nodeActive && !repairActive && !automationActive;
|
|
2135
|
+
const blocked = disabled || startBlocked || workflowRun.state !== "active";
|
|
2136
|
+
const buttonClass = compact ? "" : "outline-button";
|
|
2137
|
+
return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("details", { className: compact ? "sf-details" : "context-details automation-controls", open: repairActive || automationActive || void 0, children: [
|
|
2138
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)("summary", { children: t("\u81EA\u52A8\u63A8\u8FDB\u4E0E\u6709\u9650\u4FEE\u8BA2") }),
|
|
2139
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("div", { children: [
|
|
2140
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)("p", { className: compact ? "sf-hint" : "run-control-note", children: t("\u81EA\u52A8\u63A8\u8FDB\u8FD0\u884C\u5230\u9700\u8981\u4F60\u63A5\u7EB3\u3001\u6F84\u6E05\u6216\u6388\u6743\u7684\u4F4D\u7F6E\u3002\u81EA\u52A8\u4FEE\u8BA2\u53EA\u5904\u7406\u5F53\u524D\u76EE\u6807\uFF0C\u4FDD\u7559\u4EBA\u5DE5\u63A5\u7EB3\u3002") }),
|
|
2141
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("label", { className: compact ? "sf-checkbox" : "automation-option", children: [
|
|
2142
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)("input", { type: "checkbox", checked: autoRepair, disabled: blocked || automationActive || repairActive, onChange: (event) => setAutoRepair(event.target.checked) }),
|
|
2143
|
+
" ",
|
|
2144
|
+
t("\u63A8\u8FDB\u65F6\u5141\u8BB8\u6709\u9650\u81EA\u52A8\u4FEE\u8BA2")
|
|
2145
|
+
] }),
|
|
2146
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("label", { className: compact ? "sf-field" : "automation-option", htmlFor: id, children: [
|
|
2147
|
+
t("\u6700\u591A\u4FEE\u8BA2\u8F6E\u6570"),
|
|
2148
|
+
" ",
|
|
2149
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("select", { id, value: maxRounds, disabled: blocked || automationActive || repairActive, onChange: (event) => setMaxRounds(Number(event.target.value)), children: [
|
|
2150
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)("option", { value: 1, children: "1" }),
|
|
2151
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)("option", { value: 2, children: "2" })
|
|
2152
|
+
] })
|
|
2153
|
+
] }),
|
|
2154
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("div", { className: compact ? "sf-actions" : "run-actions", children: [
|
|
2155
|
+
automationActive ? /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("button", { type: "button", className: buttonClass, disabled, onClick: () => onCommand("stopAutomation", automation.id), children: t("\u505C\u6B62\u81EA\u52A8\u63A8\u8FDB") }) : /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("button", { type: "button", className: buttonClass, disabled: blocked || nodeActive || repairActive, onClick: () => onCommand("startAutomation", workflowRun.id, { expectedRevision: workflowRun.revision, autoAdvance: true, autoRepair, maxRepairRounds: maxRounds }), children: t("\u8FD0\u884C\u5230\u4E0B\u4E00\u5904\u5F85\u5904\u7406") }),
|
|
2156
|
+
repairActive ? /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("button", { type: "button", className: buttonClass, disabled, onClick: () => onCommand("stopRepair", repair.id), children: t("\u505C\u6B62\u81EA\u52A8\u4FEE\u8BA2") }) : /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("button", { type: "button", className: buttonClass, disabled: blocked || !canRepair, onClick: () => {
|
|
2157
|
+
if (node) onCommand("startRepair", node.id, { expectedRevision: node.revision, maxRounds });
|
|
2158
|
+
}, children: t("\u81EA\u52A8\u4FEE\u8BA2\u5F53\u524D\u4EA7\u7269") })
|
|
2159
|
+
] }),
|
|
2160
|
+
repair && /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("p", { role: "status", children: [
|
|
2161
|
+
t("\u4FEE\u8BA2\u8FDB\u5EA6 {round} / {max}", { round: repair.rounds.length, max: repair.maxRounds }),
|
|
2162
|
+
" \xB7 ",
|
|
2163
|
+
repairActive ? t("\u6B63\u5728\u81EA\u52A8\u4FEE\u8BA2") : automationReason(repair.stopReason) || t("\u5DF2\u6682\u505C")
|
|
2164
|
+
] }),
|
|
2165
|
+
automation && /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("p", { role: "status", children: automationActive ? t("\u6B63\u5728\u81EA\u52A8\u63A8\u8FDB") : automationReason(automation.pauseReason) || (automation.state === "completed" ? t("\u68C0\u67E5\u5DF2\u901A\u8FC7") : t("\u5DF2\u6682\u505C")) })
|
|
2166
|
+
] })
|
|
2167
|
+
] });
|
|
2168
|
+
}
|
|
2169
|
+
|
|
2170
|
+
// apps/web/src/ExecutionFacts.tsx
|
|
2171
|
+
var import_jsx_runtime3 = require("react/jsx-runtime");
|
|
2172
|
+
function executionReason(reason) {
|
|
2173
|
+
const labels2 = {
|
|
2174
|
+
natural_completion: "\u6267\u884C\u81EA\u7136\u7ED3\u675F",
|
|
2175
|
+
step_limit: "\u6B65\u6570\u4E0A\u9650",
|
|
2176
|
+
attempt_limit: "\u6D3E\u53D1\u6B21\u6570\u4E0A\u9650",
|
|
2177
|
+
deadline: "\u6267\u884C\u65F6\u9650\u5DF2\u5230",
|
|
2178
|
+
user_cancelled: "\u7528\u6237\u8BF7\u6C42\u505C\u6B62",
|
|
2179
|
+
permission_denied: "\u6388\u6743\u88AB\u62D2\u7EDD",
|
|
2180
|
+
provider_error: "\u4F9B\u5E94\u5546\u6267\u884C\u9519\u8BEF",
|
|
2181
|
+
input_stale: "\u8F93\u5165\u5DF2\u53D8\u5316",
|
|
2182
|
+
no_progress: "\u8FDE\u7EED\u65E0\u8FDB\u5C55",
|
|
2183
|
+
unknown: "\u539F\u56E0\u672A\u77E5"
|
|
2184
|
+
};
|
|
2185
|
+
return reason ? t(labels2[reason]) : "\u2014";
|
|
2186
|
+
}
|
|
2187
|
+
function usageValue(attempt, meter) {
|
|
2188
|
+
const summary = attempt.usageSummary;
|
|
2189
|
+
const value = summary ? summary[meter] : attempt.usage?.[meter];
|
|
2190
|
+
if (value == null) return t("\u672A\u77E5");
|
|
2191
|
+
const formatted = meter === "costUsd" ? `$${value}` : String(value);
|
|
2192
|
+
return summary?.unknownCounts[meter] ? t("{value} + {count} \u9879\u672A\u77E5", { value: formatted, count: summary.unknownCounts[meter] }) : formatted;
|
|
2193
|
+
}
|
|
2194
|
+
function ExecutionFacts({ attempt, compact = false }) {
|
|
2195
|
+
const factClass = compact ? "sf-run-facts" : "execution-facts";
|
|
2196
|
+
const detailsClass = compact ? "sf-details" : "context-details";
|
|
2197
|
+
const policy = attempt.policy;
|
|
2198
|
+
const enforcement = policy?.capabilities?.details?.stepLimit.enforcement || policy?.capabilities?.stepLimit;
|
|
2199
|
+
return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(import_jsx_runtime3.Fragment, { children: [
|
|
2200
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("dl", { className: factClass, "aria-label": t("\u6267\u884C\u63A7\u5236\u4E0E\u7528\u91CF"), children: [
|
|
2201
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { children: [
|
|
2202
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)("dt", { children: t("\u8F93\u5165 Token") }),
|
|
2203
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)("dd", { children: usageValue(attempt, "inputTokens") })
|
|
2204
|
+
] }),
|
|
2205
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { children: [
|
|
2206
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)("dt", { children: t("\u8F93\u51FA Token") }),
|
|
2207
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)("dd", { children: usageValue(attempt, "outputTokens") })
|
|
2208
|
+
] }),
|
|
2209
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { children: [
|
|
2210
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)("dt", { children: t("\u5B9E\u9645\u8D39\u7528") }),
|
|
2211
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)("dd", { children: attempt.target.backend === "sandbox" ? t("\u4E0D\u8C03\u7528 API") : usageValue(attempt, "costUsd") })
|
|
2212
|
+
] }),
|
|
2213
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { children: [
|
|
2214
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)("dt", { children: t("\u6267\u884C\u622A\u6B62\u65F6\u95F4") }),
|
|
2215
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)("dd", { children: attempt.deadlineAt ? localizedDate(attempt.deadlineAt) : t("\u5386\u53F2\u8BB0\u5F55\u672A\u63D0\u4F9B") })
|
|
2216
|
+
] }),
|
|
2217
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { children: [
|
|
2218
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)("dt", { children: t("\u505C\u6B62\u539F\u56E0") }),
|
|
2219
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)("dd", { children: executionReason(attempt.stopReason) })
|
|
2220
|
+
] }),
|
|
2221
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { children: [
|
|
2222
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)("dt", { children: t("\u505C\u6B62\u786E\u8BA4") }),
|
|
2223
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)("dd", { children: attempt.stopRequestedAt ? attempt.terminalConfirmedAt ? t("\u5DF2\u786E\u8BA4\u7EC8\u6001") : t("\u6B63\u5728\u8BF7\u6C42\u505C\u6B62") : attempt.terminalConfirmedAt ? t("\u5DF2\u786E\u8BA4\u7EC8\u6001") : "\u2014" })
|
|
2224
|
+
] }),
|
|
2225
|
+
policy && /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(import_jsx_runtime3.Fragment, { children: [
|
|
2226
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { children: [
|
|
2227
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)("dt", { children: t("\u5355\u6B21\u6267\u884C\u6B65\u6570") }),
|
|
2228
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("dd", { children: [
|
|
2229
|
+
policy.limits.maxSteps,
|
|
2230
|
+
" \xB7 ",
|
|
2231
|
+
enforcement === "native" ? t("\u539F\u751F\u4E0A\u9650") : enforcement === "observed" ? t("\u89C2\u6D4B\u4FDD\u62A4") : t("\u80FD\u529B\u672A\u77E5")
|
|
2232
|
+
] })
|
|
2233
|
+
] }),
|
|
2234
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { children: [
|
|
2235
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)("dt", { children: t("\u7D2F\u8BA1\u6D3E\u53D1\u4E0A\u9650") }),
|
|
2236
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)("dd", { children: t("\u672C\u5C1D\u8BD5 {attempt} \xB7 \u672C\u6D41\u7A0B {run}", { attempt: policy.limits.maxDispatches, run: policy.limits.maxRunDispatches }) })
|
|
2237
|
+
] })
|
|
2238
|
+
] })
|
|
2239
|
+
] }),
|
|
2240
|
+
attempt.usageSummary?.completeness !== "complete" && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("p", { className: compact ? "sf-hint" : "run-control-note", children: t("\u7528\u91CF\u53EF\u80FD\u4E0D\u5B8C\u6574\uFF0C\u672A\u77E5\u9879\u6CA1\u6709\u6309\u96F6\u8BA1\u7B97\u3002") }),
|
|
2241
|
+
enforcement === "observed" && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("p", { className: compact ? "sf-hint" : "run-control-note", children: t("\u89C2\u6D4B\u4FDD\u62A4\u4F1A\u8BF7\u6C42\u505C\u6B62\uFF0C\u4E0D\u80FD\u4FDD\u8BC1\u8FD0\u884C\u6070\u597D\u505C\u5728\u6307\u5B9A\u6B65\u6570\u3002") }),
|
|
2242
|
+
attempt.stopRequestedAt && !attempt.terminalConfirmedAt && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("p", { role: "status", className: compact ? "sf-hint" : "run-control-note", children: t("\u505C\u6B62\u8BF7\u6C42\u5C1A\u672A\u786E\u8BA4\uFF1B\u8BF7\u6838\u5BF9\u539F\u6267\u884C\uFF0C\u4E0D\u80FD\u636E\u6B64\u5F00\u59CB\u65B0\u7684\u5199\u5165\u3002") }),
|
|
2243
|
+
attempt.contextManifest && /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("details", { className: detailsClass, children: [
|
|
2244
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)("summary", { children: t("\u672C\u6B21\u4E0A\u4E0B\u6587\u6E05\u5355") }),
|
|
2245
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { children: [
|
|
2246
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)("p", { children: t("\u5B8C\u6574\u63D0\u793A\u8BCD {bytes} \u5B57\u8282", { bytes: attempt.contextManifest.promptBytes ?? t("\u672A\u77E5") }) }),
|
|
2247
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)("ul", { children: attempt.contextManifest.entries.map((entry) => /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("li", { children: [
|
|
2248
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)("strong", { children: entry.sourceId }),
|
|
2249
|
+
" \xB7 ",
|
|
2250
|
+
t("{bytes} \u5B57\u8282", { bytes: entry.bytes }),
|
|
2251
|
+
" \xB7 ",
|
|
2252
|
+
entry.required ? t("\u5FC5\u9700\u6750\u6599") : t("\u8F85\u52A9\u6750\u6599"),
|
|
2253
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)("br", {}),
|
|
2254
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)("code", { style: { overflowWrap: "anywhere", wordBreak: "break-word" }, children: entry.contentHash })
|
|
2255
|
+
] }, entry.sourceId)) })
|
|
2256
|
+
] })
|
|
2257
|
+
] })
|
|
2258
|
+
] });
|
|
2259
|
+
}
|
|
2260
|
+
|
|
2261
|
+
// apps/web/src/VerificationRecovery.tsx
|
|
2262
|
+
var import_jsx_runtime4 = require("react/jsx-runtime");
|
|
2263
|
+
function VerificationRecovery({ disabled, compact = false, onConfirm }) {
|
|
2264
|
+
const confirm = () => {
|
|
2265
|
+
const reason = t("\u6211\u5DF2\u786E\u8BA4\u672C\u673A\u9A8C\u8BC1\u547D\u4EE4\u53CA\u5176\u5B50\u8FDB\u7A0B\u5DF2\u5168\u90E8\u7ED3\u675F\u3002");
|
|
2266
|
+
if (window.confirm(t("\u53EA\u6709\u786E\u8BA4\u672C\u673A\u9A8C\u8BC1\u547D\u4EE4\u53CA\u5176\u5B50\u8FDB\u7A0B\u5168\u90E8\u7ED3\u675F\u540E\uFF0C\u624D\u53EF\u89E3\u9664\u6B64\u963B\u585E\u3002\u662F\u5426\u786E\u8BA4\uFF1F"))) onConfirm(reason);
|
|
2267
|
+
};
|
|
2268
|
+
return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: compact ? "sf-inline-error" : "verification-recovery", children: [
|
|
2269
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)("p", { children: t("\u9A8C\u8BC1\u8FDB\u7A0B\u7684\u7EC8\u6001\u5C1A\u672A\u786E\u8BA4\u3002\u8BF7\u5148\u68C0\u67E5\u672C\u673A\u8FDB\u7A0B\uFF1B\u786E\u8BA4\u524D\u4E0D\u4F1A\u5F00\u59CB\u65B0\u7684\u5199\u5165\u6216\u63A5\u7EB3\u3002") }),
|
|
2270
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)("button", { type: "button", className: compact ? "" : "outline-button", disabled, onClick: confirm, children: t("\u786E\u8BA4\u9A8C\u8BC1\u8FDB\u7A0B\u5DF2\u5168\u90E8\u7ED3\u675F") })
|
|
2271
|
+
] });
|
|
2272
|
+
}
|
|
2273
|
+
|
|
2274
|
+
// plugins/deepseek-specflow/package.json
|
|
2275
|
+
var package_default = {
|
|
2276
|
+
name: "dsh-plugin-specflow",
|
|
2277
|
+
version: "0.1.1",
|
|
2278
|
+
description: "Specflow \u5DE5\u7A0B\u6D41\u7A0B\u5DE5\u4F5C\u53F0\uFF1A\u9700\u6C42\u3001\u89C4\u683C\u3001\u4EFB\u52A1\u3001\u72EC\u7ACB\u590D\u6838\u4E0E\u4EBA\u5DE5\u9A8C\u6536",
|
|
2279
|
+
type: "module",
|
|
2280
|
+
main: "./dist/index.mjs",
|
|
2281
|
+
exports: {
|
|
2282
|
+
".": "./dist/index.mjs",
|
|
2283
|
+
"./client": "./dist/client.js",
|
|
2284
|
+
"./package.json": "./package.json"
|
|
2285
|
+
},
|
|
2286
|
+
files: [
|
|
2287
|
+
"dist/index.mjs",
|
|
2288
|
+
"dist/client.js",
|
|
2289
|
+
"dist/ZOD_LICENSE",
|
|
2290
|
+
"dist/build-info.json",
|
|
2291
|
+
"cordis.patch.yml",
|
|
2292
|
+
"LICENSE",
|
|
2293
|
+
"THIRD_PARTY_NOTICES.md",
|
|
2294
|
+
"README.md"
|
|
2295
|
+
],
|
|
2296
|
+
license: "Apache-2.0",
|
|
2297
|
+
author: "SpecFlow contributors",
|
|
2298
|
+
repository: {
|
|
2299
|
+
type: "git",
|
|
2300
|
+
url: "git+https://github.com/HuYellow/specflow.git",
|
|
2301
|
+
directory: "plugins/deepseek-specflow"
|
|
2302
|
+
},
|
|
2303
|
+
keywords: [
|
|
2304
|
+
"dsh-plugin",
|
|
2305
|
+
"specflow",
|
|
2306
|
+
"spec-driven-development",
|
|
2307
|
+
"workflow"
|
|
2308
|
+
],
|
|
2309
|
+
engines: {
|
|
2310
|
+
node: ">=24",
|
|
2311
|
+
dsh: "0.2.1-rc.2"
|
|
2312
|
+
},
|
|
2313
|
+
publishConfig: {
|
|
2314
|
+
access: "public",
|
|
2315
|
+
registry: "https://registry.npmjs.org/"
|
|
2316
|
+
},
|
|
2317
|
+
dsh: {
|
|
2318
|
+
bundle: {
|
|
2319
|
+
patch: "./cordis.patch.yml"
|
|
2320
|
+
},
|
|
2321
|
+
client: {
|
|
2322
|
+
platform: "web",
|
|
2323
|
+
inject: [
|
|
2324
|
+
"@deepseek-ai/dsh-client-connection",
|
|
2325
|
+
"@deepseek-ai/dsh-client-ui-renderer",
|
|
2326
|
+
"@deepseek-ai/dsh-client-ui-sidebar-right",
|
|
2327
|
+
"@deepseek-ai/dsh-client-ui-session"
|
|
2328
|
+
]
|
|
2329
|
+
}
|
|
2330
|
+
},
|
|
2331
|
+
scripts: {
|
|
2332
|
+
build: "node ../../scripts/toolchain.mjs dsh-build",
|
|
2333
|
+
prepack: "node ../../scripts/toolchain.mjs dsh-build",
|
|
2334
|
+
typecheck: "node ../../scripts/toolchain.mjs dsh-typecheck"
|
|
2335
|
+
},
|
|
2336
|
+
peerDependencies: {
|
|
2337
|
+
"@deepseek-ai/cordis": "~4.0.5",
|
|
2338
|
+
"@deepseek-ai/dsh-agent": "0.2.1-rc.2",
|
|
2339
|
+
"@deepseek-ai/dsh-client-connection": "0.2.1-rc.2",
|
|
2340
|
+
"@deepseek-ai/dsh-client-ui-session": "0.2.1-rc.2",
|
|
2341
|
+
"@deepseek-ai/dsh-client-ui-sidebar-right": "0.2.1-rc.2",
|
|
2342
|
+
"@deepseek-ai/dsh-home-paths": "0.2.1-rc.2",
|
|
2343
|
+
"@deepseek-ai/dsh-tools": "0.2.1-rc.2",
|
|
2344
|
+
"@deepseek-ai/schemastery": "~3.18.5",
|
|
2345
|
+
react: "^18.3.1"
|
|
2346
|
+
},
|
|
2347
|
+
devDependencies: {
|
|
2348
|
+
"@deepseek-ai/dsh-client-ui-renderer": "0.2.1-rc.2",
|
|
2349
|
+
"@deepseek-ai/dsh-client-ui-slots": "0.2.1-rc.2",
|
|
2350
|
+
"@deepseek-ai/dsh-util-values": "0.2.1-rc.2",
|
|
2351
|
+
"@types/react": "^18.3.0",
|
|
2352
|
+
"react-dom": "18.3.1"
|
|
2353
|
+
}
|
|
2354
|
+
};
|
|
2355
|
+
|
|
2356
|
+
// plugins/deepseek-specflow/src/protocol.ts
|
|
2357
|
+
var RPC_CHANNEL = "/api";
|
|
2358
|
+
var READ_ENDPOINT = "specflow/read";
|
|
2359
|
+
var COMMAND_ENDPOINT = "specflow/command";
|
|
2360
|
+
var PLUGIN_VERSION = package_default.version;
|
|
2361
|
+
async function readSpecflow(connection, request, signal) {
|
|
2362
|
+
const result = await connection.rpc.call(RPC_CHANNEL, READ_ENDPOINT, request, signal);
|
|
2363
|
+
if (!result.ok) throw Object.assign(new Error(result.error.message), result.error);
|
|
2364
|
+
return result.value;
|
|
2365
|
+
}
|
|
2366
|
+
async function commandSpecflow(connection, request, signal) {
|
|
2367
|
+
const result = await connection.rpc.call(RPC_CHANNEL, COMMAND_ENDPOINT, request, signal);
|
|
2368
|
+
if (!result.ok) throw Object.assign(new Error(result.error.message), result.error);
|
|
2369
|
+
return result.value;
|
|
2370
|
+
}
|
|
2371
|
+
|
|
2372
|
+
// inline-styles:C:\Users\huyel\Documents\Codex\specflow\plugins\deepseek-specflow\src\client.css
|
|
2373
|
+
var client_default = ".sf-workbench{--sf-paper:#f5f6f2;--sf-panel:#fffefb;--sf-ink:#243c38;--sf-muted:#63766a;--sf-line:#dce4d9;--sf-accent:#0b4940;--sf-soft:#e6eee3;--sf-warning:#846128;--sf-danger:#a14638;box-sizing:border-box;display:flex;flex-direction:column;height:100%;min-height:0;color:var(--sf-ink);background:var(--sf-paper);font:13px/1.65 'Segoe UI','Microsoft YaHei UI','Microsoft YaHei',sans-serif;container-type:inline-size}\n.sf-workbench *{box-sizing:border-box}.sf-workbench button,.sf-workbench input,.sf-workbench textarea,.sf-workbench select{font:inherit;color:inherit}.sf-workbench button{cursor:pointer;border:1px solid var(--sf-line);border-radius:5px;padding:7px 10px;background:var(--sf-panel);line-height:1.45}.sf-workbench button:disabled{opacity:.48;cursor:not-allowed}.sf-workbench button:hover:not(:disabled){background:var(--sf-soft);border-color:#98b6a1}.sf-workbench :is(button,input,textarea,select,summary,a):focus-visible{outline:2px solid #338c78;outline-offset:3px}.sf-workbench :is(input,textarea,select){min-width:0;width:100%;border:1px solid var(--sf-line);border-radius:5px;padding:8px 9px;background:var(--sf-panel)}.sf-workbench textarea{resize:vertical;line-height:1.8}.sf-workbench h2,.sf-workbench h3,.sf-workbench h4,.sf-workbench p{margin:0}.sf-workbench code,.sf-workbench pre{font-family:'Cascadia Code',Consolas,monospace}.sf-workbench pre{font-size:11px;line-height:1.8;white-space:pre-wrap;overflow-wrap:anywhere;margin:9px 0;max-height:520px;overflow:auto}.sf-workbench .sf-primary{color:#fff;background:var(--sf-accent);border-color:var(--sf-accent)}.sf-workbench .sf-primary:hover:not(:disabled){background:#156354;border-color:#156354}.sf-workbench .sf-stop{color:var(--sf-danger);border-color:#d4b7aa}.sf-header{display:flex;align-items:center;justify-content:space-between;padding:15px 17px 12px;border-bottom:1px solid var(--sf-line);flex-shrink:0}.sf-header>div{display:flex;align-items:center;gap:9px}.sf-header strong{font-size:21px;letter-spacing:-.65px;font-weight:600}.sf-header strong>span{color:#bb9150}.sf-brand-mark{display:grid;place-items:center;width:27px;height:27px;border-radius:7px;background:var(--sf-accent);color:white;font-size:17px;font-weight:600}.sf-header .sf-icon-button{width:30px;height:30px;padding:0;font-size:21px;border-color:transparent;background:transparent}.sf-context{padding:8px 17px 14px;flex-shrink:0}.sf-label-row{display:flex;justify-content:space-between;align-items:center;margin:7px 0;color:var(--sf-muted);font-size:11px}.sf-label-row button{border-color:transparent;background:transparent;padding:2px 0;color:var(--sf-accent);font-size:11px}.sf-path{display:block;overflow-wrap:anywhere;font-size:10px;line-height:1.8;color:var(--sf-muted);margin:6px 0}.sf-context>.sf-path{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sf-messages:empty{display:none}.sf-alert{margin:0 14px 12px;padding:11px 12px;border:1px solid #dfbead;background:#fbf0e9;color:var(--sf-danger);font-size:12px;overflow-wrap:anywhere}.sf-alert button{display:block;margin-top:9px;font-size:11px}.sf-notice{padding:0 17px 10px;font-size:11px;color:var(--sf-accent)}.sf-tabs{display:flex;border-block:1px solid var(--sf-line);padding:0 15px;gap:8px;flex-shrink:0}.sf-tabs button{position:relative;flex:1;padding:11px 5px;border:0;border-radius:0;background:transparent;color:var(--sf-muted);font-size:12px}.sf-tabs button.sf-active{color:var(--sf-accent);font-weight:600;box-shadow:inset 0 -2px var(--sf-accent)}.sf-count{display:inline-grid;place-items:center;min-width:16px;height:16px;border-radius:8px;background:#e6d8b9;color:#77551c;margin-left:5px;font-size:10px}.sf-body{min-height:0;overflow:auto;flex:1;padding:17px;scrollbar-width:thin}.sf-item-heading{display:flex;align-items:center;gap:8px;flex-wrap:wrap;padding:0 0 18px;margin-bottom:16px;border-bottom:1px solid var(--sf-line)}.sf-item-heading h2{width:100%;font-size:19px;line-height:1.6;font-weight:600;overflow-wrap:anywhere;letter-spacing:-.3px}.sf-item-heading>code{font-size:10px;color:var(--sf-muted);overflow-wrap:anywhere}.sf-badge{display:inline-flex;align-items:center;padding:3px 6px;line-height:1.4;font-size:10px;border-radius:3px;background:var(--sf-soft);color:var(--sf-muted);white-space:nowrap}.sf-state-running,.sf-state-starting{color:var(--sf-accent);background:#dceee5}.sf-state-failed,.sf-state-blocked{background:#f6e2db;color:var(--sf-danger)}.sf-state-accepted,.sf-state-passed,.sf-state-ready{background:#dfeee2;color:#356b48}.sf-state-stale,.sf-state-waiting_interaction,.sf-state-reconciling,.sf-state-candidate{background:#f0e7d3;color:var(--sf-warning)}.sf-section-heading{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:13px}.sf-section-heading h3,.sf-card h3{font-size:14px;font-weight:600}.sf-section-heading p{font-size:11px;color:var(--sf-muted);margin-top:4px}.sf-stages{display:flex;flex-direction:column;gap:4px;margin-bottom:17px}.sf-stages .sf-stage{display:flex;align-items:center;text-align:left;gap:9px;padding:10px 9px;border-color:transparent;background:transparent}.sf-stage>span:nth-child(2){flex:1;min-width:0}.sf-stage strong{display:block;font-size:12px;font-weight:500;overflow-wrap:anywhere}.sf-stage small{display:block;font-size:10px;margin-top:3px;color:var(--sf-muted)}.sf-stage-number{font-size:10px;font-family:Consolas,monospace;color:#83958a;width:19px;flex-shrink:0}.sf-stages .sf-stage.sf-selected{background:var(--sf-soft);border-color:#ccd9c8;box-shadow:inset 3px 0 var(--sf-accent)}.sf-stage.sf-selected .sf-stage-number{color:var(--sf-accent)}.sf-card{padding:15px;border:1px solid var(--sf-line);border-radius:6px;background:var(--sf-panel);margin:0 0 17px}.sf-facts{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin:12px 0 15px}.sf-facts>div{min-width:0}.sf-facts dt{font-size:10px;color:var(--sf-muted)}.sf-facts dd{font-size:11px;margin:3px 0 0;overflow-wrap:anywhere}.sf-field{display:flex;flex-direction:column;gap:7px;font-size:11px;color:var(--sf-muted);margin:11px 0}.sf-actions{display:flex;align-items:center;justify-content:flex-end;gap:8px;flex-wrap:wrap;margin-top:15px}.sf-actions>button{font-size:12px}.sf-inline-error{padding:10px;border-left:2px solid var(--sf-danger);background:#f9ece6;color:var(--sf-danger);font-size:12px;overflow-wrap:anywhere}.sf-blockers{padding:12px 12px 12px 26px;margin:12px 0;background:#f3ecd9;border:1px solid #e0d4b7;border-radius:4px;color:var(--sf-warning);font-size:11px}.sf-blockers li+li{margin-top:7px}.sf-hint{color:var(--sf-muted);font-size:11px;line-height:1.9;margin:9px 0!important}.sf-details{border-block:1px solid var(--sf-line);padding:11px 0;margin:15px 0;font-size:12px}.sf-details summary,.sf-evidence summary{cursor:pointer;font-size:12px;color:var(--sf-muted)}.sf-details>p{margin-top:10px}.sf-preserve{white-space:pre-wrap;overflow-wrap:anywhere;line-height:1.9}.sf-form{padding:15px;margin:0 15px 15px;border:1px solid #bdcfbd;border-radius:6px;background:var(--sf-panel)}.sf-form h3{font-size:14px;margin-bottom:14px}.sf-form>label{display:block;font-size:11px;color:var(--sf-muted);margin:10px 0 5px}.sf-empty{text-align:center;padding:38px 8px 45px}.sf-empty-mark{display:grid;place-items:center;background:var(--sf-soft);color:var(--sf-accent);width:46px;height:46px;border-radius:10px;font-size:27px;margin:0 auto 17px}.sf-empty h3{font-size:16px;line-height:1.7;font-weight:500}.sf-empty p{font-size:12px;color:var(--sf-muted);line-height:1.9;margin:11px auto 0;max-width:300px}.sf-loading{color:var(--sf-muted);font-size:12px;padding:14px 0;line-height:1.9}.sf-footer{display:flex;align-items:center;gap:7px;padding:9px 17px;border-top:1px solid var(--sf-line);font-size:10px;color:var(--sf-muted);flex-shrink:0}.sf-footer>span:last-child{margin-left:auto}.sf-status-dot{width:5px;height:5px;background:#478973;border-radius:50%}.sf-eyebrow{display:block;font-size:10px;letter-spacing:1px;color:#6e9279;margin-bottom:8px}.sf-clarification{border-color:#b9cfb8;background:#f4f8ef}.sf-question{padding-top:15px;margin-top:16px;border-top:1px solid var(--sf-line)}.sf-question label{display:flex;align-items:flex-start;gap:8px;font-size:12px;font-weight:600}.sf-question label>span{font:10px/1.8 Consolas,monospace;color:var(--sf-muted)}.sf-question>p{font-size:11px;line-height:1.9;margin:7px 0 11px;color:var(--sf-muted)}.sf-options{display:flex;flex-direction:column;gap:6px;margin-bottom:10px}.sf-options button{text-align:left;font-size:11px}.sf-options button[aria-pressed=true]{background:#e0eddf;border-color:#83a58b;color:var(--sf-accent)}.sf-clarification>textarea{margin-top:7px}.sf-document-heading{display:flex;align-items:center;gap:9px;flex-wrap:wrap;color:var(--sf-muted);font-size:10px;margin:11px 0}.sf-segmented{display:flex;gap:3px;padding:3px;background:var(--sf-soft);border-radius:5px;margin:16px 0}.sf-segmented button{flex:1;font-size:11px;background:transparent;border-color:transparent}.sf-segmented button[aria-pressed=true]{background:var(--sf-panel);border-color:var(--sf-line);color:var(--sf-accent)}.sf-reading{padding:17px 0}.sf-reading h3{font:600 23px/1.6 Georgia,'Microsoft YaHei',serif;letter-spacing:-.5px}.sf-reading-summary{font-size:13px;line-height:1.95;white-space:pre-wrap;margin:13px 0 22px!important}.sf-reading>section{margin:18px 0;border-top:1px solid var(--sf-line);padding-top:15px}.sf-reading h4{display:flex;gap:10px;font-size:13px;font-weight:600}.sf-reading h4>span{color:var(--sf-muted);font:10px/2 Consolas,monospace}.sf-reading ul{padding-left:18px;margin:10px 0}.sf-reading li{font-size:12px;line-height:1.95;white-space:pre-wrap;overflow-wrap:anywhere;margin:8px 0}.sf-accept-bar{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;border-block:1px solid var(--sf-line);padding:13px 0;margin-top:15px}.sf-accept-bar>span{color:var(--sf-muted);font-size:11px}.sf-accept-bar button{font-size:11px}.sf-finding{padding:12px;border:1px solid var(--sf-line);margin-top:13px}.sf-finding p{margin:9px 0;font-size:12px}.sf-finding code{font-size:10px;color:var(--sf-muted)}.sf-document{line-height:1.9;overflow-wrap:anywhere}.sf-document .markdown-toc{border-left:2px solid var(--sf-line);padding-left:10px;margin:16px 0}.sf-document .markdown-toc>strong{font-size:11px;color:var(--sf-muted)}.sf-document .markdown-toc a{display:block;font-size:11px;line-height:2;color:var(--sf-accent);text-decoration:none}.sf-document h1{font-size:22px;line-height:1.6}.sf-document h2{font-size:19px}.sf-document h3{font-size:16px}.sf-document h4{font-size:14px}.sf-document :is(h1,h2,h3,h4,h5,h6){margin:20px 0 10px}.sf-document p{margin:10px 0;font-size:12px}.sf-document pre,.sf-document blockquote{padding:12px;background:var(--sf-soft);border-radius:4px;margin:11px 0}.sf-document code{font-size:11px}.sf-document :is(ul,ol){padding-left:22px;font-size:12px}.sf-document a{color:var(--sf-accent);text-underline-offset:3px}.sf-document .markdown-table-scroll{overflow:auto}.sf-document table{border-collapse:collapse;font-size:11px;white-space:nowrap}.sf-document :is(td,th){border:1px solid var(--sf-line);padding:7px 9px}.sf-run-facts{margin:10px 0;display:flex;flex-direction:column;gap:10px}.sf-run-facts>div{min-width:0}.sf-run-facts dt{font-size:10px;color:var(--sf-muted)}.sf-run-facts dd{margin:2px 0 0;overflow-wrap:anywhere;font-size:12px}.sf-subheading{font-size:12px;margin:20px 0 12px!important}.sf-evidence{border:1px solid var(--sf-line);padding:11px;margin:8px 0}.sf-evidence summary{display:flex;gap:8px;align-items:center}.sf-checkbox{display:flex;align-items:flex-start;gap:8px;font-size:11px;line-height:1.9;margin-top:18px}.sf-checkbox input{width:14px;flex-shrink:0;margin-top:4px;accent-color:var(--sf-accent)}.sf-diff{background:var(--sf-panel);padding:11px}.sf-document hr{border:0;border-top:1px solid var(--sf-line);margin:18px 0}\n@container (max-width:300px){.sf-body{padding:13px}.sf-header{padding-inline:13px}.sf-context{padding-inline:13px}.sf-stage small{font-size:9px}.sf-stages .sf-stage{gap:6px;padding:9px 6px}.sf-stage>.sf-badge{font-size:9px}.sf-stage-number{width:16px}.sf-card{padding:12px}.sf-tabs{padding-inline:10px;gap:3px}.sf-facts{gap:8px}.sf-actions .sf-primary{width:100%}}\nbody[data-ds-dark-theme] .sf-workbench{--sf-paper:#1d2621;--sf-panel:#232f27;--sf-ink:#e0e9df;--sf-muted:#a6b6a7;--sf-line:#3d4d40;--sf-accent:#a8d1b1;--sf-soft:#2b3d2e;--sf-warning:#ddc58d;--sf-danger:#edb1a2}body[data-ds-dark-theme] .sf-workbench .sf-primary{background:#365f44;border-color:#56795b;color:#f0f6ed}body[data-ds-dark-theme] .sf-workbench .sf-primary:hover:not(:disabled){background:#426e4e;border-color:#719376}body[data-ds-dark-theme] .sf-workbench button:hover:not(:disabled){border-color:#7a9b7d}body[data-ds-dark-theme] .sf-brand-mark{background:#365f44}body[data-ds-dark-theme] .sf-stage.sf-selected{border-color:#5e7d60!important}body[data-ds-dark-theme] .sf-alert,body[data-ds-dark-theme] .sf-inline-error{background:#412d26;border-color:#78574b}body[data-ds-dark-theme] .sf-blockers{background:#3c3826;border-color:#645d3c}body[data-ds-dark-theme] .sf-clarification{background:#243326;border-color:#506c4b}body[data-ds-dark-theme] .sf-options button[aria-pressed=true]{background:#345036;border-color:#7a9b7d}body[data-ds-dark-theme] .sf-state-running,body[data-ds-dark-theme] .sf-state-starting,body[data-ds-dark-theme] .sf-state-accepted,body[data-ds-dark-theme] .sf-state-passed,body[data-ds-dark-theme] .sf-state-ready{background:#304a35;color:#b5d7b5}body[data-ds-dark-theme] .sf-state-failed,body[data-ds-dark-theme] .sf-state-blocked{background:#4b3029;color:#edb1a2}body[data-ds-dark-theme] .sf-state-stale,body[data-ds-dark-theme] .sf-state-waiting_interaction,body[data-ds-dark-theme] .sf-state-reconciling,body[data-ds-dark-theme] .sf-state-candidate{background:#49402c;color:#ddc58d}\n@media(prefers-color-scheme:dark){html:not([data-ds-theme-source]) .sf-workbench{--sf-paper:#1d2621;--sf-panel:#232f27;--sf-ink:#e0e9df;--sf-muted:#a6b6a7;--sf-line:#3d4d40;--sf-accent:#a8d1b1;--sf-soft:#2b3d2e;--sf-warning:#ddc58d;--sf-danger:#edb1a2}html:not([data-ds-theme-source]) .sf-workbench .sf-primary{background:#365f44;border-color:#56795b;color:#f0f6ed}html:not([data-ds-theme-source]) .sf-workbench .sf-primary:hover:not(:disabled){background:#426e4e;border-color:#719376}html:not([data-ds-theme-source]) .sf-workbench button:hover:not(:disabled){border-color:#7a9b7d}html:not([data-ds-theme-source]) .sf-brand-mark{background:#365f44}html:not([data-ds-theme-source]) .sf-stage.sf-selected{border-color:#5e7d60!important}html:not([data-ds-theme-source]) .sf-alert,html:not([data-ds-theme-source]) .sf-inline-error{background:#412d26;border-color:#78574b}html:not([data-ds-theme-source]) .sf-blockers{background:#3c3826;border-color:#645d3c}html:not([data-ds-theme-source]) .sf-clarification{background:#243326;border-color:#506c4b}html:not([data-ds-theme-source]) .sf-options button[aria-pressed=true]{background:#345036;border-color:#7a9b7d}html:not([data-ds-theme-source]) .sf-state-running,html:not([data-ds-theme-source]) .sf-state-starting,html:not([data-ds-theme-source]) .sf-state-accepted,html:not([data-ds-theme-source]) .sf-state-passed,html:not([data-ds-theme-source]) .sf-state-ready{background:#304a35;color:#b5d7b5}html:not([data-ds-theme-source]) .sf-state-failed,html:not([data-ds-theme-source]) .sf-state-blocked{background:#4b3029;color:#edb1a2}html:not([data-ds-theme-source]) .sf-state-stale,html:not([data-ds-theme-source]) .sf-state-waiting_interaction,html:not([data-ds-theme-source]) .sf-state-reconciling,html:not([data-ds-theme-source]) .sf-state-candidate{background:#49402c;color:#ddc58d}}\n\n.sf-requirement-actions{display:flex;justify-content:space-between;align-items:center;gap:10px;margin:13px 0}.sf-requirement-actions>button,.sf-document-heading>button{font-size:11px}.sf-document-heading>button{margin-left:auto}.sf-editor-version{font:10px/1.7 Consolas,monospace;color:var(--sf-muted);overflow-wrap:anywhere}.sf-editor{padding:13px;margin:13px 0;border:1px solid var(--sf-line);border-radius:5px;background:var(--sf-panel)}.sf-editor .sf-section-heading{align-items:flex-start}.sf-editor .sf-section-heading h3{font-size:13px}.sf-document-editor textarea{font:12px/1.9 'Cascadia Code',Consolas,monospace;min-height:300px}.sf-editor-conflict{margin:13px 0;padding:12px;border:1px solid var(--sf-warning);border-radius:4px;background:var(--sf-soft);color:var(--sf-warning);font-size:11px;line-height:1.9}.sf-editor-conflict>details{margin:10px 0;color:var(--sf-ink)}.sf-editor-conflict>details>p{margin-top:10px}.sf-editor-conflict>button{font-size:11px;margin-top:8px}.sf-requirement-documents{margin:16px 0;color:var(--sf-ink)}.sf-requirement-documents>h4{font-size:11px;font-weight:500;color:var(--sf-muted);margin-bottom:9px}.sf-requirement-documents>details{border:1px solid var(--sf-line);border-radius:4px;padding:10px;margin:7px 0}.sf-requirement-documents summary{overflow-wrap:anywhere;font-size:11px}.sf-requirement-documents summary>span{font-size:10px;color:var(--sf-muted);margin-left:8px}.sf-requirement-documents pre{font-size:11px}.sf-requirements>.sf-preserve{margin-top:12px}.sf-document-editor .sf-actions{margin-bottom:2px}\n.sf-header .sf-language{width:auto;max-width:105px;padding:5px 7px;font-size:11px}.sf-workbench[lang=en] .sf-facts{grid-template-columns:repeat(2,minmax(0,1fr))}.sf-workbench[lang=en] .sf-actions{flex-wrap:wrap}.sf-workbench[lang=en] :is(button,summary,h3,label){overflow-wrap:anywhere}\n";
|
|
2374
|
+
|
|
2375
|
+
// plugins/deepseek-specflow/src/client.tsx
|
|
2376
|
+
var import_jsx_runtime5 = require("react/jsx-runtime");
|
|
2377
|
+
var TAB_ID = "dsh-plugin-specflow/workbench";
|
|
2378
|
+
var TAB_KIND = "specflow";
|
|
2379
|
+
var inject = ["connection", "slots", "sidebarRightTabs"];
|
|
2380
|
+
function apply(ctx) {
|
|
2381
|
+
ctx.effect(() => {
|
|
2382
|
+
const style = document.createElement("style");
|
|
2383
|
+
style.dataset.plugin = "dsh-plugin-specflow";
|
|
2384
|
+
style.textContent = client_default;
|
|
2385
|
+
document.head.append(style);
|
|
2386
|
+
return () => style.remove();
|
|
2387
|
+
}, "specflow: stylesheet");
|
|
2388
|
+
ctx.effect(() => ctx.sidebarRightTabs.register({
|
|
2389
|
+
id: TAB_ID,
|
|
2390
|
+
kind: TAB_KIND,
|
|
2391
|
+
keepMounted: true,
|
|
2392
|
+
title: () => "Specflow",
|
|
2393
|
+
guide: [{ id: "workbench", order: 40, title: () => t("Specflow \u5DE5\u7A0B\u5DE5\u4F5C\u53F0"), description: () => t("\u4ECE\u9700\u6C42\u3001\u89C4\u683C\u5230\u590D\u6838\u4E0E\u9A8C\u6536") }]
|
|
2394
|
+
}), "specflow: tab type");
|
|
2395
|
+
ctx.effect(() => ctx.slots.inject("sidebar.right.pane.tab", () => ctx.slots.register(
|
|
2396
|
+
{ name: "sidebar.right.pane.tab", key: TAB_ID, inject: () => ({ connection: ctx.connection }) },
|
|
2397
|
+
SpecflowPanel
|
|
2398
|
+
)), "specflow: tab body");
|
|
2399
|
+
}
|
|
2400
|
+
var labels = localizedLabels({
|
|
2401
|
+
pending: "\u5F85\u6267\u884C",
|
|
2402
|
+
starting: "\u542F\u52A8\u4E2D",
|
|
2403
|
+
running: "\u6267\u884C\u4E2D",
|
|
2404
|
+
waiting_interaction: "\u5F85\u56DE\u7B54",
|
|
2405
|
+
completed: "\u5DF2\u7ED3\u675F",
|
|
2406
|
+
failed: "\u5931\u8D25",
|
|
2407
|
+
cancelled: "\u5DF2\u505C\u6B62",
|
|
2408
|
+
reconciling: "\u5F85\u6838\u5BF9",
|
|
2409
|
+
passed: "\u5DF2\u901A\u8FC7",
|
|
2410
|
+
blocked: "\u88AB\u963B\u585E",
|
|
2411
|
+
stale: "\u5DF2\u8FC7\u671F",
|
|
2412
|
+
accepted: "\u5DF2\u63A5\u7EB3",
|
|
2413
|
+
active: "\u8FDB\u884C\u4E2D",
|
|
2414
|
+
ready: "\u5F85\u9A8C\u6536",
|
|
2415
|
+
working: "\u5B9E\u73B0\u4E2D",
|
|
2416
|
+
candidate: "\u5F85\u63A5\u7EB3"
|
|
2417
|
+
});
|
|
2418
|
+
var logicalLabels = localizedLabels({ spec: "\u9700\u6C42\u89C4\u683C", plan: "\u5DE5\u7A0B\u8BBE\u8BA1", tasks: "\u4EFB\u52A1\u62C6\u89E3", implementation: "\u5B9E\u73B0\u8BF4\u660E", convergence: "\u5BF9\u9F50\u62A5\u544A" });
|
|
2419
|
+
var activeStates = ["starting", "running", "waiting_interaction", "reconciling"];
|
|
2420
|
+
var short = (value) => value ? value.slice(0, 8) : "\u2014";
|
|
2421
|
+
var time = localizedDate;
|
|
2422
|
+
var targetKey = (target) => JSON.stringify(target);
|
|
2423
|
+
var errorMessage = (error) => error instanceof Error ? error.message : "\u64CD\u4F5C\u5931\u8D25\uFF0C\u8BF7\u5237\u65B0\u540E\u91CD\u8BD5\u3002";
|
|
2424
|
+
var pendingWrites = /* @__PURE__ */ new WeakMap();
|
|
2425
|
+
function pendingKey(sessionId) {
|
|
2426
|
+
return `dsh-plugin-specflow.pending:${location.origin}${location.pathname}:${sessionId}`;
|
|
2427
|
+
}
|
|
2428
|
+
function rememberedWrite(connection, key) {
|
|
2429
|
+
const memory = pendingWrites.get(connection)?.get(key);
|
|
2430
|
+
if (memory) return memory;
|
|
2431
|
+
try {
|
|
2432
|
+
const value = JSON.parse(sessionStorage.getItem(key) ?? "null");
|
|
2433
|
+
if (value && typeof value.operation === "string" && typeof value.idempotencyKey === "string" && typeof value.startedAt === "string") return value;
|
|
2434
|
+
} catch {
|
|
2435
|
+
}
|
|
2436
|
+
return void 0;
|
|
2437
|
+
}
|
|
2438
|
+
function rememberWrite(connection, key, write) {
|
|
2439
|
+
let entries = pendingWrites.get(connection);
|
|
2440
|
+
if (!entries) {
|
|
2441
|
+
entries = /* @__PURE__ */ new Map();
|
|
2442
|
+
pendingWrites.set(connection, entries);
|
|
2443
|
+
}
|
|
2444
|
+
if (write) entries.set(key, write);
|
|
2445
|
+
else entries.delete(key);
|
|
2446
|
+
try {
|
|
2447
|
+
if (write) sessionStorage.setItem(key, JSON.stringify(write));
|
|
2448
|
+
else sessionStorage.removeItem(key);
|
|
2449
|
+
} catch {
|
|
2450
|
+
}
|
|
2451
|
+
}
|
|
2452
|
+
function Empty({ title, children }) {
|
|
2453
|
+
return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "sf-empty", children: [
|
|
2454
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: "sf-empty-mark", "aria-hidden": "true", children: "\u25C7" }),
|
|
2455
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("h3", { children: title }),
|
|
2456
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { children })
|
|
2457
|
+
] });
|
|
2458
|
+
}
|
|
2459
|
+
function Badge({ value, children }) {
|
|
2460
|
+
return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: `sf-badge sf-state-${value}`, children: children ?? labels[value] ?? value });
|
|
2461
|
+
}
|
|
2462
|
+
function SpecflowPanel(props) {
|
|
2463
|
+
return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(SessionPanel, { ...props }, props.sessionId);
|
|
2464
|
+
}
|
|
2465
|
+
function SessionPanel({ connection, sessionId, useTabInfo, useSessions, useSession, useProjection }) {
|
|
2466
|
+
const locale2 = useLocale();
|
|
2467
|
+
const originalCwd = useSessions((state) => state.byId[sessionId]?.cwd);
|
|
2468
|
+
const sessionOpen = useSession((state) => state.openState === "open");
|
|
2469
|
+
const projectedCwd = useProjection("workingDirectory");
|
|
2470
|
+
const cwd = typeof projectedCwd === "string" && projectedCwd ? projectedCwd : originalCwd;
|
|
2471
|
+
const [languageError, setLanguageError] = (0, import_react4.useState)(false);
|
|
2472
|
+
const { tab } = useTabInfo();
|
|
2473
|
+
const storageKey = pendingKey(sessionId);
|
|
2474
|
+
const [previousWrite] = (0, import_react4.useState)(() => rememberedWrite(connection, storageKey));
|
|
2475
|
+
const [bootstrap, setBootstrap] = (0, import_react4.useState)();
|
|
2476
|
+
const [snapshot, setSnapshot] = (0, import_react4.useState)();
|
|
2477
|
+
const [projectId, setProjectId] = (0, import_react4.useState)(""), [itemId, setItemId] = (0, import_react4.useState)("");
|
|
2478
|
+
const [section, setSection] = (0, import_react4.useState)("flow");
|
|
2479
|
+
const [busy, setBusy] = (0, import_react4.useState)(false), [loading, setLoading] = (0, import_react4.useState)(true);
|
|
2480
|
+
const [error, setError] = (0, import_react4.useState)(previousWrite ? "\u4E0A\u6B21\u5199\u5165\u7684\u7ED3\u679C\u5C1A\u672A\u786E\u8BA4\uFF0C\u8BF7\u5237\u65B0\u5E76\u6838\u5BF9\u5DE5\u7A0B\u8BB0\u5F55\u540E\u7EE7\u7EED\u3002" : ""), [notice, setNotice] = (0, import_react4.useState)("");
|
|
2481
|
+
const [uncertain, setUncertain] = (0, import_react4.useState)(!!previousWrite), [refreshKey, setRefreshKey] = (0, import_react4.useState)(0);
|
|
2482
|
+
const [form, setForm] = (0, import_react4.useState)();
|
|
2483
|
+
const [editing, setEditing] = (0, import_react4.useState)({});
|
|
2484
|
+
const reportDraft = (0, import_react4.useCallback)((kind, value) => setEditing((current2) => current2[kind] === value ? current2 : { ...current2, [kind]: value }), []);
|
|
2485
|
+
const [association, setAssociation] = (0, import_react4.useState)({});
|
|
2486
|
+
const handledContext = (0, import_react4.useRef)(void 0), context = (0, import_react4.useRef)(cwd);
|
|
2487
|
+
context.current = cwd;
|
|
2488
|
+
const alive = (0, import_react4.useRef)(true), lock = (0, import_react4.useRef)(false), selection = (0, import_react4.useRef)({ projectId, itemId });
|
|
2489
|
+
const uncertainWrite = (0, import_react4.useRef)(!!previousWrite), explicitRefresh = (0, import_react4.useRef)(false);
|
|
2490
|
+
const controlsId = (0, import_react4.useId)();
|
|
2491
|
+
if (selection.current.projectId !== projectId || selection.current.itemId !== itemId) selection.current = { projectId, itemId };
|
|
2492
|
+
const select = (projectId2, itemId2 = "") => {
|
|
2493
|
+
selection.current = { projectId: projectId2, itemId: itemId2 };
|
|
2494
|
+
setProjectId(projectId2);
|
|
2495
|
+
setItemId(itemId2);
|
|
2496
|
+
setSnapshot(void 0);
|
|
2497
|
+
};
|
|
2498
|
+
const lifetime = (0, import_react4.useRef)(void 0);
|
|
2499
|
+
if (!lifetime.current) lifetime.current = new AbortController();
|
|
2500
|
+
const read = (0, import_react4.useCallback)((request, signal) => readSpecflow(connection, { ...request, locale: locale2 }, AbortSignal.any([lifetime.current.signal, tab.signal, ...signal ? [signal] : []])), [connection, tab.signal, locale2]);
|
|
2501
|
+
(0, import_react4.useEffect)(() => {
|
|
2502
|
+
alive.current = true;
|
|
2503
|
+
if (lifetime.current?.signal.aborted) lifetime.current = new AbortController();
|
|
2504
|
+
return () => {
|
|
2505
|
+
alive.current = false;
|
|
2506
|
+
lifetime.current?.abort();
|
|
2507
|
+
};
|
|
2508
|
+
}, []);
|
|
2509
|
+
(0, import_react4.useEffect)(() => {
|
|
2510
|
+
setEditing({});
|
|
2511
|
+
}, [projectId, itemId]);
|
|
2512
|
+
(0, import_react4.useEffect)(() => {
|
|
2513
|
+
if (!tab.visible) return;
|
|
2514
|
+
let current2 = true, timer;
|
|
2515
|
+
const controller = new AbortController();
|
|
2516
|
+
const sync = async () => {
|
|
2517
|
+
const requestedSelection = selection.current;
|
|
2518
|
+
try {
|
|
2519
|
+
const initial = await read({ resource: "bootstrap" }, controller.signal);
|
|
2520
|
+
if (!current2) return;
|
|
2521
|
+
if (selection.current !== requestedSelection) return;
|
|
2522
|
+
setBootstrap(initial);
|
|
2523
|
+
const selected = selection.current;
|
|
2524
|
+
const project2 = initial.projects.find((project3) => project3.id === selected.projectId) ?? (cwd ? void 0 : initial.projects[0]);
|
|
2525
|
+
const items2 = initial.workItems.filter((item2) => item2.projectId === project2?.id);
|
|
2526
|
+
const item = items2.find((item2) => item2.id === selected.itemId) ?? items2[0];
|
|
2527
|
+
setProjectId(project2?.id ?? "");
|
|
2528
|
+
setItemId(item?.id ?? "");
|
|
2529
|
+
const value = item ? await read({ resource: "snapshot", id: item.id }, controller.signal) : void 0;
|
|
2530
|
+
if (!current2 || selection.current !== requestedSelection) return;
|
|
2531
|
+
setSnapshot(value);
|
|
2532
|
+
setLoading(false);
|
|
2533
|
+
if (!uncertainWrite.current || explicitRefresh.current) {
|
|
2534
|
+
const confirmed = explicitRefresh.current;
|
|
2535
|
+
setError("");
|
|
2536
|
+
setUncertain(false);
|
|
2537
|
+
uncertainWrite.current = false;
|
|
2538
|
+
explicitRefresh.current = false;
|
|
2539
|
+
if (confirmed) rememberWrite(connection, storageKey);
|
|
2540
|
+
}
|
|
2541
|
+
} catch (error2) {
|
|
2542
|
+
if (current2 && !controller.signal.aborted) {
|
|
2543
|
+
setError(errorMessage(error2));
|
|
2544
|
+
setLoading(false);
|
|
2545
|
+
}
|
|
2546
|
+
} finally {
|
|
2547
|
+
if (current2) timer = setTimeout(sync, 2500);
|
|
2548
|
+
}
|
|
2549
|
+
};
|
|
2550
|
+
void sync();
|
|
2551
|
+
return () => {
|
|
2552
|
+
current2 = false;
|
|
2553
|
+
controller.abort();
|
|
2554
|
+
if (timer) clearTimeout(timer);
|
|
2555
|
+
};
|
|
2556
|
+
}, [read, tab.visible, projectId, itemId, refreshKey, cwd]);
|
|
2557
|
+
const command = async (operation, id, input, quiet = false) => {
|
|
2558
|
+
if (lock.current || uncertain || !tab.visible || !bootstrap?.canWrite) throw new Error(t("\u8BF7\u5148\u5237\u65B0\u5DE5\u7A0B\u72B6\u6001\uFF0C\u518D\u6267\u884C\u64CD\u4F5C\u3002"));
|
|
2559
|
+
lock.current = true;
|
|
2560
|
+
setBusy(true);
|
|
2561
|
+
setError("");
|
|
2562
|
+
setNotice("");
|
|
2563
|
+
const pending2 = { operation, id, idempotencyKey: crypto.randomUUID(), startedAt: (/* @__PURE__ */ new Date()).toISOString() };
|
|
2564
|
+
rememberWrite(connection, storageKey, pending2);
|
|
2565
|
+
const clearPending = () => {
|
|
2566
|
+
if (rememberedWrite(connection, storageKey)?.idempotencyKey === pending2.idempotencyKey) rememberWrite(connection, storageKey);
|
|
2567
|
+
};
|
|
2568
|
+
try {
|
|
2569
|
+
const result = await commandSpecflow(connection, { operation, id, input, locale: getLocale(), idempotencyKey: pending2.idempotencyKey }, AbortSignal.any([lifetime.current.signal, tab.signal]));
|
|
2570
|
+
clearPending();
|
|
2571
|
+
if (alive.current) {
|
|
2572
|
+
if (!quiet) setNotice("\u64CD\u4F5C\u5DF2\u8BB0\u5F55\uFF0C\u6B63\u5728\u540C\u6B65\u5DE5\u7A0B\u72B6\u6001\u3002");
|
|
2573
|
+
setRefreshKey((value) => value + 1);
|
|
2574
|
+
}
|
|
2575
|
+
return result;
|
|
2576
|
+
} catch (error2) {
|
|
2577
|
+
const failure = error2;
|
|
2578
|
+
const status = failure?.details?.status;
|
|
2579
|
+
const rejected = failure?.code === "INVALID_REQUEST" || typeof status === "number" && status >= 400 && status < 500;
|
|
2580
|
+
const unknown = !rejected;
|
|
2581
|
+
if (!unknown) clearPending();
|
|
2582
|
+
if (alive.current) {
|
|
2583
|
+
setUncertain(unknown);
|
|
2584
|
+
uncertainWrite.current = unknown;
|
|
2585
|
+
if (!quiet || unknown) setError(`${errorMessage(error2)}${unknown ? ` ${t("\u5199\u5165\u7ED3\u679C\u5C1A\u672A\u786E\u8BA4\uFF0C\u8BF7\u5237\u65B0\u5E76\u6838\u5BF9\u8FD0\u884C\u8BB0\u5F55\u3002")}` : ""}`);
|
|
2586
|
+
}
|
|
2587
|
+
throw error2;
|
|
2588
|
+
} finally {
|
|
2589
|
+
lock.current = false;
|
|
2590
|
+
if (alive.current) setBusy(false);
|
|
2591
|
+
}
|
|
2592
|
+
};
|
|
2593
|
+
const refresh = () => {
|
|
2594
|
+
if (association.failed) handledContext.current = void 0;
|
|
2595
|
+
explicitRefresh.current = true;
|
|
2596
|
+
setLoading(true);
|
|
2597
|
+
setRefreshKey((value) => value + 1);
|
|
2598
|
+
};
|
|
2599
|
+
const run = (operation, id, input) => {
|
|
2600
|
+
void command(operation, id, input).catch(() => {
|
|
2601
|
+
});
|
|
2602
|
+
};
|
|
2603
|
+
const hasDraft = Object.values(editing).some(Boolean);
|
|
2604
|
+
const contextPending = !!cwd && handledContext.current !== cwd;
|
|
2605
|
+
const writesBlocked = busy || uncertain || !bootstrap?.canWrite || !tab.visible || !!error;
|
|
2606
|
+
const disabled = writesBlocked || contextPending && !hasDraft && !form;
|
|
2607
|
+
const project = bootstrap?.projects.find((project2) => project2.id === projectId);
|
|
2608
|
+
const items = bootstrap?.workItems.filter((item) => item.projectId === projectId) ?? [];
|
|
2609
|
+
const current = snapshot?.item.id === itemId ? snapshot : void 0;
|
|
2610
|
+
const pending = current?.clarifications.filter((clarification) => clarification.state === "waiting_answers").length ?? 0;
|
|
2611
|
+
const pendingInteractions = current?.interactions.filter((interaction) => interaction.state === "pending") ?? [];
|
|
2612
|
+
(0, import_react4.useEffect)(() => {
|
|
2613
|
+
if (!sessionOpen || !cwd || handledContext.current === cwd || !bootstrap?.canWrite || !tab.visible || busy || uncertain || error || hasDraft || form) return;
|
|
2614
|
+
const directory = cwd;
|
|
2615
|
+
handledContext.current = directory;
|
|
2616
|
+
setAssociation({ cwd: directory });
|
|
2617
|
+
select("");
|
|
2618
|
+
void command("associateProject", void 0, { rootPath: directory }, true).then((value) => {
|
|
2619
|
+
if (!alive.current || context.current !== directory) return;
|
|
2620
|
+
const result = value;
|
|
2621
|
+
setBootstrap((previous) => previous && { ...previous, projects: [...previous.projects.filter((project2) => project2.id !== result.project.id), result.project] });
|
|
2622
|
+
select(result.project.id, result.workItemId);
|
|
2623
|
+
setAssociation({ cwd: directory, linked: true });
|
|
2624
|
+
}).catch(() => {
|
|
2625
|
+
if (alive.current && context.current === directory) setAssociation({ cwd: directory, failed: true });
|
|
2626
|
+
});
|
|
2627
|
+
}, [sessionOpen, cwd, bootstrap?.canWrite, tab.visible, busy, uncertain, error, hasDraft, form, refreshKey]);
|
|
2628
|
+
const chooseProject = (id) => {
|
|
2629
|
+
handledContext.current = cwd;
|
|
2630
|
+
setAssociation({ cwd });
|
|
2631
|
+
select(id);
|
|
2632
|
+
};
|
|
2633
|
+
return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "sf-workbench", lang: locale2, "data-specflow-panel": true, "data-session-id": sessionId, "aria-busy": loading || busy, children: [
|
|
2634
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("header", { className: "sf-header", children: [
|
|
2635
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { children: [
|
|
2636
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: "sf-brand-mark", "aria-hidden": "true", children: "S" }),
|
|
2637
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("strong", { children: [
|
|
2638
|
+
"Specflow",
|
|
2639
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { children: "." })
|
|
2640
|
+
] })
|
|
2641
|
+
] }),
|
|
2642
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { children: [
|
|
2643
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("select", { className: "sf-language", "aria-label": t("\u754C\u9762\u8BED\u8A00"), value: locale2, disabled: busy, onChange: (event) => {
|
|
2644
|
+
setLanguageError(false);
|
|
2645
|
+
void setLocale(event.target.value, { updateDocument: false }).catch(() => setLanguageError(true));
|
|
2646
|
+
}, children: [
|
|
2647
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("option", { value: "zh-CN", children: "\u4E2D\u6587" }),
|
|
2648
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("option", { value: "en", children: "English" })
|
|
2649
|
+
] }),
|
|
2650
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("button", { type: "button", className: "sf-icon-button", title: t("\u5237\u65B0\u5DE5\u7A0B\u72B6\u6001"), "aria-label": t("\u5237\u65B0\u5DE5\u7A0B\u72B6\u6001"), disabled: busy, onClick: refresh, children: "\u21BB" })
|
|
2651
|
+
] })
|
|
2652
|
+
] }),
|
|
2653
|
+
languageError && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: "sf-inline-error", role: "alert", children: t("\u8BED\u8A00\u8BBE\u7F6E\u672A\u80FD\u4FDD\u5B58\uFF0C\u8BF7\u91CD\u8BD5\u3002") }),
|
|
2654
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "sf-context", children: [
|
|
2655
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "sf-label-row", children: [
|
|
2656
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("label", { htmlFor: `${controlsId}-project`, children: t("\u5DE5\u7A0B") }),
|
|
2657
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("button", { type: "button", disabled: writesBlocked || hasDraft, onClick: () => setForm(form === "project" ? void 0 : "project"), children: t("\uFF0B \u6253\u5F00\u4ED3\u5E93") })
|
|
2658
|
+
] }),
|
|
2659
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("select", { id: `${controlsId}-project`, value: projectId, disabled: busy || hasDraft, onChange: (event) => chooseProject(event.target.value), children: [
|
|
2660
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("option", { value: "", disabled: true, children: t("\u9009\u62E9\u672C\u5730\u5DE5\u7A0B") }),
|
|
2661
|
+
bootstrap?.projects.map((project2) => /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("option", { value: project2.id, children: project2.name }, project2.id))
|
|
2662
|
+
] }),
|
|
2663
|
+
project && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("code", { className: "sf-path", title: project.rootPath, children: project.rootPath }),
|
|
2664
|
+
cwd && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: "sf-hint", title: cwd, children: contextPending && (hasDraft || form) ? t("\u5F53\u524D\u5BF9\u8BDD\u76EE\u5F55\u5DF2\u53D8\u5316\uFF0C\u4FDD\u5B58\u6216\u53D6\u6D88\u7F16\u8F91\u540E\u5C06\u81EA\u52A8\u5173\u8054\u3002") : association.cwd === cwd && association.linked ? t("\u5DF2\u5173\u8054\u5F53\u524D\u5BF9\u8BDD\u5DE5\u7A0B") : association.cwd === cwd && association.failed ? t("\u65E0\u6CD5\u81EA\u52A8\u5173\u8054\u5F53\u524D\u5BF9\u8BDD\u76EE\u5F55\uFF0C\u8BF7\u624B\u52A8\u9009\u62E9\u5DE5\u7A0B\u6216\u6253\u5F00 Git \u4ED3\u5E93\u3002") : contextPending || busy && !association.linked ? t("\u6B63\u5728\u5173\u8054\u5F53\u524D\u5BF9\u8BDD\u5DE5\u7A0B\u2026") : "" }),
|
|
2665
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "sf-label-row", children: [
|
|
2666
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("label", { htmlFor: `${controlsId}-item`, children: t("\u5DE5\u4F5C\u9879") }),
|
|
2667
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("button", { type: "button", disabled: disabled || hasDraft || !project, onClick: () => setForm(form === "item" ? void 0 : "item"), children: t("\uFF0B \u65B0\u9700\u6C42") })
|
|
2668
|
+
] }),
|
|
2669
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("select", { id: `${controlsId}-item`, value: itemId, disabled: busy || hasDraft || !items.length, onChange: (event) => select(projectId, event.target.value), children: [
|
|
2670
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("option", { value: "", disabled: true, children: items.length ? t("\u9009\u62E9\u5DE5\u4F5C\u9879") : t("\u6B64\u5DE5\u7A0B\u8FD8\u6CA1\u6709\u9700\u6C42") }),
|
|
2671
|
+
items.map((item) => /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("option", { value: item.id, children: item.name }, item.id))
|
|
2672
|
+
] }),
|
|
2673
|
+
hasDraft && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: "sf-hint", children: t("\u6709\u672A\u4FDD\u5B58\u7684\u7F16\u8F91\u3002\u4FDD\u5B58\u6216\u53D6\u6D88\u7F16\u8F91\u540E\uFF0C\u5373\u53EF\u5207\u6362\u5DE5\u7A0B\u6216\u5DE5\u4F5C\u9879\u3002") })
|
|
2674
|
+
] }),
|
|
2675
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "sf-messages", "aria-live": "polite", children: [
|
|
2676
|
+
error && /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "sf-alert", role: "alert", children: [
|
|
2677
|
+
t(error),
|
|
2678
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("button", { type: "button", disabled: busy, onClick: refresh, children: t("\u5237\u65B0\u6838\u5BF9") })
|
|
2679
|
+
] }),
|
|
2680
|
+
notice && !error && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: "sf-notice", role: "status", children: t(notice) })
|
|
2681
|
+
] }),
|
|
2682
|
+
form && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(CreateForm, { kind: form, disabled, projectId, command, onCancel: () => setForm(void 0), onCreated: (result) => {
|
|
2683
|
+
setForm(void 0);
|
|
2684
|
+
if (form === "project") chooseProject(result.id);
|
|
2685
|
+
else select(projectId, result.id);
|
|
2686
|
+
} }, form),
|
|
2687
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("nav", { className: "sf-tabs", "aria-label": t("\u5DE5\u7A0B\u5DE5\u4F5C\u533A"), children: [["flow", t("\u6D41\u7A0B")], ["documents", t("\u6587\u6863")], ["code", t("\u4EE3\u7801")], ["runs", t("\u8FD0\u884C")]].map(([key, label]) => /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("button", { type: "button", "aria-current": section === key ? "page" : void 0, className: section === key ? "sf-active" : "", onClick: () => setSection(key), children: [
|
|
2688
|
+
label,
|
|
2689
|
+
key === "flow" && pending > 0 && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: "sf-count", children: pending })
|
|
2690
|
+
] }, key)) }),
|
|
2691
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("main", { className: "sf-body", children: loading && !current ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: "sf-loading", role: "status", children: t("\u6B63\u5728\u8BFB\u53D6\u672C\u5730\u5DE5\u7A0B\u2026") }) : !project ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(Empty, { title: t("\u628A\u9700\u6C42\u53D8\u6210\u53EF\u9A8C\u8BC1\u7684\u5DE5\u7A0B"), children: t("\u6253\u5F00\u4E00\u4E2A\u672C\u5730 Git \u4ED3\u5E93\uFF0C\u4ECE\u9700\u6C42\u89C4\u683C\u5F00\u59CB\u5EFA\u7ACB\u5B8C\u6574\u7684\u5F00\u53D1\u8BB0\u5F55\u3002") }) : !current ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(Empty, { title: t("\u4ECE\u4E00\u4E2A\u65B0\u9700\u6C42\u5F00\u59CB"), children: t("\u4E3A {0} \u521B\u5EFA\u5DE5\u4F5C\u9879\u3002\u6BCF\u4E2A\u5DE5\u4F5C\u9879\u4F1A\u4F7F\u7528\u72EC\u7ACB\u7684\u5206\u652F\u4E0E\u5DE5\u4F5C\u533A\u3002", { 0: project.name }) }) : /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(import_jsx_runtime5.Fragment, { children: [
|
|
2692
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "sf-item-heading", children: [
|
|
2693
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("h2", { children: current.item.name }),
|
|
2694
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(Badge, { value: current.item.status }),
|
|
2695
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("code", { title: current.item.branch, children: current.item.branch })
|
|
2696
|
+
] }),
|
|
2697
|
+
pendingInteractions.map((interaction) => /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(InteractionCard, { id: interaction.id, request: interaction.request, command, disabled, onEditingChange: (value) => reportDraft(`interaction:${interaction.id}`, value) }, interaction.id)),
|
|
2698
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { hidden: section !== "flow", children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(Flow, { snapshot: current, bootstrap, read, run, command, disabled, visible: tab.visible && section === "flow", onCode: () => setSection("code"), onRequirementsEditingChange: (value) => reportDraft("requirements", value), onDraftChange: reportDraft }, current.item.id) }),
|
|
2699
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { hidden: section !== "documents", children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(Documents, { snapshot: current, read, run, command, disabled, visible: tab.visible && section === "documents", onEditingChange: (value) => reportDraft("artifact", value) }, current.item.id) }),
|
|
2700
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { hidden: section !== "code", children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(Code, { snapshot: current, read, run, disabled, visible: tab.visible && section === "code" }) }),
|
|
2701
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { hidden: section !== "runs", children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(Runs, { snapshot: current, bootstrap, read, run, disabled, visible: tab.visible && section === "runs" }) })
|
|
2702
|
+
] }) }),
|
|
2703
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("footer", { className: "sf-footer", children: [
|
|
2704
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: "sf-status-dot" }),
|
|
2705
|
+
t("\u672C\u5730\u5DE5\u7A0B\u8BB0\u5F55"),
|
|
2706
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { children: busy ? t("\u6B63\u5728\u64CD\u4F5C") : loading ? t("\u540C\u6B65\u4E2D") : t("DSH \u63D2\u4EF6") })
|
|
2707
|
+
] })
|
|
2708
|
+
] });
|
|
2709
|
+
}
|
|
2710
|
+
function CreateForm({ kind, projectId, command, onCreated, onCancel, disabled }) {
|
|
2711
|
+
const prefix = (0, import_react4.useId)(), [name, setName] = (0, import_react4.useState)(""), [content, setContent] = (0, import_react4.useState)("");
|
|
2712
|
+
const submit = async (event) => {
|
|
2713
|
+
event.preventDefault();
|
|
2714
|
+
try {
|
|
2715
|
+
const result = await command(kind === "project" ? "registerProject" : "createWorkItem", void 0, kind === "project" ? { rootPath: content.trim(), name: name.trim() || void 0 } : { projectId, name: name.trim(), request: content.trim(), kind: "feature", documents: [] });
|
|
2716
|
+
onCreated(result);
|
|
2717
|
+
} catch {
|
|
2718
|
+
}
|
|
2719
|
+
};
|
|
2720
|
+
return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("form", { className: "sf-form", onSubmit: submit, children: [
|
|
2721
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("h3", { children: kind === "project" ? t("\u6253\u5F00\u672C\u5730 Git \u4ED3\u5E93") : t("\u521B\u5EFA\u65B0\u9700\u6C42") }),
|
|
2722
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("label", { htmlFor: `${prefix}-name`, children: kind === "project" ? t("\u5DE5\u7A0B\u540D\u79F0\uFF08\u53EF\u9009\uFF09") : t("\u9700\u6C42\u540D\u79F0") }),
|
|
2723
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("input", { id: `${prefix}-name`, autoFocus: true, value: name, required: kind === "item", maxLength: 200, onChange: (event) => setName(event.target.value) }),
|
|
2724
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("label", { htmlFor: `${prefix}-content`, children: kind === "project" ? t("\u4ED3\u5E93\u7EDD\u5BF9\u8DEF\u5F84") : t("\u9700\u6C42\u4E0E\u9A8C\u6536\u9884\u671F") }),
|
|
2725
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("textarea", { id: `${prefix}-content`, rows: kind === "project" ? 2 : 5, value: content, required: true, onChange: (event) => setContent(event.target.value), placeholder: kind === "project" ? "C:\\projects\\my-app" : t("\u5E0C\u671B\u5B9E\u73B0\u4EC0\u4E48\uFF1F\u54EA\u4E9B\u884C\u4E3A\u4EE3\u8868\u5B8C\u6210\uFF1F") }),
|
|
2726
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "sf-actions", children: [
|
|
2727
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("button", { type: "button", disabled, onClick: onCancel, children: t("\u53D6\u6D88") }),
|
|
2728
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("button", { className: "sf-primary", disabled: disabled || !content.trim() || kind === "item" && !name.trim(), children: kind === "project" ? t("\u6253\u5F00\u5DE5\u7A0B") : t("\u521B\u5EFA\u5DE5\u4F5C\u9879") })
|
|
2729
|
+
] })
|
|
2730
|
+
] });
|
|
2731
|
+
}
|
|
2732
|
+
function Flow({ snapshot, bootstrap, read, run, command, disabled, visible, onCode, onRequirementsEditingChange, onDraftChange }) {
|
|
2733
|
+
const latest = snapshot.runs.at(-1);
|
|
2734
|
+
const nodes = snapshot.nodes.filter((node2) => node2.workflowRunId === latest?.id);
|
|
2735
|
+
const [chosen, setChosen] = (0, import_react4.useState)(""), [override, setOverride] = (0, import_react4.useState)(""), [showStages, setShowStages] = (0, import_react4.useState)(false);
|
|
2736
|
+
const [editingRequirements, setEditingRequirements] = (0, import_react4.useState)(false);
|
|
2737
|
+
const node = nodes.find((node2) => node2.id === chosen) ?? selectCurrentNode(latest, nodes);
|
|
2738
|
+
const definition = latest?.definition.nodes.find((definition2) => definition2.id === node?.nodeId);
|
|
2739
|
+
const [readiness, setReadiness] = (0, import_react4.useState)();
|
|
2740
|
+
const readinessKey = `${node?.id}:${node?.revision}:${snapshot.item.revision}:${snapshot.project.revision}:${snapshot.requirements.current.id}:${snapshot.artifacts.map((artifact) => artifact.revision).join(",")}`;
|
|
2741
|
+
const backend = snapshot.project.executionBackend ?? "dsh";
|
|
2742
|
+
const targets = bootstrap.catalog.targets.filter((target) => target.backend === backend);
|
|
2743
|
+
const configured = definition?.target ?? (definition?.role ? latest?.definition.roles[definition.role] ?? snapshot.project.defaults[definition.role] : void 0);
|
|
2744
|
+
const selected = targets.find((target) => targetKey(target) === override) ?? (configured?.backend === backend ? configured : targets[0]);
|
|
2745
|
+
const modelStage = !!node && ["agent", "review", "clarify"].includes(node.type);
|
|
2746
|
+
const active = !!node && activeStates.includes(node.execution);
|
|
2747
|
+
const automated = snapshot.automationRuns?.some((value) => value.workflowRunId === latest?.id && value.state === "active") || snapshot.repairCycles?.some((value) => value.workflowRunId === latest?.id && value.state === "active");
|
|
2748
|
+
const clarification = snapshot.clarifications.find((session) => session.nodeRunId === node?.id && session.state === "waiting_answers");
|
|
2749
|
+
const completed = nodes.filter((node2) => getStepStatus(node2, latest?.definition.nodes.find((definition2) => definition2.id === node2.nodeId)).effectivelyPassed).length;
|
|
2750
|
+
(0, import_react4.useEffect)(() => {
|
|
2751
|
+
setOverride("");
|
|
2752
|
+
}, [node?.id, backend]);
|
|
2753
|
+
(0, import_react4.useEffect)(() => {
|
|
2754
|
+
if (!node || !visible) return;
|
|
2755
|
+
const controller = new AbortController();
|
|
2756
|
+
void read({ resource: "readiness", id: node.id }, controller.signal).then((value) => {
|
|
2757
|
+
if (!controller.signal.aborted) setReadiness({ key: readinessKey, ...value });
|
|
2758
|
+
}).catch((error) => {
|
|
2759
|
+
if (!controller.signal.aborted) setReadiness({ key: readinessKey, ready: false, reasons: [errorMessage(error)] });
|
|
2760
|
+
});
|
|
2761
|
+
return () => controller.abort();
|
|
2762
|
+
}, [read, visible, readinessKey]);
|
|
2763
|
+
const checked = readiness?.key === readinessKey ? readiness : void 0;
|
|
2764
|
+
return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(import_jsx_runtime5.Fragment, { children: [
|
|
2765
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "sf-section-heading", children: [
|
|
2766
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { children: [
|
|
2767
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("h3", { children: t("\u5DE5\u7A0B\u6D41\u7A0B") }),
|
|
2768
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("p", { children: [
|
|
2769
|
+
completed,
|
|
2770
|
+
" / ",
|
|
2771
|
+
nodes.length,
|
|
2772
|
+
" ",
|
|
2773
|
+
t("\u4E2A\u6B65\u9AA4\u5DF2\u901A\u8FC7")
|
|
2774
|
+
] })
|
|
2775
|
+
] }),
|
|
2776
|
+
latest ? /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("button", { type: "button", "aria-expanded": showStages, onClick: () => setShowStages((value) => !value), children: [
|
|
2777
|
+
showStages ? t("\u6536\u8D77\u6B65\u9AA4") : t("\u5207\u6362\u6B65\u9AA4"),
|
|
2778
|
+
" ",
|
|
2779
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { "aria-hidden": "true", children: showStages ? "\u25B4" : "\u25BE" })
|
|
2780
|
+
] }) : snapshot.workflows[0] && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("button", { type: "button", className: "sf-primary", disabled, onClick: () => run("createRun", void 0, { workflowId: snapshot.workflows[0].id }), children: t("\u5EFA\u7ACB\u6D41\u7A0B") })
|
|
2781
|
+
] }),
|
|
2782
|
+
showStages && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { className: "sf-stages", "aria-label": t("\u6D41\u7A0B\u6B65\u9AA4"), children: nodes.map((stage, index) => /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("button", { type: "button", className: stage.id === node?.id ? "sf-stage sf-selected" : "sf-stage", "aria-pressed": stage.id === node?.id, onClick: () => {
|
|
2783
|
+
setChosen(stage.id);
|
|
2784
|
+
setShowStages(false);
|
|
2785
|
+
}, children: [
|
|
2786
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: "sf-stage-number", children: String(index + 1).padStart(2, "0") }),
|
|
2787
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("span", { children: [
|
|
2788
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("strong", { children: workflowText(stage.name) }),
|
|
2789
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("small", { children: [
|
|
2790
|
+
getStepStatus(stage, latest?.definition.nodes.find((definition2) => definition2.id === stage.nodeId)).gate.value,
|
|
2791
|
+
" \xB7 ",
|
|
2792
|
+
getStepStatus(stage, latest?.definition.nodes.find((definition2) => definition2.id === stage.nodeId)).acceptance.value
|
|
2793
|
+
] })
|
|
2794
|
+
] }),
|
|
2795
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(Badge, { value: stage.execution })
|
|
2796
|
+
] }, stage.id)) }),
|
|
2797
|
+
node && /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("section", { className: "sf-card sf-stage-detail", children: [
|
|
2798
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "sf-section-heading", children: [
|
|
2799
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("h3", { children: workflowText(node.name) }),
|
|
2800
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(Badge, { value: node.freshness === "stale" ? "stale" : node.execution })
|
|
2801
|
+
] }),
|
|
2802
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("dl", { className: "sf-facts", children: Object.values(getStepStatus(node, definition)).filter((value) => typeof value !== "boolean").map((fact) => /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { children: [
|
|
2803
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("dt", { children: fact.label }),
|
|
2804
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("dd", { children: fact.value })
|
|
2805
|
+
] }, fact.label)) }),
|
|
2806
|
+
modelStage && /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("label", { className: "sf-field", children: [
|
|
2807
|
+
t("\u8FDE\u63A5\u4E0E\u6A21\u578B"),
|
|
2808
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("select", { "aria-label": t("\u8FDE\u63A5\u4E0E\u6A21\u578B"), value: selected ? targetKey(selected) : "", disabled: disabled || active, onChange: (event) => setOverride(event.target.value), children: [
|
|
2809
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("option", { value: "", disabled: true, children: t("\u5728 DSH \u4E2D\u914D\u7F6E\u6A21\u578B\u540E\u5237\u65B0") }),
|
|
2810
|
+
configured && configured.backend === backend && !targets.some((target) => targetKey(target) === targetKey(configured)) && /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("option", { value: targetKey(configured), children: [
|
|
2811
|
+
configured.connectionSlug,
|
|
2812
|
+
" / ",
|
|
2813
|
+
configured.model
|
|
2814
|
+
] }),
|
|
2815
|
+
targets.map((target) => /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("option", { value: targetKey(target), children: [
|
|
2816
|
+
target.connectionSlug,
|
|
2817
|
+
" / ",
|
|
2818
|
+
target.model
|
|
2819
|
+
] }, targetKey(target)))
|
|
2820
|
+
] })
|
|
2821
|
+
] }),
|
|
2822
|
+
node.error && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: "sf-inline-error", children: t(node.error) }),
|
|
2823
|
+
(checked?.reasons.length || node.blockers.length) > 0 && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("ul", { className: "sf-blockers", children: [.../* @__PURE__ */ new Set([...checked?.reasons ?? [], ...node.blockers])].map((reason) => /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("li", { children: reason }, reason)) }),
|
|
2824
|
+
modelStage && !selected && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: "sf-hint", children: t("\u8BF7\u5148\u5728 DSH \u914D\u7F6E\u53EF\u7528\u6A21\u578B\uFF0C\u518D\u5237\u65B0\u5DE5\u7A0B\u72B6\u6001\u3002") }),
|
|
2825
|
+
automated && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: "sf-hint", children: t("\u81EA\u52A8\u5316\u6B63\u5728\u7BA1\u7406\u6B64\u6D41\u7A0B\uFF0C\u8BF7\u5148\u505C\u6B62\u81EA\u52A8\u63A8\u8FDB\u6216\u4FEE\u8BA2\u518D\u624B\u52A8\u6D3E\u53D1\u3002") }),
|
|
2826
|
+
editingRequirements && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: "sf-hint", children: t("\u9700\u6C42\u6B63\u6587\u6709\u672A\u4FDD\u5B58\u7684\u7F16\u8F91\uFF0C\u8BF7\u5148\u4FDD\u5B58\u6216\u53D6\u6D88\uFF0C\u518D\u542F\u52A8\u6B65\u9AA4\u3002") }),
|
|
2827
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { className: "sf-actions", children: active && node.type === "verify" ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("button", { type: "button", className: "sf-stop", disabled: disabled || !!node.verificationStopRequestedAt, onClick: () => run("stopVerification", node.id), children: node.verificationStopRequestedAt ? t("\u6B63\u5728\u8BF7\u6C42\u505C\u6B62") : t("\u505C\u6B62\u9A8C\u8BC1\u547D\u4EE4") }) : active && node.currentAttemptId ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("button", { type: "button", className: "sf-stop", disabled, onClick: () => run("stopAttempt", node.currentAttemptId), children: t("\u505C\u6B62\u5F53\u524D\u5C1D\u8BD5") }) : node.type === "human" ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("button", { type: "button", className: "sf-primary", onClick: onCode, children: t("\u6838\u5BF9\u4EE3\u7801\u5E76\u9A8C\u6536") }) : /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("button", { type: "button", className: "sf-primary", disabled: disabled || automated || editingRequirements || !checked?.ready || modelStage && !selected || !!clarification || latest?.state !== "active", onClick: () => run("startNode", node.id, { expectedRevision: node.revision, ...selected && modelStage ? { target: selected } : {} }), children: node.execution === "pending" ? t("\u542F\u52A8\u6B64\u6B65\u9AA4") : t("\u91CD\u65B0\u6267\u884C") }) })
|
|
2828
|
+
] }),
|
|
2829
|
+
node?.verificationUnconfirmed && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(VerificationRecovery, { compact: true, disabled, onConfirm: (reason) => run("confirmNodeVerificationStopped", node.id, { expectedRevision: node.revision, reason }) }),
|
|
2830
|
+
latest && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(AutomationControls, { compact: true, workflowRun: latest, node, definition, repairs: snapshot.repairCycles, automations: snapshot.automationRuns, disabled, startBlocked: editingRequirements, onCommand: run }),
|
|
2831
|
+
clarification && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(Clarification, { session: clarification, draft: snapshot.clarificationDrafts.find((draft) => draft.sessionId === clarification.id), command, disabled, onEditingChange: (value) => onDraftChange("clarification", value) }, clarification.id),
|
|
2832
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(ProjectSettings, { project: snapshot.project, targets, command, disabled, onEditingChange: (value) => onDraftChange("settings", value) }, snapshot.project.id),
|
|
2833
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(Requirements, { snapshot, command, disabled, onEditingChange: (value) => {
|
|
2834
|
+
setEditingRequirements(value);
|
|
2835
|
+
onRequirementsEditingChange(value);
|
|
2836
|
+
} })
|
|
2837
|
+
] });
|
|
2838
|
+
}
|
|
2839
|
+
function RequirementDocuments({ documents }) {
|
|
2840
|
+
if (!documents.length) return null;
|
|
2841
|
+
const sourceNames = { upload: t("\u4E0A\u4F20\u8D44\u6599"), repository: t("\u4ED3\u5E93\u8D44\u6599"), pasted: t("\u7C98\u8D34\u8D44\u6599") };
|
|
2842
|
+
return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "sf-requirement-documents", children: [
|
|
2843
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("h4", { children: [
|
|
2844
|
+
t("\u5DF2\u6709\u9700\u6C42\u8D44\u6599 \xB7"),
|
|
2845
|
+
" ",
|
|
2846
|
+
documents.length,
|
|
2847
|
+
" ",
|
|
2848
|
+
t("\u4EFD")
|
|
2849
|
+
] }),
|
|
2850
|
+
documents.map((document2) => /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("details", { children: [
|
|
2851
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("summary", { children: [
|
|
2852
|
+
document2.name,
|
|
2853
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { children: sourceNames[document2.source] })
|
|
2854
|
+
] }),
|
|
2855
|
+
document2.repositoryPath && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("code", { className: "sf-path", children: document2.repositoryPath }),
|
|
2856
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("pre", { children: document2.content })
|
|
2857
|
+
] }, document2.id))
|
|
2858
|
+
] });
|
|
2859
|
+
}
|
|
2860
|
+
function Requirements({ snapshot, command, disabled, onEditingChange }) {
|
|
2861
|
+
const current = snapshot.requirements.current;
|
|
2862
|
+
const [draft, setDraft] = (0, import_react4.useState)();
|
|
2863
|
+
const [saving, setSaving] = (0, import_react4.useState)(false), [error, setError] = (0, import_react4.useState)("");
|
|
2864
|
+
const prefix = (0, import_react4.useId)();
|
|
2865
|
+
const conflict = !!draft && current.id !== draft.expectedRevisionId;
|
|
2866
|
+
const close = () => {
|
|
2867
|
+
setDraft(void 0);
|
|
2868
|
+
setError("");
|
|
2869
|
+
onEditingChange(false);
|
|
2870
|
+
};
|
|
2871
|
+
const save = async (event) => {
|
|
2872
|
+
event.preventDefault();
|
|
2873
|
+
if (!draft || saving || disabled || conflict) return;
|
|
2874
|
+
setSaving(true);
|
|
2875
|
+
setError("");
|
|
2876
|
+
try {
|
|
2877
|
+
await command("saveRequirements", snapshot.item.id, draft);
|
|
2878
|
+
close();
|
|
2879
|
+
} catch (error2) {
|
|
2880
|
+
setError(error2.code === "REVISION_CONFLICT" ? "\u9700\u6C42\u5DF2\u6709\u65B0\u4FEE\u8BA2\uFF0C\u5F53\u524D\u8349\u7A3F\u5DF2\u4FDD\u7559\u3002\u8BF7\u6BD4\u8F83\u6700\u65B0\u9700\u6C42\u540E\u7EE7\u7EED\u7F16\u8F91\u3002" : errorMessage(error2));
|
|
2881
|
+
} finally {
|
|
2882
|
+
setSaving(false);
|
|
2883
|
+
}
|
|
2884
|
+
};
|
|
2885
|
+
return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("details", { className: "sf-details sf-requirements", children: [
|
|
2886
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("summary", { children: t("\u539F\u59CB\u9700\u6C42\u4E0E\u5DE5\u4F5C\u533A") }),
|
|
2887
|
+
draft ? /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("form", { className: "sf-editor", onSubmit: save, children: [
|
|
2888
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "sf-section-heading", children: [
|
|
2889
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("h3", { children: t("\u7F16\u8F91\u9700\u6C42\u6B63\u6587") }),
|
|
2890
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("span", { className: "sf-editor-version", children: [
|
|
2891
|
+
t("\u57FA\u4E8E"),
|
|
2892
|
+
" ",
|
|
2893
|
+
short(draft.expectedRevisionId)
|
|
2894
|
+
] })
|
|
2895
|
+
] }),
|
|
2896
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: "sf-hint", children: t("\u4FDD\u5B58\u4F1A\u521B\u5EFA\u65B0\u7684\u9700\u6C42\u4FEE\u8BA2\uFF0C\u5DF2\u6709\u8D44\u6599\u4F1A\u4E00\u5E76\u4FDD\u7559\uFF1B\u53D7\u5F71\u54CD\u7684\u6B65\u9AA4\u9700\u8981\u91CD\u65B0\u5206\u6790\u6216\u590D\u6838\u3002") }),
|
|
2897
|
+
(conflict || error) && /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "sf-editor-conflict", role: "alert", children: [
|
|
2898
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { children: conflict ? t("\u9700\u6C42\u5DF2\u6709\u65B0\u4FEE\u8BA2\u3002\u4F60\u7684\u6B63\u6587\u8349\u7A3F\u548C\u8D44\u6599\u5DF2\u4FDD\u7559\uFF0C\u8BF7\u5148\u6BD4\u8F83\u6700\u65B0\u9700\u6C42\u3002") : t(error) }),
|
|
2899
|
+
conflict && /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(import_jsx_runtime5.Fragment, { children: [
|
|
2900
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("details", { children: [
|
|
2901
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("summary", { children: t("\u67E5\u770B\u6700\u65B0\u9700\u6C42") }),
|
|
2902
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: "sf-preserve", children: current.request }),
|
|
2903
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(RequirementDocuments, { documents: current.documents })
|
|
2904
|
+
] }),
|
|
2905
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("button", { type: "button", disabled: saving, onClick: () => {
|
|
2906
|
+
setDraft((value) => value && { ...value, expectedRevisionId: current.id, documents: current.documents.map((document2) => ({ ...document2 })) });
|
|
2907
|
+
setError("");
|
|
2908
|
+
}, children: t("\u4EE5\u6700\u65B0\u4FEE\u8BA2\u7EE7\u7EED\u7F16\u8F91") }),
|
|
2909
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: "sf-hint", children: t("\u4FDD\u7559\u4F60\u7684\u6B63\u6587\u8349\u7A3F\uFF0C\u5E76\u91C7\u7528\u6700\u65B0\u4FEE\u8BA2\u4E2D\u7684\u9700\u6C42\u8D44\u6599\u3002") })
|
|
2910
|
+
] })
|
|
2911
|
+
] }),
|
|
2912
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("label", { className: "sf-field", htmlFor: `${prefix}-request`, children: [
|
|
2913
|
+
t("\u9700\u6C42\u6B63\u6587"),
|
|
2914
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("textarea", { id: `${prefix}-request`, "aria-label": t("\u9700\u6C42\u6B63\u6587"), rows: 10, maxLength: 2e6, value: draft.request, disabled: saving, onChange: (event) => setDraft((value) => value && { ...value, request: event.target.value }) })
|
|
2915
|
+
] }),
|
|
2916
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(RequirementDocuments, { documents: draft.documents }),
|
|
2917
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "sf-actions", children: [
|
|
2918
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("button", { type: "button", disabled: saving, onClick: close, children: t("\u53D6\u6D88\u7F16\u8F91\u9700\u6C42") }),
|
|
2919
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("button", { className: "sf-primary", disabled: disabled || saving || conflict || !draft.request.trim() && !draft.documents.length, children: saving ? t("\u6B63\u5728\u4FDD\u5B58\u2026") : t("\u4FDD\u5B58\u9700\u6C42") })
|
|
2920
|
+
] })
|
|
2921
|
+
] }) : /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(import_jsx_runtime5.Fragment, { children: [
|
|
2922
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "sf-requirement-actions", children: [
|
|
2923
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("span", { className: "sf-editor-version", children: [
|
|
2924
|
+
t("\u9700\u6C42\u4FEE\u8BA2"),
|
|
2925
|
+
" ",
|
|
2926
|
+
short(current.id)
|
|
2927
|
+
] }),
|
|
2928
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("button", { type: "button", disabled: disabled || snapshot.item.status === "accepted", onClick: () => {
|
|
2929
|
+
setDraft({ expectedRevisionId: current.id, request: current.request, documents: current.documents.map((document2) => ({ ...document2 })) });
|
|
2930
|
+
setError("");
|
|
2931
|
+
onEditingChange(true);
|
|
2932
|
+
}, children: t("\u7F16\u8F91\u9700\u6C42") })
|
|
2933
|
+
] }),
|
|
2934
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: "sf-preserve", children: current.request || t("\u5C1A\u672A\u586B\u5199\u9700\u6C42\u8BF4\u660E\u3002") }),
|
|
2935
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(RequirementDocuments, { documents: current.documents })
|
|
2936
|
+
] }),
|
|
2937
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("code", { className: "sf-path", children: snapshot.item.workspace })
|
|
2938
|
+
] });
|
|
2939
|
+
}
|
|
2940
|
+
function Clarification({ session, draft, command, disabled, onEditingChange }) {
|
|
2941
|
+
const [answers, setAnswers] = (0, import_react4.useState)(() => ({ ...draft?.answers }));
|
|
2942
|
+
const [savedAnswers, setSavedAnswers] = (0, import_react4.useState)(answers);
|
|
2943
|
+
const reportEditing = (0, import_react4.useRef)(onEditingChange);
|
|
2944
|
+
reportEditing.current = onEditingChange;
|
|
2945
|
+
const prefix = (0, import_react4.useId)();
|
|
2946
|
+
const questions = session.questions.filter((question) => !question.answer);
|
|
2947
|
+
const dirty = questions.some((question) => (answers[question.id] ?? "") !== (savedAnswers[question.id] ?? ""));
|
|
2948
|
+
(0, import_react4.useEffect)(() => {
|
|
2949
|
+
reportEditing.current?.(dirty);
|
|
2950
|
+
}, [dirty]);
|
|
2951
|
+
(0, import_react4.useEffect)(() => () => {
|
|
2952
|
+
reportEditing.current?.(false);
|
|
2953
|
+
}, []);
|
|
2954
|
+
const submit = async (event) => {
|
|
2955
|
+
event.preventDefault();
|
|
2956
|
+
try {
|
|
2957
|
+
await command("answerClarification", session.id, { expectedRevision: session.revision, answers: questions.map((question) => ({ questionId: question.id, answer: answers[question.id]?.trim() })) });
|
|
2958
|
+
setSavedAnswers({ ...answers });
|
|
2959
|
+
} catch {
|
|
2960
|
+
}
|
|
2961
|
+
};
|
|
2962
|
+
const saveDraft = async () => {
|
|
2963
|
+
try {
|
|
2964
|
+
await command("saveClarificationDraft", session.id, { expectedRevision: draft?.revision ?? 0, answers });
|
|
2965
|
+
setSavedAnswers({ ...answers });
|
|
2966
|
+
} catch {
|
|
2967
|
+
}
|
|
2968
|
+
};
|
|
2969
|
+
return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("form", { className: "sf-card sf-clarification", onSubmit: submit, children: [
|
|
2970
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: "sf-eyebrow", children: t("\u9700\u8981\u4F60\u7684\u51B3\u5B9A") }),
|
|
2971
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("h3", { children: t("\u8865\u5168\u9700\u6C42\u4E2D\u7684\u5173\u952E\u95EE\u9898") }),
|
|
2972
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: "sf-hint", children: t("\u56DE\u7B54\u4F1A\u5199\u5165\u5F53\u524D\u89C4\u683C\uFF0C\u968F\u540E\u7EE7\u7EED\u6F84\u6E05\u3002\u6682\u65F6\u79BB\u5F00\u524D\u53EF\u4EE5\u4FDD\u5B58\u8349\u7A3F\u3002") }),
|
|
2973
|
+
questions.map((question, index) => /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "sf-question", children: [
|
|
2974
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("label", { htmlFor: `${prefix}-${index}`, children: [
|
|
2975
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { children: String(index + 1).padStart(2, "0") }),
|
|
2976
|
+
question.question
|
|
2977
|
+
] }),
|
|
2978
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { children: question.reason }),
|
|
2979
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { className: "sf-options", children: question.options.map((option) => /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("button", { type: "button", "aria-pressed": answers[question.id] === option, disabled, onClick: () => setAnswers((value) => ({ ...value, [question.id]: option })), children: option }, option)) }),
|
|
2980
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("textarea", { id: `${prefix}-${index}`, rows: 3, required: true, maxLength: 4e3, disabled, value: answers[question.id] ?? "", onChange: (event) => setAnswers((value) => ({ ...value, [question.id]: event.target.value })) })
|
|
2981
|
+
] }, question.id)),
|
|
2982
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "sf-actions", children: [
|
|
2983
|
+
dirty && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("button", { type: "button", disabled, onClick: () => setAnswers({ ...savedAnswers }), children: t("\u6062\u590D\u5DF2\u4FDD\u5B58\u56DE\u7B54") }),
|
|
2984
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("button", { type: "button", disabled, onClick: () => {
|
|
2985
|
+
void saveDraft();
|
|
2986
|
+
}, children: t("\u4FDD\u5B58\u8349\u7A3F") }),
|
|
2987
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("button", { className: "sf-primary", disabled: disabled || questions.some((question) => !answers[question.id]?.trim()), children: t("\u63D0\u4EA4\u56DE\u7B54\u5E76\u7EE7\u7EED") })
|
|
2988
|
+
] })
|
|
2989
|
+
] });
|
|
2990
|
+
}
|
|
2991
|
+
function ProjectSettings({ project, targets, command, disabled, onEditingChange }) {
|
|
2992
|
+
const test = project.commands.find((command2) => command2.id === "test") ?? project.commands[0];
|
|
2993
|
+
const [rules, setRules] = (0, import_react4.useState)(project.rules), [executable, setExecutable] = (0, import_react4.useState)(test?.executable ?? "node");
|
|
2994
|
+
const [args, setArgs] = (0, import_react4.useState)(JSON.stringify(test?.args ?? ["--test"])), [revision, setRevision] = (0, import_react4.useState)(project.revision), [error, setError] = (0, import_react4.useState)("");
|
|
2995
|
+
const [defaults, setDefaults] = (0, import_react4.useState)(project.defaults);
|
|
2996
|
+
const fingerprint = (rules2, executable2, args2, defaults2) => JSON.stringify([rules2, executable2, args2, ...["analyst", "architect", "developer", "reviewer"].map((role) => defaults2[role] ? targetKey(defaults2[role]) : "")]);
|
|
2997
|
+
const [baseline, setBaseline] = (0, import_react4.useState)(() => fingerprint(project.rules, test?.executable ?? "node", JSON.stringify(test?.args ?? ["--test"]), project.defaults));
|
|
2998
|
+
const dirty = fingerprint(rules, executable, args, defaults) !== baseline;
|
|
2999
|
+
const reportEditing = (0, import_react4.useRef)(onEditingChange);
|
|
3000
|
+
reportEditing.current = onEditingChange;
|
|
3001
|
+
(0, import_react4.useEffect)(() => {
|
|
3002
|
+
reportEditing.current?.(dirty);
|
|
3003
|
+
}, [dirty]);
|
|
3004
|
+
(0, import_react4.useEffect)(() => () => {
|
|
3005
|
+
reportEditing.current?.(false);
|
|
3006
|
+
}, []);
|
|
3007
|
+
const restore = (value) => {
|
|
3008
|
+
const test2 = value.commands.find((command2) => command2.id === "test") ?? value.commands[0];
|
|
3009
|
+
const executable2 = test2?.executable ?? "node", args2 = JSON.stringify(test2?.args ?? ["--test"]);
|
|
3010
|
+
setRules(value.rules);
|
|
3011
|
+
setExecutable(executable2);
|
|
3012
|
+
setArgs(args2);
|
|
3013
|
+
setDefaults(value.defaults);
|
|
3014
|
+
setRevision(value.revision);
|
|
3015
|
+
setError("");
|
|
3016
|
+
setBaseline(fingerprint(value.rules, executable2, args2, value.defaults));
|
|
3017
|
+
};
|
|
3018
|
+
(0, import_react4.useEffect)(() => {
|
|
3019
|
+
if (!dirty && project.revision !== revision) restore(project);
|
|
3020
|
+
}, [project.revision]);
|
|
3021
|
+
const prefix = (0, import_react4.useId)();
|
|
3022
|
+
const submit = async (event) => {
|
|
3023
|
+
event.preventDefault();
|
|
3024
|
+
setError("");
|
|
3025
|
+
let parsed;
|
|
3026
|
+
try {
|
|
3027
|
+
parsed = JSON.parse(args);
|
|
3028
|
+
if (!Array.isArray(parsed) || parsed.some((value) => typeof value !== "string")) throw new Error();
|
|
3029
|
+
} catch {
|
|
3030
|
+
setError('\u547D\u4EE4\u53C2\u6570\u8BF7\u586B\u5199 JSON \u5B57\u7B26\u4E32\u6570\u7EC4\uFF0C\u4F8B\u5982 ["run", "test"]\u3002');
|
|
3031
|
+
return;
|
|
3032
|
+
}
|
|
3033
|
+
try {
|
|
3034
|
+
const updated = await command("configureProject", project.id, { expectedRevision: revision, executionBackend: "dsh", rules, defaults, commands: [{ id: "test", executable: executable.trim(), args: parsed, timeoutMs: test?.timeoutMs ?? 12e4 }, ...project.commands.filter((command2) => command2.id !== "test" && command2.id !== test?.id)] });
|
|
3035
|
+
restore(updated);
|
|
3036
|
+
} catch {
|
|
3037
|
+
}
|
|
3038
|
+
};
|
|
3039
|
+
return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("details", { className: "sf-details", children: [
|
|
3040
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("summary", { children: t("\u5DE5\u7A0B\u914D\u7F6E\u4E0E\u9A8C\u8BC1\u547D\u4EE4") }),
|
|
3041
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("form", { className: "sf-settings-form", onSubmit: submit, children: [
|
|
3042
|
+
[["analyst", t("\u5206\u6790")], ["architect", t("\u8BBE\u8BA1")], ["developer", t("\u5F00\u53D1")], ["reviewer", t("\u590D\u6838")]].map(([role, label]) => /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("label", { className: "sf-field", htmlFor: `${prefix}-${role}`, children: [
|
|
3043
|
+
label,
|
|
3044
|
+
" ",
|
|
3045
|
+
t("\u9ED8\u8BA4\u6A21\u578B"),
|
|
3046
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("select", { id: `${prefix}-${role}`, value: defaults[role] ? targetKey(defaults[role]) : "", disabled, onChange: (event) => {
|
|
3047
|
+
const target = targets.find((target2) => targetKey(target2) === event.target.value);
|
|
3048
|
+
setDefaults((value) => {
|
|
3049
|
+
const next = { ...value };
|
|
3050
|
+
if (target) next[role] = target;
|
|
3051
|
+
else delete next[role];
|
|
3052
|
+
return next;
|
|
3053
|
+
});
|
|
3054
|
+
}, children: [
|
|
3055
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("option", { value: "", children: t("\u6BCF\u6B21\u542F\u52A8\u65F6\u9009\u62E9") }),
|
|
3056
|
+
targets.map((target) => /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("option", { value: targetKey(target), children: [
|
|
3057
|
+
target.connectionSlug,
|
|
3058
|
+
" / ",
|
|
3059
|
+
target.model
|
|
3060
|
+
] }, targetKey(target)))
|
|
3061
|
+
] })
|
|
3062
|
+
] }, role)),
|
|
3063
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("label", { className: "sf-field", htmlFor: `${prefix}-rules`, children: [
|
|
3064
|
+
t("\u5DE5\u7A0B\u89C4\u5219"),
|
|
3065
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("textarea", { id: `${prefix}-rules`, rows: 4, value: rules, onChange: (event) => setRules(event.target.value), disabled })
|
|
3066
|
+
] }),
|
|
3067
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("label", { className: "sf-field", htmlFor: `${prefix}-executable`, children: [
|
|
3068
|
+
t("\u9A8C\u8BC1\u547D\u4EE4"),
|
|
3069
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("input", { id: `${prefix}-executable`, value: executable, onChange: (event) => setExecutable(event.target.value), required: true, disabled, placeholder: "npm" })
|
|
3070
|
+
] }),
|
|
3071
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("label", { className: "sf-field", htmlFor: `${prefix}-args`, children: [
|
|
3072
|
+
t("\u547D\u4EE4\u53C2\u6570\uFF08JSON \u6570\u7EC4\uFF09"),
|
|
3073
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("input", { id: `${prefix}-args`, value: args, onChange: (event) => setArgs(event.target.value), disabled, placeholder: '["run", "test"]' })
|
|
3074
|
+
] }),
|
|
3075
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: "sf-hint", children: t('\u9A8C\u8BC1\u5728\u5DE5\u4F5C\u9879\u7684\u72EC\u7ACB\u5DE5\u4F5C\u533A\u4E2D\u6267\u884C\u3002npm \u9879\u76EE\u53EF\u4F7F\u7528 npm \u4E0E ["run", "test"]\u3002') }),
|
|
3076
|
+
error && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: "sf-inline-error", children: t(error) }),
|
|
3077
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "sf-actions", children: [
|
|
3078
|
+
dirty && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("button", { type: "button", disabled, onClick: () => restore(project), children: t("\u53D6\u6D88\u914D\u7F6E\u4FEE\u6539") }),
|
|
3079
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("button", { type: "submit", disabled: disabled || !executable.trim(), children: t("\u4FDD\u5B58\u5DE5\u7A0B\u914D\u7F6E") })
|
|
3080
|
+
] })
|
|
3081
|
+
] })
|
|
3082
|
+
] });
|
|
3083
|
+
}
|
|
3084
|
+
function Documents({ snapshot, read, run, command, disabled, visible, onEditingChange }) {
|
|
3085
|
+
const [chosen, setChosen] = (0, import_react4.useState)(""), [mode, setMode] = (0, import_react4.useState)("reading");
|
|
3086
|
+
const artifact = snapshot.artifacts.find((artifact2) => artifact2.id === chosen) ?? snapshot.artifacts[0];
|
|
3087
|
+
const revision = snapshot.revisions.find((revision2) => revision2.id === artifact?.currentRevisionId);
|
|
3088
|
+
const [reading, setReading] = (0, import_react4.useState)(), [error, setError] = (0, import_react4.useState)("");
|
|
3089
|
+
const [draft, setDraft] = (0, import_react4.useState)();
|
|
3090
|
+
const [saving, setSaving] = (0, import_react4.useState)(false), [saveError, setSaveError] = (0, import_react4.useState)(""), [savedRevisionId, setSavedRevisionId] = (0, import_react4.useState)("");
|
|
3091
|
+
const [savedArtifactBaseline, setSavedArtifactBaseline] = (0, import_react4.useState)(0);
|
|
3092
|
+
const editorId = (0, import_react4.useId)();
|
|
3093
|
+
(0, import_react4.useEffect)(() => {
|
|
3094
|
+
setReading(void 0);
|
|
3095
|
+
setError("");
|
|
3096
|
+
if (!revision || !visible) return;
|
|
3097
|
+
const controller = new AbortController();
|
|
3098
|
+
void read({ resource: "artifact", id: revision.id }, controller.signal).then((value) => {
|
|
3099
|
+
if (!controller.signal.aborted) setReading(value);
|
|
3100
|
+
}).catch((error2) => {
|
|
3101
|
+
if (!controller.signal.aborted) setError(errorMessage(error2));
|
|
3102
|
+
});
|
|
3103
|
+
return () => controller.abort();
|
|
3104
|
+
}, [read, revision?.id, visible]);
|
|
3105
|
+
if (!artifact || !revision) return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(Empty, { title: t("\u4EA7\u7269\u4F1A\u51FA\u73B0\u5728\u8FD9\u91CC"), children: t("\u5B8C\u6210\u9700\u6C42\u89C4\u683C\u3001\u5DE5\u7A0B\u8BBE\u8BA1\u6216\u4EFB\u52A1\u62C6\u89E3\u540E\uFF0C\u53EF\u9605\u8BFB\u5B8C\u6574\u6587\u6863\u5E76\u4EBA\u5DE5\u63A5\u7EB3\u3002") });
|
|
3106
|
+
const accepted = artifact.acceptedRevisionId === revision.id;
|
|
3107
|
+
const conflict = !!draft && (artifact.id !== draft.artifactId || artifact.revision !== draft.expectedRevision || revision.id !== draft.sourceRevisionId);
|
|
3108
|
+
const awaitingRevision = !!savedRevisionId && revision.id !== savedRevisionId && artifact.revision <= savedArtifactBaseline;
|
|
3109
|
+
const save = async (event) => {
|
|
3110
|
+
event.preventDefault();
|
|
3111
|
+
if (!draft || saving || disabled || conflict) return;
|
|
3112
|
+
setSaving(true);
|
|
3113
|
+
setSaveError("");
|
|
3114
|
+
try {
|
|
3115
|
+
const saved = await command("editArtifact", draft.artifactId, { expectedRevision: draft.expectedRevision, content: draft.content });
|
|
3116
|
+
setSavedRevisionId(saved.id);
|
|
3117
|
+
setSavedArtifactBaseline(draft.expectedRevision);
|
|
3118
|
+
setDraft(void 0);
|
|
3119
|
+
setMode("source");
|
|
3120
|
+
onEditingChange(false);
|
|
3121
|
+
} catch (error2) {
|
|
3122
|
+
setSaveError(error2.code === "REVISION_CONFLICT" ? "\u6587\u6863\u5DF2\u6709\u65B0\u4FEE\u8BA2\uFF0C\u7F16\u8F91\u8349\u7A3F\u5DF2\u4FDD\u7559\u3002\u8BF7\u6BD4\u8F83\u6700\u65B0\u6587\u6863\u540E\u7EE7\u7EED\u7F16\u8F91\u3002" : errorMessage(error2));
|
|
3123
|
+
} finally {
|
|
3124
|
+
setSaving(false);
|
|
3125
|
+
}
|
|
3126
|
+
};
|
|
3127
|
+
return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(import_jsx_runtime5.Fragment, { children: [
|
|
3128
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("label", { className: "sf-field", children: [
|
|
3129
|
+
t("\u5DE5\u7A0B\u6587\u6863"),
|
|
3130
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("select", { "aria-label": t("\u5DE5\u7A0B\u6587\u6863"), value: artifact.id, disabled: !!draft || saving || awaitingRevision, onChange: (event) => {
|
|
3131
|
+
setChosen(event.target.value);
|
|
3132
|
+
setSavedRevisionId("");
|
|
3133
|
+
}, children: snapshot.artifacts.map((artifact2) => /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("option", { value: artifact2.id, children: logicalLabels[artifact2.logicalId] ?? artifact2.logicalId }, artifact2.id)) })
|
|
3134
|
+
] }),
|
|
3135
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "sf-document-heading", children: [
|
|
3136
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(Badge, { value: accepted ? "accepted" : "candidate" }),
|
|
3137
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("span", { children: [
|
|
3138
|
+
t("\u4FEE\u8BA2"),
|
|
3139
|
+
" ",
|
|
3140
|
+
short(revision.id)
|
|
3141
|
+
] }),
|
|
3142
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { children: revision.reviewed ? t("\u5DF2\u72EC\u7ACB\u590D\u6838") : t("\u5F85\u72EC\u7ACB\u590D\u6838") }),
|
|
3143
|
+
!draft && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("button", { type: "button", disabled: disabled || saving || awaitingRevision, onClick: () => {
|
|
3144
|
+
setDraft({ artifactId: artifact.id, expectedRevision: artifact.revision, sourceRevisionId: revision.id, content: revision.content });
|
|
3145
|
+
setSaveError("");
|
|
3146
|
+
onEditingChange(true);
|
|
3147
|
+
}, children: t("\u7F16\u8F91\u6587\u6863") })
|
|
3148
|
+
] }),
|
|
3149
|
+
awaitingRevision && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: "sf-hint", role: "status", children: t("\u65B0\u5019\u9009\u6587\u6863\u5DF2\u4FDD\u5B58\uFF0C\u6B63\u5728\u540C\u6B65\u3002\u5B8C\u6210\u72EC\u7ACB\u590D\u6838\u540E\u624D\u80FD\u63A5\u7EB3\u3002") }),
|
|
3150
|
+
draft ? /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("form", { className: "sf-editor sf-document-editor", onSubmit: save, children: [
|
|
3151
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "sf-section-heading", children: [
|
|
3152
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("h3", { children: t("\u7F16\u8F91\u5B8C\u6574\u6267\u884C\u6587\u6863") }),
|
|
3153
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("span", { className: "sf-editor-version", children: [
|
|
3154
|
+
t("\u57FA\u4E8E"),
|
|
3155
|
+
" ",
|
|
3156
|
+
short(draft.sourceRevisionId)
|
|
3157
|
+
] })
|
|
3158
|
+
] }),
|
|
3159
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: "sf-hint", children: t("\u4EBA\u5DE5\u4FEE\u6539\u4F1A\u751F\u6210\u65B0\u7684\u5019\u9009\u4FEE\u8BA2\uFF0C\u9700\u8981\u91CD\u65B0\u72EC\u7ACB\u590D\u6838\u4E0E\u63A5\u7EB3\u3002") }),
|
|
3160
|
+
(conflict || saveError) && /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "sf-editor-conflict", role: "alert", children: [
|
|
3161
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { children: conflict ? t("\u6587\u6863\u5DF2\u6709\u65B0\u4FEE\u8BA2\u3002\u4F60\u7684\u7F16\u8F91\u8349\u7A3F\u5DF2\u4FDD\u7559\uFF0C\u8BF7\u5148\u6BD4\u8F83\u6700\u65B0\u6587\u6863\u3002") : t(saveError) }),
|
|
3162
|
+
conflict && /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(import_jsx_runtime5.Fragment, { children: [
|
|
3163
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("details", { children: [
|
|
3164
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("summary", { children: t("\u67E5\u770B\u6700\u65B0\u6587\u6863") }),
|
|
3165
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("pre", { children: revision.content })
|
|
3166
|
+
] }),
|
|
3167
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("button", { type: "button", disabled: saving, onClick: () => {
|
|
3168
|
+
setDraft((value) => value && { ...value, expectedRevision: artifact.revision, sourceRevisionId: revision.id });
|
|
3169
|
+
setSaveError("");
|
|
3170
|
+
}, children: t("\u4EE5\u6700\u65B0\u4FEE\u8BA2\u7EE7\u7EED\u7F16\u8F91") }),
|
|
3171
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: "sf-hint", children: t("\u4FDD\u7559\u4F60\u7684\u6B63\u6587\u8349\u7A3F\uFF0C\u5C06\u6700\u65B0\u6587\u6863\u8BBE\u4E3A\u4FDD\u5B58\u57FA\u7EBF\u3002") })
|
|
3172
|
+
] })
|
|
3173
|
+
] }),
|
|
3174
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("label", { className: "sf-field", htmlFor: editorId, children: [
|
|
3175
|
+
t("\u6587\u6863 Markdown \u6B63\u6587"),
|
|
3176
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("textarea", { id: editorId, "aria-label": t("\u6587\u6863 Markdown \u6B63\u6587"), rows: 18, maxLength: 2e6, value: draft.content, disabled: saving, onChange: (event) => setDraft((value) => value && { ...value, content: event.target.value }) })
|
|
3177
|
+
] }),
|
|
3178
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "sf-actions", children: [
|
|
3179
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("button", { type: "button", disabled: saving, onClick: () => {
|
|
3180
|
+
setDraft(void 0);
|
|
3181
|
+
setSaveError("");
|
|
3182
|
+
onEditingChange(false);
|
|
3183
|
+
}, children: t("\u53D6\u6D88\u7F16\u8F91\u6587\u6863") }),
|
|
3184
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("button", { className: "sf-primary", disabled: disabled || saving || conflict || !draft.content.trim(), children: saving ? t("\u6B63\u5728\u4FDD\u5B58\u2026") : t("\u4FDD\u5B58\u65B0\u5019\u9009") })
|
|
3185
|
+
] })
|
|
3186
|
+
] }) : /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(import_jsx_runtime5.Fragment, { children: [
|
|
3187
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "sf-segmented", "aria-label": t("\u6587\u6863\u9605\u8BFB\u65B9\u5F0F"), children: [
|
|
3188
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("button", { type: "button", "aria-pressed": mode === "reading", onClick: () => setMode("reading"), children: t("\u9605\u8BFB\u7B80\u62A5") }),
|
|
3189
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("button", { type: "button", "aria-pressed": mode === "source", onClick: () => setMode("source"), children: t("\u5B8C\u6574\u6267\u884C\u6587\u6863") })
|
|
3190
|
+
] }),
|
|
3191
|
+
error && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: "sf-inline-error", children: t(error) }),
|
|
3192
|
+
mode === "source" ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { className: "sf-document", children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(MarkdownView, { content: revision.content, idPrefix: `specflow-${revision.id}` }) }) : reading ? /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("article", { className: "sf-reading", children: [
|
|
3193
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: "sf-eyebrow", children: reading.mode === "authored" ? t("\u4EBA\u7C7B\u9605\u8BFB\u7B80\u62A5") : t("\u539F\u6587\u6458\u5F55") }),
|
|
3194
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("h3", { children: reading.brief.title }),
|
|
3195
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: "sf-reading-summary", children: reading.brief.summary }),
|
|
3196
|
+
reading.brief.sections.map((section, index) => /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("section", { children: [
|
|
3197
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("h4", { children: [
|
|
3198
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { children: String(index + 1).padStart(2, "0") }),
|
|
3199
|
+
section.title
|
|
3200
|
+
] }),
|
|
3201
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("ul", { children: section.items.map((item, index2) => /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("li", { children: item }, index2)) })
|
|
3202
|
+
] }, index)),
|
|
3203
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: "sf-hint", children: t("\u63A5\u7EB3\u4EE5\u5B8C\u6574\u6267\u884C\u6587\u6863\u4E3A\u51C6\uFF1B\u672C\u7B80\u62A5\u4E0E\u4FEE\u8BA2 {0} \u5BF9\u5E94\u3002", { 0: short(reading.sourceRevisionId) }) })
|
|
3204
|
+
] }) : /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: "sf-loading", children: t("\u6B63\u5728\u751F\u6210\u9605\u8BFB\u89C6\u56FE\u2026") }),
|
|
3205
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "sf-accept-bar", children: [
|
|
3206
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { children: accepted ? t("\u5F53\u524D\u6587\u6863\u5DF2\u63A5\u7EB3") : revision.reviewed ? t("\u590D\u6838\u5DF2\u5B8C\u6210\uFF0C\u53EF\u6838\u5BF9\u5E76\u63A5\u7EB3") : t("\u5B8C\u6210\u72EC\u7ACB\u590D\u6838\u540E\u624D\u80FD\u63A5\u7EB3") }),
|
|
3207
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("button", { type: "button", className: "sf-primary", disabled: disabled || awaitingRevision || accepted || !revision.reviewed, onClick: () => run("acceptArtifact", artifact.id, { expectedRevision: artifact.revision, reason: t("\u5728 DSH Specflow \u9762\u677F\u4E2D\u6838\u5BF9\u5E76\u63A5\u7EB3") }), children: accepted ? t("\u5DF2\u63A5\u7EB3") : t("\u63A5\u7EB3\u6B64\u4FEE\u8BA2") })
|
|
3208
|
+
] })
|
|
3209
|
+
] }),
|
|
3210
|
+
snapshot.findings.filter((finding) => finding.status === "open" && finding.targetLogicalId === artifact.logicalId).map((finding) => /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "sf-finding", children: [
|
|
3211
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(Badge, { value: "blocked", children: finding.severity === "blocker" ? t("\u963B\u65AD\u9879") : t("\u590D\u6838\u5EFA\u8BAE") }),
|
|
3212
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { children: finding.body }),
|
|
3213
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("code", { children: finding.location })
|
|
3214
|
+
] }, finding.id))
|
|
3215
|
+
] });
|
|
3216
|
+
}
|
|
3217
|
+
function Code({ snapshot, read, run, disabled, visible }) {
|
|
3218
|
+
const candidate = snapshot.candidates.at(-1);
|
|
3219
|
+
const [diff, setDiff] = (0, import_react4.useState)(), [precheck, setPrecheck] = (0, import_react4.useState)(), [error, setError] = (0, import_react4.useState)("");
|
|
3220
|
+
const [acknowledged, setAcknowledged] = (0, import_react4.useState)(false);
|
|
3221
|
+
const key = `${candidate?.id}:${candidate?.revision}:${snapshot.evidence.map((evidence) => evidence.revision).join(",")}:${snapshot.findings.map((finding) => finding.revision).join(",")}`;
|
|
3222
|
+
(0, import_react4.useEffect)(() => {
|
|
3223
|
+
setDiff(void 0);
|
|
3224
|
+
setPrecheck(void 0);
|
|
3225
|
+
setError("");
|
|
3226
|
+
setAcknowledged(false);
|
|
3227
|
+
if (!candidate || !visible) return;
|
|
3228
|
+
const controller = new AbortController();
|
|
3229
|
+
void Promise.all([read({ resource: "candidateDiff", id: candidate.id }, controller.signal), read({ resource: "acceptancePrecheck", id: candidate.id }, controller.signal)]).then(([result, check]) => {
|
|
3230
|
+
if (!controller.signal.aborted) {
|
|
3231
|
+
setDiff({ candidateId: candidate.id, text: result.diff });
|
|
3232
|
+
setPrecheck(check);
|
|
3233
|
+
}
|
|
3234
|
+
}).catch((error2) => {
|
|
3235
|
+
if (!controller.signal.aborted) setError(errorMessage(error2));
|
|
3236
|
+
});
|
|
3237
|
+
return () => controller.abort();
|
|
3238
|
+
}, [read, key, visible]);
|
|
3239
|
+
if (!candidate) return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(Empty, { title: t("\u7B49\u5F85\u4EE3\u7801\u5019\u9009"), children: t("\u5B9E\u73B0\u9636\u6BB5\u4F1A\u5728\u72EC\u7ACB\u5DE5\u4F5C\u533A\u4E2D\u4FEE\u6539\u4EE3\u7801\uFF0C\u9A8C\u8BC1\u4E0E\u590D\u6838\u8BB0\u5F55\u4F1A\u4FDD\u5B58\u5728\u8FD9\u91CC\u3002") });
|
|
3240
|
+
return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(import_jsx_runtime5.Fragment, { children: [
|
|
3241
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "sf-section-heading", children: [
|
|
3242
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("h3", { children: t("\u4EE3\u7801\u5019\u9009") }),
|
|
3243
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(Badge, { value: candidate.status })
|
|
3244
|
+
] }),
|
|
3245
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("dl", { className: "sf-facts", children: [
|
|
3246
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { children: [
|
|
3247
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("dt", { children: t("\u57FA\u7EBF") }),
|
|
3248
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("dd", { children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("code", { children: short(candidate.baseCommit) }) })
|
|
3249
|
+
] }),
|
|
3250
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { children: [
|
|
3251
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("dt", { children: t("\u5019\u9009") }),
|
|
3252
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("dd", { children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("code", { children: short(candidate.checkpointCommit) }) })
|
|
3253
|
+
] })
|
|
3254
|
+
] }),
|
|
3255
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("code", { className: "sf-path", children: candidate.workspace }),
|
|
3256
|
+
error && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: "sf-inline-error", children: t(error) }),
|
|
3257
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("details", { open: true, className: "sf-details", children: [
|
|
3258
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("summary", { children: t("\u4EE3\u7801\u5DEE\u5F02") }),
|
|
3259
|
+
diff?.candidateId === candidate.id ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("pre", { className: "sf-diff", children: diff.text || t("\u5F53\u524D\u5019\u9009\u6CA1\u6709\u6587\u672C\u5DEE\u5F02\u3002") }) : /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: "sf-loading", children: t("\u6B63\u5728\u8BFB\u53D6\u4EE3\u7801\u5DEE\u5F02\u2026") })
|
|
3260
|
+
] }),
|
|
3261
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("h4", { className: "sf-subheading", children: t("\u9A8C\u8BC1\u8BC1\u636E") }),
|
|
3262
|
+
snapshot.evidence.filter((evidence) => evidence.candidateId === candidate.id).map((evidence) => /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("details", { className: "sf-evidence", children: [
|
|
3263
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("summary", { children: [
|
|
3264
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(Badge, { value: evidence.status }),
|
|
3265
|
+
evidence.command.id,
|
|
3266
|
+
evidence.stale && ` \xB7 ${t("\u5DF2\u8FC7\u671F")}`
|
|
3267
|
+
] }),
|
|
3268
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("pre", { children: [evidence.stdout, evidence.stderr].filter(Boolean).join("\n") || t("\u9000\u51FA\u7801 {0}", { "0": evidence.exitCode }) })
|
|
3269
|
+
] }, evidence.id)),
|
|
3270
|
+
precheck?.blockers.length ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("ul", { className: "sf-blockers", children: precheck.blockers.map((blocker) => /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("li", { children: blocker.message }, blocker.code)) }) : null,
|
|
3271
|
+
candidate.status !== "accepted" && /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(import_jsx_runtime5.Fragment, { children: [
|
|
3272
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("label", { className: "sf-checkbox", children: [
|
|
3273
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("input", { type: "checkbox", checked: acknowledged, onChange: (event) => setAcknowledged(event.target.checked), disabled: !diff || disabled }),
|
|
3274
|
+
t("\u6211\u5DF2\u6838\u5BF9\u4EE3\u7801\u5DEE\u5F02\u4E0E\u9A8C\u8BC1\u8BC1\u636E\uFF0C\u786E\u8BA4\u5C06\u5019\u9009\u6574\u5408\u5230\u5DE5\u7A0B")
|
|
3275
|
+
] }),
|
|
3276
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "sf-actions", children: [
|
|
3277
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("button", { type: "button", disabled, onClick: () => run("verifyCandidate", candidate.id), children: t("\u8FD0\u884C\u9A8C\u8BC1") }),
|
|
3278
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("button", { type: "button", className: "sf-primary", disabled: disabled || !precheck?.ready || !acknowledged || !diff, onClick: () => run("acceptCode", candidate.id), children: t("\u63A5\u7EB3\u4EE3\u7801") })
|
|
3279
|
+
] })
|
|
3280
|
+
] })
|
|
3281
|
+
] });
|
|
3282
|
+
}
|
|
3283
|
+
function Runs({ snapshot, bootstrap, read, run, disabled, visible }) {
|
|
3284
|
+
const [chosen, setChosen] = (0, import_react4.useState)(""), [detail, setDetail] = (0, import_react4.useState)(), [error, setError] = (0, import_react4.useState)("");
|
|
3285
|
+
const attempt = snapshot.attempts.find((attempt2) => attempt2.id === chosen) ?? snapshot.attempts.at(-1);
|
|
3286
|
+
(0, import_react4.useEffect)(() => {
|
|
3287
|
+
setDetail(void 0);
|
|
3288
|
+
setError("");
|
|
3289
|
+
if (!attempt || !visible) return;
|
|
3290
|
+
const controller = new AbortController();
|
|
3291
|
+
void read({ resource: "attempt", id: attempt.id }, controller.signal).then((value) => {
|
|
3292
|
+
if (!controller.signal.aborted) setDetail(value);
|
|
3293
|
+
}).catch((error2) => {
|
|
3294
|
+
if (!controller.signal.aborted) setError(errorMessage(error2));
|
|
3295
|
+
});
|
|
3296
|
+
return () => controller.abort();
|
|
3297
|
+
}, [read, attempt?.id, attempt?.revision, visible]);
|
|
3298
|
+
if (!attempt) return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(Empty, { title: t("\u8FD0\u884C\u8BB0\u5F55\u4ECE\u9996\u6B21\u6D3E\u53D1\u5F00\u59CB"), children: t("\u6BCF\u6B21\u5C1D\u8BD5\u4FDD\u7559\u539F\u59CB\u6A21\u578B\u3001\u6267\u884C\u5E95\u5EA7\u3001\u7ED3\u679C\u548C\u9519\u8BEF\uFF0C\u65B9\u4FBF\u5B9A\u4F4D\u95EE\u9898\u3002") });
|
|
3299
|
+
const binding = snapshot.bindings.filter((binding2) => binding2.attemptId === attempt.id).at(-1);
|
|
3300
|
+
const canResume = !!bootstrap.catalog.backends.find((backend) => backend.id === attempt.target.backend)?.capabilities.canResume;
|
|
3301
|
+
return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(import_jsx_runtime5.Fragment, { children: [
|
|
3302
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("label", { className: "sf-field", children: [
|
|
3303
|
+
t("\u6267\u884C\u5C1D\u8BD5"),
|
|
3304
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("select", { value: attempt.id, onChange: (event) => setChosen(event.target.value), children: [...snapshot.attempts].reverse().map((attempt2) => /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("option", { value: attempt2.id, children: [
|
|
3305
|
+
workflowText(snapshot.nodes.find((node) => node.id === attempt2.nodeRunId)?.name || ""),
|
|
3306
|
+
" \xB7 #",
|
|
3307
|
+
attempt2.number,
|
|
3308
|
+
" \xB7 ",
|
|
3309
|
+
labels[attempt2.execution]
|
|
3310
|
+
] }, attempt2.id)) })
|
|
3311
|
+
] }),
|
|
3312
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("section", { className: "sf-card", children: [
|
|
3313
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "sf-section-heading", children: [
|
|
3314
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("h3", { children: [
|
|
3315
|
+
t("\u5C1D\u8BD5 #"),
|
|
3316
|
+
attempt.number
|
|
3317
|
+
] }),
|
|
3318
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(Badge, { value: attempt.execution })
|
|
3319
|
+
] }),
|
|
3320
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("dl", { className: "sf-run-facts", children: [
|
|
3321
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { children: [
|
|
3322
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("dt", { children: t("\u6267\u884C\u5E95\u5EA7") }),
|
|
3323
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("dd", { children: attempt.target.backend })
|
|
3324
|
+
] }),
|
|
3325
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { children: [
|
|
3326
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("dt", { children: t("\u8FDE\u63A5 / \u6A21\u578B") }),
|
|
3327
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("dd", { children: [
|
|
3328
|
+
attempt.target.connectionSlug,
|
|
3329
|
+
" / ",
|
|
3330
|
+
attempt.target.model
|
|
3331
|
+
] })
|
|
3332
|
+
] }),
|
|
3333
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { children: [
|
|
3334
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("dt", { children: t("\u542F\u52A8\u65F6\u95F4") }),
|
|
3335
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("dd", { children: time(attempt.startedAt) })
|
|
3336
|
+
] }),
|
|
3337
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { children: [
|
|
3338
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("dt", { children: t("\u7ED3\u675F\u65F6\u95F4") }),
|
|
3339
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("dd", { children: time(attempt.finishedAt) })
|
|
3340
|
+
] }),
|
|
3341
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { children: [
|
|
3342
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("dt", { children: t("\u6267\u884C\u4F1A\u8BDD") }),
|
|
3343
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("dd", { children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("code", { children: binding?.ref.sessionId ?? t("\u5C1A\u672A\u7ED1\u5B9A") }) })
|
|
3344
|
+
] })
|
|
3345
|
+
] }),
|
|
3346
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(ExecutionFacts, { attempt: detail || attempt, compact: true }),
|
|
3347
|
+
detail?.id === attempt.id && detail.verificationPending && detail.verificationLive === false && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(VerificationRecovery, { compact: true, disabled, onConfirm: (reason) => run("confirmVerificationStopped", attempt.id, { expectedRevision: (detail || attempt).revision, reason }) }),
|
|
3348
|
+
(detail?.error || detail?.controlError || attempt.error || attempt.controlError || error) && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: "sf-inline-error", children: t(detail?.error || detail?.controlError || attempt.error || attempt.controlError || error) }),
|
|
3349
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "sf-actions", children: [
|
|
3350
|
+
activeStates.includes(attempt.execution) && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("button", { type: "button", className: "sf-stop", disabled, onClick: () => run("stopAttempt", attempt.id), children: t("\u505C\u6B62") }),
|
|
3351
|
+
attempt.execution === "reconciling" && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("button", { type: "button", disabled, onClick: () => run("reconcileAttempt", attempt.id), children: t("\u6838\u5BF9\u6267\u884C\u7ED3\u679C") }),
|
|
3352
|
+
canResume && ["failed", "cancelled"].includes(attempt.execution) && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("button", { type: "button", disabled, onClick: () => run("resumeAttempt", attempt.id), children: t("\u5C1D\u8BD5\u6062\u590D\u539F\u6267\u884C") })
|
|
3353
|
+
] }),
|
|
3354
|
+
!canResume && ["failed", "cancelled"].includes(attempt.execution) && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: "sf-hint", children: t("\u539F\u6267\u884C\u4E0D\u652F\u6301\u6062\u590D\u3002\u6838\u5BF9\u7ED3\u679C\u540E\uFF0C\u53EF\u5728\u6D41\u7A0B\u4E2D\u91CD\u65B0\u6267\u884C\u6B64\u6B65\u9AA4\u3002") })
|
|
3355
|
+
] }),
|
|
3356
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("details", { className: "sf-details", open: true, children: [
|
|
3357
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("summary", { children: t("\u8FD0\u884C\u8F93\u51FA") }),
|
|
3358
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("pre", { children: detail?.output ?? t("\u5F53\u524D\u6CA1\u6709\u5DF2\u6301\u4E45\u5316\u7684\u8F93\u51FA\u3002") })
|
|
3359
|
+
] }),
|
|
3360
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("details", { className: "sf-details", children: [
|
|
3361
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("summary", { children: t("\u539F\u59CB\u6267\u884C\u63D0\u793A") }),
|
|
3362
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("pre", { children: detail?.prompt ?? t("\u6B63\u5728\u8BFB\u53D6\u2026") })
|
|
3363
|
+
] })
|
|
3364
|
+
] });
|
|
3365
|
+
}
|
|
3366
|
+
function InteractionCard({ id, request, command, disabled, onEditingChange }) {
|
|
3367
|
+
const prefix = (0, import_react4.useId)(), [answer, setAnswer] = (0, import_react4.useState)("");
|
|
3368
|
+
const [savedAnswer, setSavedAnswer] = (0, import_react4.useState)("");
|
|
3369
|
+
const dirty = answer !== savedAnswer;
|
|
3370
|
+
const reportEditing = (0, import_react4.useRef)(onEditingChange);
|
|
3371
|
+
reportEditing.current = onEditingChange;
|
|
3372
|
+
(0, import_react4.useEffect)(() => {
|
|
3373
|
+
reportEditing.current?.(dirty);
|
|
3374
|
+
}, [dirty]);
|
|
3375
|
+
(0, import_react4.useEffect)(() => () => {
|
|
3376
|
+
reportEditing.current?.(false);
|
|
3377
|
+
}, []);
|
|
3378
|
+
const submit = async (event) => {
|
|
3379
|
+
event.preventDefault();
|
|
3380
|
+
let value = answer;
|
|
3381
|
+
try {
|
|
3382
|
+
value = JSON.parse(answer);
|
|
3383
|
+
} catch {
|
|
3384
|
+
}
|
|
3385
|
+
try {
|
|
3386
|
+
await command("answerInteraction", id, { answer: value });
|
|
3387
|
+
setSavedAnswer(answer);
|
|
3388
|
+
} catch {
|
|
3389
|
+
}
|
|
3390
|
+
};
|
|
3391
|
+
return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("form", { className: "sf-card sf-clarification", onSubmit: submit, children: [
|
|
3392
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("h3", { children: t("\u8FD0\u884C\u6B63\u5728\u7B49\u5F85\u4F60\u7684\u56DE\u7B54") }),
|
|
3393
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("pre", { children: typeof request === "string" ? request : JSON.stringify(request, null, 2) }),
|
|
3394
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("label", { htmlFor: prefix, children: t("\u56DE\u7B54\uFF08\u6587\u672C\u6216 JSON\uFF09") }),
|
|
3395
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("textarea", { id: prefix, rows: 3, value: answer, onChange: (event) => setAnswer(event.target.value), required: true, disabled }),
|
|
3396
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "sf-actions", children: [
|
|
3397
|
+
dirty && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("button", { type: "button", disabled, onClick: () => setAnswer(savedAnswer), children: t("\u53D6\u6D88\u56DE\u7B54\u4FEE\u6539") }),
|
|
3398
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("button", { className: "sf-primary", disabled: disabled || !answer.trim(), children: t("\u63D0\u4EA4\u7ED9\u5F53\u524D\u8FD0\u884C") })
|
|
3399
|
+
] })
|
|
3400
|
+
] });
|
|
3401
|
+
}
|
|
3402
|
+
|
|
3403
|
+
return module.exports;
|
|
3404
|
+
} });
|