agent-enderun 1.11.3 → 1.11.4

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 (124) hide show
  1. package/README.md +5 -5
  2. package/bin/validate-agent-army.js +0 -1
  3. package/dist/framework-mcp/src/index.js +11 -1
  4. package/dist/framework-mcp/src/index.js.map +1 -1
  5. package/dist/framework-mcp/src/tools/definitions.js +0 -10
  6. package/dist/framework-mcp/src/tools/definitions.js.map +1 -1
  7. package/dist/framework-mcp/src/tools/index.js +0 -2
  8. package/dist/framework-mcp/src/tools/index.js.map +1 -1
  9. package/dist/framework-mcp/src/utils/compliance.d.ts +1 -1
  10. package/dist/framework-mcp/src/utils/compliance.js +68 -19
  11. package/dist/framework-mcp/src/utils/compliance.js.map +1 -1
  12. package/dist/src/cli/adapters/scaffold.d.ts +1 -1
  13. package/dist/src/cli/adapters/scaffold.js +8 -8
  14. package/dist/src/cli/adapters/scaffold.js.map +1 -1
  15. package/dist/src/cli/commands/check.js +25 -40
  16. package/dist/src/cli/commands/check.js.map +1 -1
  17. package/dist/src/cli/commands/contract.d.ts +3 -1
  18. package/dist/src/cli/commands/contract.js +8 -2
  19. package/dist/src/cli/commands/contract.js.map +1 -1
  20. package/dist/src/cli/commands/init/scaffold-ops.js +0 -2
  21. package/dist/src/cli/commands/init/scaffold-ops.js.map +1 -1
  22. package/dist/src/cli/commands/init.js +4 -3
  23. package/dist/src/cli/commands/init.js.map +1 -1
  24. package/dist/src/cli/commands/orchestrate.js +10 -3
  25. package/dist/src/cli/commands/orchestrate.js.map +1 -1
  26. package/dist/src/cli/commands/status.js.map +1 -1
  27. package/dist/src/cli/index.js +14 -19
  28. package/dist/src/cli/index.js.map +1 -1
  29. package/dist/src/cli/utils/compliance.d.ts +5 -1
  30. package/dist/src/cli/utils/compliance.js +90 -42
  31. package/dist/src/cli/utils/compliance.js.map +1 -1
  32. package/dist/src/cli/utils/ui.js +11 -11
  33. package/dist/src/cli/utils/ui.js.map +1 -1
  34. package/dist/src/modules/adapters/definitions.js +114 -113
  35. package/dist/src/modules/adapters/definitions.js.map +1 -1
  36. package/dist/src/modules/adapters/registry.d.ts +12 -0
  37. package/dist/src/modules/adapters/registry.js +19 -0
  38. package/dist/src/modules/adapters/registry.js.map +1 -0
  39. package/dist/src/modules/adapters/shared.js +5 -4
  40. package/dist/src/modules/adapters/shared.js.map +1 -1
  41. package/dist/src/modules/agents/definitions.d.ts +6 -6
  42. package/dist/src/modules/agents/definitions.js +35 -18
  43. package/dist/src/modules/agents/definitions.js.map +1 -1
  44. package/dist/src/modules/agents/registry/analyst.js +1 -1
  45. package/dist/src/modules/agents/registry/analyst.js.map +1 -1
  46. package/dist/src/modules/agents/registry/architect.js +1 -1
  47. package/dist/src/modules/agents/registry/architect.js.map +1 -1
  48. package/dist/src/modules/agents/registry/backend.js +1 -1
  49. package/dist/src/modules/agents/registry/backend.js.map +1 -1
  50. package/dist/src/modules/agents/registry/database.js +1 -1
  51. package/dist/src/modules/agents/registry/database.js.map +1 -1
  52. package/dist/src/modules/agents/registry/devops.js +1 -1
  53. package/dist/src/modules/agents/registry/devops.js.map +1 -1
  54. package/dist/src/modules/agents/registry/explorer.js +1 -1
  55. package/dist/src/modules/agents/registry/explorer.js.map +1 -1
  56. package/dist/src/modules/agents/registry/frontend.js +1 -1
  57. package/dist/src/modules/agents/registry/frontend.js.map +1 -1
  58. package/dist/src/modules/agents/registry/git.js +1 -1
  59. package/dist/src/modules/agents/registry/git.js.map +1 -1
  60. package/dist/src/modules/agents/registry/manager.js +1 -2
  61. package/dist/src/modules/agents/registry/manager.js.map +1 -1
  62. package/dist/src/modules/agents/registry/mobile.js +1 -1
  63. package/dist/src/modules/agents/registry/mobile.js.map +1 -1
  64. package/dist/src/modules/agents/registry/quality.js +1 -1
  65. package/dist/src/modules/agents/registry/quality.js.map +1 -1
  66. package/dist/src/modules/agents/registry/security.js +1 -1
  67. package/dist/src/modules/agents/registry/security.js.map +1 -1
  68. package/dist/src/shared/fs.js +4 -3
  69. package/dist/src/shared/fs.js.map +1 -1
  70. package/dist/tests/agents-definitions.test.js +2 -1
  71. package/dist/tests/agents-definitions.test.js.map +1 -1
  72. package/dist/tests/integration/hermes_locking.test.d.ts +1 -0
  73. package/dist/tests/integration/hermes_locking.test.js +62 -0
  74. package/dist/tests/integration/hermes_locking.test.js.map +1 -0
  75. package/dist/tests/orchestrate.test.js +9 -6
  76. package/dist/tests/orchestrate.test.js.map +1 -1
  77. package/framework-mcp/dist/index.js +11 -1
  78. package/framework-mcp/dist/tools/definitions.js +0 -10
  79. package/framework-mcp/dist/tools/index.js +0 -2
  80. package/framework-mcp/dist/utils/compliance.js +68 -19
  81. package/framework-mcp/node_modules/.package-lock.json +1179 -0
  82. package/framework-mcp/package-lock.json +1191 -0
  83. package/framework-mcp/package.json +2 -2
  84. package/framework-mcp/src/index.ts +13 -1
  85. package/framework-mcp/src/tools/definitions.ts +0 -10
  86. package/framework-mcp/src/tools/index.ts +0 -2
  87. package/framework-mcp/src/utils/compliance.ts +82 -24
  88. package/package.json +3 -4
  89. package/src/cli/adapters/scaffold.ts +9 -8
  90. package/src/cli/commands/check.ts +26 -48
  91. package/src/cli/commands/contract.ts +5 -2
  92. package/src/cli/commands/init/scaffold-ops.ts +0 -3
  93. package/src/cli/commands/init.ts +5 -3
  94. package/src/cli/commands/orchestrate.ts +12 -3
  95. package/src/cli/commands/status.ts +3 -2
  96. package/src/cli/index.ts +14 -20
  97. package/src/cli/utils/compliance.ts +101 -47
  98. package/src/cli/utils/ui.ts +11 -11
  99. package/src/modules/adapters/definitions.ts +82 -57
  100. package/src/modules/adapters/registry.ts +27 -0
  101. package/src/modules/adapters/shared.ts +5 -4
  102. package/src/modules/agents/definitions.ts +35 -17
  103. package/src/modules/agents/registry/analyst.ts +1 -1
  104. package/src/modules/agents/registry/architect.ts +1 -1
  105. package/src/modules/agents/registry/backend.ts +1 -1
  106. package/src/modules/agents/registry/database.ts +1 -1
  107. package/src/modules/agents/registry/devops.ts +1 -1
  108. package/src/modules/agents/registry/explorer.ts +1 -1
  109. package/src/modules/agents/registry/frontend.ts +1 -1
  110. package/src/modules/agents/registry/git.ts +1 -1
  111. package/src/modules/agents/registry/manager.ts +1 -2
  112. package/src/modules/agents/registry/mobile.ts +1 -1
  113. package/src/modules/agents/registry/quality.ts +1 -1
  114. package/src/modules/agents/registry/security.ts +1 -1
  115. package/src/shared/fs.ts +4 -3
  116. package/templates/standards/frontend-standards.md +7 -2
  117. package/templates/standards/governance-standards.md +27 -1
  118. package/templates/standards/quality-standards.md +2 -1
  119. package/bin/enderun-dashboard.js +0 -25
  120. package/framework-mcp/src/tools/dashboard/start_dashboard.ts +0 -33
  121. package/src/cli/commands/dashboard/data-service.ts +0 -167
  122. package/src/cli/commands/dashboard/html-template.ts +0 -696
  123. package/src/cli/commands/dashboard/server.ts +0 -43
  124. package/src/cli/commands/dashboard.ts +0 -11
@@ -37,7 +37,7 @@ export const architect = {
37
37
  "CONTRACT STABILITY: Validate 'contract.version.json' consistency before and after every schema change.",
38
38
  "GOVERNANCE READ: Always read architecture governance docs before making design decisions.",
39
39
  ],
40
- knowledgeFiles: ["architecture-standards.md"],
40
+ knowledgeFiles: ["architecture-standards.md", "governance-standards.md", "performance-standards.md"],
41
41
  },
42
42
  };
43
43
  //# sourceMappingURL=architect.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"architect.js","sourceRoot":"","sources":["../../../../../src/modules/agents/registry/architect.ts"],"names":[],"mappings":"AAEA,MAAM,aAAa,GAAG,uCAAgD,CAAC;AAEvE,MAAM,CAAC,MAAM,SAAS,GAAoB;IACtC,IAAI,EAAE,WAAW;IACjB,WAAW,EAAE,gBAAgB;IAC7B,IAAI,EAAE,eAAe;IACrB,WAAW,EACb,8DAA8D;QAC9D,yDAAyD;IACvD,UAAU,EAAE,CAAC;IACb,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC;IACxB,YAAY,EAAE,aAAa;IAC3B,KAAK,EAAE;QACH,WAAW;QACX,YAAY;QACZ,cAAc;QACd,qBAAqB;QACrB,UAAU;QACV,aAAa;QACb,sBAAsB;QACtB,qBAAqB;QACrB,qBAAqB;QACrB,cAAc;QACd,cAAc;QACd,gBAAgB;KACnB;IACD,YAAY,EAAE;QACV,QAAQ,EAAE,4DAA4D;QACtE,OAAO,EACX,gEAAgE;YAChE,4CAA4C;QACxC,cAAc,EAAE,0EAA0E;YAC1E,2FAA2F;YAC3F,0EAA0E;YAC1E,kGAAkG;QAClH,KAAK,EAAE;YACH,uFAAuF;YACvF,qGAAqG;YACrG,wGAAwG;YACxG,2FAA2F;SAC9F;QACD,cAAc,EAAE,CAAC,2BAA2B,CAAC;KAChD;CACJ,CAAC"}
1
+ {"version":3,"file":"architect.js","sourceRoot":"","sources":["../../../../../src/modules/agents/registry/architect.ts"],"names":[],"mappings":"AAEA,MAAM,aAAa,GAAG,uCAAgD,CAAC;AAEvE,MAAM,CAAC,MAAM,SAAS,GAAoB;IACtC,IAAI,EAAE,WAAW;IACjB,WAAW,EAAE,gBAAgB;IAC7B,IAAI,EAAE,eAAe;IACrB,WAAW,EACb,8DAA8D;QAC9D,yDAAyD;IACvD,UAAU,EAAE,CAAC;IACb,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC;IACxB,YAAY,EAAE,aAAa;IAC3B,KAAK,EAAE;QACH,WAAW;QACX,YAAY;QACZ,cAAc;QACd,qBAAqB;QACrB,UAAU;QACV,aAAa;QACb,sBAAsB;QACtB,qBAAqB;QACrB,qBAAqB;QACrB,cAAc;QACd,cAAc;QACd,gBAAgB;KACnB;IACD,YAAY,EAAE;QACV,QAAQ,EAAE,4DAA4D;QACtE,OAAO,EACX,gEAAgE;YAChE,4CAA4C;QACxC,cAAc,EAAE,0EAA0E;YAC1E,2FAA2F;YAC3F,0EAA0E;YAC1E,kGAAkG;QAClH,KAAK,EAAE;YACH,uFAAuF;YACvF,qGAAqG;YACrG,wGAAwG;YACxG,2FAA2F;SAC9F;QACD,cAAc,EAAE,CAAC,2BAA2B,EAAE,yBAAyB,EAAE,0BAA0B,CAAC;KACvG;CACJ,CAAC"}
@@ -38,7 +38,7 @@ export const backend = {
38
38
  "HIGH-RISK OPS: Refuse User/Role management, bulk deletes, schema alterations, and billing changes autonomously. " +
39
39
  "Return a standard refusal, send a managerApproval request to @manager, and shift to WAITING status.",
40
40
  ],
41
- knowledgeFiles: ["crud-governance.md", "kysely-standards.md", "typeorm-standards.md"],
41
+ knowledgeFiles: ["crud-governance.md", "kysely-standards.md", "typeorm-standards.md", "auth-standards.md", "swagger-standards.md", "pino-standards.md"],
42
42
  },
43
43
  };
44
44
  //# sourceMappingURL=backend.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"backend.js","sourceRoot":"","sources":["../../../../../src/modules/agents/registry/backend.ts"],"names":[],"mappings":"AAEA,MAAM,aAAa,GAAG,uCAAgD,CAAC;AAEvE,MAAM,CAAC,MAAM,OAAO,GAAoB;IACpC,IAAI,EAAE,SAAS;IACf,WAAW,EAAE,oBAAoB;IACjC,IAAI,EAAE,qBAAqB;IAC3B,WAAW,EACb,kDAAkD;QAClD,2DAA2D;IACzD,UAAU,EAAE,CAAC;IACb,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC;IACvB,YAAY,EAAE,aAAa;IAC3B,KAAK,EAAE;QACH,WAAW;QACX,YAAY;QACZ,cAAc;QACd,qBAAqB;QACrB,YAAY;QACZ,UAAU;QACV,aAAa;QACb,oBAAoB;QACpB,qBAAqB;QACrB,qBAAqB;KACxB;IACD,YAAY,EAAE;QACV,QAAQ,EAAE,uDAAuD;QACjE,OAAO,EACX,uEAAuE;YACvE,uDAAuD;QACnD,cAAc,EAAE,0EAA0E;YAC1E,2FAA2F;YAC3F,0EAA0E;YAC1E,kGAAkG;QAClH,KAAK,EAAE;YACH,gMAAgM;YAChM,6GAA6G;YAC7G,gHAAgH;YAChH,6FAA6F;YAC7F,+FAA+F;YAC/F,kHAAkH;gBACxH,qGAAqG;SAClG;QACD,cAAc,EAAE,CAAC,oBAAoB,EAAE,qBAAqB,EAAE,sBAAsB,CAAC;KACxF;CACJ,CAAC"}
1
+ {"version":3,"file":"backend.js","sourceRoot":"","sources":["../../../../../src/modules/agents/registry/backend.ts"],"names":[],"mappings":"AAEA,MAAM,aAAa,GAAG,uCAAgD,CAAC;AAEvE,MAAM,CAAC,MAAM,OAAO,GAAoB;IACpC,IAAI,EAAE,SAAS;IACf,WAAW,EAAE,oBAAoB;IACjC,IAAI,EAAE,qBAAqB;IAC3B,WAAW,EACb,kDAAkD;QAClD,2DAA2D;IACzD,UAAU,EAAE,CAAC;IACb,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC;IACvB,YAAY,EAAE,aAAa;IAC3B,KAAK,EAAE;QACH,WAAW;QACX,YAAY;QACZ,cAAc;QACd,qBAAqB;QACrB,YAAY;QACZ,UAAU;QACV,aAAa;QACb,oBAAoB;QACpB,qBAAqB;QACrB,qBAAqB;KACxB;IACD,YAAY,EAAE;QACV,QAAQ,EAAE,uDAAuD;QACjE,OAAO,EACX,uEAAuE;YACvE,uDAAuD;QACnD,cAAc,EAAE,0EAA0E;YAC1E,2FAA2F;YAC3F,0EAA0E;YAC1E,kGAAkG;QAClH,KAAK,EAAE;YACH,gMAAgM;YAChM,6GAA6G;YAC7G,gHAAgH;YAChH,6FAA6F;YAC7F,+FAA+F;YAC/F,kHAAkH;gBACxH,qGAAqG;SAClG;QACD,cAAc,EAAE,CAAC,oBAAoB,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,mBAAmB,CAAC;KAC1J;CACJ,CAAC"}
@@ -33,7 +33,7 @@ export const database = {
33
33
  "DETERMINISTIC MIGRATIONS: Every migration must be reversible and produce identical results across environments.",
34
34
  "PERFORMANCE FIRST: Design indexes proactively — never retroactively after a performance incident.",
35
35
  ],
36
- knowledgeFiles: ["kysely-standards.md", "typeorm-standards.md", "quality-standards.md"],
36
+ knowledgeFiles: ["kysely-standards.md", "typeorm-standards.md", "quality-standards.md", "performance-standards.md"],
37
37
  },
38
38
  };
39
39
  //# sourceMappingURL=database.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"database.js","sourceRoot":"","sources":["../../../../../src/modules/agents/registry/database.ts"],"names":[],"mappings":"AAEA,MAAM,aAAa,GAAG,uCAAgD,CAAC;AAEvE,MAAM,CAAC,MAAM,QAAQ,GAAoB;IACrC,IAAI,EAAE,UAAU;IAChB,WAAW,EAAE,qBAAqB;IAClC,IAAI,EAAE,iBAAiB;IACvB,WAAW,EACb,mEAAmE;QACnE,2DAA2D;IACzD,UAAU,EAAE,CAAC;IACb,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,aAAa;IAC3B,KAAK,EAAE;QACH,WAAW;QACX,YAAY;QACZ,cAAc;QACd,YAAY;QACZ,UAAU;QACV,aAAa;QACb,qBAAqB;QACrB,oBAAoB;KACvB;IACD,YAAY,EAAE;QACV,QAAQ,EAAE,kDAAkD;QAC5D,OAAO,EACX,iEAAiE;YACjE,kDAAkD;QAC9C,cAAc,EAAE,0EAA0E;YAC1E,2FAA2F;YAC3F,0EAA0E;YAC1E,kGAAkG;QAClH,KAAK,EAAE;YACH,8FAA8F;YAC9F,mFAAmF;YACnF,iHAAiH;YACjH,mGAAmG;SACtG;QACD,cAAc,EAAE,CAAC,qBAAqB,EAAE,sBAAsB,EAAE,sBAAsB,CAAC;KAC1F;CACJ,CAAC"}
1
+ {"version":3,"file":"database.js","sourceRoot":"","sources":["../../../../../src/modules/agents/registry/database.ts"],"names":[],"mappings":"AAEA,MAAM,aAAa,GAAG,uCAAgD,CAAC;AAEvE,MAAM,CAAC,MAAM,QAAQ,GAAoB;IACrC,IAAI,EAAE,UAAU;IAChB,WAAW,EAAE,qBAAqB;IAClC,IAAI,EAAE,iBAAiB;IACvB,WAAW,EACb,mEAAmE;QACnE,2DAA2D;IACzD,UAAU,EAAE,CAAC;IACb,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,aAAa;IAC3B,KAAK,EAAE;QACH,WAAW;QACX,YAAY;QACZ,cAAc;QACd,YAAY;QACZ,UAAU;QACV,aAAa;QACb,qBAAqB;QACrB,oBAAoB;KACvB;IACD,YAAY,EAAE;QACV,QAAQ,EAAE,kDAAkD;QAC5D,OAAO,EACX,iEAAiE;YACjE,kDAAkD;QAC9C,cAAc,EAAE,0EAA0E;YAC1E,2FAA2F;YAC3F,0EAA0E;YAC1E,kGAAkG;QAClH,KAAK,EAAE;YACH,8FAA8F;YAC9F,mFAAmF;YACnF,iHAAiH;YACjH,mGAAmG;SACtG;QACD,cAAc,EAAE,CAAC,qBAAqB,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,0BAA0B,CAAC;KACtH;CACJ,CAAC"}
@@ -34,7 +34,7 @@ export const devops = {
34
34
  "ENVIRONMENT ISOLATION: All variables managed via '.env' — hardcoded secrets trigger immediate escalation.",
35
35
  "NO UNTRACKED DEPLOYMENTS: Every deployment must be declared, versioned, and traceable.",
36
36
  ],
37
- knowledgeFiles: ["deployment-standards.md"],
37
+ knowledgeFiles: ["deployment-standards.md", "github-actions-standards.md", "observability-standards.md", "logging-and-secrets.md"],
38
38
  },
39
39
  };
40
40
  //# sourceMappingURL=devops.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"devops.js","sourceRoot":"","sources":["../../../../../src/modules/agents/registry/devops.ts"],"names":[],"mappings":"AAEA,MAAM,aAAa,GAAG,uCAAgD,CAAC;AAEvE,MAAM,CAAC,MAAM,MAAM,GAAoB;IACnC,IAAI,EAAE,QAAQ;IACd,WAAW,EAAE,2BAA2B;IACxC,IAAI,EAAE,QAAQ;IACd,WAAW,EACb,oDAAoD;QACpD,oEAAoE;IAClE,UAAU,EAAE,CAAC;IACb,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC;IACvB,YAAY,EAAE,aAAa;IAC3B,KAAK,EAAE;QACH,mBAAmB;QACnB,WAAW;QACX,YAAY;QACZ,UAAU;QACV,mBAAmB;QACnB,oBAAoB;QACpB,qBAAqB;QACrB,oBAAoB;QACpB,kBAAkB;KACrB;IACD,YAAY,EAAE;QACV,QAAQ,EAAE,4DAA4D;QACtE,OAAO,EACX,sEAAsE;YACtE,4CAA4C;QACxC,cAAc,EAAE,0EAA0E;YAC1E,2FAA2F;YAC3F,0EAA0E;YAC1E,kGAAkG;QAClH,KAAK,EAAE;YACH,mHAAmH;YACnH,8GAA8G;YAC9G,2GAA2G;YAC3G,wFAAwF;SAC3F;QACD,cAAc,EAAE,CAAC,yBAAyB,CAAC;KAC9C;CACJ,CAAC"}
1
+ {"version":3,"file":"devops.js","sourceRoot":"","sources":["../../../../../src/modules/agents/registry/devops.ts"],"names":[],"mappings":"AAEA,MAAM,aAAa,GAAG,uCAAgD,CAAC;AAEvE,MAAM,CAAC,MAAM,MAAM,GAAoB;IACnC,IAAI,EAAE,QAAQ;IACd,WAAW,EAAE,2BAA2B;IACxC,IAAI,EAAE,QAAQ;IACd,WAAW,EACb,oDAAoD;QACpD,oEAAoE;IAClE,UAAU,EAAE,CAAC;IACb,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC;IACvB,YAAY,EAAE,aAAa;IAC3B,KAAK,EAAE;QACH,mBAAmB;QACnB,WAAW;QACX,YAAY;QACZ,UAAU;QACV,mBAAmB;QACnB,oBAAoB;QACpB,qBAAqB;QACrB,oBAAoB;QACpB,kBAAkB;KACrB;IACD,YAAY,EAAE;QACV,QAAQ,EAAE,4DAA4D;QACtE,OAAO,EACX,sEAAsE;YACtE,4CAA4C;QACxC,cAAc,EAAE,0EAA0E;YAC1E,2FAA2F;YAC3F,0EAA0E;YAC1E,kGAAkG;QAClH,KAAK,EAAE;YACH,mHAAmH;YACnH,8GAA8G;YAC9G,2GAA2G;YAC3G,wFAAwF;SAC3F;QACD,cAAc,EAAE,CAAC,yBAAyB,EAAE,6BAA6B,EAAE,4BAA4B,EAAE,wBAAwB,CAAC;KACrI;CACJ,CAAC"}
@@ -31,7 +31,7 @@ export const explorer = {
31
31
  "DEPENDENCY MAP: Map all file dependencies and surface them to @manager in a structured report.",
32
32
  "RECON FIRST: No specialist should act on an unexplored codebase — flag absence of ADP as a phase blocker.",
33
33
  ],
34
- knowledgeFiles: ["architecture-standards.md"],
34
+ knowledgeFiles: ["architecture-standards.md", "observability-standards.md"],
35
35
  },
36
36
  };
37
37
  //# sourceMappingURL=explorer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"explorer.js","sourceRoot":"","sources":["../../../../../src/modules/agents/registry/explorer.ts"],"names":[],"mappings":"AAEA,MAAM,aAAa,GAAG,uCAAgD,CAAC;AAEvE,MAAM,CAAC,MAAM,QAAQ,GAAoB;IACrC,IAAI,EAAE,UAAU;IAChB,WAAW,EAAE,gBAAgB;IAC7B,IAAI,EAAE,gBAAgB;IACtB,WAAW,EACb,uDAAuD;QACvD,mDAAmD;IACjD,UAAU,EAAE,CAAC;IACb,IAAI,EAAE,OAAO;IACb,IAAI,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC;IACvB,YAAY,EAAE,aAAa;IAC3B,KAAK,EAAE;QACH,WAAW;QACX,UAAU;QACV,aAAa;QACb,iBAAiB;QACjB,qBAAqB;QACrB,qBAAqB;KACxB;IACD,YAAY,EAAE;QACV,QAAQ,EAAE,yDAAyD;QACnE,OAAO,EACX,oEAAoE;YACpE,4CAA4C;QACxC,cAAc,EAAE,0EAA0E;YAC1E,2FAA2F;YAC3F,0EAA0E;YAC1E,kGAAkG;QAClH,KAAK,EAAE;YACH,oGAAoG;YACpG,gIAAgI;YAChI,gGAAgG;YAChG,2GAA2G;SAC9G;QACD,cAAc,EAAE,CAAC,2BAA2B,CAAC;KAChD;CACJ,CAAC"}
1
+ {"version":3,"file":"explorer.js","sourceRoot":"","sources":["../../../../../src/modules/agents/registry/explorer.ts"],"names":[],"mappings":"AAEA,MAAM,aAAa,GAAG,uCAAgD,CAAC;AAEvE,MAAM,CAAC,MAAM,QAAQ,GAAoB;IACrC,IAAI,EAAE,UAAU;IAChB,WAAW,EAAE,gBAAgB;IAC7B,IAAI,EAAE,gBAAgB;IACtB,WAAW,EACb,uDAAuD;QACvD,mDAAmD;IACjD,UAAU,EAAE,CAAC;IACb,IAAI,EAAE,OAAO;IACb,IAAI,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC;IACvB,YAAY,EAAE,aAAa;IAC3B,KAAK,EAAE;QACH,WAAW;QACX,UAAU;QACV,aAAa;QACb,iBAAiB;QACjB,qBAAqB;QACrB,qBAAqB;KACxB;IACD,YAAY,EAAE;QACV,QAAQ,EAAE,yDAAyD;QACnE,OAAO,EACX,oEAAoE;YACpE,4CAA4C;QACxC,cAAc,EAAE,0EAA0E;YAC1E,2FAA2F;YAC3F,0EAA0E;YAC1E,kGAAkG;QAClH,KAAK,EAAE;YACH,oGAAoG;YACpG,gIAAgI;YAChI,gGAAgG;YAChG,2GAA2G;SAC9G;QACD,cAAc,EAAE,CAAC,2BAA2B,EAAE,4BAA4B,CAAC;KAC9E;CACJ,CAAC"}
@@ -38,7 +38,7 @@ export const frontend = {
38
38
  "OVERFLOW GUARD: Prevent horizontal scroll via proper box-sizing, max-width bounds, and container margins.",
39
39
  "ATOMIC UI: Create shared components exclusively in 'apps/web/src/components/ui/'.",
40
40
  ],
41
- knowledgeFiles: ["frontend-standards.md", "i18n-standards.md"],
41
+ knowledgeFiles: ["frontend-standards.md", "i18n-standards.md", "react-query-standards.md", "react-router-standards.md", "tailwind-standards.md", "performance-standards.md"],
42
42
  },
43
43
  };
44
44
  //# sourceMappingURL=frontend.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"frontend.js","sourceRoot":"","sources":["../../../../../src/modules/agents/registry/frontend.ts"],"names":[],"mappings":"AAEA,MAAM,aAAa,GAAG,uCAAgD,CAAC;AAEvE,MAAM,CAAC,MAAM,QAAQ,GAAoB;IACrC,IAAI,EAAE,UAAU;IAChB,WAAW,EAAE,qBAAqB;IAClC,IAAI,EAAE,sBAAsB;IAC5B,WAAW,EACb,qDAAqD;QACrD,2EAA2E;IACzE,UAAU,EAAE,CAAC;IACb,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACpB,YAAY,EAAE,aAAa;IAC3B,KAAK,EAAE;QACH,WAAW;QACX,YAAY;QACZ,cAAc;QACd,qBAAqB;QACrB,YAAY;QACZ,UAAU;QACV,aAAa;QACb,qBAAqB;QACrB,qBAAqB;KACxB;IACD,YAAY,EAAE;QACV,QAAQ,EAAE,kDAAkD;QAC5D,OAAO,EACX,kEAAkE;YAClE,qEAAqE;QACjE,cAAc,EAAE,0EAA0E;YAC1E,2FAA2F;YAC3F,0EAA0E;YAC1E,kGAAkG;QAClH,KAAK,EAAE;YACH,8EAA8E;gBACpF,0DAA0D;YACpD,uEAAuE;YACvE,iGAAiG;YACjG,gGAAgG;YAChG,uGAAuG;YACvG,2GAA2G;YAC3G,mFAAmF;SACtF;QACD,cAAc,EAAE,CAAC,uBAAuB,EAAE,mBAAmB,CAAC;KACjE;CACJ,CAAC"}
1
+ {"version":3,"file":"frontend.js","sourceRoot":"","sources":["../../../../../src/modules/agents/registry/frontend.ts"],"names":[],"mappings":"AAEA,MAAM,aAAa,GAAG,uCAAgD,CAAC;AAEvE,MAAM,CAAC,MAAM,QAAQ,GAAoB;IACrC,IAAI,EAAE,UAAU;IAChB,WAAW,EAAE,qBAAqB;IAClC,IAAI,EAAE,sBAAsB;IAC5B,WAAW,EACb,qDAAqD;QACrD,2EAA2E;IACzE,UAAU,EAAE,CAAC;IACb,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACpB,YAAY,EAAE,aAAa;IAC3B,KAAK,EAAE;QACH,WAAW;QACX,YAAY;QACZ,cAAc;QACd,qBAAqB;QACrB,YAAY;QACZ,UAAU;QACV,aAAa;QACb,qBAAqB;QACrB,qBAAqB;KACxB;IACD,YAAY,EAAE;QACV,QAAQ,EAAE,kDAAkD;QAC5D,OAAO,EACX,kEAAkE;YAClE,qEAAqE;QACjE,cAAc,EAAE,0EAA0E;YAC1E,2FAA2F;YAC3F,0EAA0E;YAC1E,kGAAkG;QAClH,KAAK,EAAE;YACH,8EAA8E;gBACpF,0DAA0D;YACpD,uEAAuE;YACvE,iGAAiG;YACjG,gGAAgG;YAChG,uGAAuG;YACvG,2GAA2G;YAC3G,mFAAmF;SACtF;QACD,cAAc,EAAE,CAAC,uBAAuB,EAAE,mBAAmB,EAAE,0BAA0B,EAAE,2BAA2B,EAAE,uBAAuB,EAAE,0BAA0B,CAAC;KAC/K;CACJ,CAAC"}
@@ -31,7 +31,7 @@ export const git = {
31
31
  "NO FORCE PUSH: Force-pushing to any shared branch is unconditionally forbidden.",
32
32
  "GIT FLOW: Strictly follow git-flow branching conventions — feature, hotfix, release naming enforced.",
33
33
  ],
34
- knowledgeFiles: ["logging-and-secrets.md"],
34
+ knowledgeFiles: ["logging-and-secrets.md", "governance-standards.md"],
35
35
  },
36
36
  };
37
37
  //# sourceMappingURL=git.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"git.js","sourceRoot":"","sources":["../../../../../src/modules/agents/registry/git.ts"],"names":[],"mappings":"AAEA,MAAM,aAAa,GAAG,uCAAgD,CAAC;AAEvE,MAAM,CAAC,MAAM,GAAG,GAAoB;IAChC,IAAI,EAAE,KAAK;IACX,WAAW,EAAE,kBAAkB;IAC/B,IAAI,EAAE,iBAAiB;IACvB,WAAW,EACb,iDAAiD;QACjD,iCAAiC;IAC/B,UAAU,EAAE,CAAC;IACb,IAAI,EAAE,OAAO;IACb,IAAI,EAAE,CAAC,MAAM,EAAE,WAAW,CAAC;IAC3B,YAAY,EAAE,aAAa;IAC3B,KAAK,EAAE;QACH,mBAAmB;QACnB,WAAW;QACX,UAAU;QACV,aAAa;QACb,qBAAqB;QACrB,oBAAoB;KACvB;IACD,YAAY,EAAE;QACV,QAAQ,EAAE,6DAA6D;QACvE,OAAO,EACX,kEAAkE;YAClE,yCAAyC;QACrC,cAAc,EAAE,0EAA0E;YAC1E,2FAA2F;YAC3F,0EAA0E;YAC1E,kGAAkG;QAClH,KAAK,EAAE;YACH,uGAAuG;YACvG,2GAA2G;YAC3G,iFAAiF;YACjF,sGAAsG;SACzG;QACD,cAAc,EAAE,CAAC,wBAAwB,CAAC;KAC7C;CACJ,CAAC"}
1
+ {"version":3,"file":"git.js","sourceRoot":"","sources":["../../../../../src/modules/agents/registry/git.ts"],"names":[],"mappings":"AAEA,MAAM,aAAa,GAAG,uCAAgD,CAAC;AAEvE,MAAM,CAAC,MAAM,GAAG,GAAoB;IAChC,IAAI,EAAE,KAAK;IACX,WAAW,EAAE,kBAAkB;IAC/B,IAAI,EAAE,iBAAiB;IACvB,WAAW,EACb,iDAAiD;QACjD,iCAAiC;IAC/B,UAAU,EAAE,CAAC;IACb,IAAI,EAAE,OAAO;IACb,IAAI,EAAE,CAAC,MAAM,EAAE,WAAW,CAAC;IAC3B,YAAY,EAAE,aAAa;IAC3B,KAAK,EAAE;QACH,mBAAmB;QACnB,WAAW;QACX,UAAU;QACV,aAAa;QACb,qBAAqB;QACrB,oBAAoB;KACvB;IACD,YAAY,EAAE;QACV,QAAQ,EAAE,6DAA6D;QACvE,OAAO,EACX,kEAAkE;YAClE,yCAAyC;QACrC,cAAc,EAAE,0EAA0E;YAC1E,2FAA2F;YAC3F,0EAA0E;YAC1E,kGAAkG;QAClH,KAAK,EAAE;YACH,uGAAuG;YACvG,2GAA2G;YAC3G,iFAAiF;YACjF,sGAAsG;SACzG;QACD,cAAc,EAAE,CAAC,wBAAwB,EAAE,yBAAyB,CAAC;KACxE;CACJ,CAAC"}
@@ -26,7 +26,6 @@ export const manager = {
26
26
  "get_framework_status",
27
27
  "get_system_health",
28
28
  "check_active_ports",
29
- "start_dashboard",
30
29
  ],
31
30
  instructions: {
32
31
  identity: "AL Management Assistant and Supreme Discipline Enforcer",
@@ -49,7 +48,7 @@ export const manager = {
49
48
  "MEMORY INTEGRITY: Synchronize 'PROJECT_MEMORY.md' after every single turn. Memory drift is treason.",
50
49
  "LOCKING PROTOCOL: Always acquire a lock via 'acquire_lock' on 'memory' resource before writing to PROJECT_MEMORY.md. Release immediately after write.",
51
50
  ],
52
- knowledgeFiles: ["governance-standards.md"],
51
+ knowledgeFiles: ["governance-standards.md", "llm-governance.md", "crud-governance.md"],
53
52
  },
54
53
  };
55
54
  //# sourceMappingURL=manager.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"manager.js","sourceRoot":"","sources":["../../../../../src/modules/agents/registry/manager.ts"],"names":[],"mappings":"AAEA,MAAM,aAAa,GAAG,uCAAgD,CAAC;AAEvE,MAAM,CAAC,MAAM,OAAO,GAAoB;IACpC,IAAI,EAAE,SAAS;IACf,WAAW,EAAE,wBAAwB;IACrC,IAAI,EAAE,yCAAyC;IAC/C,WAAW,EACb,kEAAkE;QAClE,uEAAuE;IACrE,UAAU,EAAE,EAAE;IACd,IAAI,EAAE,SAAS;IACf,IAAI,EAAE,CAAC,MAAM,EAAE,eAAe,EAAE,YAAY,CAAC;IAC7C,YAAY,EAAE,aAAa;IAC3B,KAAK,EAAE;QACH,kBAAkB;QAClB,oBAAoB;QACpB,qBAAqB;QACrB,qBAAqB;QACrB,uBAAuB;QACvB,cAAc;QACd,cAAc;QACd,kBAAkB;QAClB,kBAAkB;QAClB,iBAAiB;QACjB,oBAAoB;QACpB,UAAU;QACV,aAAa;QACb,sBAAsB;QACtB,mBAAmB;QACnB,oBAAoB;QACpB,iBAAiB;KACpB;IACD,YAAY,EAAE;QACV,QAAQ,EAAE,yDAAyD;QACnE,OAAO,EACX,kEAAkE;YAClE,4CAA4C;QACxC,cAAc,EAAE,yFAAyF;YACzF,mFAAmF;YACnF,0EAA0E;YAC1E,+FAA+F;QAC/G,KAAK,EAAE;YACH,4EAA4E;gBAClF,2GAA2G;YACrG,sHAAsH;YACtH,iHAAiH;YACjH,oHAAoH;YACpH,2GAA2G;YAC3G,gGAAgG;YAChG,qGAAqG;YACrG,yHAAyH;YACzH,qGAAqG;YACrG,uJAAuJ;SAC1J;QACD,cAAc,EAAE,CAAC,yBAAyB,CAAC;KAC9C;CACJ,CAAC"}
1
+ {"version":3,"file":"manager.js","sourceRoot":"","sources":["../../../../../src/modules/agents/registry/manager.ts"],"names":[],"mappings":"AAEA,MAAM,aAAa,GAAG,uCAAgD,CAAC;AAEvE,MAAM,CAAC,MAAM,OAAO,GAAoB;IACpC,IAAI,EAAE,SAAS;IACf,WAAW,EAAE,wBAAwB;IACrC,IAAI,EAAE,yCAAyC;IAC/C,WAAW,EACb,kEAAkE;QAClE,uEAAuE;IACrE,UAAU,EAAE,EAAE;IACd,IAAI,EAAE,SAAS;IACf,IAAI,EAAE,CAAC,MAAM,EAAE,eAAe,EAAE,YAAY,CAAC;IAC7C,YAAY,EAAE,aAAa;IAC3B,KAAK,EAAE;QACH,kBAAkB;QAClB,oBAAoB;QACpB,qBAAqB;QACrB,qBAAqB;QACrB,uBAAuB;QACvB,cAAc;QACd,cAAc;QACd,kBAAkB;QAClB,kBAAkB;QAClB,iBAAiB;QACjB,oBAAoB;QACpB,UAAU;QACV,aAAa;QACb,sBAAsB;QACtB,mBAAmB;QACnB,oBAAoB;KACvB;IACD,YAAY,EAAE;QACV,QAAQ,EAAE,yDAAyD;QACnE,OAAO,EACX,kEAAkE;YAClE,4CAA4C;QACxC,cAAc,EAAE,yFAAyF;YACzF,mFAAmF;YACnF,0EAA0E;YAC1E,+FAA+F;QAC/G,KAAK,EAAE;YACH,4EAA4E;gBAClF,2GAA2G;YACrG,sHAAsH;YACtH,iHAAiH;YACjH,oHAAoH;YACpH,2GAA2G;YAC3G,gGAAgG;YAChG,qGAAqG;YACrG,yHAAyH;YACzH,qGAAqG;YACrG,uJAAuJ;SAC1J;QACD,cAAc,EAAE,CAAC,yBAAyB,EAAE,mBAAmB,EAAE,oBAAoB,CAAC;KACzF;CACJ,CAAC"}
@@ -34,7 +34,7 @@ export const mobile = {
34
34
  "TOUCH TARGETS: All touchable components must have a minimum interactive area of 44dp × 44dp.",
35
35
  "OFFLINE FIRST: Implement caching via React Query and local storage for all critical data paths.",
36
36
  ],
37
- knowledgeFiles: ["mobile-standards.md"],
37
+ knowledgeFiles: ["mobile-standards.md", "performance-standards.md", "react-query-standards.md"],
38
38
  },
39
39
  };
40
40
  //# sourceMappingURL=mobile.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"mobile.js","sourceRoot":"","sources":["../../../../../src/modules/agents/registry/mobile.ts"],"names":[],"mappings":"AAEA,MAAM,aAAa,GAAG,uCAAgD,CAAC;AAEvE,MAAM,CAAC,MAAM,MAAM,GAAoB;IACnC,IAAI,EAAE,QAAQ;IACd,WAAW,EAAE,mBAAmB;IAChC,IAAI,EAAE,oBAAoB;IAC1B,WAAW,EACb,gDAAgD;QAChD,sEAAsE;IACpE,UAAU,EAAE,CAAC;IACb,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC;IACxB,YAAY,EAAE,aAAa;IAC3B,KAAK,EAAE;QACH,WAAW;QACX,YAAY;QACZ,cAAc;QACd,qBAAqB;QACrB,UAAU;QACV,aAAa;QACb,qBAAqB;KACxB;IACD,YAAY,EAAE;QACV,QAAQ,EAAE,yDAAyD;QACnE,OAAO,EACX,iEAAiE;YACjE,+DAA+D;QAC3D,cAAc,EAAE,0EAA0E;YAC1E,2FAA2F;YAC3F,0EAA0E;YAC1E,kGAAkG;QAClH,KAAK,EAAE;YACH,oGAAoG;YACpG,uGAAuG;YACvG,+GAA+G;YAC/G,gGAAgG;YAChG,8FAA8F;YAC9F,iGAAiG;SACpG;QACD,cAAc,EAAE,CAAC,qBAAqB,CAAC;KAC1C;CACJ,CAAC"}
1
+ {"version":3,"file":"mobile.js","sourceRoot":"","sources":["../../../../../src/modules/agents/registry/mobile.ts"],"names":[],"mappings":"AAEA,MAAM,aAAa,GAAG,uCAAgD,CAAC;AAEvE,MAAM,CAAC,MAAM,MAAM,GAAoB;IACnC,IAAI,EAAE,QAAQ;IACd,WAAW,EAAE,mBAAmB;IAChC,IAAI,EAAE,oBAAoB;IAC1B,WAAW,EACb,gDAAgD;QAChD,sEAAsE;IACpE,UAAU,EAAE,CAAC;IACb,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC;IACxB,YAAY,EAAE,aAAa;IAC3B,KAAK,EAAE;QACH,WAAW;QACX,YAAY;QACZ,cAAc;QACd,qBAAqB;QACrB,UAAU;QACV,aAAa;QACb,qBAAqB;KACxB;IACD,YAAY,EAAE;QACV,QAAQ,EAAE,yDAAyD;QACnE,OAAO,EACX,iEAAiE;YACjE,+DAA+D;QAC3D,cAAc,EAAE,0EAA0E;YAC1E,2FAA2F;YAC3F,0EAA0E;YAC1E,kGAAkG;QAClH,KAAK,EAAE;YACH,oGAAoG;YACpG,uGAAuG;YACvG,+GAA+G;YAC/G,gGAAgG;YAChG,8FAA8F;YAC9F,iGAAiG;SACpG;QACD,cAAc,EAAE,CAAC,qBAAqB,EAAE,0BAA0B,EAAE,0BAA0B,CAAC;KAClG;CACJ,CAAC"}
@@ -36,7 +36,7 @@ export const quality = {
36
36
  "ZERO TOLERANCE: Reject any code containing lint errors, 'any' type usage, or hardcoded 'console.log'.",
37
37
  "TEST PATTERN: Enforce Given-When-Then pattern in all test suites without exception.",
38
38
  ],
39
- knowledgeFiles: ["quality-standards.md", "testing-standards.md"],
39
+ knowledgeFiles: ["quality-standards.md", "testing-standards.md", "vitest-standards.md", "playwright-standards.md"],
40
40
  },
41
41
  };
42
42
  //# sourceMappingURL=quality.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"quality.js","sourceRoot":"","sources":["../../../../../src/modules/agents/registry/quality.ts"],"names":[],"mappings":"AAEA,MAAM,aAAa,GAAG,uCAAgD,CAAC;AAEvE,MAAM,CAAC,MAAM,OAAO,GAAoB;IACpC,IAAI,EAAE,SAAS;IACf,WAAW,EAAE,oBAAoB;IACjC,IAAI,EAAE,qCAAqC;IAC3C,WAAW,EACb,6CAA6C;QAC7C,oDAAoD;IAClD,UAAU,EAAE,CAAC;IACb,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,YAAY,CAAC;IACrC,YAAY,EAAE,aAAa;IAC3B,KAAK,EAAE;QACH,UAAU;QACV,aAAa;QACb,WAAW;QACX,kBAAkB;QAClB,qBAAqB;QACrB,qBAAqB;QACrB,WAAW;QACX,YAAY;QACZ,kBAAkB;QAClB,oBAAoB;KACvB;IACD,YAAY,EAAE;QACV,QAAQ,EAAE,iDAAiD;QAC3D,OAAO,EACX,mEAAmE;YACnE,sDAAsD;QAClD,cAAc,EAAE,0EAA0E;YAC1E,2FAA2F;YAC3F,0EAA0E;YAC1E,kGAAkG;QAClH,KAAK,EAAE;YACH,oHAAoH;YACpH,0GAA0G;YAC1G,sHAAsH;YACtH,uGAAuG;YACvG,qFAAqF;SACxF;QACD,cAAc,EAAE,CAAC,sBAAsB,EAAE,sBAAsB,CAAC;KACnE;CACJ,CAAC"}
1
+ {"version":3,"file":"quality.js","sourceRoot":"","sources":["../../../../../src/modules/agents/registry/quality.ts"],"names":[],"mappings":"AAEA,MAAM,aAAa,GAAG,uCAAgD,CAAC;AAEvE,MAAM,CAAC,MAAM,OAAO,GAAoB;IACpC,IAAI,EAAE,SAAS;IACf,WAAW,EAAE,oBAAoB;IACjC,IAAI,EAAE,qCAAqC;IAC3C,WAAW,EACb,6CAA6C;QAC7C,oDAAoD;IAClD,UAAU,EAAE,CAAC;IACb,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,YAAY,CAAC;IACrC,YAAY,EAAE,aAAa;IAC3B,KAAK,EAAE;QACH,UAAU;QACV,aAAa;QACb,WAAW;QACX,kBAAkB;QAClB,qBAAqB;QACrB,qBAAqB;QACrB,WAAW;QACX,YAAY;QACZ,kBAAkB;QAClB,oBAAoB;KACvB;IACD,YAAY,EAAE;QACV,QAAQ,EAAE,iDAAiD;QAC3D,OAAO,EACX,mEAAmE;YACnE,sDAAsD;QAClD,cAAc,EAAE,0EAA0E;YAC1E,2FAA2F;YAC3F,0EAA0E;YAC1E,kGAAkG;QAClH,KAAK,EAAE;YACH,oHAAoH;YACpH,0GAA0G;YAC1G,sHAAsH;YACtH,uGAAuG;YACvG,qFAAqF;SACxF;QACD,cAAc,EAAE,CAAC,sBAAsB,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,yBAAyB,CAAC;KACrH;CACJ,CAAC"}
@@ -32,7 +32,7 @@ export const security = {
32
32
  "RAW SQL FORBIDDEN: Reject any query that bypasses Kysely — zero exceptions.",
33
33
  "AUDIT LOGS: Monitor and log all high-risk administrative actions via 'log_agent_action'.",
34
34
  ],
35
- knowledgeFiles: ["security-standards.md"],
35
+ knowledgeFiles: ["security-standards.md", "security-audit-standards.md", "auth-standards.md", "logging-and-secrets.md"],
36
36
  },
37
37
  };
38
38
  //# sourceMappingURL=security.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"security.js","sourceRoot":"","sources":["../../../../../src/modules/agents/registry/security.ts"],"names":[],"mappings":"AAEA,MAAM,aAAa,GAAG,uCAAgD,CAAC;AAEvE,MAAM,CAAC,MAAM,QAAQ,GAAoB;IACrC,IAAI,EAAE,UAAU;IAChB,WAAW,EAAE,qBAAqB;IAClC,IAAI,EAAE,sBAAsB;IAC5B,WAAW,EACb,uDAAuD;QACvD,uEAAuE;IACrE,UAAU,EAAE,EAAE;IACd,IAAI,EAAE,SAAS;IACf,IAAI,EAAE,CAAC,MAAM,EAAE,UAAU,CAAC;IAC1B,YAAY,EAAE,aAAa;IAC3B,KAAK,EAAE;QACH,WAAW;QACX,cAAc;QACd,aAAa;QACb,oBAAoB;QACpB,qBAAqB;QACrB,qBAAqB;QACrB,kBAAkB;KACrB;IACD,YAAY,EAAE;QACV,QAAQ,EAAE,2CAA2C;QACrD,OAAO,EACX,kEAAkE;YAClE,gCAAgC;QAC5B,cAAc,EAAE,0EAA0E;YAC1E,2FAA2F;YAC3F,0EAA0E;YAC1E,kGAAkG;QAClH,KAAK,EAAE;YACH,sGAAsG;YACtG,sGAAsG;YACtG,6EAA6E;YAC7E,0FAA0F;SAC7F;QACD,cAAc,EAAE,CAAC,uBAAuB,CAAC;KAC5C;CACJ,CAAC"}
1
+ {"version":3,"file":"security.js","sourceRoot":"","sources":["../../../../../src/modules/agents/registry/security.ts"],"names":[],"mappings":"AAEA,MAAM,aAAa,GAAG,uCAAgD,CAAC;AAEvE,MAAM,CAAC,MAAM,QAAQ,GAAoB;IACrC,IAAI,EAAE,UAAU;IAChB,WAAW,EAAE,qBAAqB;IAClC,IAAI,EAAE,sBAAsB;IAC5B,WAAW,EACb,uDAAuD;QACvD,uEAAuE;IACrE,UAAU,EAAE,EAAE;IACd,IAAI,EAAE,SAAS;IACf,IAAI,EAAE,CAAC,MAAM,EAAE,UAAU,CAAC;IAC1B,YAAY,EAAE,aAAa;IAC3B,KAAK,EAAE;QACH,WAAW;QACX,cAAc;QACd,aAAa;QACb,oBAAoB;QACpB,qBAAqB;QACrB,qBAAqB;QACrB,kBAAkB;KACrB;IACD,YAAY,EAAE;QACV,QAAQ,EAAE,2CAA2C;QACrD,OAAO,EACX,kEAAkE;YAClE,gCAAgC;QAC5B,cAAc,EAAE,0EAA0E;YAC1E,2FAA2F;YAC3F,0EAA0E;YAC1E,kGAAkG;QAClH,KAAK,EAAE;YACH,sGAAsG;YACtG,sGAAsG;YACtG,6EAA6E;YAC7E,0FAA0F;SAC7F;QACD,cAAc,EAAE,CAAC,uBAAuB,EAAE,6BAA6B,EAAE,mBAAmB,EAAE,wBAAwB,CAAC;KAC1H;CACJ,CAAC"}
@@ -1,9 +1,10 @@
1
1
  import fs from "fs";
2
2
  import path from "path";
3
+ import { logger } from "./logger.js";
3
4
  export function ensureDir(dirPath, dryRun = false) {
4
5
  if (!fs.existsSync(dirPath)) {
5
6
  if (dryRun) {
6
- console.warn(`[DRY RUN] Would create directory: ${dirPath}`);
7
+ logger.info(`[DRY RUN] Would create directory: ${dirPath}`);
7
8
  }
8
9
  else {
9
10
  fs.mkdirSync(dirPath, { recursive: true });
@@ -16,7 +17,7 @@ export function ensureDir(dirPath, dryRun = false) {
16
17
  */
17
18
  export function writeTextFile(filePath, content, dryRun = false) {
18
19
  if (dryRun) {
19
- console.warn(`[DRY RUN] Would write file: ${filePath}`);
20
+ logger.info(`[DRY RUN] Would write file: ${filePath}`);
20
21
  return;
21
22
  }
22
23
  const dir = path.dirname(filePath);
@@ -35,7 +36,7 @@ export function writeTextFile(filePath, content, dryRun = false) {
35
36
  }
36
37
  export function appendFile(filePath, content, dryRun = false) {
37
38
  if (dryRun) {
38
- console.warn(`[DRY RUN] Would append to file: ${filePath}`);
39
+ logger.info(`[DRY RUN] Would append to file: ${filePath}`);
39
40
  return;
40
41
  }
41
42
  ensureDir(path.dirname(filePath));
@@ -1 +1 @@
1
- {"version":3,"file":"fs.js","sourceRoot":"","sources":["../../../src/shared/fs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,MAAM,UAAU,SAAS,CAAC,OAAe,EAAE,MAAM,GAAG,KAAK;IACrD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC1B,IAAI,MAAM,EAAE,CAAC;YACT,OAAO,CAAC,IAAI,CAAC,qCAAqC,OAAO,EAAE,CAAC,CAAC;QACjE,CAAC;aAAM,CAAC;YACJ,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/C,CAAC;IACL,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,QAAgB,EAAE,OAAe,EAAE,MAAM,GAAG,KAAK;IAC3E,IAAI,MAAM,EAAE,CAAC;QACT,OAAO,CAAC,IAAI,CAAC,+BAA+B,QAAQ,EAAE,CAAC,CAAC;QACxD,OAAO;IACX,CAAC;IACD,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACnC,SAAS,CAAC,GAAG,CAAC,CAAC;IAEf,MAAM,QAAQ,GAAG,GAAG,QAAQ,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC;IAC7E,MAAM,YAAY,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,IAAI,CAAC;IAEvE,IAAI,CAAC;QACD,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC;QACjD,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACtC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACX,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC;YAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QACrD,MAAM,GAAG,CAAC;IACd,CAAC;AACL,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,QAAgB,EAAE,OAAe,EAAE,MAAM,GAAG,KAAK;IACxE,IAAI,MAAM,EAAE,CAAC;QACT,OAAO,CAAC,IAAI,CAAC,mCAAmC,QAAQ,EAAE,CAAC,CAAC;QAC5D,OAAO;IACX,CAAC;IACD,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;IAClC,EAAE,CAAC,cAAc,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,QAAgB,EAAE,KAAc,EAAE,MAAM,GAAG,KAAK;IAC1E,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;AACpE,CAAC"}
1
+ {"version":3,"file":"fs.js","sourceRoot":"","sources":["../../../src/shared/fs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,MAAM,UAAU,SAAS,CAAC,OAAe,EAAE,MAAM,GAAG,KAAK;IACrD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC1B,IAAI,MAAM,EAAE,CAAC;YACT,MAAM,CAAC,IAAI,CAAC,qCAAqC,OAAO,EAAE,CAAC,CAAC;QAChE,CAAC;aAAM,CAAC;YACJ,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/C,CAAC;IACL,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,QAAgB,EAAE,OAAe,EAAE,MAAM,GAAG,KAAK;IAC3E,IAAI,MAAM,EAAE,CAAC;QACT,MAAM,CAAC,IAAI,CAAC,+BAA+B,QAAQ,EAAE,CAAC,CAAC;QACvD,OAAO;IACX,CAAC;IACD,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACnC,SAAS,CAAC,GAAG,CAAC,CAAC;IAEf,MAAM,QAAQ,GAAG,GAAG,QAAQ,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC;IAC7E,MAAM,YAAY,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,IAAI,CAAC;IAEvE,IAAI,CAAC;QACD,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC;QACjD,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACtC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACX,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC;YAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QACrD,MAAM,GAAG,CAAC;IACd,CAAC;AACL,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,QAAgB,EAAE,OAAe,EAAE,MAAM,GAAG,KAAK;IACxE,IAAI,MAAM,EAAE,CAAC;QACT,MAAM,CAAC,IAAI,CAAC,mCAAmC,QAAQ,EAAE,CAAC,CAAC;QAC3D,OAAO;IACX,CAAC;IACD,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;IAClC,EAAE,CAAC,cAAc,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,QAAgB,EAAE,KAAc,EAAE,MAAM,GAAG,KAAK;IAC1E,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;AACpE,CAAC"}
@@ -54,7 +54,8 @@ describe("Agents Definitions", () => {
54
54
  expect(parsed.customAgentSpec.customAgent.systemPromptSections[0].title).toBe("Identity & Mission");
55
55
  expect(parsed.customAgentSpec.customAgent.systemPromptSections[0].content).toContain("Mock Identity");
56
56
  expect(parsed.customAgentSpec.customAgent.systemPromptSections[0].content).toContain("Mock mission statement.");
57
- expect(parsed.customAgentSpec.customAgent.systemPromptSections[2].content).toContain("Do test steps.");
57
+ expect(parsed.customAgentSpec.customAgent.systemPromptSections[3].title).toBe("Discipline Rules");
58
+ expect(parsed.customAgentSpec.customAgent.systemPromptSections[3].content).toContain("Do test steps.");
58
59
  });
59
60
  });
60
61
  //# sourceMappingURL=agents-definitions.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"agents-definitions.test.js","sourceRoot":"","sources":["../../tests/agents-definitions.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agents-definitions.test.js","sourceRoot":"","sources":["../../tests/agents-definitions.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,62 @@
1
+ import { describe, it, expect, beforeEach, afterEach, vi } from "vitest";
2
+ import fs from "fs";
3
+ import path from "path";
4
+ import os from "os";
5
+ import * as memoryUtils from "../../src/cli/utils/memory.js";
6
+ import { sendMessage, orchestrateCommand } from "../../src/cli/commands/orchestrate.js";
7
+ describe("Hermes Locking & Self-Healing Stress Test", () => {
8
+ let tempDir;
9
+ let memoryDir;
10
+ let messagesDir;
11
+ beforeEach(() => {
12
+ tempDir = fs.mkdtempSync(path.join(os.tmpdir(), "enderun-stress-test-"));
13
+ memoryDir = path.join(tempDir, "memory");
14
+ messagesDir = path.join(tempDir, "messages");
15
+ vi.spyOn(memoryUtils, "getFrameworkDir").mockReturnValue(tempDir);
16
+ vi.spyOn(memoryUtils, "getDocumentStorePath").mockReturnValue(memoryDir);
17
+ memoryUtils.initDocumentStore(tempDir);
18
+ fs.mkdirSync(messagesDir, { recursive: true });
19
+ memoryUtils.updateDocumentStore("status", {
20
+ "@manager": { state: "READY", task: "Idle" },
21
+ "@backend": { state: "READY", task: "Idle" }
22
+ });
23
+ });
24
+ afterEach(() => {
25
+ fs.rmSync(tempDir, { recursive: true, force: true });
26
+ vi.restoreAllMocks();
27
+ });
28
+ it("should handle concurrent message delivery and respect locks", async () => {
29
+ const traceId = "stress-lock-1";
30
+ // Simulate concurrent deliveries
31
+ const deliveries = Array.from({ length: 5 }).map((_, i) => sendMessage({
32
+ from: "@manager",
33
+ to: "@backend",
34
+ category: "ACTION",
35
+ content: JSON.stringify({ task: `Task ${i}` }),
36
+ traceId: `${traceId}-${i}`
37
+ }));
38
+ await Promise.all(deliveries);
39
+ const backendMsgsFile = path.join(messagesDir, "backend.json");
40
+ const content = fs.readFileSync(backendMsgsFile, "utf8").trim();
41
+ const lines = content.split("\n");
42
+ expect(lines.length).toBe(5); // All messages delivered despite concurrency
43
+ });
44
+ it("should trigger Self-Healing when an agent times out", async () => {
45
+ // 1. Manually set an agent to EXECUTING with a stale timestamp (>30m ago)
46
+ const staleDate = new Date(Date.now() - 31 * 60 * 1000).toISOString();
47
+ memoryUtils.updateDocumentStore("status", {
48
+ "@backend": {
49
+ state: "EXECUTING",
50
+ task: "Long running task",
51
+ lastUpdated: staleDate
52
+ }
53
+ });
54
+ // 2. Run orchestrator
55
+ await orchestrateCommand({ maxIterations: 1 });
56
+ // 3. Verify Self-Healing reset the agent
57
+ const status = memoryUtils.readStatus();
58
+ expect(status["@backend"].state).toBe("READY");
59
+ expect(status["@backend"].task).toContain("Recovered from Timeout");
60
+ });
61
+ });
62
+ //# sourceMappingURL=hermes_locking.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hermes_locking.test.js","sourceRoot":"","sources":["../../../tests/integration/hermes_locking.test.ts"],"names":[],"mappings":"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"}
@@ -48,15 +48,18 @@ describe("Hermes Message Protocol & Orchestration", () => {
48
48
  const result = await sendMessage(messageArgs);
49
49
  expect(result).toBeDefined();
50
50
  });
51
- it("should detect executing agent timeouts and transition them to BLOCKED", async () => {
51
+ it("should detect executing agent timeouts and transition them to READY (Self-Healing)", async () => {
52
52
  const pastTime = new Date(Date.now() - 60 * 60 * 1000).toISOString();
53
- memoryUtils.updateDocumentStore("status", {
54
- "@frontend": { state: "EXECUTING", task: "Building dashboard", lastUpdated: pastTime }
55
- });
56
- // Run a single orchestration iteration (avoids infinite loop in tests)
53
+ const initialStatus = {
54
+ "@manager": { state: "READY", task: "Idle" },
55
+ "@frontend": { state: "EXECUTING", task: "Compiling assets", lastUpdated: pastTime }
56
+ };
57
+ memoryUtils.updateDocumentStore("status", initialStatus);
58
+ // Run a single orchestration iteration
57
59
  await orchestrateCommand({ maxIterations: 1 });
58
60
  const statuses = memoryUtils.readStatus();
59
- expect(statuses["@frontend"].state).toBe("BLOCKED");
61
+ expect(statuses["@frontend"]).toBeDefined();
62
+ expect(statuses["@frontend"].state).toBe("READY");
60
63
  });
61
64
  });
62
65
  //# sourceMappingURL=orchestrate.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"orchestrate.test.js","sourceRoot":"","sources":["../../tests/orchestrate.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"orchestrate.test.js","sourceRoot":"","sources":["../../tests/orchestrate.test.ts"],"names":[],"mappings":"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"}
@@ -42,12 +42,22 @@ function validateArgs(toolName, args) {
42
42
  }
43
43
  return null;
44
44
  }
45
- server.setRequestHandler(ListToolsRequestSchema, async () => {
45
+ server.setRequestHandler(ListToolsRequestSchema, async (request) => {
46
+ // 2026 Stateless Spec: Log client info from metadata if available
47
+ const meta = request._meta;
48
+ if (meta) {
49
+ process.stderr.write(`[MCP] Stateless ListTools from ${meta.client?.name || "unknown"} v${meta.client?.version || "?.?"}\n`);
50
+ }
46
51
  return { tools: TOOLS };
47
52
  });
48
53
  server.setRequestHandler(CallToolRequestSchema, async (request) => {
49
54
  const req = request;
50
55
  const { name, arguments: args } = req.params;
56
+ const meta = request._meta;
57
+ // 2026 Stateless Spec: Prioritize metadata-driven context
58
+ if (meta) {
59
+ process.stderr.write(`[MCP] Stateless CallTool: ${name} (Client: ${meta.client?.name || "unknown"})\n`);
60
+ }
51
61
  const projectRoot = process.env.ENDERUN_PROJECT_ROOT || process.cwd();
52
62
  try {
53
63
  const handler = toolHandlers[name];
@@ -149,16 +149,6 @@ export const TOOLS = [
149
149
  }
150
150
  }
151
151
  },
152
- {
153
- name: "start_dashboard",
154
- description: "Start the Enderun Web Dashboard (Command Center) to visualize real-time agent status, logs, and system metrics in the browser.",
155
- inputSchema: {
156
- type: "object",
157
- properties: {
158
- port: { type: "number", description: "Optional: Port to run the dashboard on (default: 5858)" }
159
- }
160
- }
161
- },
162
152
  {
163
153
  name: "get_framework_status",
164
154
  description: "Get the current project phase, active traces, and agent states.",
@@ -14,7 +14,6 @@ import { handleAuditDependencies } from "./framework/audit_deps.js";
14
14
  import { handleRunTests } from "./framework/run_tests.js";
15
15
  import { handleGetSystemHealth } from "./observability/get_health.js";
16
16
  import { handleCheckPorts } from "./observability/check_ports.js";
17
- import { handleStartDashboard } from "./dashboard/start_dashboard.js";
18
17
  import { handleOrchestrateLoop } from "./framework/orchestrate.js";
19
18
  import { handleUpdateContractHash } from "./framework/update_contract_hash.js";
20
19
  import { handleReadProjectMemory } from "./memory/read_memory.js";
@@ -48,7 +47,6 @@ export const toolHandlers = {
48
47
  run_tests: bind(handleRunTests),
49
48
  get_system_health: bind(handleGetSystemHealth),
50
49
  check_active_ports: bind(handleCheckPorts),
51
- start_dashboard: bind(handleStartDashboard),
52
50
  orchestrate_loop: bind(handleOrchestrateLoop),
53
51
  send_agent_message: bind(handleSendAgentMessage),
54
52
  log_agent_action: bind(handleLogAgentAction),
@@ -1,29 +1,78 @@
1
+ import ts from "typescript";
1
2
  /**
2
3
  * Enterprise Compliance Guardrail
3
- * Checks content against corporate standards before allowing file mutations.
4
+ * Checks content against corporate standards using AST analysis before allowing file mutations.
4
5
  */
5
6
  export function verifyCorporateCompliance(content, filePath) {
6
- // 1. Zero Console Policy
7
- if (content.includes("console.log(") || content.includes("console.warn(") || content.includes("console.error(")) {
8
- if (!filePath.includes("logger.ts") && !filePath.includes("check.ts") && !filePath.includes("cli.ts")) {
9
- throw new Error("❌ Corporate Compliance Breach: 'console.log/warn/error' usage is forbidden. " +
10
- "Use the 'logger' system from '@/shared/logger' instead.");
11
- }
7
+ // Skip compliance checks for non-source files or specific ignored files
8
+ if (filePath.endsWith(".json") || filePath.endsWith(".md") || filePath.endsWith(".env.example")) {
9
+ return;
12
10
  }
13
- // 2. No Explicit Any Policy
14
- const anyRegex = /[:<]\s*any\b|\bas\s+any\b/g;
15
- if (anyRegex.test(content)) {
16
- if (!filePath.includes("definitions.ts") && !filePath.includes("types.ts")) {
17
- throw new Error("❌ Corporate Compliance Breach: 'any' type is forbidden. " +
18
- "Use 'unknown', 'generics', or proper interfaces for type safety.");
11
+ const sourceFile = ts.createSourceFile(filePath, content, ts.ScriptTarget.Latest, true);
12
+ const errors = [];
13
+ /**
14
+ * Recursive AST Visitor
15
+ */
16
+ function visit(node) {
17
+ // 1. Zero Console Policy
18
+ if (ts.isPropertyAccessExpression(node)) {
19
+ const expression = node.expression;
20
+ const name = node.name.text;
21
+ if (ts.isIdentifier(expression) && expression.text === "console") {
22
+ if (["log", "warn", "error"].includes(name)) {
23
+ // Check if file is exempt
24
+ if (!filePath.includes("logger.ts") && !filePath.includes("check.ts") && !filePath.includes("cli.ts")) {
25
+ errors.push(`❌ Corporate Compliance Breach: 'console.${name}' usage is forbidden at line ${sourceFile.getLineAndCharacterOfPosition(node.getStart()).line + 1}.`);
26
+ }
27
+ }
28
+ }
29
+ }
30
+ // 2. No Explicit Any Policy
31
+ if (ts.isTypeReferenceNode(node)) {
32
+ if (ts.isIdentifier(node.typeName) && node.typeName.text === "any") {
33
+ if (!filePath.includes("definitions.ts") && !filePath.includes("types.ts")) {
34
+ errors.push(`❌ Corporate Compliance Breach: 'any' type is forbidden at line ${sourceFile.getLineAndCharacterOfPosition(node.getStart()).line + 1}.`);
35
+ }
36
+ }
37
+ }
38
+ // 3. Zero UI Library Policy (No @chakra-ui, mui, @shadcn)
39
+ if (ts.isImportDeclaration(node)) {
40
+ const moduleSpecifier = node.moduleSpecifier;
41
+ if (ts.isStringLiteral(moduleSpecifier)) {
42
+ const forbiddenLibs = ["@chakra-ui", "mui", "@shadcn", "antd", "bootstrap"];
43
+ const lib = forbiddenLibs.find(l => moduleSpecifier.text.includes(l));
44
+ if (lib) {
45
+ errors.push(`❌ Corporate Compliance Breach: External UI library '${lib}' usage is FORBIDDEN at line ${sourceFile.getLineAndCharacterOfPosition(node.getStart()).line + 1}. Build atomic components manually instead.`);
46
+ }
47
+ }
19
48
  }
49
+ // Handle 'any' as a keyword type (e.g., parameter: any)
50
+ if (node.kind === ts.SyntaxKind.AnyKeyword) {
51
+ if (!filePath.includes("definitions.ts") && !filePath.includes("types.ts")) {
52
+ errors.push(`❌ Corporate Compliance Breach: 'any' keyword is forbidden at line ${sourceFile.getLineAndCharacterOfPosition(node.getStart()).line + 1}.`);
53
+ }
54
+ }
55
+ ts.forEachChild(node, visit);
20
56
  }
21
- // 3. Hardcoded Secrets Guard (Simple heuristic)
22
- const secretKeywords = [/API_KEY\s*=\s*['"][^'"]+['"]/i, /SECRET\s*=\s*['"][^'"]+['"]/i, /PASSWORD\s*=\s*['"][^'"]+['"]/i];
23
- for (const regex of secretKeywords) {
24
- if (regex.test(content) && !filePath.endsWith(".env.example")) {
25
- throw new Error(" Corporate Compliance Breach: Hardcoded secrets detected. " +
26
- "All sensitive data must be managed via '.env' files.");
57
+ visit(sourceFile);
58
+ // 3. Hardcoded Secrets & PII Guard
59
+ const piiKeywords = [
60
+ { regex: /API_KEY\s*=\s*['"][^'"]+['"]/i, msg: "Hardcoded API Key" },
61
+ { regex: /SECRET\s*=\s*['"][^'"]+['"]/i, msg: "Hardcoded Secret" },
62
+ { regex: /PASSWORD\s*=\s*['"][^'"]+['"]/i, msg: "Hardcoded Password" },
63
+ { regex: /[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}/, msg: "PII Detected: Email Address" },
64
+ { regex: /\b\d{4}[- ]?\d{4}[- ]?\d{4}[- ]?\d{4}\b/, msg: "PII Detected: Credit Card Pattern" }
65
+ ];
66
+ for (const { regex, msg } of piiKeywords) {
67
+ if (regex.test(content)) {
68
+ // Allow emails in specific files like README or package.json
69
+ if (msg.includes("Email") && (filePath.endsWith("README.md") || filePath.endsWith("package.json") || filePath.includes("CONTRIBUTING"))) {
70
+ continue;
71
+ }
72
+ errors.push(`❌ Corporate Compliance Breach: ${msg} detected.`);
27
73
  }
28
74
  }
75
+ if (errors.length > 0) {
76
+ throw new Error(errors.join("\n"));
77
+ }
29
78
  }