@archsight/aios 1.3.2 → 1.5.0
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/.claude-plugin/marketplace.json +6 -1
- package/.claude-plugin/plugin.json +5 -1
- package/CHANGELOG.md +53 -0
- package/README.md +90 -3
- package/RELEASE_NOTES.md +51 -0
- package/bin/archsight-aios.mjs +932 -15
- package/delivery/README.md +1 -0
- package/delivery/v1.4.0-release-readiness.md +64 -0
- package/delivery/v1.5.0-release-readiness.md +62 -0
- package/docs/PUBLIC_DISCOVERY.md +1 -1
- package/docs/industry-user-trial-guide.md +343 -0
- package/docs/quickstart.md +10 -0
- package/docs/v1.4.0-writing-boundary.md +42 -0
- package/docs/v1.4.0-writing-workflow-quickstart.md +83 -0
- package/docs/v1.5.0-knowledge-pack-runtime.md +100 -0
- package/gemini-extension.json +1 -1
- package/knowledge/README.md +6 -3
- package/package.json +10 -1
- package/prompts/README.md +4 -0
- package/prompts/evaluation-policy.md +33 -0
- package/prompts/evaluations/engineering-document-writing-fixtures.json +129 -0
- package/prompts/evaluations/engineering-document-writing-scorecard.json +108 -0
- package/prompts/evaluations/engineering-knowledge-pack-scorecard.json +57 -0
- package/prompts/evaluations/skill-runtime/README.md +15 -0
- package/prompts/evaluations/skill-runtime/raw/codex-scheme-writing-sample.md +111 -0
- package/prompts/evaluations/skill-runtime/raw/codex-tender-writing-sample.md +108 -0
- package/prompts/evaluations/skill-runtime/raw/workbuddy-scheme-writing-sample.md +228 -0
- package/prompts/evaluations/skill-runtime/raw/workbuddy-tender-writing-sample.md +143 -0
- package/prompts/evaluations/skill-runtime/v1.4.0-writing-host-scorecard-review.md +29 -0
- package/prompts/evaluations/skill-runtime/v1.4.0-writing-host-validation.json +112 -0
- package/prompts/evaluations/skill-runtime/v1.4.0-writing-host-validation.md +43 -0
- package/prompts/prompt-registry.md +8 -2
- package/rag/README.md +4 -0
- package/runtime/archsight-aios.manifest.json +227 -8
- package/runtime/capability-adapters.json +13 -0
- package/runtime/capability-registry.json +23 -2
- package/runtime/skill-routing.md +19 -4
- package/scripts/build-prompt-run-pack.mjs +27 -9
- package/scripts/validate-knowledge-pack.mjs +96 -0
- package/scripts/validate-prompt-fixtures.mjs +31 -10
- package/scripts/validate-prompt-scorecard.mjs +22 -6
- package/scripts/validate-skill-runtime-evidence.mjs +125 -0
- package/skills/README.md +29 -3
- package/skills/aios/SKILL.md +24 -10
- package/skills/aios-commercial-tender/SKILL.md +2 -0
- package/skills/aios-construction-scheme/SKILL.md +7 -3
- package/skills/aios-contract-audit/SKILL.md +121 -0
- package/skills/aios-contract-audit/agents/openai.yaml +4 -0
- package/skills/aios-contract-audit/prompts/basic-prompt.md +85 -0
- package/skills/aios-contract-draft/SKILL.md +130 -0
- package/skills/aios-contract-draft/agents/openai.yaml +4 -0
- package/skills/aios-contract-draft/prompts/basic-prompt.md +76 -0
- package/skills/aios-daily/SKILL.md +51 -0
- package/skills/aios-daily/agents/openai.yaml +4 -0
- package/skills/aios-daily-write/SKILL.md +116 -0
- package/skills/aios-daily-write/agents/openai.yaml +4 -0
- package/skills/aios-daily-write/prompts/basic-prompt.md +72 -0
- package/skills/aios-knowledge/SKILL.md +14 -3
- package/skills/aios-meeting/SKILL.md +52 -0
- package/skills/aios-meeting/agents/openai.yaml +4 -0
- package/skills/aios-meeting-write/SKILL.md +117 -0
- package/skills/aios-meeting-write/agents/openai.yaml +4 -0
- package/skills/aios-meeting-write/prompts/basic-prompt.md +72 -0
- package/skills/aios-review/SKILL.md +9 -6
- package/skills/aios-runtime/SKILL.md +17 -7
- package/skills/aios-scheme/SKILL.md +50 -0
- package/skills/aios-scheme/agents/openai.yaml +4 -0
- package/skills/aios-scheme-audit/SKILL.md +113 -0
- package/skills/aios-scheme-audit/agents/openai.yaml +4 -0
- package/skills/aios-scheme-audit/prompts/basic-prompt.md +90 -0
- package/skills/aios-scheme-write/SKILL.md +132 -0
- package/skills/aios-scheme-write/agents/openai.yaml +4 -0
- package/skills/aios-scheme-write/prompts/basic-prompt.md +83 -0
- package/skills/aios-tender/SKILL.md +50 -0
- package/skills/aios-tender/agents/openai.yaml +4 -0
- package/skills/aios-tender-audit/SKILL.md +119 -0
- package/skills/aios-tender-audit/agents/openai.yaml +4 -0
- package/skills/aios-tender-audit/prompts/basic-prompt.md +94 -0
- package/skills/aios-tender-write/SKILL.md +130 -0
- package/skills/aios-tender-write/agents/openai.yaml +4 -0
- package/skills/aios-tender-write/prompts/basic-prompt.md +82 -0
- package/skills/archsight-aios/SKILL.md +17 -5
- package/skills/engineering-business-starter-kit.md +21 -7
- package/templates/README.md +29 -4
- package/templates/document-writing/draft.md +15 -0
- package/templates/document-writing/final.md +16 -0
- package/templates/document-writing/material-index.md +18 -0
- package/templates/document-writing/review-notes.md +18 -0
- package/templates/document-writing/source-normalized.md +20 -0
- package/templates/document-writing/writing-brief.md +23 -0
- package/templates/document-writing-samples/scheme/README.md +16 -0
- package/templates/document-writing-samples/scheme/draft.md +25 -0
- package/templates/document-writing-samples/scheme/final.md +20 -0
- package/templates/document-writing-samples/scheme/material-index.md +23 -0
- package/templates/document-writing-samples/scheme/review-notes.md +23 -0
- package/templates/document-writing-samples/scheme/source-normalized.md +35 -0
- package/templates/document-writing-samples/scheme/writing-brief.md +26 -0
- package/templates/document-writing-samples/tender/README.md +16 -0
- package/templates/document-writing-samples/tender/draft.md +27 -0
- package/templates/document-writing-samples/tender/final.md +20 -0
- package/templates/document-writing-samples/tender/material-index.md +23 -0
- package/templates/document-writing-samples/tender/review-notes.md +23 -0
- package/templates/document-writing-samples/tender/source-normalized.md +34 -0
- package/templates/document-writing-samples/tender/writing-brief.md +26 -0
- package/templates/knowledge-pack/README.md +30 -0
- package/templates/knowledge-pack/clause-map.md +11 -0
- package/templates/knowledge-pack/entity-relation-map.md +18 -0
- package/templates/knowledge-pack/eval-questions.md +13 -0
- package/templates/knowledge-pack/knowledge-pack.source.json +107 -0
- package/templates/knowledge-pack/review-notes.md +14 -0
- package/templates/knowledge-pack/source-register.md +13 -0
- package/templates/knowledge-pack/standard-register.md +10 -0
- package/templates/knowledge-pack-samples/scheme-review/README.md +18 -0
- package/templates/knowledge-pack-samples/scheme-review/clause-map.md +8 -0
- package/templates/knowledge-pack-samples/scheme-review/entity-relation-map.md +17 -0
- package/templates/knowledge-pack-samples/scheme-review/eval-questions.md +9 -0
- package/templates/knowledge-pack-samples/scheme-review/knowledge-pack.source.json +251 -0
- package/templates/knowledge-pack-samples/scheme-review/review-notes.md +8 -0
- package/templates/knowledge-pack-samples/scheme-review/source-register.md +9 -0
- package/templates/knowledge-pack-samples/scheme-review/standard-register.md +9 -0
- package/templates/project-ai/.ai/agent-routing.md +6 -2
- package/templates/project-ai/.ai/skills.md +29 -3
- package/vision/README.md +1 -0
- package/vision/roadmap.md +22 -3
- package/vision/v1.4.0-engineering-document-workflow.md +205 -0
- package/workflows/rag-pipeline.md +14 -9
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
import assert from "node:assert/strict";
|
|
4
|
+
import fs from "node:fs";
|
|
5
|
+
import os from "node:os";
|
|
6
|
+
import path from "node:path";
|
|
7
|
+
import { spawnSync } from "node:child_process";
|
|
8
|
+
|
|
9
|
+
const root = fs.realpathSync(process.cwd());
|
|
10
|
+
const cli = path.join(root, "bin", "archsight-aios.mjs");
|
|
11
|
+
const tempRoot = fs.mkdtempSync(path.join(os.tmpdir(), "archsight-aios-knowledge-pack-"));
|
|
12
|
+
const packPath = path.join(tempRoot, "knowledge-pack.json");
|
|
13
|
+
const inputPath = path.join(tempRoot, "lookup-input.json");
|
|
14
|
+
const scorecardPath = path.join(root, "prompts", "evaluations", "engineering-knowledge-pack-scorecard.json");
|
|
15
|
+
|
|
16
|
+
function run(args, options = {}) {
|
|
17
|
+
const result = spawnSync(process.execPath, [cli, ...args], {
|
|
18
|
+
cwd: root,
|
|
19
|
+
encoding: "utf8",
|
|
20
|
+
...options
|
|
21
|
+
});
|
|
22
|
+
if (result.status !== 0) {
|
|
23
|
+
throw new Error(`${args.join(" ")} failed\n${result.stdout}\n${result.stderr}`);
|
|
24
|
+
}
|
|
25
|
+
return result;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
try {
|
|
29
|
+
const scorecard = JSON.parse(fs.readFileSync(scorecardPath, "utf8"));
|
|
30
|
+
assert.equal(scorecard.schema, 1);
|
|
31
|
+
assert.equal(scorecard.sampleCase.packId, "scheme-review-reference");
|
|
32
|
+
assert.equal(scorecard.criteria.reduce((sum, item) => sum + item.weight, 0), 100);
|
|
33
|
+
const weightedScore = scorecard.criteria.reduce((sum, item) => {
|
|
34
|
+
return sum + scorecard.sampleCase.scores[item.id] * item.weight;
|
|
35
|
+
}, 0) / 100;
|
|
36
|
+
assert.ok(weightedScore >= scorecard.sampleCase.minimumPassingWeightedScore);
|
|
37
|
+
|
|
38
|
+
run(["knowledge:validate", "--cwd", "templates/knowledge-pack-samples", "--name", "scheme-review"]);
|
|
39
|
+
run([
|
|
40
|
+
"knowledge:compile",
|
|
41
|
+
"--cwd",
|
|
42
|
+
"templates/knowledge-pack-samples",
|
|
43
|
+
"--name",
|
|
44
|
+
"scheme-review",
|
|
45
|
+
"--out",
|
|
46
|
+
packPath
|
|
47
|
+
]);
|
|
48
|
+
|
|
49
|
+
const inspect = JSON.parse(run(["knowledge:inspect", "--pack", packPath]).stdout);
|
|
50
|
+
assert.equal(inspect.packId, "scheme-review-reference");
|
|
51
|
+
assert.equal(inspect.counts.clauses, 4);
|
|
52
|
+
assert.equal(inspect.counts.evalQuestions, 5);
|
|
53
|
+
|
|
54
|
+
const lookup = JSON.parse(run([
|
|
55
|
+
"knowledge:lookup",
|
|
56
|
+
"--pack",
|
|
57
|
+
packPath,
|
|
58
|
+
"--query",
|
|
59
|
+
"高支模方案是否应检查计算书"
|
|
60
|
+
]).stdout);
|
|
61
|
+
assert.equal(lookup.status, "found");
|
|
62
|
+
assert.equal(lookup.applicability, "applicable");
|
|
63
|
+
assert.equal(lookup.citations[0].clauseId, "CLAUSE-HIGH-FORMWORK");
|
|
64
|
+
assert.equal(lookup.sourceVersion, "SYN-2026.01");
|
|
65
|
+
|
|
66
|
+
const evalReport = JSON.parse(run(["knowledge:eval", "--pack", packPath]).stdout);
|
|
67
|
+
assert.equal(evalReport.failed, 0);
|
|
68
|
+
assert.equal(evalReport.passed, 5);
|
|
69
|
+
|
|
70
|
+
fs.writeFileSync(
|
|
71
|
+
inputPath,
|
|
72
|
+
JSON.stringify({
|
|
73
|
+
knowledgePackPath: packPath,
|
|
74
|
+
query: "高支模方案是否应检查计算书"
|
|
75
|
+
}),
|
|
76
|
+
"utf8"
|
|
77
|
+
);
|
|
78
|
+
const capability = JSON.parse(run([
|
|
79
|
+
"capability:call",
|
|
80
|
+
"--capability",
|
|
81
|
+
"knowledge.norm_lookup",
|
|
82
|
+
"--agent",
|
|
83
|
+
"vitruvius",
|
|
84
|
+
"--skill",
|
|
85
|
+
"aios-knowledge",
|
|
86
|
+
"--input",
|
|
87
|
+
inputPath
|
|
88
|
+
]).stdout);
|
|
89
|
+
assert.equal(capability.toolResult.status, "found");
|
|
90
|
+
assert.equal(capability.decision.action, "proceed");
|
|
91
|
+
assert.equal(capability.evidence.serverInfo.name, "archsight-aios-knowledge-reference");
|
|
92
|
+
|
|
93
|
+
console.log("Knowledge Pack validation passed.");
|
|
94
|
+
} finally {
|
|
95
|
+
fs.rmSync(tempRoot, { recursive: true, force: true });
|
|
96
|
+
}
|
|
@@ -8,7 +8,8 @@ const errors = [];
|
|
|
8
8
|
|
|
9
9
|
const fixturePaths = [
|
|
10
10
|
"prompts/evaluations/engineering-business-basic-fixtures.json",
|
|
11
|
-
"prompts/evaluations/engineering-business-public-advisory-fixtures.json"
|
|
11
|
+
"prompts/evaluations/engineering-business-public-advisory-fixtures.json",
|
|
12
|
+
"prompts/evaluations/engineering-document-writing-fixtures.json"
|
|
12
13
|
];
|
|
13
14
|
const fixtures = fixturePaths.map((fixturePath) => ({
|
|
14
15
|
path: fixturePath,
|
|
@@ -143,9 +144,10 @@ function validateFixture(fixturePath, fixture) {
|
|
|
143
144
|
return;
|
|
144
145
|
}
|
|
145
146
|
|
|
147
|
+
const expectations = fixtureExpectations(fixturePath, fixture);
|
|
146
148
|
check(fixture.schema === 1, `${fixturePath}: schema must be 1`);
|
|
147
149
|
check(Array.isArray(fixture.cases), `${fixturePath}: cases must be an array`);
|
|
148
|
-
check(fixture.cases?.length ===
|
|
150
|
+
check(fixture.cases?.length === expectations.caseCount, `${fixturePath}: must cover ${expectations.caseCount} ${expectations.label} cases`);
|
|
149
151
|
|
|
150
152
|
const seenIds = new Set();
|
|
151
153
|
const seenSkills = new Set();
|
|
@@ -201,17 +203,36 @@ function validateFixture(fixturePath, fixture) {
|
|
|
201
203
|
}
|
|
202
204
|
}
|
|
203
205
|
|
|
204
|
-
const expectedSkills =
|
|
205
|
-
"aios-commercial-tender",
|
|
206
|
-
"aios-commercial-contract",
|
|
207
|
-
"aios-construction-daily",
|
|
208
|
-
"aios-construction-meeting",
|
|
209
|
-
"aios-commercial-variation",
|
|
210
|
-
"aios-construction-scheme"
|
|
211
|
-
].sort();
|
|
206
|
+
const expectedSkills = expectations.skillIds.sort();
|
|
212
207
|
check(JSON.stringify([...seenSkills].sort()) === JSON.stringify(expectedSkills), `${fixturePath}: skill coverage mismatch`);
|
|
213
208
|
}
|
|
214
209
|
|
|
210
|
+
function fixtureExpectations(fixturePath, fixture) {
|
|
211
|
+
if (fixture.name === "engineering-document-writing-fixtures") {
|
|
212
|
+
return {
|
|
213
|
+
label: "engineering-document-writing",
|
|
214
|
+
caseCount: 2,
|
|
215
|
+
skillIds: [
|
|
216
|
+
"aios-tender-write",
|
|
217
|
+
"aios-scheme-write"
|
|
218
|
+
]
|
|
219
|
+
};
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
return {
|
|
223
|
+
label: "engineering-business",
|
|
224
|
+
caseCount: 6,
|
|
225
|
+
skillIds: [
|
|
226
|
+
"aios-commercial-tender",
|
|
227
|
+
"aios-commercial-contract",
|
|
228
|
+
"aios-construction-daily",
|
|
229
|
+
"aios-construction-meeting",
|
|
230
|
+
"aios-commercial-variation",
|
|
231
|
+
"aios-construction-scheme"
|
|
232
|
+
]
|
|
233
|
+
};
|
|
234
|
+
}
|
|
235
|
+
|
|
215
236
|
for (const fixture of fixtures) {
|
|
216
237
|
validateFixture(fixture.path, fixture.data);
|
|
217
238
|
}
|
|
@@ -6,10 +6,16 @@ import path from "node:path";
|
|
|
6
6
|
const root = fs.realpathSync(process.cwd());
|
|
7
7
|
const errors = [];
|
|
8
8
|
|
|
9
|
-
const
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
9
|
+
const scorecardSpecs = [
|
|
10
|
+
{
|
|
11
|
+
fixturePath: "prompts/evaluations/engineering-business-basic-fixtures.json",
|
|
12
|
+
scorecardPath: "prompts/evaluations/engineering-business-basic-scorecard.json"
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
fixturePath: "prompts/evaluations/engineering-document-writing-fixtures.json",
|
|
16
|
+
scorecardPath: "prompts/evaluations/engineering-document-writing-scorecard.json"
|
|
17
|
+
}
|
|
18
|
+
];
|
|
13
19
|
|
|
14
20
|
const sensitiveTerms = [
|
|
15
21
|
"立信",
|
|
@@ -64,10 +70,16 @@ function weightedScore(scores, criteria) {
|
|
|
64
70
|
);
|
|
65
71
|
}
|
|
66
72
|
|
|
67
|
-
|
|
73
|
+
function validateScorecard(fixturePathValue, scorecardPathValue) {
|
|
74
|
+
const fixture = readJson(repoPath(fixturePathValue));
|
|
75
|
+
const scorecard = readJson(repoPath(scorecardPathValue));
|
|
76
|
+
if (!fixture || !scorecard) {
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
|
|
68
80
|
check(scorecard.schema === 1, "scorecard: schema must be 1");
|
|
69
81
|
check(scorecard.version === fixture.version, `scorecard: version must match fixture version ${fixture.version}`);
|
|
70
|
-
check(scorecard.fixture ===
|
|
82
|
+
check(scorecard.fixture === fixturePathValue, `${scorecardPathValue}: fixture path mismatch`);
|
|
71
83
|
check(Array.isArray(scorecard.criteria) && scorecard.criteria.length > 0, "scorecard: criteria must be a non-empty array");
|
|
72
84
|
check(Array.isArray(scorecard.cases) && scorecard.cases.length === fixture.cases.length, "scorecard: case count mismatch");
|
|
73
85
|
|
|
@@ -124,6 +136,10 @@ if (fixture && scorecard) {
|
|
|
124
136
|
check(typeof scorecard.overallDecision?.notAClaim === "string", "scorecard: overallDecision.notAClaim is required");
|
|
125
137
|
}
|
|
126
138
|
|
|
139
|
+
for (const spec of scorecardSpecs) {
|
|
140
|
+
validateScorecard(spec.fixturePath, spec.scorecardPath);
|
|
141
|
+
}
|
|
142
|
+
|
|
127
143
|
if (errors.length > 0) {
|
|
128
144
|
console.error(`Prompt scorecard validation failed with ${errors.length} error(s):`);
|
|
129
145
|
for (const error of errors) console.error(`- ${error}`);
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
import fs from "node:fs";
|
|
4
|
+
import path from "node:path";
|
|
5
|
+
|
|
6
|
+
const root = fs.realpathSync(process.cwd());
|
|
7
|
+
const errors = [];
|
|
8
|
+
const evidencePath = "prompts/evaluations/skill-runtime/v1.4.0-writing-host-validation.json";
|
|
9
|
+
const reportPath = "prompts/evaluations/skill-runtime/v1.4.0-writing-host-validation.md";
|
|
10
|
+
|
|
11
|
+
const sensitiveTerms = [
|
|
12
|
+
"立信",
|
|
13
|
+
"费敏",
|
|
14
|
+
"闻总",
|
|
15
|
+
"谭总",
|
|
16
|
+
"客户内部",
|
|
17
|
+
"培训演示",
|
|
18
|
+
"基础内测",
|
|
19
|
+
"内测模式",
|
|
20
|
+
"内测包"
|
|
21
|
+
];
|
|
22
|
+
|
|
23
|
+
function repoPath(...parts) {
|
|
24
|
+
const target = path.join(root, ...parts);
|
|
25
|
+
const relative = path.relative(root, target);
|
|
26
|
+
if (relative.startsWith("..") || path.isAbsolute(relative)) {
|
|
27
|
+
throw new Error(`Path traversal detected: ${target}`);
|
|
28
|
+
}
|
|
29
|
+
return target;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
function readJson(relativePath) {
|
|
33
|
+
try {
|
|
34
|
+
return JSON.parse(fs.readFileSync(repoPath(relativePath), "utf8"));
|
|
35
|
+
} catch (error) {
|
|
36
|
+
errors.push(`${relativePath}: invalid JSON (${error.message})`);
|
|
37
|
+
return undefined;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
function readText(relativePath) {
|
|
42
|
+
try {
|
|
43
|
+
return fs.readFileSync(repoPath(relativePath), "utf8");
|
|
44
|
+
} catch (error) {
|
|
45
|
+
errors.push(`${relativePath}: ${error.message}`);
|
|
46
|
+
return "";
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
function exists(relativePath) {
|
|
51
|
+
return fs.existsSync(repoPath(relativePath));
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
function check(condition, message) {
|
|
55
|
+
if (!condition) errors.push(message);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
function includesSensitiveTerm(value) {
|
|
59
|
+
const raw = typeof value === "string" ? value : JSON.stringify(value);
|
|
60
|
+
return sensitiveTerms.filter((term) => raw.includes(term));
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
const evidence = readJson(evidencePath);
|
|
64
|
+
const report = readText(reportPath);
|
|
65
|
+
|
|
66
|
+
if (evidence) {
|
|
67
|
+
check(evidence.schema === 1, "evidence: schema must be 1");
|
|
68
|
+
check(evidence.name === "v1.4.0-writing-host-validation", "evidence: unexpected name");
|
|
69
|
+
check(typeof evidence.aiosVersion === "string" && evidence.aiosVersion.length > 0, "evidence: aiosVersion is required");
|
|
70
|
+
check(Array.isArray(evidence.hostChecks) && evidence.hostChecks.length >= 2, "evidence: hostChecks must cover at least two hosts");
|
|
71
|
+
check(Array.isArray(evidence.cases) && evidence.cases.length >= 4, "evidence: cases must cover host x writing skill matrix");
|
|
72
|
+
check(typeof evidence.scorecardReview?.reviewPath === "string", "evidence: scorecardReview.reviewPath is required");
|
|
73
|
+
check(exists(evidence.scorecardReview?.scorecardPath ?? ""), "evidence: scorecardReview.scorecardPath missing");
|
|
74
|
+
check(exists(evidence.scorecardReview?.reviewPath ?? ""), "evidence: scorecardReview.reviewPath missing");
|
|
75
|
+
check(typeof evidence.releaseGate?.notReadyUntil === "string", "evidence: releaseGate.notReadyUntil is required");
|
|
76
|
+
check(report.includes(evidence.name), "report: must reference evidence name");
|
|
77
|
+
const scorecardReview = evidence.scorecardReview?.reviewPath ? readText(evidence.scorecardReview.reviewPath) : "";
|
|
78
|
+
|
|
79
|
+
const sensitiveHits = includesSensitiveTerm(evidence);
|
|
80
|
+
check(sensitiveHits.length === 0, `evidence: sensitive terms leaked (${sensitiveHits.join(", ")})`);
|
|
81
|
+
|
|
82
|
+
const expectedPairs = new Set([
|
|
83
|
+
"codex::aios-tender-write",
|
|
84
|
+
"codex::aios-scheme-write",
|
|
85
|
+
"workbuddy::aios-tender-write",
|
|
86
|
+
"workbuddy::aios-scheme-write"
|
|
87
|
+
]);
|
|
88
|
+
const actualPairs = new Set();
|
|
89
|
+
const allowedStatuses = new Set(["yes", "no", "blocked", "uncertain"]);
|
|
90
|
+
|
|
91
|
+
for (const item of evidence.cases ?? []) {
|
|
92
|
+
check(typeof item.caseId === "string" && item.caseId.length > 0, "case: caseId is required");
|
|
93
|
+
check(typeof item.host === "string" && item.host.length > 0, `${item.caseId}: host is required`);
|
|
94
|
+
check(typeof item.skillId === "string" && item.skillId.startsWith("aios-"), `${item.caseId}: skillId is invalid`);
|
|
95
|
+
check(typeof item.expectedGateSkill === "string" && item.expectedGateSkill.startsWith("aios-"), `${item.caseId}: expectedGateSkill is invalid`);
|
|
96
|
+
check(typeof item.sampleWorkspacePath === "string" && exists(item.sampleWorkspacePath), `${item.caseId}: sampleWorkspacePath missing`);
|
|
97
|
+
check(typeof item.triggerPrompt === "string" && item.triggerPrompt.includes(item.skillId), `${item.caseId}: triggerPrompt must mention skillId`);
|
|
98
|
+
check(allowedStatuses.has(item.skillRuntimeConfirmed), `${item.caseId}: invalid skillRuntimeConfirmed`);
|
|
99
|
+
check(Array.isArray(item.evidence) && item.evidence.length > 0, `${item.caseId}: evidence must be non-empty`);
|
|
100
|
+
actualPairs.add(`${item.host}::${item.skillId}`);
|
|
101
|
+
|
|
102
|
+
if (item.skillRuntimeConfirmed === "yes") {
|
|
103
|
+
check(typeof item.rawOutputPath === "string" && exists(item.rawOutputPath), `${item.caseId}: confirmed runtime needs rawOutputPath`);
|
|
104
|
+
const raw = readText(item.rawOutputPath);
|
|
105
|
+
check(raw.includes(item.skillId), `${item.caseId}: raw output must include skillId`);
|
|
106
|
+
check(raw.includes(item.expectedGateSkill), `${item.caseId}: raw output must include expected gate skill`);
|
|
107
|
+
check(scorecardReview.includes(item.caseId), `${item.caseId}: scorecard review must mention caseId`);
|
|
108
|
+
} else {
|
|
109
|
+
check(item.rawOutputPath === null, `${item.caseId}: non-confirmed runtime must not point to raw output`);
|
|
110
|
+
check(typeof item.blocker === "string" && item.blocker.length > 0, `${item.caseId}: blocker is required when runtime is not confirmed`);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
for (const expected of expectedPairs) {
|
|
115
|
+
check(actualPairs.has(expected), `evidence: missing case ${expected}`);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
if (errors.length > 0) {
|
|
120
|
+
console.error(`Skill runtime evidence validation failed with ${errors.length} error(s):`);
|
|
121
|
+
for (const error of errors) console.error(`- ${error}`);
|
|
122
|
+
process.exit(1);
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
console.log("Skill runtime evidence validation passed.");
|
package/skills/README.md
CHANGED
|
@@ -59,11 +59,23 @@ Skill 可以继续用 `SKILL.md` 表达操作方法,但涉及确定性工具
|
|
|
59
59
|
| `aios-exec` | 有边界地改代码、修 bug、更新文档、运行验证。 |
|
|
60
60
|
| `aios-review` | PR、diff、AI 生成代码、安全、证据链和测试缺口审查。 |
|
|
61
61
|
| `aios-arch` | 架构边界、技术选型、长期复杂度和方案评审。 |
|
|
62
|
-
| `aios-knowledge` | BIM、IFC
|
|
62
|
+
| `aios-knowledge` | BIM、IFC、建筑规范、审图规则、Knowledge Pack 和知识结构化。 |
|
|
63
63
|
| `aios-structural` | 结构力学、荷载、边界条件、FEM 和确定性求解链路评审。 |
|
|
64
|
-
| `aios-runtime` | Prompt、Context、Memory、MCP/Tool、RAG/GraphRAG 和多 Agent Runtime 设计。 |
|
|
64
|
+
| `aios-runtime` | Prompt、Context、Memory、MCP/Tool、Knowledge Pack Reference Runtime、RAG/GraphRAG 和多 Agent Runtime 设计。 |
|
|
65
65
|
| `aios-compare` | 文档专业度对比:比较两份文档、两个版本或两个 AI 输出哪份更专业、更可复核、更适合交付。 |
|
|
66
66
|
| `aios-prompt-compare` | 内部 Prompt / Skill 测试工具:仅开发者明确调用时,对同一输入分别评估弱提示词、便携强提示词和真实 Skill 触发结果,判断是否应沉淀为 Skill。 |
|
|
67
|
+
| `aios-tender` | 工程招投标通用入口:按用户意图区分写作、审核或“先读标再写”。 |
|
|
68
|
+
| `aios-tender-audit` | 工程招投标审核:提取评分点、资格条件、废标风险、资料缺口和人工复核事项。 |
|
|
69
|
+
| `aios-tender-write` | 工程标书 / 技术标生成与改写:基于招标要求、历史标书素材和用户初稿生成 Markdown 工作母版,并交回 `aios-tender-audit` 复核。 |
|
|
70
|
+
| `aios-contract-audit` | 工程合同审核:提取履约节点、付款条件、责任边界、资料缺口和人工复核事项。 |
|
|
71
|
+
| `aios-contract-draft` | 工程合同草拟:生成补充协议、条款改写、履约通知、函件和合同交底 Markdown 草稿,并交回 `aios-contract-audit` 复核。 |
|
|
72
|
+
| `aios-daily` | 工程现场日报通用入口:按用户意图区分日报生成、复核或“先写再查”。 |
|
|
73
|
+
| `aios-daily-write` | 施工日报 / 项目日报生成与改写:基于现场口述、项目群记录、照片说明和用户初稿生成 Markdown 草稿,并交回 `aios-construction-daily` 复核。 |
|
|
74
|
+
| `aios-meeting` | 工程会议纪要通用入口:按用户意图区分纪要生成、复核或“先写再查”。 |
|
|
75
|
+
| `aios-meeting-write` | 工程会议纪要生成与改写:基于录音转写、会议笔记和用户初稿生成 Markdown 草稿,并交回 `aios-construction-meeting` 复核。 |
|
|
76
|
+
| `aios-scheme` | 专项施工方案通用入口:按用户意图区分写作、审核或“先复核再改写”。 |
|
|
77
|
+
| `aios-scheme-audit` | 专项施工方案审核:提取危险源、交底要点、规范核验点、计算书缺口和专家复核事项。 |
|
|
78
|
+
| `aios-scheme-write` | 专项施工方案生成与改写:基于方案初稿、历史方案素材、工程概况和专家意见生成 Markdown 工作母版,并交回 `aios-scheme-audit` 复核。 |
|
|
67
79
|
|
|
68
80
|
工程业务管理技能包 (Engineering Project Management):
|
|
69
81
|
|
|
@@ -71,11 +83,25 @@ Skill 可以继续用 `SKILL.md` 表达操作方法,但涉及确定性工具
|
|
|
71
83
|
|
|
72
84
|
| Skill | 用途 |
|
|
73
85
|
| --- | --- |
|
|
86
|
+
| `aios-tender` | 工程招投标通用短名入口,适合新用户按任务意图路由到写作或审核。 |
|
|
87
|
+
| `aios-tender-audit` | 工程招投标审核短名入口,用于提取评分点、资格条件、废标风险、资料缺口和人工复核事项。 |
|
|
74
88
|
| `aios-commercial-tender` | 工程招投标响应证据链,用于提取评分点、资格条件、废标风险、资料缺口和人工复核事项。 |
|
|
89
|
+
| `aios-tender-write` | 工程标书 / 技术标生成与改写,用于生成目录、章节初稿、评分点响应内容和历史素材复用表。 |
|
|
90
|
+
| `aios-contract-audit` | 工程合同审核短名入口,用于提取履约节点、付款条件、责任边界、资料缺口和人工复核事项。 |
|
|
91
|
+
| `aios-contract-draft` | 工程合同草拟短名入口,用于生成补充协议、条款改写、履约通知、回函和合同交底草稿。 |
|
|
75
92
|
| `aios-commercial-contract` | 工程分包、采购和补充协议履约证据链,用于提取节点、责任边界、付款条件和合同资料缺口。 |
|
|
93
|
+
| `aios-daily` | 工程现场日报通用短名入口,适合新用户按任务意图路由到生成或复核。 |
|
|
94
|
+
| `aios-daily-write` | 施工日报 / 项目日报生成与改写,用于把现场口述、项目群记录、照片说明和用户初稿整理为日报草稿。 |
|
|
76
95
|
| `aios-construction-daily` | 现场施工日报证据链,用于提取管理摘要、异常、问题台账、计划偏差和需补充确认事项。 |
|
|
96
|
+
| `aios-meeting` | 工程会议纪要通用短名入口,适合新用户按任务意图路由到生成或复核。 |
|
|
97
|
+
| `aios-meeting-write` | 工程会议纪要生成与改写,用于把录音转写、会议笔记、群聊摘要和用户初稿整理为纪要草稿。 |
|
|
77
98
|
| `aios-construction-meeting` | 工程现场会议待办闭环,用于将会议讨论转化为责任人、期限、争议点和下次追踪清单。 |
|
|
78
99
|
| `aios-commercial-variation` | 工程变更签证资料链审查,用于梳理联系单、纪要、图纸变更、合同流程和资料断点。 |
|
|
100
|
+
| `aios-scheme` | 专项施工方案通用短名入口,适合新用户按任务意图路由到写作或审核。 |
|
|
101
|
+
| `aios-scheme-audit` | 专项施工方案审核短名入口,用于提取危险源、交底要点、规范核验点、计算书缺口和专家复核事项。 |
|
|
79
102
|
| `aios-construction-scheme` | 专项施工方案证据链辅审,用于提取危险源、交底要点、规范核验点、计算书缺口和专家复核事项。 |
|
|
103
|
+
| `aios-scheme-write` | 专项施工方案生成与改写,用于生成方案章节、工艺流程、危险源控制措施和交底材料初稿。 |
|
|
80
104
|
|
|
81
|
-
|
|
105
|
+
`aios-commercial-*` 和 `aios-construction-*` 系列保留原有领域型入口含义,适合已经在团队培训和内部流程中使用这些命令的场景;`aios-tender*`、`aios-contract-*`、`aios-daily*`、`aios-meeting*` 和 `aios-scheme*` 是更短的任务型入口,适合新用户自助试用和正式技能包对外展示。
|
|
106
|
+
|
|
107
|
+
工程业务管理 Skill 只处理建筑工程资料抽取、生成初稿、证据链整理、风险提示和人工复核分流,不替代法务、造价、监理、安全、项目经理、总工或专家签审。涉及规范、制度、结构计算、质量安全、金额、工期索赔或责任归属时,必须输出中文化的 `判断事项 / 证据 / 工具结果 / 处理建议`;没有工具或人工证据时只能标注 `需核验` 或 `转人工复核`。写作型 Skill 必须使用 Markdown 工作母版,保留素材来源、复用判断、待补占位和审核门禁,不得把历史项目事实直接套入当前项目。
|
package/skills/aios/SKILL.md
CHANGED
|
@@ -24,23 +24,36 @@ description: ArchSight AIOS 总路由入口。用户只说“请用 AIOS 技能
|
|
|
24
24
|
- 请用 AIOS 分析这份资料。
|
|
25
25
|
- 用 ArchSight AIOS 看一下这个文件。
|
|
26
26
|
- 这个工程资料用 AIOS 跑一下。
|
|
27
|
-
- 没有明确写出 `aios-commercial-contract`、`aios-construction-scheme` 等具体 Skill
|
|
27
|
+
- 没有明确写出 `aios-tender`、`aios-contract-audit`、`aios-daily`、`aios-meeting`、`aios-scheme`、`aios-commercial-contract`、`aios-construction-scheme` 等具体 Skill,但任务明显属于建筑工程资料整理、复核、写作、台账或证据链场景。
|
|
28
28
|
|
|
29
29
|
## 路由表
|
|
30
30
|
|
|
31
31
|
| 资料 / 任务线索 | 路由到 | 默认输出方向 |
|
|
32
32
|
|---|---|---|
|
|
33
|
-
|
|
|
34
|
-
|
|
|
35
|
-
|
|
|
36
|
-
|
|
|
33
|
+
| 招投标、技术标、评分点、商务标,但用户未区分写作还是审核 | `aios-tender` | 判断写作 / 审核 / 混合流程,并路由到 `aios-tender-write` 或 `aios-tender-audit` |
|
|
34
|
+
| 招标文件、评分办法、技术标、商务标、资格条件、AI 技术标问题、废标风险 | `aios-tender-audit` | 响应矩阵、评分点、资料清单、风险提示、人工复核事项 |
|
|
35
|
+
| 已使用原领域型招投标入口的团队 | `aios-commercial-tender` | 保留原工程商务 / 招投标证据链入口含义 |
|
|
36
|
+
| 标书编写、技术标生成、投标响应章节改写、历史标书素材复用、用户提供技术标初稿 | `aios-tender-write` | Markdown 工作母版、写作 brief、素材匹配表、章节初稿、审核门禁 |
|
|
37
|
+
| 合同、协议、分包、采购、租赁、付款、结算、履约、违约、争议解决,但用户未区分草拟还是审核 | `aios-contract-audit` | 合同基本事实、空白字段、履约节点、付款结算、责任边界、资料缺口 |
|
|
38
|
+
| 合同审核、合同复核、履约节点、付款条件、责任边界、资料缺口 | `aios-contract-audit` | 履约节点表、付款条件、责任边界、资料缺口、人工复核事项 |
|
|
39
|
+
| 补充协议草拟、条款改写、履约通知、催款函、回函、合同交底 | `aios-contract-draft` | Markdown 草稿、写作 brief、来源标记、待补占位、审核门禁 |
|
|
40
|
+
| 已使用原领域型合同入口的团队 | `aios-commercial-contract` | 保留原工程商务 / 合同履约证据链入口含义 |
|
|
41
|
+
| 项目日报、施工日报、周报素材、现场记录,但用户未区分生成还是复核 | `aios-daily` | 判断写作 / 复核 / 混合流程,并路由到 `aios-daily-write` 或 `aios-construction-daily` |
|
|
42
|
+
| 日报生成、日报编写、现场口述、项目群记录、照片说明、班组汇报 | `aios-daily-write` | Markdown 日报草稿、事实抽取表、待补资料、审核门禁 |
|
|
43
|
+
| 已有施工日报、周报、现场异常、进度、材料进场、机械、劳务、问题台账 | `aios-construction-daily` | 管理摘要、问题台账、异常事项、模板质量诊断、待追踪事项 |
|
|
44
|
+
| 会议纪要、例会、协调会、专题会、交底会,但用户未区分生成还是复核 | `aios-meeting` | 判断写作 / 复核 / 混合流程,并路由到 `aios-meeting-write` 或 `aios-construction-meeting` |
|
|
45
|
+
| 会议纪要生成、录音转写、会议笔记、群聊摘要、待办清单草稿 | `aios-meeting-write` | Markdown 纪要草稿、结论 / 待办抽取表、待补资料、审核门禁 |
|
|
46
|
+
| 已有会议纪要、待办、责任人、截止时间、遗留争议、下次追踪 | `aios-construction-meeting` | 会议结论、待办闭环、责任线索、遗留问题、下次追踪 |
|
|
37
47
|
| 变更、签证、联系单、洽商、索赔、停工窝工、图纸变更、工程量变化 | `aios-commercial-variation` | 资料链、断点、流程依据、疑点、复核分流 |
|
|
38
|
-
|
|
|
48
|
+
| 专项施工方案、施工组织、危大工程,但用户未区分写作还是审核 | `aios-scheme` | 判断写作 / 审核 / 混合流程,并路由到 `aios-scheme-write` 或 `aios-scheme-audit` |
|
|
49
|
+
| 专项施工方案、施工组织、危大工程、深基坑、高支模、脚手架、吊装、危险源、交底、专家论证、计算书 | `aios-scheme-audit` | 工程概况、关键工序、危险源、交底要点、规范 / 计算书 / 专家复核清单 |
|
|
50
|
+
| 已使用原领域型专项方案入口的团队 | `aios-construction-scheme` | 保留原工程施工 / 专项方案证据链入口含义 |
|
|
51
|
+
| 方案编写、方案生成、方案改写、历史方案素材复用、专家意见回写、施工方案初稿优化 | `aios-scheme-write` | Markdown 工作母版、写作 brief、素材匹配表、方案章节初稿、审核门禁 |
|
|
39
52
|
| 结构计算、荷载、边界条件、挠度、稳定、FEM、结构求解器 | `aios-structural` | 结构力学输入检查、求解链路、转 Euclid 结构复核、人工签审边界 |
|
|
40
|
-
| BIM、IFC、Revit、CAD
|
|
53
|
+
| BIM、IFC、Revit、CAD、建筑规范、审图规则、知识结构化、Knowledge Pack、知识包治理 | `aios-knowledge` | 行业语义、规范知识、资料来源、Knowledge Pack 编译 / 评估边界 |
|
|
41
54
|
| 用户明确调用 `aios-compare`,或明确要求用 AIOS 判断两份文档 / 两个版本 / 两个 AI 输出哪份更专业 | `aios-compare` | 对比范围、可比性判断、结构差异、内容差异、专业度评分、边界风险、合并建议 |
|
|
42
55
|
| 开发者明确调用 `aios-prompt-compare`,并要求 weak / portable / skill-runtime 或提示词沉淀评测 | `aios-prompt-compare` | 运行记录、原始输出对照、评分卡、失败模式、沉淀建议 |
|
|
43
|
-
| AI Runtime、RAG、GraphRAG、MCP、Tool Calling、Memory、多 Agent
|
|
56
|
+
| AI Runtime、RAG、GraphRAG、MCP、Tool Calling、Memory、多 Agent 编排、Knowledge Pack Reference Runtime | `aios-runtime` | Runtime 边界、工具权限、知识管线、Reference Runtime 和运行治理 |
|
|
44
57
|
| 建筑行业软件 / 系统深度评价、产品定位、商业验证、范围取舍 | `aios-ceo` | 一把手视角评价、阶段路线、风险和停损信号 |
|
|
45
58
|
| 建筑行业平台界面、工作台、BIM Viewer、审图复核、数据看板 | `aios-design` | 界面任务路径、证据定位、复核追溯、实现交接 |
|
|
46
59
|
| 架构、服务边界、技术选型、长期复杂度 | `aios-arch` | 架构边界、数据链路、治理风险 |
|
|
@@ -54,8 +67,9 @@ description: ArchSight AIOS 总路由入口。用户只说“请用 AIOS 技能
|
|
|
54
67
|
2. 未指定时,根据文件名、标题、正文高频词、表格字段和用户任务判断资料类型。
|
|
55
68
|
3. 命中单一高置信场景时,按对应 Skill 的 `SKILL.md` 工作流执行。
|
|
56
69
|
4. 同一资料包含多个场景时,先输出资料类型判断,再按主任务路由;必要时列出次级 Skill 作为后续复核建议。
|
|
57
|
-
5.
|
|
58
|
-
6.
|
|
70
|
+
5. 当用户动词是“生成、编写、改写、优化初稿、套用历史素材”时,优先选择写作型 Skill;当用户动词是“审核、复核、检查、抽取风险、列缺口”时,优先选择审核型 Skill。
|
|
71
|
+
6. 类型不清时,不要泛泛总结;先输出“资料状态判断”和“需要用户补充的资料类型 / 目标”。
|
|
72
|
+
7. 不因为用户说“AIOS”就强行套建筑行业规则;非建筑任务优先说明 AIOS 不适用,并建议使用宿主工具通用能力。
|
|
59
73
|
|
|
60
74
|
## 输出要求
|
|
61
75
|
|
|
@@ -11,6 +11,8 @@ description: 工程招投标响应证据链工作流。用于从招标文件、
|
|
|
11
11
|
|
|
12
12
|
本 Skill 不替代投标负责人、法务、商务、造价或招标代理复核;不输出中标概率、围标串标判断或最终投标决策。
|
|
13
13
|
|
|
14
|
+
本 Skill 保留原有工程商务 / 招投标领域入口含义。面向新用户的短名入口为 `aios-tender`,只做审核时也可使用 `aios-tender-audit`。
|
|
15
|
+
|
|
14
16
|
## AIOS 适用性
|
|
15
17
|
|
|
16
18
|
本 Skill 仅用于建筑工程、设计咨询、施工总承包、专业分包、材料设备采购和运维改造等工程招投标场景。
|
|
@@ -11,6 +11,8 @@ description: 专项施工方案证据链辅审工作流。用于从施工方案
|
|
|
11
11
|
|
|
12
12
|
本 Skill 不替代总工审查、专家论证、危大工程审批、结构计算、施工许可或安全验收。涉及结构力学、承载、稳定、变形或安全系数的数值结论必须交给 Euclid 和确定性求解器或项目计算书。
|
|
13
13
|
|
|
14
|
+
本 Skill 保留原有工程施工 / 专项方案领域入口含义。面向新用户的短名入口为 `aios-scheme`,只做审核时也可使用 `aios-scheme-audit`。
|
|
15
|
+
|
|
14
16
|
## AIOS 适用性
|
|
15
17
|
|
|
16
18
|
本 Skill 仅用于建筑工程专项施工方案、技术措施、质量安全方案和班组交底资料。
|
|
@@ -27,6 +29,7 @@ description: 专项施工方案证据链辅审工作流。用于从施工方案
|
|
|
27
29
|
- 项目条件:地区、工程类型、危险性较大分部分项工程属性、施工阶段、场地和环境约束。
|
|
28
30
|
- 资料定位:文件名、版本、日期、页码、章节、图号、表号或段落。
|
|
29
31
|
- 用户关注点:危险源、关键工序、交底、规范核验、计算书缺口、专家复核项。
|
|
32
|
+
- 可用 Knowledge Pack 或 `knowledge.norm_lookup` 查询输入;如存在,应优先使用其引用、版本、适用性和仲裁状态,不得只靠模型常识判断规范口径。
|
|
30
33
|
|
|
31
34
|
## 基础版模式
|
|
32
35
|
|
|
@@ -59,7 +62,7 @@ description: 专项施工方案证据链辅审工作流。用于从施工方案
|
|
|
59
62
|
## Capability 与证据
|
|
60
63
|
|
|
61
64
|
- 每个危险源、控制措施和交底要点必须绑定方案原文证据。
|
|
62
|
-
- 涉及规范条文、地方规程、强制性要求或危大工程判断时,调用或要求 `knowledge.norm_lookup`;没有工具结果时标注 `需核验`。
|
|
65
|
+
- 涉及规范条文、地方规程、强制性要求或危大工程判断时,调用或要求 `knowledge.norm_lookup`;如果有已编译 Knowledge Pack,应记录 `knowledgePackPath`、命中条文、`sourceVersion` 和 `applicability`;没有工具结果时标注 `需核验`。
|
|
63
66
|
- 涉及力学计算、承载力、稳定、变形、荷载或边界条件时,不得口算;输出 `处理建议:转 Euclid 结构复核`,并要求 `aios-structural` 或项目计算书证据。
|
|
64
67
|
- Agent 冲突或证据缺失按中文化的 `判断事项 / 证据 / 工具结果 / 处理建议` 输出。
|
|
65
68
|
|
|
@@ -70,8 +73,9 @@ description: 专项施工方案证据链辅审工作流。用于从施工方案
|
|
|
70
73
|
3. 拆解关键工序:按施工顺序提取质量控制点、安全控制点、验收点和交底要点。
|
|
71
74
|
4. 建立危险源清单:危险源、触发条件、方案已写措施、缺失证据和人工复核岗位。
|
|
72
75
|
5. 标注规范核验点:只列需核验问题,不在缺少工具结果时给出合规结论。
|
|
73
|
-
6.
|
|
74
|
-
7.
|
|
76
|
+
6. 如存在 Knowledge Pack,使用 `knowledge.norm_lookup` 对规范 / 审查口径问题做查询,并把 `found`、`not_found`、`conflict`、`inapplicable` 或 `need_context` 写入证据仲裁。
|
|
77
|
+
7. 标注计算书和专家复核缺口:力学参数、荷载组合、支撑体系、设备能力、地质条件等。
|
|
78
|
+
8. 输出班组交底摘要:把已确认的操作红线转为可执行提醒,保留来源证据。
|
|
75
79
|
|
|
76
80
|
## 输出格式
|
|
77
81
|
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: aios-contract-audit
|
|
3
|
+
description: 工程合同审核与履约证据链复核工作流。用于从工程合同、补充协议、采购分包协议和履约资料中抽取节点、付款条件、责任边界、空白字段、资料缺口和人工复核事项。
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# AIOS Contract Audit
|
|
7
|
+
|
|
8
|
+
## 目标
|
|
9
|
+
|
|
10
|
+
以 Themis(法务与合规官)的方式复核工程合同资料,把合同文本、补充协议和履约材料转化为可追踪的履约节点、付款条件、责任边界和证据缺口。
|
|
11
|
+
|
|
12
|
+
本 Skill 是审核型能力,不负责生成可签署合同定稿。需要草拟补充协议、履约通知、合同交底或条款改写初稿时,使用 `aios-contract-draft`;生成后必须回到本 Skill 做法律边界、签章授权、付款条件和人工复核门禁。
|
|
13
|
+
|
|
14
|
+
`aios-commercial-contract` 继续保留原有工程商务 / 合同履约领域入口含义;面向新用户时,推荐优先使用更短的 `aios-contract-audit`。
|
|
15
|
+
|
|
16
|
+
## AIOS 适用性
|
|
17
|
+
|
|
18
|
+
本 Skill 仅用于建筑工程项目中的合同履约管理、采购 / 分包资料整理、补充协议复核和现场执行交接。
|
|
19
|
+
|
|
20
|
+
- 工程项目合同、采购合同、分包合同、租赁协议、补充协议、合同交底和履约台账,启用本 Skill。
|
|
21
|
+
- 普通非建筑合同、通用法务咨询、HR / 行政合同或纯商业合同,不使用本 Skill。
|
|
22
|
+
- 用户要求最终法律意见、是否可签、责任归属或索赔结论时,必须转人工法务、商务、造价或项目负责人复核。
|
|
23
|
+
|
|
24
|
+
## 输入
|
|
25
|
+
|
|
26
|
+
优先收集:
|
|
27
|
+
|
|
28
|
+
- 合同、补充协议、招标 / 报价文件、会议纪要、往来函件和履约台账。
|
|
29
|
+
- 资料来源清单:文件名、版本、日期、页码、章节、条款号、行号或可定位段落。
|
|
30
|
+
- 项目类型、合同类型、地区、标段、承包范围、合同金额、关键里程碑和签章状态。
|
|
31
|
+
- 用户指定的重点问题,例如付款、工期、质量、验收、违约、争议解决、资料缺失或交底事项。
|
|
32
|
+
|
|
33
|
+
## 基础版模式
|
|
34
|
+
|
|
35
|
+
用于工程业务资料处理、项目复核辅助、部门工作流整理或模板沉淀时,按本节收口。可复制的基础提示词见 `prompts/basic-prompt.md`。
|
|
36
|
+
|
|
37
|
+
最小可用输入:
|
|
38
|
+
|
|
39
|
+
- 脱敏后的工程合同、分包合同、采购合同、租赁合同、补充协议或合同摘要。
|
|
40
|
+
- 文件名、版本、日期、章节 / 页码 / 条款标题。
|
|
41
|
+
- 用户要复核的问题,例如履约节点、付款条件、空白字段、责任边界或资料缺口。
|
|
42
|
+
- 人工复核岗位,例如法务、商务、项目经理、造价、财务、合同经办或授权签章负责人。
|
|
43
|
+
|
|
44
|
+
基础输出优先级:
|
|
45
|
+
|
|
46
|
+
1. 先输出合同基本信息和空白字段优先核对表。
|
|
47
|
+
2. 把合同转成关键履约节点、付款和结算条件、责任和违约风险提示。
|
|
48
|
+
3. 所有金额、期限、责任方、验收、付款、违约条款必须带原文依据位置或原文关键词。
|
|
49
|
+
4. 输出只作为履约管理辅助,不构成法律意见、违约定性、索赔或结算结论。
|
|
50
|
+
|
|
51
|
+
## 标准详版报告与输出自检
|
|
52
|
+
|
|
53
|
+
短指令触发本 Skill 时,默认输出标准详版报告,不要压缩成摘要。标准详版报告必须包含:资料来源清单、主分析表 / 清单 / 台账、资料缺口、人工复核岗位、AI 不应下结论事项、输出自检。
|
|
54
|
+
|
|
55
|
+
最小详度要求:
|
|
56
|
+
|
|
57
|
+
- 资料足够时,履约节点表、付款与结算条件或责任边界风险提示至少展开 3 条可定位事项;资料不足时,列出全部可定位事项并说明不足原因。
|
|
58
|
+
- 主分析表必须保留“节点 / 条款或事项 / 证据 / 缺口 / 处理建议 / 人工复核岗位”等字段,不得只写概括段落。
|
|
59
|
+
- 输出自检必须逐项确认是否包含资料来源、主分析表 / 清单 / 台账、资料缺口、人工复核岗位、AI 不应下结论事项;缺一项时先补齐再结束。
|
|
60
|
+
|
|
61
|
+
## Capability 与证据
|
|
62
|
+
|
|
63
|
+
- 所有抽取结论必须带 `证据`,至少包括来源文件、页码 / 章节 / 行号或原文短摘。
|
|
64
|
+
- 涉及法律、地方制度、招采规则、工程规范或合同示范文本适用性时,优先调用或要求 `knowledge.norm_lookup`;没有工具结果时标注 `需核验`。
|
|
65
|
+
- 多 Agent 冲突、工具结果缺失或资料互相矛盾时,按 `governance/arbitration-protocol.md` 输出中文化的 `判断事项 / 证据 / 工具结果 / 处理建议`。
|
|
66
|
+
|
|
67
|
+
## 工作流
|
|
68
|
+
|
|
69
|
+
1. 建立资料来源清单:列出输入文件、版本、日期、签章状态和可引用定位方式。
|
|
70
|
+
2. 识别合同事实:合同类型、双方主体、范围、金额、工期、质量目标、验收方式和争议解决条款。
|
|
71
|
+
3. 抽取履约节点:把触发条件、期限、责任方、交付物和验收材料拆成表格。
|
|
72
|
+
4. 抽取付款和结算条件:区分预付款、进度款、结算、质保金、发票、验收和资料前置条件。
|
|
73
|
+
5. 建立责任边界:列出甲方、乙方、分包、供应商、监理、设计或总包的明确义务。
|
|
74
|
+
6. 标注风险和缺口:只标“建议复核 / 需核验”,不得把缺失资料推断成违约事实。
|
|
75
|
+
7. 对规范、制度或示范文本适用性发起 `knowledge.norm_lookup` 调用计划;没有工具结果时保留为待核验。
|
|
76
|
+
8. 输出人工复核分流:法务、商务、项目经理、造价、财务、授权签章负责人或业主代表。
|
|
77
|
+
|
|
78
|
+
## 输出格式
|
|
79
|
+
|
|
80
|
+
默认输出:
|
|
81
|
+
|
|
82
|
+
1. 结论
|
|
83
|
+
2. 资料来源清单
|
|
84
|
+
3. 合同基本事实
|
|
85
|
+
4. 履约节点表
|
|
86
|
+
5. 付款与结算条件
|
|
87
|
+
6. 责任边界与风险提示
|
|
88
|
+
7. 待补充资料
|
|
89
|
+
8. 审核门禁与人工复核
|
|
90
|
+
9. 证据仲裁
|
|
91
|
+
10. 输出自检
|
|
92
|
+
|
|
93
|
+
履约节点条目格式:
|
|
94
|
+
|
|
95
|
+
```text
|
|
96
|
+
节点:
|
|
97
|
+
触发条件:
|
|
98
|
+
期限:
|
|
99
|
+
责任方:
|
|
100
|
+
交付物:
|
|
101
|
+
证据:
|
|
102
|
+
需复核:
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
证据仲裁条目格式:
|
|
106
|
+
|
|
107
|
+
```text
|
|
108
|
+
判断事项:
|
|
109
|
+
证据:
|
|
110
|
+
工具结果:
|
|
111
|
+
处理建议:可继续 / 需核验 / 转人工复核
|
|
112
|
+
人工复核岗位:
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
## 约束
|
|
116
|
+
|
|
117
|
+
- 不输出最终法律意见、违约定性、责任归属、索赔金额、结算金额或是否可签署结论。
|
|
118
|
+
- 不把合同外事实写成合同义务。
|
|
119
|
+
- 不在没有原文定位时给出确定结论。
|
|
120
|
+
- 不替代法务、商务、造价、财务、项目经理、授权签章负责人或业主代表签审。
|
|
121
|
+
- 对金额、日期和期限保持原单位、原币种和原表达;换算必须标注来源和假设。
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
interface:
|
|
2
|
+
display_name: "AIOS Contract Audit"
|
|
3
|
+
short_description: "审核工程合同履约节点、付款条件和责任边界"
|
|
4
|
+
default_prompt: "当任务涉及建筑工程合同、分包、采购、租赁、补充协议、履约节点、付款条件、责任边界、违约风险或合同资料缺口时,使用该技能进行审核和证据链复核;默认输出标准详版报告,不要压缩成摘要;必须包含资料来源、主分析表或台账、资料缺口、人工复核、AI 不应下结论事项和输出自检;不得输出最终法律意见、责任归属、索赔金额、结算金额或是否可签署结论;需要草拟时转 aios-contract-draft,草拟后回到本技能做审核门禁。"
|