@archsight/aios 1.4.0 → 1.5.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/.claude-plugin/marketplace.json +6 -1
- package/.claude-plugin/plugin.json +5 -1
- package/CHANGELOG.md +30 -0
- package/README.md +226 -50
- package/RELEASE_NOTES.md +20 -0
- package/bin/archsight-aios.mjs +685 -13
- 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 +2 -0
- package/docs/v1.4.0-writing-workflow-quickstart.md +2 -2
- 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 +6 -1
- package/prompts/README.md +1 -0
- package/prompts/evaluation-policy.md +2 -2
- package/prompts/evaluations/engineering-knowledge-pack-scorecard.json +57 -0
- package/prompts/prompt-registry.md +8 -4
- package/rag/README.md +4 -0
- package/runtime/archsight-aios.manifest.json +158 -1
- package/runtime/capability-adapters.json +13 -0
- package/runtime/capability-registry.json +23 -2
- package/runtime/skill-routing.md +17 -5
- package/scripts/build-prompt-run-pack.mjs +3 -28
- package/scripts/lib/local-sensitive-terms.mjs +62 -0
- package/scripts/validate-knowledge-pack.mjs +96 -0
- package/scripts/validate-prompt-fixtures.mjs +3 -28
- package/scripts/validate-prompt-model-outputs.mjs +3 -19
- package/scripts/validate-prompt-run-results.mjs +3 -19
- package/scripts/validate-prompt-scorecard.mjs +3 -19
- package/scripts/validate-skill-runtime-evidence.mjs +3 -14
- package/skills/README.md +26 -4
- package/skills/aios/SKILL.md +19 -8
- 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 +86 -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 +77 -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 +73 -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 +73 -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 +91 -0
- package/skills/aios-scheme-write/SKILL.md +5 -5
- package/skills/aios-scheme-write/agents/openai.yaml +1 -1
- package/skills/aios-scheme-write/prompts/basic-prompt.md +4 -3
- 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 +95 -0
- package/skills/aios-tender-write/SKILL.md +5 -5
- package/skills/aios-tender-write/agents/openai.yaml +1 -1
- package/skills/aios-tender-write/prompts/basic-prompt.md +4 -3
- package/skills/archsight-aios/SKILL.md +15 -5
- package/skills/engineering-business-starter-kit.md +21 -7
- package/templates/README.md +14 -24
- package/templates/document-writing/review-notes.md +2 -2
- package/templates/document-writing-samples/scheme/README.md +1 -1
- package/templates/document-writing-samples/scheme/review-notes.md +1 -1
- package/templates/document-writing-samples/tender/README.md +1 -1
- package/templates/document-writing-samples/tender/review-notes.md +1 -1
- 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/skills.md +24 -3
- package/vision/roadmap.md +14 -3
- package/workflows/rag-pipeline.md +14 -9
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schema": 1,
|
|
3
|
+
"name": "engineering-knowledge-pack-scorecard",
|
|
4
|
+
"version": "0.1",
|
|
5
|
+
"dataBoundary": "Quality gate for synthetic or authorized AIOS Knowledge Packs. It evaluates source governance, traceability, runtime lookup behavior, and eval coverage; it does not certify real regulatory compliance.",
|
|
6
|
+
"criteria": [
|
|
7
|
+
{
|
|
8
|
+
"id": "source_authority",
|
|
9
|
+
"weight": 15,
|
|
10
|
+
"description": "Every source has authorization, version, hash or locator, review status, and clear boundary text."
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
"id": "version_applicability",
|
|
14
|
+
"weight": 15,
|
|
15
|
+
"description": "Standards and clauses preserve region, discipline, sourceVersion, effective status, and inapplicable version behavior."
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"id": "clause_structure",
|
|
19
|
+
"weight": 15,
|
|
20
|
+
"description": "Clauses are decomposed into objects, conditions, requirement, exceptions, applicability, evidence, and review status."
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"id": "graph_traceability",
|
|
24
|
+
"weight": 12,
|
|
25
|
+
"description": "Graph entities and relations retain source references and confidence, and never rely on unmarked model inference."
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
"id": "runtime_lookup",
|
|
29
|
+
"weight": 18,
|
|
30
|
+
"description": "Reference Runtime returns status, citations, applicability, sourceVersion, and notes through the knowledge.norm_lookup contract."
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
"id": "eval_gate",
|
|
34
|
+
"weight": 15,
|
|
35
|
+
"description": "Eval questions cover answerable, unanswerable, conflict, version mismatch, and need-context cases."
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
"id": "human_review_boundary",
|
|
39
|
+
"weight": 10,
|
|
40
|
+
"description": "The pack keeps draft/reviewed/blocked/published states explicit and does not replace formal expert review."
|
|
41
|
+
}
|
|
42
|
+
],
|
|
43
|
+
"sampleCase": {
|
|
44
|
+
"packId": "scheme-review-reference",
|
|
45
|
+
"minimumPassingWeightedScore": 4.5,
|
|
46
|
+
"scores": {
|
|
47
|
+
"source_authority": 5,
|
|
48
|
+
"version_applicability": 5,
|
|
49
|
+
"clause_structure": 5,
|
|
50
|
+
"graph_traceability": 5,
|
|
51
|
+
"runtime_lookup": 5,
|
|
52
|
+
"eval_gate": 5,
|
|
53
|
+
"human_review_boundary": 5
|
|
54
|
+
},
|
|
55
|
+
"decisionBasis": "The sample pack is synthetic but complete: it declares source boundaries, compiles traceable clauses, exposes a local lookup runtime, and passes all deterministic eval cases."
|
|
56
|
+
}
|
|
57
|
+
}
|
|
@@ -26,11 +26,15 @@ Prompt 修改必须记录原因、预期行为变化和评估结果。
|
|
|
26
26
|
|
|
27
27
|
| 名称 | 版本 | 适用场景 | 输入 | 输出 | 禁止场景 | 评估方式 | 路径 |
|
|
28
28
|
|---|---|---|---|---|---|---|---|
|
|
29
|
-
|
|
|
30
|
-
| 工程技术标生成与改写基础提示词 | 0.1 | 工程标书、技术标、投标响应章节生成 / 改写和历史标书素材复用 | 招标文件、评分办法、技术标要求、历史标书素材、类似项目案例、用户初稿 | 资料来源清单、写作 brief、历史素材匹配表、评分点到章节映射、章节初稿、审核门禁交接 | 中标概率、评标结论、最终投标决策、旧项目事实套用 | 是否保留 Markdown 工作母版、素材复用判断、待补占位和 `aios-
|
|
29
|
+
| 招投标审核与技术标响应矩阵基础提示词 | 0.1 | 工程招投标、技术标响应、AI 标书工具复核问题整理 | 招标文件、评分办法、技术标要求、人工检查问题清单 | 资料来源清单、输入类型判断、问题回应矩阵、评分点响应矩阵、资料缺口 | 中标概率、评标结论、采购承诺、串标规避建议 | 是否先判断资料状态,是否避免编造废标项和评分点 | `skills/aios-tender-audit/prompts/basic-prompt.md` |
|
|
30
|
+
| 工程技术标生成与改写基础提示词 | 0.1 | 工程标书、技术标、投标响应章节生成 / 改写和历史标书素材复用 | 招标文件、评分办法、技术标要求、历史标书素材、类似项目案例、用户初稿 | 资料来源清单、写作 brief、历史素材匹配表、评分点到章节映射、章节初稿、审核门禁交接 | 中标概率、评标结论、最终投标决策、旧项目事实套用 | 是否保留 Markdown 工作母版、素材复用判断、待补占位和 `aios-tender-audit` 门禁 | `skills/aios-tender-write/prompts/basic-prompt.md` |
|
|
31
|
+
| 合同审核与履约节点基础提示词 | 0.1 | 工程分包、采购、租赁和补充协议审核 | 合同条款、协议片段、合同交底、合同摘要 | 资料来源清单、空白字段核对表、履约节点、付款结算条件、责任风险提示 | 法律意见、可签署结论、责任归属、索赔或结算金额结论 | 是否提取可执行节点,是否保留法务、商务和签章复核边界 | `skills/aios-contract-audit/prompts/basic-prompt.md` |
|
|
32
|
+
| 合同草拟与履约函件基础提示词 | 0.1 | 补充协议、条款改写、履约通知、催款函、回函、合同交底草稿 | 合同依据、会议纪要、往来函件、履约事实、商务条件、用户初稿 | 资料来源清单、写作 brief、历史素材匹配表、Markdown 草稿、审核门禁交接 | 法律意见、可签署结论、责任归属、索赔成立、结算金额 | 是否保留草稿口径、待补占位、素材复用判断和 `aios-contract-audit` 门禁 | `skills/aios-contract-draft/prompts/basic-prompt.md` |
|
|
31
33
|
| 合同条款与履约节点基础提示词 | 0.1 | 工程分包、采购、租赁和补充协议履约资料整理 | 合同条款、协议片段、合同摘要 | 资料来源清单、空白字段核对表、履约节点、付款结算条件、风险提示 | 法律意见、违约定性、索赔或结算金额结论 | 是否提取可执行节点,是否保留法务和商务复核边界 | `skills/aios-commercial-contract/prompts/basic-prompt.md` |
|
|
34
|
+
| 施工日报生成基础提示词 | 0.1 | 现场口述、项目群记录、照片说明、班组汇报生成日报 / 周报素材 | 现场口述、群聊记录、照片说明、班组汇报、日报初稿 | 资料来源清单、日报写作 brief、事实抽取表、日报草稿、审核门禁交接 | 编造现场事实、工期偏差终局判断、质量安全验收、签证或索赔成立 | 是否保留来源标记、待补占位和 `aios-construction-daily` 门禁 | `skills/aios-daily-write/prompts/basic-prompt.md` |
|
|
32
35
|
| 项目日报问题跟踪基础提示词 | 0.1 | 施工日报、项目日报、周报素材和项目群日报整理 | 日报、周报、现场记录 | 资料来源清单、管理摘要、问题台账、模板质量诊断、需确认事项 | 工期偏差终局判断、质量安全验收结论、签证或索赔成立判断 | 是否区分现场事实和模板空白,是否避免把未提及写成不合格 | `skills/aios-construction-daily/prompts/basic-prompt.md` |
|
|
36
|
+
| 工程会议纪要生成基础提示词 | 0.1 | 录音转写、会议笔记、群聊摘要生成工程会议纪要和待办清单 | 录音转写摘要、会议笔记、群聊摘要、会议附件、用户初稿 | 资料来源清单、会议写作 brief、结论 / 待办 / 争议抽取表、纪要草稿、审核门禁交接 | 正式会议决议、合同通知效力、审批通过、责任归属、签证或索赔成立 | 是否区分发言人与最终责任人,是否保留待补占位和 `aios-construction-meeting` 门禁 | `skills/aios-meeting-write/prompts/basic-prompt.md` |
|
|
33
37
|
| 会议纪要待办闭环基础提示词 | 0.1 | 工程会议、协调会、专题会、交底会记录整理 | 会议纪要、会议记录、录音转写摘要 | 资料来源清单、会议结论、待办闭环、责任线索、遗留问题 | 正式责任归属、合同通知效力、审批通过结论 | 是否区分发言人与最终责任人,是否标注未明确期限和责任人 | `skills/aios-construction-meeting/prompts/basic-prompt.md` |
|
|
34
38
|
| 变更签证资料链基础提示词 | 0.1 | 工程变更、签证、联系单、会议纪要和合同条款链路整理 | 签证单、联系单、合同条款、现场记录、公开样表字段 | 资料来源清单、资料链完整度、字段结构、资料断点、复核分流 | 签证成立、索赔成立、责任归属、最终金额 | 是否区分过程线索和正式依据,是否避免金额和责任判断 | `skills/aios-commercial-variation/prompts/basic-prompt.md` |
|
|
35
|
-
| 施工方案辅助复核基础提示词 | 0.1 | 专项施工方案、技术方案、专家修改说明和 AI 方案试用反馈整理 | 施工方案片段、工程概况、安全措施、专家修改说明、计算书目录 | 资料来源清单、失准复盘、关键工序、危险源、交底要点、回查清单 | 方案合格结论、计算正确结论、专家论证通过结论 | 是否使用辅助复核口径,是否保留总工 / 专家 / 计算书复核边界 | `skills/aios-
|
|
36
|
-
| 专项施工方案生成与改写基础提示词 | 0.1 | 专项施工方案、施工技术措施、交底材料生成 / 改写和历史方案素材复用 | 方案初稿、工程概况、施工工艺、安全措施、历史方案素材、专家意见、计算书目录 | 资料来源清单、写作 brief、历史素材匹配表、方案章节结构、方案章节初稿、危险源占位表、审核门禁交接 | 方案合格、计算正确、专家论证通过、审批通过、旧项目参数套用 | 是否保留 Markdown 工作母版、素材复用判断、危险源占位、待补资料和 `aios-
|
|
39
|
+
| 施工方案辅助复核基础提示词 | 0.1 | 专项施工方案、技术方案、专家修改说明和 AI 方案试用反馈整理 | 施工方案片段、工程概况、安全措施、专家修改说明、计算书目录 | 资料来源清单、失准复盘、关键工序、危险源、交底要点、回查清单 | 方案合格结论、计算正确结论、专家论证通过结论 | 是否使用辅助复核口径,是否保留总工 / 专家 / 计算书复核边界 | `skills/aios-scheme-audit/prompts/basic-prompt.md` |
|
|
40
|
+
| 专项施工方案生成与改写基础提示词 | 0.1 | 专项施工方案、施工技术措施、交底材料生成 / 改写和历史方案素材复用 | 方案初稿、工程概况、施工工艺、安全措施、历史方案素材、专家意见、计算书目录 | 资料来源清单、写作 brief、历史素材匹配表、方案章节结构、方案章节初稿、危险源占位表、审核门禁交接 | 方案合格、计算正确、专家论证通过、审批通过、旧项目参数套用 | 是否保留 Markdown 工作母版、素材复用判断、危险源占位、待补资料和 `aios-scheme-audit` 门禁 | `skills/aios-scheme-write/prompts/basic-prompt.md` |
|
package/rag/README.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schema": 1,
|
|
3
3
|
"name": "archsight-aios",
|
|
4
|
-
"version": "1.
|
|
4
|
+
"version": "1.5.1",
|
|
5
5
|
"description": "ArchSight AIOS 的 Agent、Skill、Workflow、Runtime 和项目模板注册表,面向建筑行业知识工作者与 AI 工程团队。",
|
|
6
6
|
"agents": [
|
|
7
7
|
{
|
|
@@ -188,6 +188,20 @@
|
|
|
188
188
|
"path": "skills/aios-exec/SKILL.md",
|
|
189
189
|
"openaiConfigPath": "skills/aios-exec/agents/openai.yaml"
|
|
190
190
|
},
|
|
191
|
+
{
|
|
192
|
+
"id": "aios-tender",
|
|
193
|
+
"primaryAgent": "mason",
|
|
194
|
+
"defaultWorkflow": "review",
|
|
195
|
+
"path": "skills/aios-tender/SKILL.md",
|
|
196
|
+
"openaiConfigPath": "skills/aios-tender/agents/openai.yaml"
|
|
197
|
+
},
|
|
198
|
+
{
|
|
199
|
+
"id": "aios-tender-audit",
|
|
200
|
+
"primaryAgent": "mason",
|
|
201
|
+
"defaultWorkflow": "review",
|
|
202
|
+
"path": "skills/aios-tender-audit/SKILL.md",
|
|
203
|
+
"openaiConfigPath": "skills/aios-tender-audit/agents/openai.yaml"
|
|
204
|
+
},
|
|
191
205
|
{
|
|
192
206
|
"id": "aios-commercial-tender",
|
|
193
207
|
"primaryAgent": "mason",
|
|
@@ -202,6 +216,20 @@
|
|
|
202
216
|
"path": "skills/aios-tender-write/SKILL.md",
|
|
203
217
|
"openaiConfigPath": "skills/aios-tender-write/agents/openai.yaml"
|
|
204
218
|
},
|
|
219
|
+
{
|
|
220
|
+
"id": "aios-contract-audit",
|
|
221
|
+
"primaryAgent": "themis",
|
|
222
|
+
"defaultWorkflow": "review",
|
|
223
|
+
"path": "skills/aios-contract-audit/SKILL.md",
|
|
224
|
+
"openaiConfigPath": "skills/aios-contract-audit/agents/openai.yaml"
|
|
225
|
+
},
|
|
226
|
+
{
|
|
227
|
+
"id": "aios-contract-draft",
|
|
228
|
+
"primaryAgent": "themis",
|
|
229
|
+
"defaultWorkflow": "feature-development",
|
|
230
|
+
"path": "skills/aios-contract-draft/SKILL.md",
|
|
231
|
+
"openaiConfigPath": "skills/aios-contract-draft/agents/openai.yaml"
|
|
232
|
+
},
|
|
205
233
|
{
|
|
206
234
|
"id": "aios-commercial-contract",
|
|
207
235
|
"primaryAgent": "themis",
|
|
@@ -209,6 +237,20 @@
|
|
|
209
237
|
"path": "skills/aios-commercial-contract/SKILL.md",
|
|
210
238
|
"openaiConfigPath": "skills/aios-commercial-contract/agents/openai.yaml"
|
|
211
239
|
},
|
|
240
|
+
{
|
|
241
|
+
"id": "aios-daily",
|
|
242
|
+
"primaryAgent": "mason",
|
|
243
|
+
"defaultWorkflow": "site-daily-loop",
|
|
244
|
+
"path": "skills/aios-daily/SKILL.md",
|
|
245
|
+
"openaiConfigPath": "skills/aios-daily/agents/openai.yaml"
|
|
246
|
+
},
|
|
247
|
+
{
|
|
248
|
+
"id": "aios-daily-write",
|
|
249
|
+
"primaryAgent": "mason",
|
|
250
|
+
"defaultWorkflow": "site-daily-loop",
|
|
251
|
+
"path": "skills/aios-daily-write/SKILL.md",
|
|
252
|
+
"openaiConfigPath": "skills/aios-daily-write/agents/openai.yaml"
|
|
253
|
+
},
|
|
212
254
|
{
|
|
213
255
|
"id": "aios-construction-daily",
|
|
214
256
|
"primaryAgent": "mason",
|
|
@@ -216,6 +258,20 @@
|
|
|
216
258
|
"path": "skills/aios-construction-daily/SKILL.md",
|
|
217
259
|
"openaiConfigPath": "skills/aios-construction-daily/agents/openai.yaml"
|
|
218
260
|
},
|
|
261
|
+
{
|
|
262
|
+
"id": "aios-meeting",
|
|
263
|
+
"primaryAgent": "mason",
|
|
264
|
+
"defaultWorkflow": "site-daily-loop",
|
|
265
|
+
"path": "skills/aios-meeting/SKILL.md",
|
|
266
|
+
"openaiConfigPath": "skills/aios-meeting/agents/openai.yaml"
|
|
267
|
+
},
|
|
268
|
+
{
|
|
269
|
+
"id": "aios-meeting-write",
|
|
270
|
+
"primaryAgent": "mason",
|
|
271
|
+
"defaultWorkflow": "site-daily-loop",
|
|
272
|
+
"path": "skills/aios-meeting-write/SKILL.md",
|
|
273
|
+
"openaiConfigPath": "skills/aios-meeting-write/agents/openai.yaml"
|
|
274
|
+
},
|
|
219
275
|
{
|
|
220
276
|
"id": "aios-construction-meeting",
|
|
221
277
|
"primaryAgent": "mason",
|
|
@@ -230,6 +286,20 @@
|
|
|
230
286
|
"path": "skills/aios-commercial-variation/SKILL.md",
|
|
231
287
|
"openaiConfigPath": "skills/aios-commercial-variation/agents/openai.yaml"
|
|
232
288
|
},
|
|
289
|
+
{
|
|
290
|
+
"id": "aios-scheme",
|
|
291
|
+
"primaryAgent": "vitruvius",
|
|
292
|
+
"defaultWorkflow": "review",
|
|
293
|
+
"path": "skills/aios-scheme/SKILL.md",
|
|
294
|
+
"openaiConfigPath": "skills/aios-scheme/agents/openai.yaml"
|
|
295
|
+
},
|
|
296
|
+
{
|
|
297
|
+
"id": "aios-scheme-audit",
|
|
298
|
+
"primaryAgent": "vitruvius",
|
|
299
|
+
"defaultWorkflow": "review",
|
|
300
|
+
"path": "skills/aios-scheme-audit/SKILL.md",
|
|
301
|
+
"openaiConfigPath": "skills/aios-scheme-audit/agents/openai.yaml"
|
|
302
|
+
},
|
|
233
303
|
{
|
|
234
304
|
"id": "aios-construction-scheme",
|
|
235
305
|
"primaryAgent": "vitruvius",
|
|
@@ -382,6 +452,18 @@
|
|
|
382
452
|
"agent": "hephaestus",
|
|
383
453
|
"workflow": "feature-development"
|
|
384
454
|
},
|
|
455
|
+
{
|
|
456
|
+
"taskType": "工程招投标通用入口,按意图区分写作或审核",
|
|
457
|
+
"skill": "aios-tender",
|
|
458
|
+
"agent": "mason",
|
|
459
|
+
"workflow": "review"
|
|
460
|
+
},
|
|
461
|
+
{
|
|
462
|
+
"taskType": "工程招投标审核、评分点、废标风险和技术标资料矩阵",
|
|
463
|
+
"skill": "aios-tender-audit",
|
|
464
|
+
"agent": "mason",
|
|
465
|
+
"workflow": "review"
|
|
466
|
+
},
|
|
385
467
|
{
|
|
386
468
|
"taskType": "工程招投标响应、评分点、废标风险和技术标资料矩阵",
|
|
387
469
|
"skill": "aios-commercial-tender",
|
|
@@ -394,18 +476,54 @@
|
|
|
394
476
|
"agent": "mason",
|
|
395
477
|
"workflow": "feature-development"
|
|
396
478
|
},
|
|
479
|
+
{
|
|
480
|
+
"taskType": "工程合同审核、履约节点、付款条件、责任边界和资料缺口",
|
|
481
|
+
"skill": "aios-contract-audit",
|
|
482
|
+
"agent": "themis",
|
|
483
|
+
"workflow": "review"
|
|
484
|
+
},
|
|
485
|
+
{
|
|
486
|
+
"taskType": "工程补充协议、合同条款、履约通知和函件草稿生成/改写",
|
|
487
|
+
"skill": "aios-contract-draft",
|
|
488
|
+
"agent": "themis",
|
|
489
|
+
"workflow": "feature-development"
|
|
490
|
+
},
|
|
397
491
|
{
|
|
398
492
|
"taskType": "工程合同履约节点、付款条件、责任边界和资料缺口",
|
|
399
493
|
"skill": "aios-commercial-contract",
|
|
400
494
|
"agent": "themis",
|
|
401
495
|
"workflow": "review"
|
|
402
496
|
},
|
|
497
|
+
{
|
|
498
|
+
"taskType": "工程现场日报通用入口,按意图区分生成或复核",
|
|
499
|
+
"skill": "aios-daily",
|
|
500
|
+
"agent": "mason",
|
|
501
|
+
"workflow": "site-daily-loop"
|
|
502
|
+
},
|
|
503
|
+
{
|
|
504
|
+
"taskType": "施工日报、项目日报、周报素材生成、改写和现场记录整理",
|
|
505
|
+
"skill": "aios-daily-write",
|
|
506
|
+
"agent": "mason",
|
|
507
|
+
"workflow": "site-daily-loop"
|
|
508
|
+
},
|
|
403
509
|
{
|
|
404
510
|
"taskType": "施工日报、现场异常、项目群记录和问题追踪台账",
|
|
405
511
|
"skill": "aios-construction-daily",
|
|
406
512
|
"agent": "mason",
|
|
407
513
|
"workflow": "site-daily-loop"
|
|
408
514
|
},
|
|
515
|
+
{
|
|
516
|
+
"taskType": "工程会议纪要通用入口,按意图区分生成或复核",
|
|
517
|
+
"skill": "aios-meeting",
|
|
518
|
+
"agent": "mason",
|
|
519
|
+
"workflow": "site-daily-loop"
|
|
520
|
+
},
|
|
521
|
+
{
|
|
522
|
+
"taskType": "工程会议纪要、待办清单和下次追踪生成/改写",
|
|
523
|
+
"skill": "aios-meeting-write",
|
|
524
|
+
"agent": "mason",
|
|
525
|
+
"workflow": "site-daily-loop"
|
|
526
|
+
},
|
|
409
527
|
{
|
|
410
528
|
"taskType": "工程会议纪要、待办闭环、遗留争议和下次追踪",
|
|
411
529
|
"skill": "aios-construction-meeting",
|
|
@@ -418,6 +536,18 @@
|
|
|
418
536
|
"agent": "plutus",
|
|
419
537
|
"workflow": "site-daily-loop"
|
|
420
538
|
},
|
|
539
|
+
{
|
|
540
|
+
"taskType": "专项施工方案通用入口,按意图区分写作或审核",
|
|
541
|
+
"skill": "aios-scheme",
|
|
542
|
+
"agent": "vitruvius",
|
|
543
|
+
"workflow": "review"
|
|
544
|
+
},
|
|
545
|
+
{
|
|
546
|
+
"taskType": "专项施工方案审核、危险源、交底要点和规范/计算书复核清单",
|
|
547
|
+
"skill": "aios-scheme-audit",
|
|
548
|
+
"agent": "vitruvius",
|
|
549
|
+
"workflow": "review"
|
|
550
|
+
},
|
|
421
551
|
{
|
|
422
552
|
"taskType": "专项施工方案、危险源、交底要点和规范/计算书复核清单",
|
|
423
553
|
"skill": "aios-construction-scheme",
|
|
@@ -507,10 +637,13 @@
|
|
|
507
637
|
"governance/delivery-policy.md",
|
|
508
638
|
"delivery/release-checklist.md",
|
|
509
639
|
"delivery/v1.4.0-release-readiness.md",
|
|
640
|
+
"delivery/v1.5.0-release-readiness.md",
|
|
510
641
|
"delivery/ai-generated-code-checklist.md",
|
|
511
642
|
"delivery/rollback-policy.md",
|
|
643
|
+
"docs/industry-user-trial-guide.md",
|
|
512
644
|
"docs/v1.4.0-writing-workflow-quickstart.md",
|
|
513
645
|
"docs/v1.4.0-writing-boundary.md",
|
|
646
|
+
"docs/v1.5.0-knowledge-pack-runtime.md",
|
|
514
647
|
"memory/decision-records.md",
|
|
515
648
|
"memory/project-memory-policy.md",
|
|
516
649
|
"memory/cleanup-policy.md",
|
|
@@ -534,6 +667,7 @@
|
|
|
534
667
|
"prompts/evaluations/engineering-business-public-advisory-fixtures.json",
|
|
535
668
|
"prompts/evaluations/engineering-document-writing-fixtures.json",
|
|
536
669
|
"prompts/evaluations/engineering-document-writing-scorecard.json",
|
|
670
|
+
"prompts/evaluations/engineering-knowledge-pack-scorecard.json",
|
|
537
671
|
"prompts/evaluations/skill-runtime/README.md",
|
|
538
672
|
"prompts/evaluations/skill-runtime/v1.4.0-writing-host-validation.json",
|
|
539
673
|
"prompts/evaluations/skill-runtime/v1.4.0-writing-host-validation.md",
|
|
@@ -552,12 +686,18 @@
|
|
|
552
686
|
"infra/permissions.md",
|
|
553
687
|
"infra/service-boundaries.md",
|
|
554
688
|
"skills/engineering-business-starter-kit.md",
|
|
689
|
+
"skills/aios-tender-audit/prompts/basic-prompt.md",
|
|
555
690
|
"skills/aios-commercial-tender/prompts/basic-prompt.md",
|
|
556
691
|
"skills/aios-tender-write/prompts/basic-prompt.md",
|
|
692
|
+
"skills/aios-contract-audit/prompts/basic-prompt.md",
|
|
693
|
+
"skills/aios-contract-draft/prompts/basic-prompt.md",
|
|
557
694
|
"skills/aios-commercial-contract/prompts/basic-prompt.md",
|
|
695
|
+
"skills/aios-daily-write/prompts/basic-prompt.md",
|
|
558
696
|
"skills/aios-construction-daily/prompts/basic-prompt.md",
|
|
697
|
+
"skills/aios-meeting-write/prompts/basic-prompt.md",
|
|
559
698
|
"skills/aios-construction-meeting/prompts/basic-prompt.md",
|
|
560
699
|
"skills/aios-commercial-variation/prompts/basic-prompt.md",
|
|
700
|
+
"skills/aios-scheme-audit/prompts/basic-prompt.md",
|
|
561
701
|
"skills/aios-construction-scheme/prompts/basic-prompt.md",
|
|
562
702
|
"skills/aios-scheme-write/prompts/basic-prompt.md",
|
|
563
703
|
"templates/document-writing/source-normalized.md",
|
|
@@ -580,8 +720,25 @@
|
|
|
580
720
|
"templates/document-writing-samples/scheme/draft.md",
|
|
581
721
|
"templates/document-writing-samples/scheme/review-notes.md",
|
|
582
722
|
"templates/document-writing-samples/scheme/final.md",
|
|
723
|
+
"templates/knowledge-pack/README.md",
|
|
724
|
+
"templates/knowledge-pack/knowledge-pack.source.json",
|
|
725
|
+
"templates/knowledge-pack/source-register.md",
|
|
726
|
+
"templates/knowledge-pack/standard-register.md",
|
|
727
|
+
"templates/knowledge-pack/clause-map.md",
|
|
728
|
+
"templates/knowledge-pack/entity-relation-map.md",
|
|
729
|
+
"templates/knowledge-pack/eval-questions.md",
|
|
730
|
+
"templates/knowledge-pack/review-notes.md",
|
|
731
|
+
"templates/knowledge-pack-samples/scheme-review/README.md",
|
|
732
|
+
"templates/knowledge-pack-samples/scheme-review/knowledge-pack.source.json",
|
|
733
|
+
"templates/knowledge-pack-samples/scheme-review/source-register.md",
|
|
734
|
+
"templates/knowledge-pack-samples/scheme-review/standard-register.md",
|
|
735
|
+
"templates/knowledge-pack-samples/scheme-review/clause-map.md",
|
|
736
|
+
"templates/knowledge-pack-samples/scheme-review/entity-relation-map.md",
|
|
737
|
+
"templates/knowledge-pack-samples/scheme-review/eval-questions.md",
|
|
738
|
+
"templates/knowledge-pack-samples/scheme-review/review-notes.md",
|
|
583
739
|
"scripts/analyze-prompt-run-results.mjs",
|
|
584
740
|
"scripts/build-prompt-run-pack.mjs",
|
|
741
|
+
"scripts/validate-knowledge-pack.mjs",
|
|
585
742
|
"scripts/validate-prompt-fixtures.mjs",
|
|
586
743
|
"scripts/validate-prompt-model-outputs.mjs",
|
|
587
744
|
"scripts/validate-prompt-run-results.mjs",
|
|
@@ -2,6 +2,19 @@
|
|
|
2
2
|
"schema": 1,
|
|
3
3
|
"description": "ArchSight AIOS 本地 Capability Adapter 映射。当前只声明 stdio MCP 本地调用,不开放网络服务。",
|
|
4
4
|
"adapters": [
|
|
5
|
+
{
|
|
6
|
+
"id": "archsight-aios.knowledge-reference-mcp",
|
|
7
|
+
"transport": "stdio-mcp",
|
|
8
|
+
"capabilityIds": [
|
|
9
|
+
"knowledge.norm_lookup"
|
|
10
|
+
],
|
|
11
|
+
"command": "node",
|
|
12
|
+
"args": ["./bin/archsight-aios.mjs", "knowledge:mcp"],
|
|
13
|
+
"timeoutMs": 30000,
|
|
14
|
+
"toolNameMap": {
|
|
15
|
+
"knowledge.norm_lookup": "norm_lookup"
|
|
16
|
+
}
|
|
17
|
+
},
|
|
5
18
|
{
|
|
6
19
|
"id": "archsight-solver.local-mcp",
|
|
7
20
|
"transport": "stdio-mcp",
|
|
@@ -75,25 +75,46 @@
|
|
|
75
75
|
{
|
|
76
76
|
"id": "knowledge.norm_lookup",
|
|
77
77
|
"type": "compliance_lookup",
|
|
78
|
-
"ownerAgents": ["vitruvius", "athena", "mason", "argus"],
|
|
78
|
+
"ownerAgents": ["vitruvius", "athena", "mason", "argus", "daedalus"],
|
|
79
79
|
"allowedSkills": [
|
|
80
80
|
"aios-knowledge",
|
|
81
|
+
"aios-runtime",
|
|
82
|
+
"aios-review",
|
|
83
|
+
"aios-plan",
|
|
81
84
|
"aios-arch",
|
|
82
85
|
"aios-ceo",
|
|
86
|
+
"aios-tender",
|
|
87
|
+
"aios-tender-audit",
|
|
88
|
+
"aios-tender-write",
|
|
83
89
|
"aios-commercial-tender",
|
|
90
|
+
"aios-contract-audit",
|
|
91
|
+
"aios-contract-draft",
|
|
84
92
|
"aios-commercial-contract",
|
|
93
|
+
"aios-daily",
|
|
94
|
+
"aios-daily-write",
|
|
85
95
|
"aios-construction-daily",
|
|
96
|
+
"aios-meeting",
|
|
97
|
+
"aios-meeting-write",
|
|
86
98
|
"aios-construction-meeting",
|
|
87
99
|
"aios-commercial-variation",
|
|
100
|
+
"aios-scheme",
|
|
101
|
+
"aios-scheme-audit",
|
|
102
|
+
"aios-scheme-write",
|
|
88
103
|
"aios-construction-scheme"
|
|
89
104
|
],
|
|
90
105
|
"authorityLevel": "L3",
|
|
91
106
|
"description": "按地区、专业、版本、条文和适用条件检索规范知识,返回可追溯引用和适用性判断。",
|
|
92
|
-
"status": "
|
|
107
|
+
"status": "implemented-reference-runtime",
|
|
93
108
|
"inputSchema": {
|
|
94
109
|
"type": "object",
|
|
95
110
|
"required": ["query"],
|
|
96
111
|
"properties": {
|
|
112
|
+
"knowledgePackPath": {
|
|
113
|
+
"type": "string"
|
|
114
|
+
},
|
|
115
|
+
"packPath": {
|
|
116
|
+
"type": "string"
|
|
117
|
+
},
|
|
97
118
|
"query": {
|
|
98
119
|
"type": "string"
|
|
99
120
|
},
|
package/runtime/skill-routing.md
CHANGED
|
@@ -32,13 +32,23 @@
|
|
|
32
32
|
| 开发者明确调用 `aios-prompt-compare` 时,做 weak/basic/runtime 内部评测 | `aios-prompt-compare` | Daedalus | `quality-readiness` |
|
|
33
33
|
| 用户明确调用 `aios-compare` 时,比较两份文档、两个版本或两个 AI 输出哪份更专业 | `aios-compare` | Daedalus | `review` |
|
|
34
34
|
| 建筑行业项目中的受控代码修改、文档、脚本、测试 | `aios-exec` | Hephaestus | `feature-development` |
|
|
35
|
-
|
|
|
35
|
+
| 工程招投标通用入口,按意图区分写作或审核 | `aios-tender` | Mason | `review` |
|
|
36
|
+
| 工程招投标审核、评分点、废标风险和技术标资料矩阵 | `aios-tender-audit` | Mason | `review` |
|
|
37
|
+
| 原工程商务招投标领域入口,保留既有培训和内部流程命令 | `aios-commercial-tender` | Mason | `review` |
|
|
36
38
|
| 工程标书、技术标和投标响应章节生成 / 改写 / 历史素材复用 | `aios-tender-write` | Mason | `feature-development` |
|
|
39
|
+
| 工程合同审核 / 履约节点 / 付款条件 / 责任边界 / 资料缺口 | `aios-contract-audit` | Themis | `review` |
|
|
40
|
+
| 工程补充协议 / 合同条款 / 履约通知 / 函件草稿生成和改写 | `aios-contract-draft` | Themis | `feature-development` |
|
|
37
41
|
| 工程合同履约节点、付款条件、责任边界和资料缺口 | `aios-commercial-contract` | Themis | `review` |
|
|
42
|
+
| 工程现场日报通用入口 / 自动区分生成和复核 | `aios-daily` | Mason | `site-daily-loop` |
|
|
43
|
+
| 施工日报 / 项目日报 / 周报素材生成、改写和现场记录整理 | `aios-daily-write` | Mason | `site-daily-loop` |
|
|
38
44
|
| 施工日报、现场异常、项目群记录和问题追踪台账 | `aios-construction-daily` | Mason | `site-daily-loop` |
|
|
45
|
+
| 工程会议纪要通用入口 / 自动区分生成和复核 | `aios-meeting` | Mason | `site-daily-loop` |
|
|
46
|
+
| 工程会议纪要 / 待办清单 / 下次追踪生成和改写 | `aios-meeting-write` | Mason | `site-daily-loop` |
|
|
39
47
|
| 工程会议纪要、待办闭环、遗留争议和下次追踪 | `aios-construction-meeting` | Mason | `site-daily-loop` |
|
|
40
48
|
| 工程变更签证资料链、联系单、图纸变更和索赔线索 | `aios-commercial-variation` | Plutus | `site-daily-loop` |
|
|
41
|
-
|
|
|
49
|
+
| 专项施工方案通用入口,按意图区分写作或审核 | `aios-scheme` | Vitruvius | `review` |
|
|
50
|
+
| 专项施工方案审核、危险源、交底要点和规范 / 计算书复核清单 | `aios-scheme-audit` | Vitruvius | `review` |
|
|
51
|
+
| 原工程施工专项方案领域入口,保留既有培训和内部流程命令 | `aios-construction-scheme` | Vitruvius | `review` |
|
|
42
52
|
| 专项施工方案、施工技术措施和交底材料生成 / 改写 / 历史方案复用 | `aios-scheme-write` | Vitruvius | `feature-development` |
|
|
43
53
|
|
|
44
54
|
## 路由原则
|
|
@@ -53,8 +63,10 @@
|
|
|
53
63
|
- `aios-design` 用于实现前判断界面方案是否支撑建筑行业审查、定位、复核、追溯和交付;不替代 `frontend-generation` 的 UI 实现、布局验证和交互验证,也不替代通用 `frontend-design` 的视觉风格和前端代码美化评审。
|
|
54
64
|
- `aios-arch` 应补足通用架构评审缺失的建筑行业平台视角,包括 BIM / IFC、规范知识链路、审图证据链、RAG / GraphRAG、任务编排、审计和后端运行可靠性。
|
|
55
65
|
- `aios-structural` 用于结构力学、荷载、边界条件、FEM 和求解器接口评审;它不能替代结构工程师签审,关键数值必须来自 Capability 或项目已有求解器证据。
|
|
56
|
-
- `aios-
|
|
57
|
-
- `aios-tender
|
|
66
|
+
- `aios-tender`、`aios-tender-audit`、`aios-tender-write`、`aios-contract-audit`、`aios-contract-draft`、`aios-daily`、`aios-daily-write`、`aios-meeting`、`aios-meeting-write`、`aios-scheme`、`aios-scheme-audit` 和 `aios-scheme-write` 是更短的任务型入口,适合新用户自助试用和正式技能包对外展示。
|
|
67
|
+
- `aios-commercial-tender`、`aios-commercial-contract`、`aios-commercial-variation`、`aios-construction-daily`、`aios-construction-meeting` 和 `aios-construction-scheme` 保留原有领域型入口含义,适合已经培训和内部流程沉淀过这些命令的团队。
|
|
68
|
+
- 工程业务管理 Skill 只处理建筑工程资料的抽取、生成初稿、证据链整理、风险提示和人工复核分流,不扩展为通用 HR、行政、财务 Skill。
|
|
69
|
+
- `aios-tender-write`、`aios-contract-draft`、`aios-daily-write`、`aios-meeting-write` 和 `aios-scheme-write` 是写作 / 草拟型 Skill,默认使用 Markdown 工作母版;生成后必须分别交回 `aios-tender-audit`、`aios-contract-audit`、`aios-construction-daily`、`aios-construction-meeting` 和 `aios-scheme-audit` 做审核门禁,旧流程也可以继续交回 `aios-commercial-tender`、`aios-commercial-contract`、`aios-construction-daily`、`aios-construction-meeting` 或 `aios-construction-scheme`。
|
|
58
70
|
- 工程业务 Agent 分工:技术标以 Mason 为主;合同法律边界以 Themis 为主;变更签证、工程款、结算和成本线索以 Plutus 为主;会议纪要中的行政、人事、证照和组织协同事项由 Hestia 辅助分流;施工方案以 Vitruvius 为主,涉及结构计算时升级给 Euclid,涉及现场组织和交付时由 Mason 协同。
|
|
59
71
|
- 工程业务管理基础场景可先参考 `skills/engineering-business-starter-kit.md` 和各 Skill 目录下的 `prompts/basic-prompt.md`,形成矩阵、清单、台账和复核问题;涉及金额、工期、责任、合规、质量安全、结构计算或法律意见时,再按对应 Skill 的证据链和人工复核规则升级。
|
|
60
72
|
- `aios-compare` 用于普通两份文档 / 两个版本 / 两个 AI 输出的专业度对比;不做 weak / portable / skill-runtime 提示词评测。
|
|
@@ -77,7 +89,7 @@
|
|
|
77
89
|
- 涉及普通两份文档或两个 AI 输出差异对比:升级给 Daedalus,并使用 `aios-compare`。
|
|
78
90
|
- 涉及提示词效果、weak/basic 对照、Skill 运行结果对比或是否应沉淀为 Skill:只有用户明确调用 `aios-prompt-compare` 时升级给 Daedalus 并使用该 Skill。
|
|
79
91
|
- 涉及具体代码、脚本、测试、文档执行:交给 Hephaestus。
|
|
80
|
-
- 涉及工程现场日报或会议闭环:升级给 Mason 编排 `site-daily-loop
|
|
92
|
+
- 涉及工程现场日报或会议闭环:升级给 Mason 编排 `site-daily-loop`;未区分生成或复核时先调用 `aios-daily` 或 `aios-meeting`,生成日报 / 纪要草稿时调用 `aios-daily-write` 或 `aios-meeting-write`,审核台账和闭环时调用 `aios-construction-daily` 或 `aios-construction-meeting`;会议中出现证照、继续教育、实名制、工资或组织协同时由 Hestia 辅助分流。
|
|
81
93
|
- 涉及工程合同、招投标、变更签证或专项施工方案:按风险类型分别交给 Themis、Mason、Plutus、Vitruvius 或 Euclid;涉及法律、金额、工期、责任、规范、计算或签审结论时必须保留人工复核或 Capability 证据。
|
|
82
94
|
|
|
83
95
|
## 项目接入
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import fs from "node:fs";
|
|
4
4
|
import path from "node:path";
|
|
5
|
+
import { findSensitiveTerms, loadLocalSensitiveTerms } from "./lib/local-sensitive-terms.mjs";
|
|
5
6
|
|
|
6
7
|
const root = fs.realpathSync(process.cwd());
|
|
7
8
|
const errors = [];
|
|
@@ -9,32 +10,7 @@ const errors = [];
|
|
|
9
10
|
const args = parseArgs(process.argv.slice(2));
|
|
10
11
|
const fixturePath = repoPath(args.fixture);
|
|
11
12
|
const fixture = readJson(fixturePath);
|
|
12
|
-
|
|
13
|
-
const sensitiveTerms = [
|
|
14
|
-
"立信",
|
|
15
|
-
"费敏",
|
|
16
|
-
"闻总",
|
|
17
|
-
"谭总",
|
|
18
|
-
"茅盾中学",
|
|
19
|
-
"鸿益",
|
|
20
|
-
"太鑫",
|
|
21
|
-
"飞双",
|
|
22
|
-
"魔毯",
|
|
23
|
-
"客户内部",
|
|
24
|
-
"培训演示",
|
|
25
|
-
"基础内测",
|
|
26
|
-
"内测模式",
|
|
27
|
-
"内测包",
|
|
28
|
-
"嘉兴",
|
|
29
|
-
"绍兴",
|
|
30
|
-
"杭州",
|
|
31
|
-
"20,000",
|
|
32
|
-
"20000",
|
|
33
|
-
"28,000",
|
|
34
|
-
"28000",
|
|
35
|
-
"17,800",
|
|
36
|
-
"17800"
|
|
37
|
-
];
|
|
13
|
+
const sensitiveTerms = loadLocalSensitiveTerms(root);
|
|
38
14
|
|
|
39
15
|
function repoPath(...parts) {
|
|
40
16
|
const target = path.join(root, ...parts);
|
|
@@ -103,8 +79,7 @@ function check(condition, message) {
|
|
|
103
79
|
}
|
|
104
80
|
|
|
105
81
|
function includesSensitiveTerm(value) {
|
|
106
|
-
|
|
107
|
-
return sensitiveTerms.filter((term) => raw.includes(term));
|
|
82
|
+
return findSensitiveTerms(value, sensitiveTerms);
|
|
108
83
|
}
|
|
109
84
|
|
|
110
85
|
function caseInput(item) {
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
|
|
4
|
+
const LOCAL_TERM_FILES = [
|
|
5
|
+
".env",
|
|
6
|
+
".aios-sensitive-terms.local",
|
|
7
|
+
".env.local",
|
|
8
|
+
".env.sensitive.local"
|
|
9
|
+
];
|
|
10
|
+
|
|
11
|
+
function parseTermList(value) {
|
|
12
|
+
if (typeof value !== "string") return [];
|
|
13
|
+
return value
|
|
14
|
+
.split(/[\n,;]+/)
|
|
15
|
+
.map((term) => term.trim())
|
|
16
|
+
.filter((term) => term.length > 0 && !term.startsWith("#"));
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
function parseEnvLine(line) {
|
|
20
|
+
const trimmed = line.trim();
|
|
21
|
+
if (!trimmed || trimmed.startsWith("#")) return [];
|
|
22
|
+
const separatorIndex = trimmed.indexOf("=");
|
|
23
|
+
if (separatorIndex === -1) return parseTermList(trimmed);
|
|
24
|
+
|
|
25
|
+
const key = trimmed.slice(0, separatorIndex).trim();
|
|
26
|
+
const rawValue = trimmed.slice(separatorIndex + 1).trim();
|
|
27
|
+
if (key !== "AIOS_SENSITIVE_TERMS") return [];
|
|
28
|
+
|
|
29
|
+
const unquoted = rawValue.replace(/^['"]|['"]$/g, "");
|
|
30
|
+
return parseTermList(unquoted);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
function readLocalTermFile(filePath) {
|
|
34
|
+
if (!fs.existsSync(filePath)) return [];
|
|
35
|
+
|
|
36
|
+
const content = fs.readFileSync(filePath, "utf8");
|
|
37
|
+
return parseLocalTermContent(content);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
function parseLocalTermContent(content) {
|
|
41
|
+
return content
|
|
42
|
+
.split(/\r?\n/)
|
|
43
|
+
.flatMap((line) => parseEnvLine(line));
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
export function loadLocalSensitiveTerms(root = process.cwd(), env = process.env) {
|
|
47
|
+
const terms = new Set(parseTermList(env.AIOS_SENSITIVE_TERMS));
|
|
48
|
+
|
|
49
|
+
for (const fileName of LOCAL_TERM_FILES) {
|
|
50
|
+
for (const term of readLocalTermFile(path.join(root, fileName))) {
|
|
51
|
+
terms.add(term);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
return [...terms];
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
export function findSensitiveTerms(value, terms) {
|
|
59
|
+
if (!Array.isArray(terms) || terms.length === 0) return [];
|
|
60
|
+
const raw = typeof value === "string" ? value : JSON.stringify(value);
|
|
61
|
+
return terms.filter((term) => raw.includes(term));
|
|
62
|
+
}
|