oasis_test 0.1.61 → 0.1.62
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/dist/index.js +161 -28
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -3867,17 +3867,28 @@ async function assembleContext(args) {
|
|
|
3867
3867
|
})
|
|
3868
3868
|
];
|
|
3869
3869
|
})() : canvasMode ? [
|
|
3870
|
-
`\u4F60\u8D1F\u8D23 **design \u4EA7\u7269 \`${artifactId}\`**\uFF0C\u8FD0\u884C\u5728**\u901A\u7528\u8FD0\u884C\u65F6**\u4E0A\u2014\u2014\u4F60\u662F**\u7532\u65B9\u8BBE\u8BA1\u8D1F\u8D23\u4EBA**\uFF0C\u591A\u8F6E\u5BF9\u8BDD\u9A71\u52A8**\u534F\u4F5C\u753B\u677F\u5F15\u64CE**\u6253\u78E8\u754C\u9762\u7A3F\uFF0C\u6EE1\u610F\u4E86\u624D\u4EA4\u4ED8\
|
|
3870
|
+
`\u4F60\u8D1F\u8D23 **design \u4EA7\u7269 \`${artifactId}\`**\uFF0C\u8FD0\u884C\u5728**\u901A\u7528\u8FD0\u884C\u65F6**\u4E0A\u2014\u2014\u4F60\u662F**\u7532\u65B9\u8BBE\u8BA1\u8D1F\u8D23\u4EBA**\uFF0C\u591A\u8F6E\u5BF9\u8BDD\u9A71\u52A8**\u534F\u4F5C\u753B\u677F\u5F15\u64CE**\u6253\u78E8\u754C\u9762\u7A3F\uFF0C\u6EE1\u610F\u4E86\u624D\u4EA4\u4ED8\u3002`,
|
|
3871
3871
|
``,
|
|
3872
|
-
|
|
3873
|
-
|
|
3872
|
+
`**\u7B2C 0 \u6B65\uFF08\u6BCF\u6B21\u88AB\u6D3E\u53D1\u90FD\u5148\u505A\uFF0C\u518D\u51B3\u5B9A\u5F00\u4E0D\u5F00\u65B0\u8F6E\uFF09\u2014\u2014\u5148\u53D6\u8D27\uFF1A**`,
|
|
3873
|
+
``,
|
|
3874
|
+
` oasis design status ${artifactId}`,
|
|
3875
|
+
``,
|
|
3876
|
+
`- \u677F\u4E0A**\u5DF2\u6709\u8DD1\u5B8C\u7684\u4EA4\u4ED8\u7269**\uFF08\u4E0A\u4E00\u4E2A\u4F1A\u8BDD\u59D4\u6258\u7684\u5F15\u64CE\u8DD1\u5B8C\u4E86\uFF0C\u8D27\u6CA1\u4EBA\u6536\uFF09\u2192 \`--pull\` \u62C9\u5230\u672C\u5730**\u76F4\u63A5\u8FDB\u300C\u8BFB\u4EA7\u7269\u300D**\uFF0C\u522B\u91CD\u8DD1\u5F15\u64CE\u767D\u70E7 20-40 \u5206\u949F\uFF1B`,
|
|
3877
|
+
`- **\u5F15\u64CE\u8FD8\u5728\u8DD1** \u2192 \u522B\u518D\u8D77\u65B0\u8F6E\uFF1B\u8FC7\u51E0\u5206\u949F\u518D status\uFF0C\u6216\u672C\u8F6E\u6536\u5DE5\uFF08\u5F15\u64CE\u5728\u670D\u52A1\u7AEF\u81EA\u5DF1\u8DD1\u5B8C\uFF0C\u4E0B\u6B21\u6D3E\u53D1\u6765\u53D6\uFF09\uFF1B`,
|
|
3878
|
+
`- \u4EC0\u4E48\u90FD\u6CA1\u6709 \u2192 \u8D77\u9996\u8F6E\u3002`,
|
|
3879
|
+
``,
|
|
3880
|
+
`**\u8D77\u4E00\u8F6E\uFF08\u4E0D\u963B\u585E\uFF0C\u79D2\u56DE\uFF09\uFF1A**`,
|
|
3881
|
+
``,
|
|
3882
|
+
` oasis design chat ${artifactId} --message "<\u8FD9\u4E00\u8F6E\u8981\u5F15\u64CE\u505A\u4EC0\u4E48\uFF1A\u8BBE\u8BA1\u9700\u6C42 + \u771F\u5B9E\u6570\u636E>" --async`,
|
|
3883
|
+
` oasis design chat ${artifactId} --turn continue --message "<\u8BFB\u5B8C\u4E0A\u4E00\u7248\u4EA7\u7269\u540E\uFF0C\u8981\u6539\u54EA\u91CC>" --async`,
|
|
3884
|
+
``,
|
|
3885
|
+
`\u5F15\u64CE\u4E00\u8F6E\u8981 13\u201344 \u5206\u949F\uFF0C\u5728 od \u670D\u52A1\u7AEF\u81EA\u5DF1\u8DD1\u3001**\u4E0E\u4F60\u7684\u4F1A\u8BDD\u751F\u6B7B\u65E0\u5173**\u2014\u2014\`--async\` \u4E0B\u5355\u5373\u8FD4\uFF0C**\u4E0D\u8981\u81EA\u5DF1\u53D1\u660E\u963B\u585E\u7B49\u5F85\u3001\u66F4\u522B\u7528 \`timeout\` \u5305\u547D\u4EE4**\u3002\u4E0B\u5355\u540E\u6BCF\u9694\u51E0\u5206\u949F \`oasis design status\` \u770B\u4E00\u773C\uFF1B\u4E00\u76F4\u6CA1\u5B8C\u4E5F\u53EF\u4EE5\u6536\u5DE5\uFF0C\u4E0B\u6B21\u6D3E\u53D1\u5148 status \u53D6\u8D27\u3002`,
|
|
3874
3886
|
``,
|
|
3875
3887
|
`**\u6BCF\u4E00\u8F6E\u7684\u95ED\u73AF\uFF08\u522B\u8DF3\u6B65\uFF09**\uFF1A`,
|
|
3876
3888
|
`1. **\u5582\u9971\u5B83**\uFF1A\u9996\u8F6E \`--message\` \u628A\u8BBE\u8BA1\u9700\u6C42\u8FDE\u540C**\u771F\u5B9E\u793A\u4F8B\u6570\u636E**\u4E00\u8D77\u7ED9\u8DB3\u2014\u2014\u5F15\u64CE\u53EA\u62FF\u5230 \`DESIGN_BRIEF.md\`/\`inputs/\`\uFF0CPRD \u91CC\u6CA1\u6709\u7684 mock \u6570\u636E\u5B83\u4F1A**\u81EA\u5DF1\u7F16**\uFF08\u66FE\u628A\u5A74\u513F\u770B\u62A4\u5668\u7F16\u6210\u8033\u673A\uFF09\u3002\u771F\u5B9E\u4E1A\u52A1\u6570\u636E\uFF08\u4EA7\u54C1/\u4E70\u5BB6/\u8BA2\u5355\u7B49\uFF09\u5728\u54EA\u3001\u957F\u4EC0\u4E48\u6837\uFF0C\u4F60**\u5FC5\u987B\u5728 message \u91CC\u5199\u6E05\u6216\u544A\u8BC9\u5B83\u53BB\u54EA\u53D6**\uFF1B`,
|
|
3877
|
-
`2. **\u8BFB\u4EA7\u7269**\uFF1A\
|
|
3878
|
-
`3. **\u51B3\u5B9A**\uFF1A\u591F\u597D \u2192 \`oasis propose ${artifactId} --reason "<\u8FD9\u7248\u505A\u4E86\u4EC0\u4E48>"\` \u4EA4\u7A3F\uFF1B\u8FD8\u5DEE \u2192
|
|
3889
|
+
`2. **\u8BFB\u4EA7\u7269**\uFF1A\`oasis design status ${artifactId} --pull\` \u628A\u4EA4\u4ED8\u7269\u62C9\u5230\u672C\u5730\u2014\u2014**\u6253\u5F00 \`index.html\` \u771F\u8BFB\u4E00\u904D**\uFF0C\u5BF9\u7167 \`DESIGN_BRIEF.md\` \u4E0E \`inputs/\` \u6838\uFF1A\u6570\u636E\u5BF9\u4E0D\u5BF9\uFF1F\u72B6\u6001/\u8FB9\u754C\u6001\u5168\u4E0D\u5168\uFF1F\u6709\u6CA1\u6709\u7F16\u9020\uFF1F`,
|
|
3890
|
+
`3. **\u51B3\u5B9A**\uFF1A\u591F\u597D \u2192 \`oasis propose ${artifactId} --from-dir <\u62C9\u4E0B\u6765\u7684\u76EE\u5F55> --reason "<\u8FD9\u7248\u505A\u4E86\u4EC0\u4E48>"\` \u4EA4\u7A3F\uFF1B\u8FD8\u5DEE \u2192 \`--turn continue\` **\u518D\u4E00\u8F6E**\u6253\u78E8\uFF1B\u9047\u5230**\u4F60\u4E5F\u5B9A\u4E0D\u4E86\u7684\u53D6\u820D**\uFF08\u5982\u67D0\u6001\u7528\u54EA\u4E2A\u4E70\u5BB6\u627F\u8F7D\uFF09\u2192 \u5199\u8FDB acceptance.md \u7684\u300C\u5F00\u653E\u95EE\u9898\u300D\uFF0C\u6216 \`oasis gap ${artifactId} --desc "<\u8981\u4EBA\u5B9A\u4EC0\u4E48>"\` \u5192\u6CE1\u7ED9\u4EBA\uFF1B`,
|
|
3879
3891
|
`- **\u522B\u628A\u7B2C\u4E00\u7248\u76F2\u76EE propose**\u2014\u2014\u5148\u8BFB\u3001\u5148\u81EA\u68C0\u3001\u4E0D\u591F\u5C31\u518D\u4E00\u8F6E\uFF0C\u6BD4 propose \u51FA\u53BB\u88AB\u4E0B\u6E38\u6253\u56DE\u3001\u7ED5\u6574\u5F20\u56FE\u4E00\u5708\u4FBF\u5B9C\u5F97\u591A\uFF1B`,
|
|
3880
|
-
`- \u5F15\u64CE\u4E00\u8F6E\u8981 13\u201344 \u5206\u949F\uFF08\u771F\u5728\u753B\u5E03\u4E0A\u753B\uFF09\uFF0C\`oasis design chat\` \u5185\u90E8\u5DF2\u8F6E\u8BE2 30 \u5206\u949F\u3002**\u522B\u7528 \`timeout\` \u5305\u5B83\u3001\u522B 15 \u5206\u949F\u5C31\u5F53\u5B83\u5931\u8D25**\u2014\u2014\u8010\u5FC3\u7B49\u5B83\u8DD1\u5B8C\uFF1B`,
|
|
3881
3892
|
`- \u7F3A**\u8FD8\u4E0D\u5B58\u5728\u7684\u4E0A\u6E38\u524D\u7F6E**\u505A\u4E0D\u4E0B\u53BB \u2192 \`oasis gap ${artifactId} --desc "<\u7F3A\u4EC0\u4E48>"\` \u62A5\u7F3A\u53E3\u540E\u6536\u5DE5\u3002`
|
|
3882
3893
|
] : (() => {
|
|
3883
3894
|
const codeRepo = args.codeRepo ?? null;
|
|
@@ -3933,7 +3944,7 @@ async function assembleContext(args) {
|
|
|
3933
3944
|
``,
|
|
3934
3945
|
...canvasMode ? [
|
|
3935
3946
|
`## \u5173\u4E8E\u5DE5\u5177`,
|
|
3936
|
-
`oasis CLI \u5DF2\u6CE8\u5165\uFF08\`OASIS_SERVER\` / \`OASIS_TOKEN\` \u5C31\u7EEA\uFF0C\u65E0\u9700\u914D\u7F6E\uFF09\u2014\u2014\
|
|
3947
|
+
`oasis CLI \u5DF2\u6CE8\u5165\uFF08\`OASIS_SERVER\` / \`OASIS_TOKEN\` \u5C31\u7EEA\uFF0C\u65E0\u9700\u914D\u7F6E\uFF09\u2014\u2014\u5148 \`oasis design status\` \u53D6\u8D27\uFF0C\u518D\u7528 \`oasis design chat --async\` \u591A\u8F6E\u9A71\u52A8\u753B\u677F\u5F15\u64CE\u6253\u78E8\u754C\u9762\u7A3F\uFF0C\u8BFB\u4EA7\u7269\u540E\u7528 \`oasis propose\` \u4EA4\u7A3F\u3001\`oasis gap\` \u62A5\u7F3A\u53E3\uFF08\u90FD\u89C1\u4E0A\u9762\u300C\u600E\u4E48\u63D0\u4EA4\u300D\uFF09\u3002\u8BBE\u8BA1\u9700\u6C42\u89C1\u672C\u76EE\u5F55 \`DESIGN_BRIEF.md\`\uFF0C\u4E0A\u6E38\u8F93\u5165\u5728 \`inputs/\`\u3002`
|
|
3937
3948
|
] : commandReference({
|
|
3938
3949
|
artifactId,
|
|
3939
3950
|
action: args.action ?? "produce",
|
|
@@ -3965,7 +3976,7 @@ async function assembleContext(args) {
|
|
|
3965
3976
|
...canvasMode ? [
|
|
3966
3977
|
``,
|
|
3967
3978
|
`## \u751F\u4EA7\u8005\u5B88\u5219\uFF08\u753B\u677F\u7248\uFF09`,
|
|
3968
|
-
`- \u4F60\u662F\u7532\u65B9\uFF1A\u591A\u8F6E \`oasis design chat\` \u9A71\u52A8\u5F15\u64CE\
|
|
3979
|
+
`- \u4F60\u662F\u7532\u65B9\uFF1A\u5148 \`oasis design status\` \u53D6\u8D27\uFF08\u5F15\u64CE\u7684\u6D3B\u4E0D\u767D\u5E72\uFF09\uFF0C\u518D\u591A\u8F6E \`oasis design chat --async\` \u9A71\u52A8\u5F15\u64CE\uFF1B\u6BCF\u8F6E**\u8BFB\u4EA7\u7269**\u518D\u51B3\u5B9A\u2014\u2014\u591F\u597D\u624D \`oasis propose\`\uFF0C\u522B\u628A\u7B2C\u4E00\u7248\u76F2\u76EE\u4EA4\u51FA\u53BB\u3002`,
|
|
3969
3980
|
`- \u4F60\u53EA\u4EA7**\u8FD9\u4E00\u4E2A**\u8BBE\u8BA1\u4EA7\u7269\uFF1B**\u4E0D\u5F52\u4F60\u5B9A\u7684\u51B3\u7B56\u522B\u786C\u7F16**\uFF08\u4F1A\u88AB\u6253\u56DE\uFF09\u2014\u2014\u62FF\u4E0D\u51C6\u7684\u53D6\u820D\u5199\u8FDB acceptance.md \u7684\u300C\u5F00\u653E\u95EE\u9898\u300D\uFF0C\u6216 \`oasis gap\` \u5192\u6CE1\u7ED9\u4EBA\u3002`,
|
|
3970
3981
|
`- \u5FE0\u5B9E\u4E8E task-context/ \u91CC\u7684\u4E0A\u6E38\u8F93\u5165\uFF08PRD/\u603B\u7EB2\uFF09\uFF1B\u4E0E\u4E0A\u6E38\u51B2\u7A81\u5904\u4EE5\u4E0A\u6E38\u4E3A\u51C6\uFF0C\u5E76\u5728\u5F00\u653E\u95EE\u9898\u91CC\u6807\u6CE8\u5F02\u8BAE\u3002`,
|
|
3971
3982
|
`- \u771F\u5B9E\u793A\u4F8B\u6570\u636E\uFF08\u4EA7\u54C1/\u4E70\u5BB6/\u8BA2\u5355\u7B49\uFF09**\u5FC5\u987B\u5728 \`--message\` \u91CC\u5582\u7ED9\u5F15\u64CE**\u2014\u2014\u5B83\u62FF\u4E0D\u5230\u7684\u4E1C\u897F\u4F1A\u81EA\u5DF1\u7F16\uFF0C\u522B\u8BA9\u5B83\u66FF\u4F60\u9020\u6570\u636E\u3002`,
|
|
@@ -136063,8 +136074,22 @@ var init_planner = __esm({
|
|
|
136063
136074
|
name: "provision",
|
|
136064
136075
|
contentType: "text",
|
|
136065
136076
|
ownerRole: "devops",
|
|
136066
|
-
description: "\u4EE3\u7801\u4ED3\u5E93\u4F9B\u7ED9\uFF08\u5EFA\u4ED3\uFF09\uFF1A\u5F53\u9879\u76EE\u91CC\u6CA1\u6709\u4E0B\u6E38\u5B9E\u73B0\u6240\u9700\u7684\u4EE3\u7801\u4ED3\u5E93\u65F6\uFF0C\u7528\u6B64\u8282\u70B9\u5EFA\u4ED3\u2014\u2014\u6309\u7ED3\u6784\uFF08\u5355\u4ED3/\u4F1E\u4ED3\uFF09\u4E0E\u547D\u540D\u5EFA\u597D\u4ED3\u5E93\uFF0C\u521D\u59CB\u5316\u9879\u76EE\u6846\u67B6\u3001\u5FC5\u5907\u6587\u6863\u3001CI/CD \u57FA\u5EFA\u4E0E dev/prod \u73AF\u5883\u914D\u7F6E\uFF0C\u5E76
|
|
136067
|
-
reviews: { gates: [{ on: "conclude", reviewers: ["architect"], quorum: 1 }] }
|
|
136077
|
+
description: "\u4EE3\u7801\u4ED3\u5E93\u4F9B\u7ED9\uFF08\u5EFA\u4ED3\uFF09\uFF1A\u5F53\u9879\u76EE\u91CC\u6CA1\u6709\u4E0B\u6E38\u5B9E\u73B0\u6240\u9700\u7684\u4EE3\u7801\u4ED3\u5E93\u65F6\uFF0C\u7528\u6B64\u8282\u70B9\u5EFA\u4ED3\u2014\u2014\u6309\u7ED3\u6784\uFF08\u5355\u4ED3/\u4F1E\u4ED3\uFF09\u4E0E\u547D\u540D\u5EFA\u597D\u4ED3\u5E93\uFF0C\u521D\u59CB\u5316\u9879\u76EE\u6846\u67B6\u3001\u5FC5\u5907\u6587\u6863\u3001CI/CD \u57FA\u5EFA\uFF08GitHub Actions ci/cd workflow\uFF09\u4E0E dev/prod \u73AF\u5883\u914D\u7F6E\uFF0C\u5E76**\u767B\u8BB0\u5230\u9879\u76EE\u4E14\u6838\u9A8C\u767B\u8BB0\u771F\u7684\u843D\u8FDB\u5185\u6838**\uFF08\u4E0D\u662F\u5199\u7BC7\u6587\u6863\u8BF4\u914D\u597D\u4E86\u5C31\u7B97\uFF09\u3002**\u5EFA\u56FE/\u8865\u56FE\u65F6\uFF0C\u82E5\u53D1\u73B0\u9879\u76EE\u7F3A\u67D0\u4E2A dev\uFF08\u4EE3\u7801\u5B9E\u73B0\uFF09\u8282\u70B9\u6240\u9700\u7684\u4EE3\u7801\u4ED3\u5E93\uFF0C\u5E94\u65B0\u589E\u4E00\u4E2A\u6B64\u7C7B\u578B\u8282\u70B9\uFF0C\u4F5C\u4E3A\u90A3\u4E2A dev \u8282\u70B9\u7684\u524D\u7F6E\u3001\u6392\u5728\u5B83\u4E4B\u524D\u3002** \u4EA7\u51FA\u4E3A\u5EFA\u4ED3\u8BB0\u5F55\uFF08\u8BF4\u660E\u5EFA\u4E86\u54EA\u4E9B\u4ED3\u3001\u903B\u8F91 id \u4E0E\u7ED3\u6784\u3001CI/CD \u9AA8\u67B6\uFF09\uFF0C\u67B6\u6784\u5E08\u8BC4\u5BA1\u3002\u6536\u5C3E\u524D\u987B `oasis record-action <\u672C\u8282\u70B9> --name registration_verified --pass true` \u7559\u75D5\uFF08\u5148\u771F\u6838\u9A8C\u767B\u8BB0\u843D\u5E93\uFF09\u3002",
|
|
136078
|
+
reviews: { gates: [{ on: "conclude", reviewers: ["architect"], quorum: 1 }] },
|
|
136079
|
+
// grounding:登记必须真落库才收口(ADR-0070/§9.2)。防「写篇文档说仓配好了就算交付」(delivery C-2)。
|
|
136080
|
+
grounding: { requiredActions: [{ name: "registration_verified", mustPass: true }] }
|
|
136081
|
+
},
|
|
136082
|
+
{
|
|
136083
|
+
// deploy 此前只在生产经 API 手工新增、不在代码常量里(零审计,见 ADR-0067 背景与 ADR-0070)。
|
|
136084
|
+
// 收编进 DEFAULT_TYPES:给它一份规范定义作为新环境/测试/文档的事实源。
|
|
136085
|
+
// 注意 ensureDefaultWorkorderTypes 只“补缺”——生产已存在的 deploy 条目不会被此定义覆盖。
|
|
136086
|
+
name: "deploy",
|
|
136087
|
+
contentType: "text",
|
|
136088
|
+
ownerRole: "devops",
|
|
136089
|
+
description: "\u771F\u5B9E\u90E8\u7F72\u4E0E\u8054\u8C03\uFF1A\u628A\u5BF9\u5E94 dev\uFF08\u4EE3\u7801\u5B9E\u73B0\uFF09\u4EA7\u51FA\u90E8\u7F72\u5230\u76EE\u6807\u73AF\u5883\u5E76\u8DD1\u901A\u7AEF\u5230\u7AEF\u8054\u8C03\uFF0C\u4EA7\u51FA\u53EF\u8BBF\u95EE\u7684\u90E8\u7F72\u5730\u5740 + \u90E8\u7F72\u8BB0\u5F55\uFF08\u73AF\u5883/\u670D\u52A1/\u7AEF\u53E3/\u5065\u5EB7\u68C0\u67E5\u8BC1\u636E\uFF09\u3002**\u4F9D\u8D56\u5BF9\u5E94\u7684 dev \u8282\u70B9\uFF08required\uFF09\uFF0C\u6392\u5728\u5B83\u4E4B\u540E\uFF1B\u82E5\u672C\u5DE5\u5355\u6709 adr\uFF08\u6280\u672F\u65B9\u6848\uFF0C\u542B CI/CD \u4E0E\u90E8\u7F72\u73AF\u5883\u51B3\u7B56\uFF09\uFF0C\u4E5F\u5E94\u4F9D\u8D56\u8BE5 adr\u2014\u2014\u5982\u6B64\u6280\u672F\u65B9\u6848\u6216\u4EE3\u7801\u4E00\u51FA\u65B0\u91CC\u7A0B\u7891\uFF0C\u672C\u8282\u70B9\u5373\u88AB\u7EA7\u8054\u8FD4\u5DE5\u91CD\u65B0\u90E8\u7F72\uFF08ADR-0067\uFF09\u3002** \u5EFA\u56FE/\u8865\u56FE\u65F6\uFF0C\u5F53\u5DE5\u5355\u9700\u8981\u771F\u90E8\u7F72/\u4E0A\u7EBF\u800C\u975E\u4EC5\u4EA4\u4ED8\u4EE3\u7801\u65F6\u65B0\u589E\u6B64\u8282\u70B9\u3002\u5065\u5EB7\u68C0\u67E5\u987B\u5916\u90E8\u53EF\u8FBE\u3001\u7981\u5047\u7EFF\uFF1B\u4E0B\u6E38\uFF08\u5982 QA\uFF09\u53D1\u73B0\u90E8\u7F72\u7ED3\u679C\u4E0D\u5BF9\u65F6\u5BF9\u672C\u8282\u70B9\u56DE\u538B\uFF08annotate --from\uFF09\u3002\u6536\u5C3E\u524D\u987B\u5148\u771F\u8DD1\u5916\u90E8\u5065\u5EB7\u63A2\u9488\u3001\u518D `oasis record-action <\u672C\u8282\u70B9> --name health_probe --pass true` \u7559\u75D5\uFF0C\u5426\u5219\u6536\u4E0D\u4E86\u53E3\u3002",
|
|
136090
|
+
reviews: { gates: [{ on: "conclude", reviewers: ["qa"], quorum: 1 }] },
|
|
136091
|
+
// grounding:必须有「通过的健康探针」留痕才收口(ADR-0070/§9.2)。机械堵假绿——force 也豁免不了。
|
|
136092
|
+
grounding: { requiredActions: [{ name: "health_probe", mustPass: true }] }
|
|
136068
136093
|
}
|
|
136069
136094
|
];
|
|
136070
136095
|
WORKORDER_SPEC_PREFIX = "OASIS_WORKORDER_SPEC ";
|
|
@@ -139313,8 +139338,8 @@ async function startOasisServer(opts) {
|
|
|
139313
139338
|
if (actorCtx) {
|
|
139314
139339
|
const { mkdtempSync: mkdtempSync5, mkdirSync: mkdirSync17, writeFileSync: writeFileSync15 } = await import("node:fs");
|
|
139315
139340
|
const { join: join24, dirname: dirname20 } = await import("node:path");
|
|
139316
|
-
const { tmpdir:
|
|
139317
|
-
const dir = mkdtempSync5(join24(
|
|
139341
|
+
const { tmpdir: tmpdir9 } = await import("node:os");
|
|
139342
|
+
const dir = mkdtempSync5(join24(tmpdir9(), "oasis-chat-"));
|
|
139318
139343
|
if (actorCtx.config?.prompt) {
|
|
139319
139344
|
for (const [rel, content] of Object.entries(splitIdentityFiles2(actorCtx.config.prompt))) {
|
|
139320
139345
|
const file = join24(dir, rel);
|
|
@@ -143613,6 +143638,7 @@ async function seedRoleCatalog(store, src) {
|
|
|
143613
143638
|
await store.put({
|
|
143614
143639
|
name,
|
|
143615
143640
|
label: known?.label ?? fallbackLabel(name),
|
|
143641
|
+
...known?.description ? { description: known.description } : {},
|
|
143616
143642
|
...known?.accent ? { appearance: { accent: known.accent } } : {},
|
|
143617
143643
|
status: "active"
|
|
143618
143644
|
});
|
|
@@ -143627,13 +143653,17 @@ var init_roles_seed = __esm({
|
|
|
143627
143653
|
"use strict";
|
|
143628
143654
|
KNOWN = {
|
|
143629
143655
|
founder: { label: "\u521B\u59CB\u4EBA", accent: "slate" },
|
|
143630
|
-
pm: { label: "\u9700\u6C42\u5206\u6790", accent: "blue" },
|
|
143631
|
-
architect: { label: "\u67B6\u6784\u8BBE\u8BA1", accent: "violet" },
|
|
143632
|
-
designer: { label: "\u754C\u9762\u8BBE\u8BA1", accent: "fuchsia" },
|
|
143633
|
-
research: { label: "\u5E02\u573A\u8C03\u7814", accent: "cyan" },
|
|
143634
|
-
dev: { label: "\u4EE3\u7801\u5B9E\u73B0", accent: "emerald" },
|
|
143635
|
-
qa: { label: "\u8D28\u91CF\u4FDD\u969C", accent: "rose" },
|
|
143636
|
-
devops: {
|
|
143656
|
+
pm: { label: "\u9700\u6C42\u5206\u6790", accent: "blue", description: "\u628A\u8BC9\u6C42\u62C6\u6210 PRD \u4E0E\u9A8C\u6536\u6807\u51C6\uFF0C\u505A\u4EA7\u54C1\u51B3\u7B56\u4E0E\u4F18\u5148\u7EA7\u3002" },
|
|
143657
|
+
architect: { label: "\u67B6\u6784\u8BBE\u8BA1", accent: "violet", description: "\u6280\u672F\u9009\u578B\u3001\u7CFB\u7EDF\u67B6\u6784\u3001\u63A5\u53E3\u5951\u7EA6\u3001ADR\uFF1B\u628A\u6280\u672F\u65B9\u6848\u843D\u6210\u53EF\u5B9E\u73B0\u7684\u51B3\u7B56\u3002" },
|
|
143658
|
+
designer: { label: "\u754C\u9762\u8BBE\u8BA1", accent: "fuchsia", description: "\u754C\u9762\u4E0E\u4EA4\u4E92\u8BBE\u8BA1\u3001\u8BBE\u8BA1\u7CFB\u7EDF\u4E0E\u89C6\u89C9\u89C4\u8303\u3002" },
|
|
143659
|
+
research: { label: "\u5E02\u573A\u8C03\u7814", accent: "cyan", description: "\u7ADE\u54C1\u3001\u5E02\u573A\u3001\u7528\u6237\u4E0E\u5B9A\u4EF7\u7B49\u8C03\u7814\u3002" },
|
|
143660
|
+
dev: { label: "\u4EE3\u7801\u5B9E\u73B0", accent: "emerald", description: "\u6309\u63A5\u53E3\u5951\u7EA6\u5B9E\u73B0\u524D\u540E\u7AEF\u4EE3\u7801\u3002" },
|
|
143661
|
+
qa: { label: "\u8D28\u91CF\u4FDD\u969C", accent: "rose", description: "\u6D4B\u8BD5\u89C4\u5212\u3001\u771F\u673A\u9A8C\u6536\u4E0E\u56DE\u5F52\uFF1B\u53D1\u73B0\u95EE\u9898\u56DE\u538B\u5BF9\u5E94\u4EA7\u51FA\u8282\u70B9\u3002" },
|
|
143662
|
+
devops: {
|
|
143663
|
+
label: "\u8FD0\u7EF4\u90E8\u7F72",
|
|
143664
|
+
accent: "amber",
|
|
143665
|
+
description: "\u5E73\u53F0\u5DE5\u7A0B\uFF1A\u4EE3\u7801\u4ED3\u5E93\u4F9B\u7ED9\uFF08\u5EFA\u4ED3\uFF09\u3001CI/CD \u6D41\u6C34\u7EBF\u4E0E GitHub Actions\u3001\u7EC4\u7EC7\u8D44\u4EA7\u53F0\u8D26\u7EF4\u62A4\uFF0C\u4EE5\u53CA\u771F\u5B9E\u90E8\u7F72\u4E0E\u8054\u8C03\uFF1B\u5176\u5B83\u73AF\u8282\u51FA\u73B0\u90E8\u7F72/\u8FD0\u7EF4\u7C7B\u95EE\u9898\u65F6\u515C\u5E95\u3002\u8D1F\u8D23 provision \u4E0E deploy \u4EA4\u4ED8\u7269\u7C7B\u578B\u3002"
|
|
143666
|
+
},
|
|
143637
143667
|
writer: { label: "\u6587\u6863\u64B0\u5199", accent: "slate" },
|
|
143638
143668
|
"design-lead": { label: "\u8BBE\u8BA1\u8D1F\u8D23\u4EBA", accent: "fuchsia" },
|
|
143639
143669
|
"eng-lead": { label: "\u6280\u672F\u8D1F\u8D23\u4EBA", accent: "violet" }
|
|
@@ -146792,13 +146822,46 @@ async function startDesignRun(base, fetchImpl, args) {
|
|
|
146792
146822
|
async function fetchResultPackage(base, fetchImpl, runId) {
|
|
146793
146823
|
const body = await odApi(base, fetchImpl, "GET", `/api/runs/${encodeURIComponent(runId)}/result-package`);
|
|
146794
146824
|
const artifacts = (body.artifacts ?? []).map((a) => ({
|
|
146795
|
-
path: a.path ?? "",
|
|
146825
|
+
path: a.path ?? a.file ?? "",
|
|
146796
146826
|
kind: a.kind ?? null,
|
|
146797
146827
|
title: a.title ?? null,
|
|
146798
146828
|
status: a.status ?? null
|
|
146799
146829
|
}));
|
|
146800
146830
|
return { artifacts, fileCount: body.project?.fileCount ?? artifacts.length };
|
|
146801
146831
|
}
|
|
146832
|
+
async function fetchBoardStatus(base, fetchImpl, artifactId) {
|
|
146833
|
+
const boardKey = deriveBoardKey(artifactId);
|
|
146834
|
+
let boardExists = true;
|
|
146835
|
+
let artifacts = [];
|
|
146836
|
+
try {
|
|
146837
|
+
const listing = await odApi(
|
|
146838
|
+
base,
|
|
146839
|
+
fetchImpl,
|
|
146840
|
+
"GET",
|
|
146841
|
+
`/api/projects/${encodeURIComponent(boardKey)}/files`
|
|
146842
|
+
);
|
|
146843
|
+
artifacts = (listing.files ?? []).filter((f2) => !f2.path.startsWith("task-context/") && f2.artifactManifest !== void 0).map((f2) => ({ path: f2.path, kind: f2.kind ?? null, status: f2.artifactManifest?.status ?? null, mtime: f2.mtime ?? null })).sort((a, b2) => (b2.mtime ?? 0) - (a.mtime ?? 0));
|
|
146844
|
+
} catch {
|
|
146845
|
+
boardExists = false;
|
|
146846
|
+
}
|
|
146847
|
+
let runs = [];
|
|
146848
|
+
if (boardExists) {
|
|
146849
|
+
try {
|
|
146850
|
+
const body = await odApi(
|
|
146851
|
+
base,
|
|
146852
|
+
fetchImpl,
|
|
146853
|
+
"GET",
|
|
146854
|
+
`/api/runs?projectId=${encodeURIComponent(boardKey)}`
|
|
146855
|
+
);
|
|
146856
|
+
runs = (body.runs ?? []).map((r) => ({
|
|
146857
|
+
runId: String(r["runId"] ?? r["id"] ?? ""),
|
|
146858
|
+
status: String(r["status"] ?? "unknown")
|
|
146859
|
+
}));
|
|
146860
|
+
} catch {
|
|
146861
|
+
}
|
|
146862
|
+
}
|
|
146863
|
+
return { boardKey, boardExists, runs, artifacts };
|
|
146864
|
+
}
|
|
146802
146865
|
async function pumpDesignEvents(base, fetchImpl, runId, onLine) {
|
|
146803
146866
|
const res = await fetchImpl(`${base}/api/runs/${runId}/events`);
|
|
146804
146867
|
if (!res.ok || !res.body) return;
|
|
@@ -146852,11 +146915,16 @@ async function harvestBoard(base, fetchImpl, publicBase, workRoot, boardKey, run
|
|
|
146852
146915
|
if (!res.ok) throw new Error(`od export ${rel} \u2192 ${res.status}`);
|
|
146853
146916
|
return await res.text();
|
|
146854
146917
|
};
|
|
146918
|
+
const fetchRaw = async (rel) => {
|
|
146919
|
+
const res = await fetchImpl(`${base}/api/projects/${encodeURIComponent(boardKey)}/raw/${rel.split("/").map(encodeURIComponent).join("/")}`);
|
|
146920
|
+
if (!res.ok) throw new Error(`od raw ${rel} \u2192 ${res.status}`);
|
|
146921
|
+
return await res.text();
|
|
146922
|
+
};
|
|
146855
146923
|
fs8.writeFileSync(path7.join(dir, "index.html"), await fetchInline(entry));
|
|
146856
146924
|
for (const f2 of listing.files ?? []) {
|
|
146857
146925
|
if (f2.path.endsWith(".md") && !f2.path.includes("/")) {
|
|
146858
146926
|
try {
|
|
146859
|
-
fs8.writeFileSync(path7.join(dir, f2.path), await
|
|
146927
|
+
fs8.writeFileSync(path7.join(dir, f2.path), await fetchRaw(f2.path));
|
|
146860
146928
|
} catch {
|
|
146861
146929
|
}
|
|
146862
146930
|
}
|
|
@@ -146895,7 +146963,7 @@ async function runOpenDesignSession(opts) {
|
|
|
146895
146963
|
const { dir, entry } = await harvestBoard(opts.base, fetchImpl, opts.publicBase, workRoot, boardKey, runId);
|
|
146896
146964
|
return { dir, entry, boardKey, runId };
|
|
146897
146965
|
}
|
|
146898
|
-
async function
|
|
146966
|
+
async function startDesignChatTurn(opts) {
|
|
146899
146967
|
const fetchImpl = opts.fetchImpl ?? fetch;
|
|
146900
146968
|
const boardKey = deriveBoardKey(opts.artifactId);
|
|
146901
146969
|
const { conversationId, resolvedDir } = await ensureProject(opts.base, fetchImpl, boardKey, opts.title);
|
|
@@ -146908,6 +146976,11 @@ async function runDesignChatTurn(opts) {
|
|
|
146908
146976
|
message: opts.message,
|
|
146909
146977
|
...opts.systemPrompt !== void 0 ? { systemPrompt: opts.systemPrompt } : {}
|
|
146910
146978
|
});
|
|
146979
|
+
return { boardKey, conversationId, runId, userMessageId };
|
|
146980
|
+
}
|
|
146981
|
+
async function runDesignChatTurn(opts) {
|
|
146982
|
+
const fetchImpl = opts.fetchImpl ?? fetch;
|
|
146983
|
+
const { boardKey, conversationId, runId, userMessageId } = await startDesignChatTurn(opts);
|
|
146911
146984
|
if (opts.onLine) void pumpDesignEvents(opts.base, fetchImpl, runId, opts.onLine).catch(() => {
|
|
146912
146985
|
});
|
|
146913
146986
|
const status = await pollDesignRun(opts.base, fetchImpl, runId, {
|
|
@@ -170681,9 +170754,15 @@ var USAGE = `oasis \u2014\u2014 artifact-centric \u534F\u4F5C\u5185\u6838 CLI\uF
|
|
|
170681
170754
|
design run <artifactId> [--brief <t>] [--reason <t>] [--od-url <url>] [--title <t>] [--agent <id>]
|
|
170682
170755
|
# design \u4EA7\u7269\uFF1A\u5728\u901A\u7528 runtime \u4E0A\u9A71\u52A8 open-design \u753B\u677F\u5F15\u64CE\u4EA7\u754C\u9762\u7A3F\u5E76\u4EA4\u7A3F\uFF08\u63D0\u6848 design-node-runtime-to-cli-tool\uFF09\u3002
|
|
170683
170756
|
# --brief \u7F3A\u7701\u8BFB\u5F53\u524D\u76EE\u5F55 DESIGN_BRIEF.md\uFF08\u5176\u6B21 TASK.md\uFF09\uFF1B\u4E0A\u4E0B\u6587\u53D6\u5F53\u524D\u76EE\u5F55 inputs/\uFF1Bod \u5730\u5740\u7F3A\u7701 $OASIS_OPEN_DESIGN_URL \u6216\u672C\u673A 7457\u3002
|
|
170757
|
+
design chat <artifactId> --message <t> [--turn first|continue] [--async] [--system <t>]
|
|
170758
|
+
# \u591A\u8F6E\u5BF9\u8BDD\u9A71\u52A8\u753B\u677F\uFF08\u63D0\u6848 design-conversational-driving\uFF09\uFF1A\u4E0D\u81EA\u52A8\u4EA4\u7A3F\uFF0C\u8BFB\u4EA7\u7269\u540E\u81EA\u884C propose/gap\u3002
|
|
170759
|
+
# --async \u8D77\u5B8C\u5373\u8FD4\uFF08\u5F15\u64CE\u5728\u670D\u52A1\u7AEF\u8DD1 13\u201344min\uFF0C\u4E0E\u672C\u8FDB\u7A0B\u65E0\u5173\uFF09\uFF1B\u8FDB\u5EA6/\u53D6\u8D27\u7528 design status\u3002
|
|
170760
|
+
design status <artifactId> [--pull]
|
|
170761
|
+
# \u67E5\u753B\u677F\u73B0\u72B6\uFF08\u6062\u590D\u4F18\u5148\uFF09\uFF1A\u88AB\u6D3E\u53D1\u5148\u8DD1\u5B83\u2014\u2014\u5F15\u64CE\u5728\u8DD1\u5C31\u522B\u8D77\u65B0\u8F6E\uFF1B\u677F\u4E0A\u6709\u8D27 --pull \u62C9\u672C\u5730\u8BFB\uFF0C\u8BFB\u5B8C propose --from-dir\u3002
|
|
170684
170762
|
|
|
170685
170763
|
\u56FE\u673A\u5236\uFF08\xA76/\xA77\uFF09
|
|
170686
170764
|
annotate <artifactId> --body <text> [--from <\u4E0B\u6E38> --blocks true]
|
|
170765
|
+
record-action <artifactId> --name <\u52A8\u4F5C\u540D> [--pass true] [--result <json>] [--params <json>] # \xA79.2 grounding \u7559\u75D5\uFF1A\u4E3A action_vs_oplog \u8BB0\u4E00\u6761\u901A\u8FC7\u7684 tool_call\uFF08\u771F\u8DD1\u8FC7\u5065\u5EB7\u63A2\u9488\u540E record-action --name health_probe --pass true\uFF09\uFF1B\u58F0\u660E\u4E86 requiredActions \u7684\u7C7B\u578B\u6CA1\u6709\u5B83 conclude \u4F1A\u88AB\u673A\u68B0\u62E6
|
|
170687
170766
|
resolve <annotationId> [--as resolved|wontfix|acknowledged]
|
|
170688
170767
|
gap <artifactId> --desc <text>
|
|
170689
170768
|
add-revision <artifactId> --desc <\u8981\u5B83\u5B8C\u6210\u4EC0\u4E48> [--role <\u8C01\u6765\u505A\uFF0C\u9ED8\u8BA4owner\u81EA\u5DF1>] # \xA79 \u592A\u5927\u5C31\u6D3E\u4E00\u6761\u5B50revision\u51FA\u53BB\u5E76\u884C\uFF0C\u6D3E\u5B8C\u53EF\u6536\u5DE5\u7B49\u7ED3\u679C
|
|
@@ -170742,7 +170821,7 @@ var USAGE = `oasis \u2014\u2014 artifact-centric \u534F\u4F5C\u5185\u6838 CLI\uF
|
|
|
170742
170821
|
function parseArgs(argv) {
|
|
170743
170822
|
const positional = [];
|
|
170744
170823
|
const flags = /* @__PURE__ */ new Map();
|
|
170745
|
-
const booleanFlags = /* @__PURE__ */ new Set(["checkpoint", "continue"]);
|
|
170824
|
+
const booleanFlags = /* @__PURE__ */ new Set(["checkpoint", "continue", "async", "pull"]);
|
|
170746
170825
|
for (let i = 0; i < argv.length; i++) {
|
|
170747
170826
|
const a = argv[i];
|
|
170748
170827
|
if (a.startsWith("--")) {
|
|
@@ -171594,15 +171673,25 @@ ${res.warning}`);
|
|
|
171594
171673
|
}
|
|
171595
171674
|
}
|
|
171596
171675
|
}
|
|
171597
|
-
|
|
171598
|
-
const turn = await runDesignChatTurn({
|
|
171676
|
+
const baseTurnOpts = {
|
|
171599
171677
|
base: odBase2,
|
|
171600
171678
|
agentId: flags.get("agent") ?? "claude",
|
|
171601
171679
|
artifactId: artifactId2,
|
|
171602
171680
|
title: flags.get("title") ?? artifactId2,
|
|
171603
171681
|
message: message2,
|
|
171604
171682
|
...flags.get("system") !== void 0 ? { systemPrompt: flags.get("system") } : {},
|
|
171605
|
-
...isContinue ? {} : { contextFiles: contextFiles2 }
|
|
171683
|
+
...isContinue ? {} : { contextFiles: contextFiles2 }
|
|
171684
|
+
};
|
|
171685
|
+
if (flags.get("async") === "true") {
|
|
171686
|
+
println(`[design] \u753B\u677F ${deriveBoardKey(artifactId2)} \u2190 ${artifactId2}\uFF1B${isContinue ? "\u7EED\u8F6E" : "\u9996\u8F6E"}\uFF08--async\uFF09\u2192 od \u5F15\u64CE ${odBase2} \u2026`);
|
|
171687
|
+
const started = await startDesignChatTurn(baseTurnOpts);
|
|
171688
|
+
println(`[design] \u5DF2\u4E0B\u5355\uFF1Arun ${started.runId.slice(0, 8)}\uFF08board ${started.boardKey}, \u53EF\u89C1 user \u56DE\u5408 ${started.userMessageId.slice(0, 8)}\uFF09\u3002\u5F15\u64CE\u901A\u5E38\u8981 13\u201344 \u5206\u949F\u3002`);
|
|
171689
|
+
println(`[design] \u4E4B\u540E\u7528 oasis design status ${artifactId2} \u67E5\u8FDB\u5EA6/\u53D6\u8D27\uFF08--pull \u62C9\u4EA7\u7269\u5230\u672C\u5730\u8BFB\uFF09\uFF1B\u4E0D\u5FC5\u5B88\u7740\u7B49\u3002`);
|
|
171690
|
+
break;
|
|
171691
|
+
}
|
|
171692
|
+
println(`[design] \u753B\u677F ${deriveBoardKey(artifactId2)} \u2190 ${artifactId2}\uFF1B${isContinue ? "\u7EED\u8F6E" : "\u9996\u8F6E"}\u5BF9\u8BDD\u9A71\u52A8 od \u5F15\u64CE ${odBase2} \u2026`);
|
|
171693
|
+
const turn = await runDesignChatTurn({
|
|
171694
|
+
...baseTurnOpts,
|
|
171606
171695
|
onLine: (line) => println(`[od] ${line.length > 500 ? line.slice(0, 500) + "\u2026" : line}`)
|
|
171607
171696
|
});
|
|
171608
171697
|
println(`[design] \u672C\u8F6E\u4EA4\u4ED8\uFF08board ${turn.boardKey}, run ${turn.runId.slice(0, 8)}, \u53EF\u89C1 user \u56DE\u5408 ${turn.userMessageId.slice(0, 8)}\uFF09\uFF1A`);
|
|
@@ -171610,7 +171699,39 @@ ${res.warning}`);
|
|
|
171610
171699
|
println(`[design] \u8BFB\u4EA7\u7269\u540E\u81EA\u884C\u51B3\u5B9A\uFF1A\u591F\u597D \u2192 oasis propose\uFF1B\u6709\u5206\u6B67/\u7F3A\u4FE1\u606F \u2192 oasis gap\uFF1B\u4E0D\u591F \u2192 \u518D\u4E00\u8F6E oasis design chat ${artifactId2} --turn continue --message "<\u4E0B\u4E00\u53E5>"`);
|
|
171611
171700
|
break;
|
|
171612
171701
|
}
|
|
171613
|
-
if (sub
|
|
171702
|
+
if (sub === "status") {
|
|
171703
|
+
const artifactId2 = needPos(positional, 1, "oasis design status <artifactId> [--pull]");
|
|
171704
|
+
const odBase2 = (flags.get("od-url") ?? process.env["OASIS_OPEN_DESIGN_URL"] ?? "http://127.0.0.1:7457").replace(/\/$/, "");
|
|
171705
|
+
const st = await fetchBoardStatus(odBase2, fetch, artifactId2);
|
|
171706
|
+
if (!st.boardExists) {
|
|
171707
|
+
println(`[design] \u753B\u677F ${st.boardKey} \u5C1A\u4E0D\u5B58\u5728\u2014\u2014\u8FD8\u6CA1\u8D77\u8FC7\u4EFB\u4F55\u4E00\u8F6E\u3002\u5F00\u5DE5\uFF1Aoasis design chat ${artifactId2} --message "<\u8BBE\u8BA1\u9700\u6C42+\u771F\u5B9E\u6570\u636E>" --async`);
|
|
171708
|
+
break;
|
|
171709
|
+
}
|
|
171710
|
+
const live = st.runs.filter((r) => r.status === "running" || r.status === "queued");
|
|
171711
|
+
if (live.length > 0) {
|
|
171712
|
+
for (const r of live) println(`[design] \u5F15\u64CE\u5728\u8DD1\uFF1Arun ${r.runId.slice(0, 8)} \u72B6\u6001=${r.status}\u2014\u2014\u522B\u518D\u8D77\u65B0\u8F6E\uFF1B\u8FC7\u51E0\u5206\u949F\u518D status\uFF0C\u6216\u672C\u8F6E\u6536\u5DE5\u7B49\u91CD\u6D3E\u3002`);
|
|
171713
|
+
} else if (st.runs.length > 0) {
|
|
171714
|
+
for (const r of st.runs.slice(0, 3)) println(`[design] \u8FD1\u671F run\uFF1A${r.runId.slice(0, 8)} \u7EC8\u6001=${r.status}`);
|
|
171715
|
+
} else {
|
|
171716
|
+
println(`[design] \u65E0\u5728\u4E16 run \u8BB0\u5F55\uFF08od \u91CD\u542F\u540E\u4E3A\u7A7A\uFF0C\u5C5E\u6B63\u5E38\uFF09\u2014\u2014\u770B\u4E0B\u9762\u677F\u4E0A\u4EA7\u7269\u5373\u6301\u4E45\u771F\u76F8\u3002`);
|
|
171717
|
+
}
|
|
171718
|
+
if (st.artifacts.length === 0) {
|
|
171719
|
+
println(`[design] \u677F\u4E0A\u8FD8\u6CA1\u6709\u4EA4\u4ED8\u7269\u3002${live.length > 0 ? "\u7B49\u5F15\u64CE\u8DD1\u5B8C\u518D\u6765\u3002" : `\u8D77\u4E00\u8F6E\uFF1Aoasis design chat ${artifactId2} --message "<\u2026>" --async`}`);
|
|
171720
|
+
break;
|
|
171721
|
+
}
|
|
171722
|
+
println(`[design] \u677F\u4E0A\u4EA4\u4ED8\u7269\uFF08\u6301\u4E45\uFF0C\u65B0\u2192\u65E7\uFF09\uFF1A`);
|
|
171723
|
+
for (const a of st.artifacts) println(` - ${a.path}\uFF08${a.kind ?? "?"}\uFF09status=${a.status ?? "?"}${a.mtime ? ` \xB7 ${new Date(a.mtime).toISOString()}` : ""}`);
|
|
171724
|
+
if (flags.get("pull") === "true") {
|
|
171725
|
+
const odPublic2 = (flags.get("od-public-url") ?? process.env["OASIS_OPEN_DESIGN_PUBLIC_URL"] ?? "https://design.open-friday.com").replace(/\/$/, "");
|
|
171726
|
+
const { dir: dir3, entry: entry2 } = await harvestBoard(odBase2, fetch, odPublic2, os8.tmpdir(), st.boardKey, st.runs[0]?.runId ?? "status-pull");
|
|
171727
|
+
println(`[design] \u5DF2\u62C9\u5230\u672C\u5730\uFF1A${dir3}\uFF08\u5165\u53E3 ${entry2}\uFF09`);
|
|
171728
|
+
println(`[design] \u8BFB\u5B8C\u6EE1\u610F\u5373\u4EA4\u7A3F\uFF1Aoasis propose ${artifactId2} --from-dir ${dir3} --reason "<\u8FD9\u7248\u505A\u4E86\u4EC0\u4E48>"`);
|
|
171729
|
+
} else {
|
|
171730
|
+
println(`[design] \u53D6\u8D27\uFF1Aoasis design status ${artifactId2} --pull\uFF08\u62C9\u5230\u672C\u5730\u76EE\u5F55\u8BFB\uFF0C\u8BFB\u5B8C propose --from-dir \u4EA4\u7A3F\uFF09`);
|
|
171731
|
+
}
|
|
171732
|
+
break;
|
|
171733
|
+
}
|
|
171734
|
+
if (sub !== "run") throw new Error("\u7528\u6CD5\uFF1Aoasis design run <artifactId> \u2026\uFF1Boasis design chat <artifactId> --message <t> [--turn first|continue] [--async]\uFF1Boasis design status <artifactId> [--pull]");
|
|
171614
171735
|
const artifactId = needPos(positional, 1, "oasis design run <artifactId>");
|
|
171615
171736
|
const odBase = (flags.get("od-url") ?? process.env["OASIS_OPEN_DESIGN_URL"] ?? "http://127.0.0.1:7457").replace(/\/$/, "");
|
|
171616
171737
|
const odPublic = (flags.get("od-public-url") ?? process.env["OASIS_OPEN_DESIGN_PUBLIC_URL"] ?? "https://design.open-friday.com").replace(/\/$/, "");
|
|
@@ -171708,6 +171829,18 @@ ${res.warning}`);
|
|
|
171708
171829
|
println(message);
|
|
171709
171830
|
break;
|
|
171710
171831
|
}
|
|
171832
|
+
case "record-action": {
|
|
171833
|
+
const artifactId = needPos(positional, 0, "oasis record-action <artifactId> --name <\u52A8\u4F5C\u540D> [--pass true] [--result <json>] [--params <json>]");
|
|
171834
|
+
const result = flags.get("result") !== void 0 ? JSON.parse(flags.get("result")) : { pass: flags.get("pass") === "true" };
|
|
171835
|
+
const { message } = await api.cmd("toolCall", {
|
|
171836
|
+
artifactId,
|
|
171837
|
+
name: need(flags, "name"),
|
|
171838
|
+
...flags.get("params") !== void 0 ? { params: JSON.parse(flags.get("params")) } : {},
|
|
171839
|
+
result
|
|
171840
|
+
});
|
|
171841
|
+
println(message);
|
|
171842
|
+
break;
|
|
171843
|
+
}
|
|
171711
171844
|
case "reply": {
|
|
171712
171845
|
const { message } = await api.cmd("reply", {
|
|
171713
171846
|
annotationId: needPos(positional, 0, "oasis reply <annotationId> --body <\u7B54\u590D>"),
|
|
@@ -172270,7 +172403,7 @@ ${res.warning}`);
|
|
|
172270
172403
|
init_src6();
|
|
172271
172404
|
|
|
172272
172405
|
// src/index.ts
|
|
172273
|
-
var PKG_VERSION = true ? "0.1.
|
|
172406
|
+
var PKG_VERSION = true ? "0.1.62" : "dev";
|
|
172274
172407
|
var OASIS_DIR = path21.join(os9.homedir(), ".oasis");
|
|
172275
172408
|
var CONFIG_FILE = path21.join(OASIS_DIR, "node-config.json");
|
|
172276
172409
|
var PID_FILE = path21.join(OASIS_DIR, "node.pid");
|