@winspan/claude-forge 6.9.0 → 7.3.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.
Files changed (32) hide show
  1. package/dist/daemon/handlers/post-tool-use.d.ts.map +1 -1
  2. package/dist/daemon/handlers/post-tool-use.js +9 -0
  3. package/dist/daemon/handlers/post-tool-use.js.map +1 -1
  4. package/dist/daemon/handlers/pre-tool-use.d.ts +1 -0
  5. package/dist/daemon/handlers/pre-tool-use.d.ts.map +1 -1
  6. package/dist/daemon/handlers/pre-tool-use.js +45 -9
  7. package/dist/daemon/handlers/pre-tool-use.js.map +1 -1
  8. package/dist/daemon/handlers/user-prompt.d.ts +1 -0
  9. package/dist/daemon/handlers/user-prompt.d.ts.map +1 -1
  10. package/dist/daemon/handlers/user-prompt.js +29 -0
  11. package/dist/daemon/handlers/user-prompt.js.map +1 -1
  12. package/dist/engine/conventions/basic-security.yaml +1 -7
  13. package/dist/engine/conventions/dependency-safety.yaml +1 -0
  14. package/dist/engine/conventions/git-safety.yaml +1 -0
  15. package/dist/engine/dsl/parser.d.ts.map +1 -1
  16. package/dist/engine/dsl/parser.js +11 -2
  17. package/dist/engine/dsl/parser.js.map +1 -1
  18. package/dist/engine/dsl/types.d.ts +1 -0
  19. package/dist/engine/dsl/types.d.ts.map +1 -1
  20. package/dist/engine/rule-engine.d.ts +4 -0
  21. package/dist/engine/rule-engine.d.ts.map +1 -1
  22. package/dist/engine/rule-engine.js +18 -0
  23. package/dist/engine/rule-engine.js.map +1 -1
  24. package/dist/intelligence/classifier.d.ts.map +1 -1
  25. package/dist/intelligence/classifier.js +2 -10
  26. package/dist/intelligence/classifier.js.map +1 -1
  27. package/dist/skills/registry.d.ts +3 -2
  28. package/dist/skills/registry.d.ts.map +1 -1
  29. package/dist/skills/registry.js +17 -7
  30. package/dist/skills/registry.js.map +1 -1
  31. package/dist/web/static/index.html +85 -50
  32. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"post-tool-use.d.ts","sourceRoot":"","sources":["../../../src/daemon/handlers/post-tool-use.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAClE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oCAAoC,CAAC;AACtE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAIlE,qBAAa,kBAAkB;IAE3B,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,OAAO;gBADP,WAAW,EAAE,WAAW,EACxB,OAAO,GAAE,aAAa,GAAG,IAAW;IAGxC,MAAM,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;IAmDpD,OAAO,CAAC,mBAAmB;CAuB5B"}
1
+ {"version":3,"file":"post-tool-use.d.ts","sourceRoot":"","sources":["../../../src/daemon/handlers/post-tool-use.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAClE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oCAAoC,CAAC;AACtE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAIlE,qBAAa,kBAAkB;IAE3B,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,OAAO;gBADP,WAAW,EAAE,WAAW,EACxB,OAAO,GAAE,aAAa,GAAG,IAAW;IAGxC,MAAM,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;IAmDpD,OAAO,CAAC,mBAAmB;CAkC5B"}
@@ -56,8 +56,17 @@ export class PostToolUseHandler {
56
56
  if (!this.storage)
57
57
  return;
58
58
  const filePath = event.tool_input?.file_path ?? '';
59
+ if (!filePath)
60
+ return;
59
61
  try {
60
62
  const db = this.storage.getDatabase();
63
+ // Mark old issues for this file as resolved
64
+ db.prepare(`
65
+ UPDATE quality_issues
66
+ SET resolved = 1, resolved_at = datetime('now')
67
+ WHERE file_path = ? AND project_path = ? AND resolved = 0
68
+ `).run(filePath, event.project_path);
69
+ // Insert new issues
61
70
  const stmt = db.prepare(`
62
71
  INSERT INTO quality_issues (id, session_id, project_path, file_path, category, level, message)
63
72
  VALUES (?, ?, ?, ?, ?, ?, ?)
@@ -1 +1 @@
1
- {"version":3,"file":"post-tool-use.js","sourceRoot":"","sources":["../../../src/daemon/handlers/post-tool-use.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"post-tool-use.js","sourceRoot":"","sources":["../../../src/daemon/handlers/post-tool-use.ts"],"names":[],"mappings":"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"}
@@ -15,5 +15,6 @@ export declare class PreToolUseHandler {
15
15
  private sessionStartTime;
16
16
  constructor(ruleEngine: RuleEngine, contextBuilder: ContextBuilder);
17
17
  handle(event: ForgeEvent): Promise<HookResult>;
18
+ private getNormReminder;
18
19
  }
19
20
  //# sourceMappingURL=pre-tool-use.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"pre-tool-use.d.ts","sourceRoot":"","sources":["../../../src/daemon/handlers/pre-tool-use.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAClE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,KAAK,EAAE,cAAc,EAAyB,MAAM,iCAAiC,CAAC;AAG7F,qBAAa,iBAAiB;IAI1B,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,cAAc;IAJxB,OAAO,CAAC,gBAAgB,CAAc;gBAG5B,UAAU,EAAE,UAAU,EACtB,cAAc,EAAE,cAAc;IAGlC,MAAM,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;CAkCrD"}
1
+ {"version":3,"file":"pre-tool-use.d.ts","sourceRoot":"","sources":["../../../src/daemon/handlers/pre-tool-use.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAClE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,KAAK,EAAE,cAAc,EAAyB,MAAM,iCAAiC,CAAC;AAc7F,qBAAa,iBAAiB;IAI1B,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,cAAc;IAJxB,OAAO,CAAC,gBAAgB,CAAc;gBAG5B,UAAU,EAAE,UAAU,EACtB,cAAc,EAAE,cAAc;IAGlC,MAAM,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;IAqCpD,OAAO,CAAC,eAAe;CAqBxB"}
@@ -7,6 +7,16 @@
7
7
  * 3. Return block/warn/allow decision
8
8
  */
9
9
  import { logger } from '../../core/utils/logger.js';
10
+ // Norm reminders for specific violation types
11
+ const NORM_REMINDERS = {
12
+ 'git-force-push': 'Git 安全规范:受保护分支禁止强制推送和 rebase,详见 CLAUDE.md',
13
+ 'git-reset-hard': 'Git 安全规范:危险操作需要确认,避免丢失未提交的更改,详见 CLAUDE.md',
14
+ 'rm-dangerous': '基础安全规范:禁止 rm -rf / 等危险操作,详见 CLAUDE.md',
15
+ 'chmod-777': '基础安全规范:禁止设置 777 权限(安全风险),详见 CLAUDE.md',
16
+ 'drop-database': '基础安全规范:禁止 DROP DATABASE 操作,详见 CLAUDE.md',
17
+ 'edit-legacy': 'Harness 规范:改遗留代码前先建测试防护网(理解 → 织网 → 修改 → 验证),详见 CLAUDE.md',
18
+ 'new-feature': 'BMad 规范:新功能必须先有产品规格文档,架构决策必须有文档记录,详见 CLAUDE.md',
19
+ };
10
20
  export class PreToolUseHandler {
11
21
  ruleEngine;
12
22
  contextBuilder;
@@ -24,20 +34,22 @@ export class PreToolUseHandler {
24
34
  const ctx = this.contextBuilder.build(event, options);
25
35
  // 2. Evaluate rules
26
36
  const decision = this.ruleEngine.evaluate(ctx);
27
- // 3. Return block/warn/allow
37
+ // 3. Return block/warn/allow with norm reminder
28
38
  if (decision.level === 'block') {
29
39
  logger.info(`[PreToolUse] BLOCKED: ${decision.reason}`);
30
- return {
31
- allow: false,
32
- reason: decision.reason ?? 'Blocked by governance rule',
33
- };
40
+ const normReminder = this.getNormReminder(decision.rule_id, event);
41
+ const reason = normReminder
42
+ ? `${decision.reason}\n\n${normReminder}`
43
+ : decision.reason ?? 'Blocked by governance rule';
44
+ return { allow: false, reason };
34
45
  }
35
46
  if (decision.level === 'warn') {
36
47
  logger.info(`[PreToolUse] WARN: ${decision.reason}`);
37
- return {
38
- allow: true,
39
- additionalContext: `[Forge 警告] ${decision.reason}`,
40
- };
48
+ const normReminder = this.getNormReminder(decision.rule_id, event);
49
+ const context = normReminder
50
+ ? `[Forge 警告] ${decision.reason}\n\n${normReminder}`
51
+ : `[Forge 警告] ${decision.reason}`;
52
+ return { allow: true, additionalContext: context };
41
53
  }
42
54
  return { allow: true };
43
55
  }
@@ -46,5 +58,29 @@ export class PreToolUseHandler {
46
58
  return { allow: true };
47
59
  }
48
60
  }
61
+ getNormReminder(ruleId, event) {
62
+ if (!ruleId)
63
+ return null;
64
+ // Map rule_id patterns to norm reminders
65
+ if (ruleId.includes('force-push'))
66
+ return NORM_REMINDERS['git-force-push'];
67
+ if (ruleId.includes('reset-hard'))
68
+ return NORM_REMINDERS['git-reset-hard'];
69
+ if (ruleId.includes('rm-rf'))
70
+ return NORM_REMINDERS['rm-dangerous'];
71
+ if (ruleId.includes('chmod-777'))
72
+ return NORM_REMINDERS['chmod-777'];
73
+ if (ruleId.includes('drop-database'))
74
+ return NORM_REMINDERS['drop-database'];
75
+ // Context-based detection
76
+ if (event.tool_name === 'Edit' || event.tool_name === 'Write') {
77
+ const filePath = event.tool_input?.file_path;
78
+ // If editing code without tests, remind about Harness
79
+ if (filePath && !filePath.includes('test') && !filePath.includes('spec')) {
80
+ return NORM_REMINDERS['edit-legacy'];
81
+ }
82
+ }
83
+ return null;
84
+ }
49
85
  }
50
86
  //# sourceMappingURL=pre-tool-use.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"pre-tool-use.js","sourceRoot":"","sources":["../../../src/daemon/handlers/pre-tool-use.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AAEpD,MAAM,OAAO,iBAAiB;IAIlB;IACA;IAJF,gBAAgB,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAEtC,YACU,UAAsB,EACtB,cAA8B;QAD9B,eAAU,GAAV,UAAU,CAAY;QACtB,mBAAc,GAAd,cAAc,CAAgB;IACrC,CAAC;IAEJ,KAAK,CAAC,MAAM,CAAC,KAAiB;QAC5B,IAAI,CAAC;YACH,wBAAwB;YACxB,MAAM,OAAO,GAA0B;gBACrC,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;aACxC,CAAC;YACF,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;YAEtD,oBAAoB;YACpB,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;YAE/C,6BAA6B;YAC7B,IAAI,QAAQ,CAAC,KAAK,KAAK,OAAO,EAAE,CAAC;gBAC/B,MAAM,CAAC,IAAI,CAAC,yBAAyB,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;gBACxD,OAAO;oBACL,KAAK,EAAE,KAAK;oBACZ,MAAM,EAAE,QAAQ,CAAC,MAAM,IAAI,4BAA4B;iBACxD,CAAC;YACJ,CAAC;YAED,IAAI,QAAQ,CAAC,KAAK,KAAK,MAAM,EAAE,CAAC;gBAC9B,MAAM,CAAC,IAAI,CAAC,sBAAsB,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;gBACrD,OAAO;oBACL,KAAK,EAAE,IAAI;oBACX,iBAAiB,EAAE,cAAc,QAAQ,CAAC,MAAM,EAAE;iBACnD,CAAC;YACJ,CAAC;YAED,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;QACzB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,CAAC,IAAI,CAAC,gCAAgC,GAAG,EAAE,CAAC,CAAC;YACnD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;QACzB,CAAC;IACH,CAAC;CACF"}
1
+ {"version":3,"file":"pre-tool-use.js","sourceRoot":"","sources":["../../../src/daemon/handlers/pre-tool-use.ts"],"names":[],"mappings":"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"}
@@ -18,6 +18,7 @@ export declare class UserPromptHandler {
18
18
  private historyContext;
19
19
  private resumeInjected;
20
20
  private historyInjected;
21
+ private normReminded;
21
22
  constructor(classifier: IntentClassifier, skills: SkillRegistry, resume?: ResumeManager | null, historyContext?: HistoryContextBuilder | null);
22
23
  handle(event: ForgeEvent): Promise<HookResult>;
23
24
  }
@@ -1 +1 @@
1
- {"version":3,"file":"user-prompt.d.ts","sourceRoot":"","sources":["../../../src/daemon/handlers/user-prompt.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAClE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACzE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,+CAA+C,CAAC;AAC3F,OAAO,KAAK,EAAE,aAAa,EAAS,MAAM,0BAA0B,CAAC;AACrE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AAGtE,qBAAa,iBAAiB;IAK1B,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,cAAc;IAPxB,OAAO,CAAC,cAAc,CAAqB;IAC3C,OAAO,CAAC,eAAe,CAAqB;gBAGlC,UAAU,EAAE,gBAAgB,EAC5B,MAAM,EAAE,aAAa,EACrB,MAAM,GAAE,aAAa,GAAG,IAAW,EACnC,cAAc,GAAE,qBAAqB,GAAG,IAAW;IAGvD,MAAM,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;CAuDrD"}
1
+ {"version":3,"file":"user-prompt.d.ts","sourceRoot":"","sources":["../../../src/daemon/handlers/user-prompt.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAClE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACzE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,+CAA+C,CAAC;AAC3F,OAAO,KAAK,EAAE,aAAa,EAAS,MAAM,0BAA0B,CAAC;AACrE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AAuBtE,qBAAa,iBAAiB;IAM1B,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,cAAc;IARxB,OAAO,CAAC,cAAc,CAAqB;IAC3C,OAAO,CAAC,eAAe,CAAqB;IAC5C,OAAO,CAAC,YAAY,CAAqB;gBAG/B,UAAU,EAAE,gBAAgB,EAC5B,MAAM,EAAE,aAAa,EACrB,MAAM,GAAE,aAAa,GAAG,IAAW,EACnC,cAAc,GAAE,qBAAqB,GAAG,IAAW;IAGvD,MAAM,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;CA+DrD"}
@@ -6,7 +6,28 @@
6
6
  * 2. Match to available skills
7
7
  * 3. Inject skill recommendation if found
8
8
  */
9
+ import { existsSync } from 'node:fs';
10
+ import { join } from 'node:path';
9
11
  import { logger } from '../../core/utils/logger.js';
12
+ function detectProjectNorms(projectPath) {
13
+ const norms = ['BMad 敏捷开发规范', 'Harness 安全重构规范'];
14
+ if (existsSync(join(projectPath, 'tsconfig.json'))) {
15
+ norms.push('TypeScript strict 规范');
16
+ }
17
+ else if (existsSync(join(projectPath, 'pyproject.toml')) || existsSync(join(projectPath, 'setup.py'))) {
18
+ norms.push('Python 代码规范');
19
+ }
20
+ else if (existsSync(join(projectPath, 'go.mod'))) {
21
+ norms.push('Go 代码规范');
22
+ }
23
+ else if (existsSync(join(projectPath, 'Cargo.toml'))) {
24
+ norms.push('Rust 代码规范');
25
+ }
26
+ else if (existsSync(join(projectPath, 'pom.xml')) || existsSync(join(projectPath, 'build.gradle'))) {
27
+ norms.push('Java 代码规范');
28
+ }
29
+ return `[Forge:规范提醒] 本项目遵守${norms.join('、')},详见 CLAUDE.md。请在执行前确认当前操作符合规范要求。`;
30
+ }
10
31
  export class UserPromptHandler {
11
32
  classifier;
12
33
  skills;
@@ -14,6 +35,7 @@ export class UserPromptHandler {
14
35
  historyContext;
15
36
  resumeInjected = new Set();
16
37
  historyInjected = new Set();
38
+ normReminded = new Set();
17
39
  constructor(classifier, skills, resume = null, historyContext = null) {
18
40
  this.classifier = classifier;
19
41
  this.skills = skills;
@@ -47,6 +69,13 @@ export class UserPromptHandler {
47
69
  logger.info('[UserPrompt] Injected history context');
48
70
  }
49
71
  }
72
+ // 0c. Inject norm reminder (once per session)
73
+ if (!this.normReminded.has(sessionKey)) {
74
+ this.normReminded.add(sessionKey);
75
+ const normReminder = detectProjectNorms(event.project_path);
76
+ parts.push(normReminder);
77
+ logger.info('[UserPrompt] Injected norm reminder');
78
+ }
50
79
  // 1. Classify intent
51
80
  const analysis = await this.classifier.classify(prompt, event.project_path);
52
81
  logger.info(`[UserPrompt] Complexity: ${analysis.complexity} | Keywords: ${analysis.searchKeywords.join(', ')}`);
@@ -1 +1 @@
1
- {"version":3,"file":"user-prompt.js","sourceRoot":"","sources":["../../../src/daemon/handlers/user-prompt.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"user-prompt.js","sourceRoot":"","sources":["../../../src/daemon/handlers/user-prompt.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,7 @@ id: "basic-security"
2
2
  name: "基础安全规范"
3
3
  version: "1.0.0"
4
4
  description: "通用安全规则,适用于所有项目"
5
+ triggers: ["rm", "delete", "删除", "drop", "chmod", "sudo", "密钥", "secret", "password"]
5
6
 
6
7
  variables:
7
8
  protected_branches: ["main", "master", "production", "staging"]
@@ -85,13 +86,6 @@ escalation:
85
86
  message: "已连续失败 {{history.consecutive_failures}} 次,是否需要调整方向?"
86
87
  suggestion: "建议重新审视当前方法,或换一种思路"
87
88
 
88
- - id: "idle-session-alert"
89
- when: |
90
- session.duration_minutes >= 20
91
- && history.file_changes.length == 0
92
- action: warn
93
- message: "已过 {{session.duration_minutes}} 分钟,尚无文件变更"
94
-
95
89
  principles: |
96
90
  ## 基础安全规范
97
91
  - 受保护分支(main/master/production/staging)禁止强制推送
@@ -2,6 +2,7 @@ id: "dependency-safety"
2
2
  name: "依赖安全规范"
3
3
  version: "1.0.0"
4
4
  description: "第三方依赖管理的安全规则,覆盖版本锁定、漏洞检测和供应链风险"
5
+ triggers: ["npm install", "pip install", "yarn add", "pnpm add", "依赖", "安装", "package", "upgrade", "更新依赖"]
5
6
 
6
7
  variables:
7
8
  package_managers: ["npm", "yarn", "pnpm", "pip", "gem", "cargo", "go"]
@@ -2,6 +2,7 @@ id: "git-safety"
2
2
  name: "Git 操作安全规范"
3
3
  version: "1.0.0"
4
4
  description: "Git 版本控制操作的安全规则,防止误操作导致代码丢失"
5
+ triggers: ["git", "push", "commit", "merge", "rebase", "reset", "branch", "提交", "推送", "合并"]
5
6
 
6
7
  variables:
7
8
  protected_branches: ["main", "master", "production", "staging", "release"]
@@ -1 +1 @@
1
- {"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../../src/engine/dsl/parser.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,OAAO,KAAK,EACV,UAAU,EAKX,MAAM,YAAY,CAAC;AAsDpB,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,cAAc,CAAS;gBAEnB,cAAc,CAAC,EAAE,MAAM;IAKnC,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU;IAkBvC,OAAO,IAAI,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC;IAyBlC,kBAAkB,CAChB,YAAY,EAAE,MAAM,EACpB,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,GACtC,UAAU;IAiBb,OAAO,CAAC,gBAAgB;IAsDxB,OAAO,CAAC,cAAc;CAkBvB"}
1
+ {"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../../src/engine/dsl/parser.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAOH,OAAO,KAAK,EACV,UAAU,EAKX,MAAM,YAAY,CAAC;AAuDpB,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,cAAc,CAAS;gBAEnB,cAAc,CAAC,EAAE,MAAM;IAWnC,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU;IAkBvC,OAAO,IAAI,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC;IAyBlC,kBAAkB,CAChB,YAAY,EAAE,MAAM,EACpB,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,GACtC,UAAU;IAiBb,OAAO,CAAC,gBAAgB;IAsDxB,OAAO,CAAC,cAAc;CAkBvB"}
@@ -8,6 +8,7 @@
8
8
  */
9
9
  import fs from 'node:fs';
10
10
  import path from 'node:path';
11
+ import { fileURLToPath } from 'node:url';
11
12
  import yaml from 'js-yaml';
12
13
  import { z } from 'zod';
13
14
  // -- Zod Schemas --
@@ -46,6 +47,7 @@ const ConventionSchema = z.object({
46
47
  name: z.string(),
47
48
  version: z.string(),
48
49
  description: z.string().optional(),
50
+ triggers: z.array(z.string()).optional(),
49
51
  extends: z.array(z.string()).optional(),
50
52
  variables: z.record(z.string(), z.any()).optional().default({}),
51
53
  forbidden: z.array(RuleSchema).optional().default([]),
@@ -58,8 +60,15 @@ const ConventionSchema = z.object({
58
60
  export class ConventionParser {
59
61
  conventionsDir;
60
62
  constructor(conventionsDir) {
61
- this.conventionsDir =
62
- conventionsDir ?? path.join(process.env.HOME ?? '', '.claude', 'conventions');
63
+ if (conventionsDir) {
64
+ this.conventionsDir = conventionsDir;
65
+ }
66
+ else {
67
+ // Default to built-in conventions (dist/engine/conventions)
68
+ const __filename = fileURLToPath(import.meta.url);
69
+ const __dirname = path.dirname(__filename);
70
+ this.conventionsDir = path.join(__dirname, '../conventions');
71
+ }
63
72
  }
64
73
  parseFile(filePath) {
65
74
  if (!fs.existsSync(filePath)) {
@@ -1 +1 @@
1
- {"version":3,"file":"parser.js","sourceRoot":"","sources":["../../../src/engine/dsl/parser.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"parser.js","sourceRoot":"","sources":["../../../src/engine/dsl/parser.ts"],"names":[],"mappings":"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"}
@@ -19,6 +19,7 @@ export interface Convention {
19
19
  name: string;
20
20
  version: string;
21
21
  description?: string;
22
+ triggers?: string[];
22
23
  extends?: string[];
23
24
  variables: Record<string, unknown>;
24
25
  forbidden: Rule[];
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/engine/dsl/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/engine/dsl/types.ts"],"names":[],"mappings":"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"}
@@ -19,6 +19,10 @@ export declare class RuleEngine {
19
19
  applyBinding(binding: ConventionBinding): void;
20
20
  evaluate(ctx: RuleContext): GovernanceDecision;
21
21
  getConventions(): Map<string, Convention>;
22
+ /**
23
+ * Get conventions relevant to the given keywords (for proactive injection)
24
+ */
25
+ getRelevantConventions(keywords: string[]): Convention[];
22
26
  private rebuildIndex;
23
27
  private compileRule;
24
28
  private compileEscalation;
@@ -1 +1 @@
1
- {"version":3,"file":"rule-engine.d.ts","sourceRoot":"","sources":["../../src/engine/rule-engine.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EACV,UAAU,EAGV,WAAW,EAGX,kBAAkB,EAElB,iBAAiB,EAClB,MAAM,gBAAgB,CAAC;AAWxB,qBAAa,UAAU;IACrB,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,QAAQ,CAAqB;IACrC,OAAO,CAAC,QAAQ,CAAmB;IACnC,OAAO,CAAC,WAAW,CAAsC;IACzD,OAAO,CAAC,KAAK,CAAgD;gBAEjD,cAAc,CAAC,EAAE,MAAM;IAMnC,OAAO,IAAI,IAAI;IAKf,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAMhC,YAAY,CAAC,OAAO,EAAE,iBAAiB,GAAG,IAAI;IAiC9C,QAAQ,CAAC,GAAG,EAAE,WAAW,GAAG,kBAAkB;IAoD9C,cAAc,IAAI,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC;IAMzC,OAAO,CAAC,YAAY;IAuBpB,OAAO,CAAC,WAAW;IAkBnB,OAAO,CAAC,iBAAiB;IAkBzB,OAAO,CAAC,eAAe;IAWvB,OAAO,CAAC,UAAU;CA2BnB"}
1
+ {"version":3,"file":"rule-engine.d.ts","sourceRoot":"","sources":["../../src/engine/rule-engine.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EACV,UAAU,EAGV,WAAW,EAGX,kBAAkB,EAElB,iBAAiB,EAClB,MAAM,gBAAgB,CAAC;AAWxB,qBAAa,UAAU;IACrB,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,QAAQ,CAAqB;IACrC,OAAO,CAAC,QAAQ,CAAmB;IACnC,OAAO,CAAC,WAAW,CAAsC;IACzD,OAAO,CAAC,KAAK,CAAgD;gBAEjD,cAAc,CAAC,EAAE,MAAM;IAMnC,OAAO,IAAI,IAAI;IAKf,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAMhC,YAAY,CAAC,OAAO,EAAE,iBAAiB,GAAG,IAAI;IAiC9C,QAAQ,CAAC,GAAG,EAAE,WAAW,GAAG,kBAAkB;IAoD9C,cAAc,IAAI,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC;IAIzC;;OAEG;IACH,sBAAsB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,UAAU,EAAE;IAuBxD,OAAO,CAAC,YAAY;IAuBpB,OAAO,CAAC,WAAW;IAkBnB,OAAO,CAAC,iBAAiB;IAkBzB,OAAO,CAAC,eAAe;IAWvB,OAAO,CAAC,UAAU;CA2BnB"}
@@ -114,6 +114,24 @@ export class RuleEngine {
114
114
  getConventions() {
115
115
  return this.conventions;
116
116
  }
117
+ /**
118
+ * Get conventions relevant to the given keywords (for proactive injection)
119
+ */
120
+ getRelevantConventions(keywords) {
121
+ if (keywords.length === 0)
122
+ return [];
123
+ const keywordsLower = keywords.map(k => k.toLowerCase());
124
+ const relevant = [];
125
+ for (const convention of this.conventions.values()) {
126
+ if (!convention.triggers || convention.triggers.length === 0)
127
+ continue;
128
+ const hasMatch = convention.triggers.some(trigger => keywordsLower.some(kw => kw.includes(trigger.toLowerCase()) || trigger.toLowerCase().includes(kw)));
129
+ if (hasMatch) {
130
+ relevant.push(convention);
131
+ }
132
+ }
133
+ return relevant;
134
+ }
117
135
  // -- Private --
118
136
  rebuildIndex() {
119
137
  this.index = { byTool: new Map(), global: [] };
@@ -1 +1 @@
1
- {"version":3,"file":"rule-engine.js","sourceRoot":"","sources":["../../src/engine/rule-engine.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"rule-engine.js","sourceRoot":"","sources":["../../src/engine/rule-engine.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"classifier.d.ts","sourceRoot":"","sources":["../../src/intelligence/classifier.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAItD,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,UAAU,GAAG,SAAS,CAAC;AAE3D,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,UAAU,CAAC;IACvB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;CACnB;AAeD,qBAAa,gBAAgB;IAGf,OAAO,CAAC,EAAE;IAFtB,OAAO,CAAC,KAAK,CAA4C;gBAErC,EAAE,EAAE,UAAU;IAE5B,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IA2B5E,OAAO,CAAC,gBAAgB;YAqCV,UAAU;IAqBxB,OAAO,CAAC,eAAe;IAuBvB,OAAO,CAAC,QAAQ;IAShB,OAAO,CAAC,eAAe;CAQxB"}
1
+ {"version":3,"file":"classifier.d.ts","sourceRoot":"","sources":["../../src/intelligence/classifier.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAItD,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,UAAU,GAAG,SAAS,CAAC;AAE3D,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,UAAU,CAAC;IACvB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;CACnB;AAeD,qBAAa,gBAAgB;IAGf,OAAO,CAAC,EAAE;IAFtB,OAAO,CAAC,KAAK,CAA4C;gBAErC,EAAE,EAAE,UAAU;IAE5B,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IA2B5E,OAAO,CAAC,gBAAgB;YA4BV,UAAU;IAqBxB,OAAO,CAAC,eAAe;IAuBvB,OAAO,CAAC,QAAQ;IAShB,OAAO,CAAC,eAAe;CAQxB"}
@@ -49,21 +49,13 @@ export class IntentClassifier {
49
49
  }
50
50
  }
51
51
  matchGroundTruth(prompt) {
52
- // Simple: short prompts or known simple commands
53
- if (prompt.length < 20) {
54
- return {
55
- requirement: prompt,
56
- complexity: 'simple',
57
- searchKeywords: [],
58
- reasoning: 'Short prompt (< 20 chars)',
59
- };
60
- }
52
+ // Simple: known simple command patterns
61
53
  for (const pattern of SIMPLE_PATTERNS) {
62
54
  if (pattern.test(prompt)) {
63
55
  return {
64
56
  requirement: prompt,
65
57
  complexity: 'simple',
66
- searchKeywords: [],
58
+ searchKeywords: this.extractKeywords(prompt),
67
59
  reasoning: `Matches simple command pattern: ${pattern.source}`,
68
60
  };
69
61
  }
@@ -1 +1 @@
1
- {"version":3,"file":"classifier.js","sourceRoot":"","sources":["../../src/intelligence/classifier.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"classifier.js","sourceRoot":"","sources":["../../src/intelligence/classifier.ts"],"names":[],"mappings":"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"}
@@ -19,8 +19,9 @@ export declare class SkillRegistry {
19
19
  */
20
20
  private scan;
21
21
  /**
22
- * Match a prompt against skill keywords (case-insensitive exact substring match).
23
- * Returns the first skill whose keyword appears in the prompt, or null.
22
+ * Match a prompt against skill keywords.
23
+ * Requires at least 2 keyword matches to avoid false positives.
24
+ * Returns the highest-scoring skill above threshold, or null.
24
25
  */
25
26
  match(prompt: string, keywords?: string[]): Skill | null;
26
27
  /** Return all loaded skills */
@@ -1 +1 @@
1
- {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/skills/registry.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,KAAK;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED;;;GAGG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAiC;;IAM/C;;;OAGG;IACH,OAAO,CAAC,IAAI;IA4DZ;;;OAGG;IACH,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAM,EAAO,GAAG,KAAK,GAAG,IAAI;IAkB5D,+BAA+B;IAC/B,MAAM,IAAI,KAAK,EAAE;IAIjB,mCAAmC;IACnC,MAAM,IAAI,IAAI;CAIf"}
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/skills/registry.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,KAAK;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED;;;GAGG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAiC;;IAM/C;;;OAGG;IACH,OAAO,CAAC,IAAI;IA4DZ;;;;OAIG;IACH,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAM,EAAO,GAAG,KAAK,GAAG,IAAI;IAyB5D,+BAA+B;IAC/B,MAAM,IAAI,KAAK,EAAE;IAIjB,mCAAmC;IACnC,MAAM,IAAI,IAAI;CAIf"}
@@ -72,20 +72,30 @@ export class SkillRegistry {
72
72
  }
73
73
  }
74
74
  /**
75
- * Match a prompt against skill keywords (case-insensitive exact substring match).
76
- * Returns the first skill whose keyword appears in the prompt, or null.
75
+ * Match a prompt against skill keywords.
76
+ * Requires at least 2 keyword matches to avoid false positives.
77
+ * Returns the highest-scoring skill above threshold, or null.
77
78
  */
78
79
  match(prompt, keywords = []) {
79
80
  const promptLower = prompt.toLowerCase();
80
81
  const extraLower = keywords.map(k => k.toLowerCase());
82
+ let bestSkill = null;
83
+ let bestScore = 0;
81
84
  for (const skill of this.skills.values()) {
82
- const hasPromptMatch = skill.keywords.some(kw => promptLower.includes(kw.toLowerCase()));
83
- const hasExtraMatch = skill.keywords.some(kw => extraLower.some(ek => ek.includes(kw.toLowerCase())));
84
- if (hasPromptMatch || hasExtraMatch) {
85
- return skill;
85
+ let score = 0;
86
+ for (const kw of skill.keywords) {
87
+ const kwLower = kw.toLowerCase();
88
+ if (promptLower.includes(kwLower))
89
+ score++;
90
+ if (extraLower.some(ek => ek.includes(kwLower)))
91
+ score++;
92
+ }
93
+ if (score >= 2 && score > bestScore) {
94
+ bestScore = score;
95
+ bestSkill = skill;
86
96
  }
87
97
  }
88
- return null;
98
+ return bestSkill;
89
99
  }
90
100
  /** Return all loaded skills */
91
101
  getAll() {
@@ -1 +1 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/skills/registry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/skills/registry.ts"],"names":[],"mappings":"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"}
@@ -6,34 +6,69 @@
6
6
  <title>Claude Forge Dashboard</title>
7
7
  <style>
8
8
  * { margin: 0; padding: 0; box-sizing: border-box; }
9
- body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif; background: #0f172a; color: #e2e8f0; }
10
- .nav { display: flex; gap: 1rem; padding: 1rem 2rem; background: #1e293b; border-bottom: 1px solid #334155; }
11
- .nav a { color: #94a3b8; text-decoration: none; padding: 0.5rem 1rem; border-radius: 6px; cursor: pointer; }
12
- .nav a.active, .nav a:hover { color: #f8fafc; background: #334155; }
13
- .container { max-width: 1200px; margin: 0 auto; padding: 2rem; }
9
+ :root {
10
+ --bg: #0a0e1a; --bg-card: #111827; --bg-card-hover: #1a2236;
11
+ --border: #1e293b; --border-hover: #334155;
12
+ --text: #e2e8f0; --text-dim: #64748b; --text-muted: #94a3b8;
13
+ --accent: #818cf8; --accent-glow: rgba(129,140,248,0.15);
14
+ --green: #34d399; --yellow: #fbbf24; --red: #f87171; --blue: #60a5fa;
15
+ --radius: 12px; --radius-sm: 8px;
16
+ }
17
+ body { font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif; background: var(--bg); color: var(--text); line-height: 1.6; }
18
+ .nav { display: flex; align-items: center; gap: 0.25rem; padding: 0.75rem 2rem; background: var(--bg-card); border-bottom: 1px solid var(--border); backdrop-filter: blur(12px); position: sticky; top: 0; z-index: 100; }
19
+ .nav .logo { font-weight: 700; font-size: 1rem; background: linear-gradient(135deg, var(--accent), #a78bfa); -webkit-background-clip: text; -webkit-text-fill-color: transparent; margin-right: 1.5rem; letter-spacing: -0.02em; }
20
+ .nav a { color: var(--text-muted); text-decoration: none; padding: 0.4rem 0.75rem; border-radius: 6px; cursor: pointer; font-size: 0.875rem; transition: all 0.2s; }
21
+ .nav a.active { color: var(--text); background: var(--accent-glow); border: 1px solid rgba(129,140,248,0.3); }
22
+ .nav a:hover:not(.active) { color: var(--text); background: rgba(255,255,255,0.05); }
23
+ .container { max-width: 1100px; margin: 0 auto; padding: 2rem 1.5rem; }
14
24
  .page { display: none; }
15
25
  .page.active { display: block; }
16
- h1 { font-size: 1.5rem; margin-bottom: 1.5rem; }
17
- .cards { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 1rem; margin-bottom: 2rem; }
18
- .card { background: #1e293b; border: 1px solid #334155; border-radius: 8px; padding: 1.25rem; }
19
- .card .label { font-size: 0.875rem; color: #94a3b8; }
20
- .card .value { font-size: 1.5rem; font-weight: 600; margin-top: 0.25rem; }
21
- table { width: 100%; border-collapse: collapse; background: #1e293b; border-radius: 8px; overflow: hidden; }
22
- th, td { padding: 0.75rem 1rem; text-align: left; border-bottom: 1px solid #334155; }
23
- th { background: #0f172a; color: #94a3b8; font-weight: 500; font-size: 0.875rem; }
26
+ h1 { font-size: 1.25rem; font-weight: 600; margin-bottom: 1.25rem; letter-spacing: -0.02em; }
27
+ h2 { font-size: 1.1rem; font-weight: 600; letter-spacing: -0.01em; }
28
+ h3 { font-size: 0.95rem; font-weight: 600; }
29
+ .cards { display: grid; grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); gap: 0.75rem; margin-bottom: 1.5rem; }
30
+ .card { background: var(--bg-card); border: 1px solid var(--border); border-radius: var(--radius); padding: 1.25rem; transition: all 0.2s; }
31
+ .card:hover { border-color: var(--border-hover); background: var(--bg-card-hover); }
32
+ .card .label { font-size: 0.75rem; color: var(--text-dim); text-transform: uppercase; letter-spacing: 0.05em; }
33
+ .card .value { font-size: 1.75rem; font-weight: 700; margin-top: 0.25rem; background: linear-gradient(135deg, var(--text), var(--accent)); -webkit-background-clip: text; -webkit-text-fill-color: transparent; }
34
+ table { width: 100%; border-collapse: collapse; background: var(--bg-card); border-radius: var(--radius); overflow: hidden; border: 1px solid var(--border); }
35
+ th, td { padding: 0.625rem 1rem; text-align: left; border-bottom: 1px solid var(--border); }
36
+ th { background: rgba(0,0,0,0.3); color: var(--text-dim); font-weight: 500; font-size: 0.75rem; text-transform: uppercase; letter-spacing: 0.05em; }
24
37
  td { font-size: 0.875rem; }
25
- .badge { display: inline-block; padding: 2px 8px; border-radius: 4px; font-size: 0.75rem; }
26
- .badge-block { background: #7f1d1d; color: #fca5a5; }
27
- .badge-warn { background: #78350f; color: #fcd34d; }
28
- .badge-allow { background: #14532d; color: #86efac; }
29
- .badge-info { background: #1e3a5f; color: #93c5fd; }
30
- .empty { text-align: center; padding: 3rem; color: #64748b; }
31
- .refresh { background: #334155; color: #e2e8f0; border: none; padding: 0.5rem 1rem; border-radius: 6px; cursor: pointer; margin-bottom: 1rem; }
32
- .refresh:hover { background: #475569; }
38
+ tr:hover td { background: rgba(255,255,255,0.02); }
39
+ .badge { display: inline-block; padding: 2px 8px; border-radius: 20px; font-size: 0.7rem; font-weight: 500; letter-spacing: 0.02em; }
40
+ .badge-block { background: rgba(248,113,113,0.15); color: var(--red); border: 1px solid rgba(248,113,113,0.2); }
41
+ .badge-warn { background: rgba(251,191,36,0.15); color: var(--yellow); border: 1px solid rgba(251,191,36,0.2); }
42
+ .badge-allow { background: rgba(52,211,153,0.15); color: var(--green); border: 1px solid rgba(52,211,153,0.2); }
43
+ .badge-info { background: var(--accent-glow); color: var(--accent); border: 1px solid rgba(129,140,248,0.2); }
44
+ .empty { text-align: center; padding: 3rem; color: var(--text-dim); }
45
+ .btn { background: var(--bg-card); color: var(--text-muted); border: 1px solid var(--border); padding: 0.4rem 0.875rem; border-radius: var(--radius-sm); cursor: pointer; font-size: 0.8rem; transition: all 0.2s; }
46
+ .btn:hover { border-color: var(--accent); color: var(--text); background: var(--accent-glow); }
47
+ .btn-primary { background: linear-gradient(135deg, #6366f1, #8b5cf6); color: white; border: none; }
48
+ .btn-primary:hover { opacity: 0.9; }
49
+ select.btn { appearance: none; padding-right: 1.5rem; background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%2394a3b8' stroke-width='2'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E"); background-repeat: no-repeat; background-position: right 0.5rem center; }
50
+ .refresh { background: var(--bg-card); color: var(--text-muted); border: 1px solid var(--border); padding: 0.4rem 0.875rem; border-radius: var(--radius-sm); cursor: pointer; font-size: 0.8rem; transition: all 0.2s; margin-bottom: 0; }
51
+ .refresh:hover { border-color: var(--accent); color: var(--text); background: var(--accent-glow); }
52
+ .session-card { background: var(--bg-card); border: 1px solid var(--border); border-radius: var(--radius); padding: 1rem 1.25rem; margin-bottom: 0.5rem; cursor: pointer; transition: all 0.2s; }
53
+ .session-card:hover { border-color: var(--accent); box-shadow: 0 0 20px var(--accent-glow); transform: translateY(-1px); }
54
+ .task-card { background: var(--bg-card); border: 1px solid var(--border); border-radius: var(--radius); margin-bottom: 0.75rem; overflow: hidden; transition: all 0.2s; }
55
+ .task-card:hover { border-color: var(--border-hover); }
56
+ .task-header { padding: 1rem 1.25rem; cursor: pointer; display: flex; justify-content: space-between; align-items: center; }
57
+ .task-body { padding: 0 1.25rem 1.25rem; border-top: 1px solid var(--border); }
58
+ .task-section { margin-top: 1rem; }
59
+ .task-section-title { font-size: 0.8rem; font-weight: 600; color: var(--text-muted); margin-bottom: 0.5rem; display: flex; align-items: center; gap: 0.5rem; }
60
+ .task-item { margin-left: 1rem; margin-bottom: 0.375rem; font-size: 0.85rem; color: var(--text-muted); }
61
+ .inj-card { background: var(--bg-card); border: 1px solid var(--border); border-radius: var(--radius); padding: 1rem 1.25rem; margin-bottom: 0.5rem; }
62
+ .dot { width: 8px; height: 8px; border-radius: 50%; display: inline-block; }
63
+ .dot-green { background: var(--green); box-shadow: 0 0 6px var(--green); }
64
+ .dot-red { background: var(--red); box-shadow: 0 0 6px var(--red); }
65
+ @keyframes fadeIn { from { opacity: 0; transform: translateY(8px); } to { opacity: 1; transform: translateY(0); } }
66
+ .fade-in { animation: fadeIn 0.3s ease-out; }
33
67
  </style>
34
68
  </head>
35
69
  <body>
36
70
  <nav class="nav">
71
+ <span class="logo">Claude Forge</span>
37
72
  <a onclick="showPage('dashboard')" class="active" id="nav-dashboard">Dashboard</a>
38
73
  <a onclick="showPage('events')" id="nav-events">Events</a>
39
74
  <a onclick="showPage('injections')" id="nav-injections">Injections</a>
@@ -149,14 +184,14 @@ async function loadSessions() {
149
184
  const start = parseTime(s.start_time).toLocaleString('zh-CN', { month: '2-digit', day: '2-digit', hour: '2-digit', minute: '2-digit' });
150
185
  const end = parseTime(s.end_time).toLocaleTimeString('zh-CN', { hour: '2-digit', minute: '2-digit' });
151
186
  const prompt = s.first_prompt ? s.first_prompt.slice(0, 60) : '(无提示词)';
152
- return `<div class="card" style="margin-bottom:0.5rem;cursor:pointer" onclick="loadSessionDetail('${s.session_id}')">
187
+ return `<div class="session-card fade-in" onclick="loadSessionDetail('${s.session_id}')">
153
188
  <div style="display:flex;justify-content:space-between;align-items:center">
154
189
  <div>
155
- <div style="font-size:0.875rem;color:#64748b">会话 ${shortId} | ${start} ~ ${end}</div>
156
- <div style="margin-top:0.25rem;font-size:1rem">${prompt}</div>
157
- <div style="margin-top:0.25rem;font-size:0.75rem;color:#94a3b8">${s.event_count} events</div>
190
+ <div style="font-size:0.75rem;color:var(--text-dim)">会话 ${shortId} · ${start} ~ ${end}</div>
191
+ <div style="margin-top:0.375rem;font-size:0.95rem;font-weight:500">${prompt}</div>
192
+ <div style="margin-top:0.25rem;font-size:0.75rem;color:var(--text-dim)">${s.event_count} events</div>
158
193
  </div>
159
- <button class="refresh" onclick="event.stopPropagation();loadSessionDetail('${s.session_id}')">查看详情</button>
194
+ <span style="color:var(--accent);font-size:0.8rem">→</span>
160
195
  </div>
161
196
  </div>`;
162
197
  }).join('');
@@ -279,10 +314,10 @@ async function loadSessionDetail(sessionId) {
279
314
  const end = parseTime(data.session.end_time).toLocaleString();
280
315
 
281
316
  let html = `
282
- <div class="card" style="margin-bottom:1rem">
317
+ <div class="card fade-in" style="margin-bottom:1.5rem">
283
318
  <h2 style="margin-bottom:0.5rem">会话 ${shortId}</h2>
284
- <div style="color:#94a3b8">${data.session.first_prompt || '(无提示词)'}</div>
285
- <div style="margin-top:0.5rem;font-size:0.875rem;color:#64748b">${start} ~ ${end} | ${data.tasks.length} tasks | ${data.session.event_count} events</div>
319
+ <div style="color:var(--text-muted)">${data.session.first_prompt || '(无提示词)'}</div>
320
+ <div style="margin-top:0.5rem;font-size:0.8rem;color:var(--text-dim)">${start} ~ ${end} · ${data.tasks.length} tasks · ${data.session.event_count} events</div>
286
321
  </div>
287
322
  `;
288
323
 
@@ -292,35 +327,35 @@ async function loadSessionDetail(sessionId) {
292
327
  const taskEnd = task.end_time ? parseTime(task.end_time).toLocaleTimeString() : 'ongoing';
293
328
  const toolList = Object.entries(task.summary.toolUsage).map(([k, v]) => `${k}×${v}`).join(', ');
294
329
 
295
- html += `<div class="card" style="margin-bottom:1rem;border:1px solid #475569">
296
- <div style="display:flex;justify-content:space-between;align-items:center;cursor:pointer" onclick="toggleTask(${idx})">
330
+ html += `<div class="task-card fade-in">
331
+ <div class="task-header" onclick="toggleTask(${idx})">
297
332
  <div>
298
333
  <h3 style="margin-bottom:0.25rem">任务 ${idx + 1}: ${task.title}</h3>
299
- <div style="font-size:0.75rem;color:#64748b">${taskStart} ~ ${taskEnd} | ${task.event_count} events | ${task.summary.filesChanged.length} files</div>
334
+ <div style="font-size:0.75rem;color:var(--text-dim)">${taskStart} ~ ${taskEnd} · ${task.event_count} events · ${task.summary.filesChanged.length} files</div>
300
335
  </div>
301
- <button class="refresh" style="padding:4px 12px" id="task-btn-${idx}">展开</button>
336
+ <button class="btn" style="padding:4px 12px" id="task-btn-${idx}">展开</button>
302
337
  </div>
303
- <div id="task-${idx}" style="display:none;margin-top:1rem;padding-top:1rem;border-top:1px solid #334155">
304
- <div style="margin-bottom:1rem">
305
- <div style="font-weight:600;margin-bottom:0.5rem">📝 用户输入 (${task.prompts.length} 次)</div>
306
- ${task.prompts.map(p => `<div style="margin-left:1rem;margin-bottom:0.5rem;font-size:0.875rem;color:#94a3b8">${parseTime(p.timestamp).toLocaleTimeString()} "${p.content.slice(0, 80)}"</div>`).join('')}
338
+ <div id="task-${idx}" style="display:none" class="task-body">
339
+ <div class="task-section">
340
+ <div class="task-section-title">📝 用户输入 (${task.prompts.length} 次)</div>
341
+ ${task.prompts.map(p => `<div class="task-item">${parseTime(p.timestamp).toLocaleTimeString()} "${p.content.slice(0, 80)}"</div>`).join('')}
307
342
  </div>
308
- <div style="margin-bottom:1rem">
309
- <div style="font-weight:600;margin-bottom:0.5rem">💉 注入 (${task.injections.length} 次)</div>
310
- ${task.injections.map(i => `<div style="margin-left:1rem;margin-bottom:0.5rem;font-size:0.875rem;color:#94a3b8">[${i.source_handler}] ${i.injection_type} (${i.content.length} chars)</div>`).join('')}
343
+ <div class="task-section">
344
+ <div class="task-section-title">💉 注入 (${task.injections.length} 次)</div>
345
+ ${task.injections.map(i => `<div class="task-item">[${i.source_handler}] ${i.injection_type} (${i.content.length} chars)</div>`).join('')}
311
346
  </div>
312
- <div style="margin-bottom:1rem">
313
- <div style="font-weight:600;margin-bottom:0.5rem">⚙️ 工具执行 (${task.events.filter(e => e.tool_name).length} 次)</div>
314
- <div style="margin-left:1rem;font-size:0.875rem;color:#94a3b8">${toolList || 'none'}</div>
315
- ${task.summary.filesChanged.map(f => `<div style="margin-left:1rem;font-size:0.75rem;color:#64748b">- ${f}</div>`).join('')}
347
+ <div class="task-section">
348
+ <div class="task-section-title">⚙️ 工具执行 (${task.events.filter(e => e.tool_name).length} 次)</div>
349
+ <div class="task-item">${toolList || 'none'}</div>
350
+ ${task.summary.filesChanged.map(f => `<div class="task-item" style="font-size:0.75rem">- ${f}</div>`).join('')}
316
351
  </div>
317
- ${task.qualityIssues.length > 0 ? `<div style="margin-bottom:1rem">
318
- <div style="font-weight:600;margin-bottom:0.5rem">⚠️ 质量问题 (${task.qualityIssues.length} 个)</div>
319
- ${task.qualityIssues.map(q => `<div style="margin-left:1rem;margin-bottom:0.5rem;font-size:0.875rem;color:#fca5a5">${q.level}: ${q.message}</div>`).join('')}
352
+ ${task.qualityIssues.length > 0 ? `<div class="task-section">
353
+ <div class="task-section-title">⚠️ 质量问题 (${task.qualityIssues.length} 个)</div>
354
+ ${task.qualityIssues.map(q => `<div class="task-item" style="color:var(--red)">${q.level}: ${q.message}</div>`).join('')}
320
355
  </div>` : ''}
321
- ${task.summary.commits.length > 0 ? `<div style="margin-bottom:1rem">
322
- <div style="font-weight:600;margin-bottom:0.5rem">📦 产出 (${task.summary.commits.length} commits)</div>
323
- ${task.summary.commits.map(c => `<div style="margin-left:1rem;font-size:0.875rem;color:#86efac">${c.message}</div>`).join('')}
356
+ ${task.summary.commits.length > 0 ? `<div class="task-section">
357
+ <div class="task-section-title">📦 产出 (${task.summary.commits.length} commits)</div>
358
+ ${task.summary.commits.map(c => `<div class="task-item" style="color:var(--green)">${c.message}</div>`).join('')}
324
359
  </div>` : ''}
325
360
  </div>
326
361
  </div>`;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@winspan/claude-forge",
3
- "version": "6.9.0",
3
+ "version": "7.3.0",
4
4
  "description": "SDLC intelligent orchestration engine for Claude Code",
5
5
  "main": "dist/cli/index.js",
6
6
  "type": "module",