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.
- package/README.md +5 -5
- package/bin/validate-agent-army.js +0 -1
- package/dist/framework-mcp/src/index.js +11 -1
- package/dist/framework-mcp/src/index.js.map +1 -1
- package/dist/framework-mcp/src/tools/definitions.js +0 -10
- package/dist/framework-mcp/src/tools/definitions.js.map +1 -1
- package/dist/framework-mcp/src/tools/index.js +0 -2
- package/dist/framework-mcp/src/tools/index.js.map +1 -1
- package/dist/framework-mcp/src/utils/compliance.d.ts +1 -1
- package/dist/framework-mcp/src/utils/compliance.js +68 -19
- package/dist/framework-mcp/src/utils/compliance.js.map +1 -1
- package/dist/src/cli/adapters/scaffold.d.ts +1 -1
- package/dist/src/cli/adapters/scaffold.js +8 -8
- package/dist/src/cli/adapters/scaffold.js.map +1 -1
- package/dist/src/cli/commands/check.js +25 -40
- package/dist/src/cli/commands/check.js.map +1 -1
- package/dist/src/cli/commands/contract.d.ts +3 -1
- package/dist/src/cli/commands/contract.js +8 -2
- package/dist/src/cli/commands/contract.js.map +1 -1
- package/dist/src/cli/commands/init/scaffold-ops.js +0 -2
- package/dist/src/cli/commands/init/scaffold-ops.js.map +1 -1
- package/dist/src/cli/commands/init.js +4 -3
- package/dist/src/cli/commands/init.js.map +1 -1
- package/dist/src/cli/commands/orchestrate.js +10 -3
- package/dist/src/cli/commands/orchestrate.js.map +1 -1
- package/dist/src/cli/commands/status.js.map +1 -1
- package/dist/src/cli/index.js +14 -19
- package/dist/src/cli/index.js.map +1 -1
- package/dist/src/cli/utils/compliance.d.ts +5 -1
- package/dist/src/cli/utils/compliance.js +90 -42
- package/dist/src/cli/utils/compliance.js.map +1 -1
- package/dist/src/cli/utils/ui.js +11 -11
- package/dist/src/cli/utils/ui.js.map +1 -1
- package/dist/src/modules/adapters/definitions.js +114 -113
- package/dist/src/modules/adapters/definitions.js.map +1 -1
- package/dist/src/modules/adapters/registry.d.ts +12 -0
- package/dist/src/modules/adapters/registry.js +19 -0
- package/dist/src/modules/adapters/registry.js.map +1 -0
- package/dist/src/modules/adapters/shared.js +5 -4
- package/dist/src/modules/adapters/shared.js.map +1 -1
- package/dist/src/modules/agents/definitions.d.ts +6 -6
- package/dist/src/modules/agents/definitions.js +35 -18
- package/dist/src/modules/agents/definitions.js.map +1 -1
- package/dist/src/modules/agents/registry/analyst.js +1 -1
- package/dist/src/modules/agents/registry/analyst.js.map +1 -1
- package/dist/src/modules/agents/registry/architect.js +1 -1
- package/dist/src/modules/agents/registry/architect.js.map +1 -1
- package/dist/src/modules/agents/registry/backend.js +1 -1
- package/dist/src/modules/agents/registry/backend.js.map +1 -1
- package/dist/src/modules/agents/registry/database.js +1 -1
- package/dist/src/modules/agents/registry/database.js.map +1 -1
- package/dist/src/modules/agents/registry/devops.js +1 -1
- package/dist/src/modules/agents/registry/devops.js.map +1 -1
- package/dist/src/modules/agents/registry/explorer.js +1 -1
- package/dist/src/modules/agents/registry/explorer.js.map +1 -1
- package/dist/src/modules/agents/registry/frontend.js +1 -1
- package/dist/src/modules/agents/registry/frontend.js.map +1 -1
- package/dist/src/modules/agents/registry/git.js +1 -1
- package/dist/src/modules/agents/registry/git.js.map +1 -1
- package/dist/src/modules/agents/registry/manager.js +1 -2
- package/dist/src/modules/agents/registry/manager.js.map +1 -1
- package/dist/src/modules/agents/registry/mobile.js +1 -1
- package/dist/src/modules/agents/registry/mobile.js.map +1 -1
- package/dist/src/modules/agents/registry/quality.js +1 -1
- package/dist/src/modules/agents/registry/quality.js.map +1 -1
- package/dist/src/modules/agents/registry/security.js +1 -1
- package/dist/src/modules/agents/registry/security.js.map +1 -1
- package/dist/src/shared/fs.js +4 -3
- package/dist/src/shared/fs.js.map +1 -1
- package/dist/tests/agents-definitions.test.js +2 -1
- package/dist/tests/agents-definitions.test.js.map +1 -1
- package/dist/tests/integration/hermes_locking.test.d.ts +1 -0
- package/dist/tests/integration/hermes_locking.test.js +62 -0
- package/dist/tests/integration/hermes_locking.test.js.map +1 -0
- package/dist/tests/orchestrate.test.js +9 -6
- package/dist/tests/orchestrate.test.js.map +1 -1
- package/framework-mcp/dist/index.js +11 -1
- package/framework-mcp/dist/tools/definitions.js +0 -10
- package/framework-mcp/dist/tools/index.js +0 -2
- package/framework-mcp/dist/utils/compliance.js +68 -19
- package/framework-mcp/node_modules/.package-lock.json +1179 -0
- package/framework-mcp/package-lock.json +1191 -0
- package/framework-mcp/package.json +2 -2
- package/framework-mcp/src/index.ts +13 -1
- package/framework-mcp/src/tools/definitions.ts +0 -10
- package/framework-mcp/src/tools/index.ts +0 -2
- package/framework-mcp/src/utils/compliance.ts +82 -24
- package/package.json +3 -4
- package/src/cli/adapters/scaffold.ts +9 -8
- package/src/cli/commands/check.ts +26 -48
- package/src/cli/commands/contract.ts +5 -2
- package/src/cli/commands/init/scaffold-ops.ts +0 -3
- package/src/cli/commands/init.ts +5 -3
- package/src/cli/commands/orchestrate.ts +12 -3
- package/src/cli/commands/status.ts +3 -2
- package/src/cli/index.ts +14 -20
- package/src/cli/utils/compliance.ts +101 -47
- package/src/cli/utils/ui.ts +11 -11
- package/src/modules/adapters/definitions.ts +82 -57
- package/src/modules/adapters/registry.ts +27 -0
- package/src/modules/adapters/shared.ts +5 -4
- package/src/modules/agents/definitions.ts +35 -17
- package/src/modules/agents/registry/analyst.ts +1 -1
- package/src/modules/agents/registry/architect.ts +1 -1
- package/src/modules/agents/registry/backend.ts +1 -1
- package/src/modules/agents/registry/database.ts +1 -1
- package/src/modules/agents/registry/devops.ts +1 -1
- package/src/modules/agents/registry/explorer.ts +1 -1
- package/src/modules/agents/registry/frontend.ts +1 -1
- package/src/modules/agents/registry/git.ts +1 -1
- package/src/modules/agents/registry/manager.ts +1 -2
- package/src/modules/agents/registry/mobile.ts +1 -1
- package/src/modules/agents/registry/quality.ts +1 -1
- package/src/modules/agents/registry/security.ts +1 -1
- package/src/shared/fs.ts +4 -3
- package/templates/standards/frontend-standards.md +7 -2
- package/templates/standards/governance-standards.md +27 -1
- package/templates/standards/quality-standards.md +2 -1
- package/bin/enderun-dashboard.js +0 -25
- package/framework-mcp/src/tools/dashboard/start_dashboard.ts +0 -33
- package/src/cli/commands/dashboard/data-service.ts +0 -167
- package/src/cli/commands/dashboard/html-template.ts +0 -696
- package/src/cli/commands/dashboard/server.ts +0 -43
- 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;
|
|
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;
|
|
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;
|
|
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;
|
|
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;
|
|
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;
|
|
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;
|
|
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;
|
|
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;
|
|
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;
|
|
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;
|
|
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"}
|
package/dist/src/shared/fs.js
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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;
|
|
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[
|
|
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
|
|
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
|
-
|
|
54
|
-
"@
|
|
55
|
-
|
|
56
|
-
|
|
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"]
|
|
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":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACzE,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,KAAK,WAAW,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AAE1G,QAAQ,CAAC,yCAAyC,EAAE,GAAG,EAAE;IACrD,IAAI,OAAe,CAAC;IACpB,IAAI,SAAiB,CAAC;IACtB,IAAI,WAAmB,CAAC;IAExB,UAAU,CAAC,GAAG,EAAE;QACZ,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,2BAA2B,CAAC,CAAC,CAAC;QAC9E,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QACzC,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QAE7C,qCAAqC;QACrC,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,iBAAiB,CAAC,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QAClE,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,sBAAsB,CAAC,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;QAEzE,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC7C,EAAE,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/C,WAAW,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACX,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACrD,EAAE,CAAC,eAAe,EAAE,CAAC;IACzB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAC7C,MAAM,QAAQ,GAAG;YACb,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,IAAI,EAAE,UAAU;YAChB,EAAE,EAAE,UAAU;YACd,QAAQ,EAAE,YAAY;YACtB,OAAO,EAAE,gCAAgC;YACzC,OAAO,EAAE,eAAe;YACxB,MAAM,EAAE,SAAS;YACjB,QAAQ,EAAE,MAAM;SACnB,CAAC;QAEF,MAAM,MAAM,GAAG,mBAAmB,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QACvD,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;QACxD,MAAM,WAAW,GAAG;YAChB,IAAI,EAAE,UAAU;YAChB,EAAE,EAAE,UAAU;YACd,QAAQ,EAAE,YAAqB;YAC/B,OAAO,EAAE,2BAA2B;YACpC,OAAO,EAAE,SAAS;SACrB,CAAC;QAEF,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,WAAW,CAAC,CAAC;QAC9C,MAAM,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;IACjC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,
|
|
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
|
-
//
|
|
7
|
-
if (
|
|
8
|
-
|
|
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
|
-
|
|
14
|
-
const
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
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
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
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
|
}
|