agent-enderun 1.11.3 → 1.11.5

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 (170) hide show
  1. package/README.md +84 -277
  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/control_plane/locking.js +17 -3
  6. package/dist/framework-mcp/src/tools/control_plane/locking.js.map +1 -1
  7. package/dist/framework-mcp/src/tools/definitions.js +0 -10
  8. package/dist/framework-mcp/src/tools/definitions.js.map +1 -1
  9. package/dist/framework-mcp/src/tools/index.js +0 -2
  10. package/dist/framework-mcp/src/tools/index.js.map +1 -1
  11. package/dist/framework-mcp/src/tools/memory/get_insights.js +4 -4
  12. package/dist/framework-mcp/src/tools/memory/get_insights.js.map +1 -1
  13. package/dist/framework-mcp/src/tools/messaging/send_message.js +10 -5
  14. package/dist/framework-mcp/src/tools/messaging/send_message.js.map +1 -1
  15. package/dist/framework-mcp/src/tools/search/grep_search.js +2 -3
  16. package/dist/framework-mcp/src/tools/search/grep_search.js.map +1 -1
  17. package/dist/framework-mcp/src/utils/compliance.d.ts +1 -1
  18. package/dist/framework-mcp/src/utils/compliance.js +68 -19
  19. package/dist/framework-mcp/src/utils/compliance.js.map +1 -1
  20. package/dist/framework-mcp/tests/tools/messaging/send_message.test.js +7 -7
  21. package/dist/framework-mcp/tests/tools/messaging/send_message.test.js.map +1 -1
  22. package/dist/src/cli/adapters/scaffold.d.ts +1 -1
  23. package/dist/src/cli/adapters/scaffold.js +8 -8
  24. package/dist/src/cli/adapters/scaffold.js.map +1 -1
  25. package/dist/src/cli/commands/check.js +25 -40
  26. package/dist/src/cli/commands/check.js.map +1 -1
  27. package/dist/src/cli/commands/contract.d.ts +3 -1
  28. package/dist/src/cli/commands/contract.js +8 -2
  29. package/dist/src/cli/commands/contract.js.map +1 -1
  30. package/dist/src/cli/commands/init/scaffold-core.d.ts +1 -0
  31. package/dist/src/cli/commands/init/scaffold-core.js +14 -1
  32. package/dist/src/cli/commands/init/scaffold-core.js.map +1 -1
  33. package/dist/src/cli/commands/init/scaffold-ops.js +0 -2
  34. package/dist/src/cli/commands/init/scaffold-ops.js.map +1 -1
  35. package/dist/src/cli/commands/init.d.ts +1 -0
  36. package/dist/src/cli/commands/init.js +16 -7
  37. package/dist/src/cli/commands/init.js.map +1 -1
  38. package/dist/src/cli/commands/orchestrate.js +31 -3
  39. package/dist/src/cli/commands/orchestrate.js.map +1 -1
  40. package/dist/src/cli/commands/plan.js +1 -2
  41. package/dist/src/cli/commands/plan.js.map +1 -1
  42. package/dist/src/cli/commands/status.js.map +1 -1
  43. package/dist/src/cli/index.js +18 -21
  44. package/dist/src/cli/index.js.map +1 -1
  45. package/dist/src/cli/shims.js +39 -26
  46. package/dist/src/cli/shims.js.map +1 -1
  47. package/dist/src/cli/utils/compliance.d.ts +5 -1
  48. package/dist/src/cli/utils/compliance.js +90 -42
  49. package/dist/src/cli/utils/compliance.js.map +1 -1
  50. package/dist/src/cli/utils/ui.js +11 -11
  51. package/dist/src/cli/utils/ui.js.map +1 -1
  52. package/dist/src/modules/adapters/definitions.js +130 -113
  53. package/dist/src/modules/adapters/definitions.js.map +1 -1
  54. package/dist/src/modules/adapters/registry.d.ts +12 -0
  55. package/dist/src/modules/adapters/registry.js +19 -0
  56. package/dist/src/modules/adapters/registry.js.map +1 -0
  57. package/dist/src/modules/adapters/shared.js +5 -4
  58. package/dist/src/modules/adapters/shared.js.map +1 -1
  59. package/dist/src/modules/adapters/types.d.ts +1 -1
  60. package/dist/src/modules/adapters/types.js +1 -1
  61. package/dist/src/modules/adapters/types.js.map +1 -1
  62. package/dist/src/modules/agents/definitions.d.ts +6 -6
  63. package/dist/src/modules/agents/definitions.js +35 -18
  64. package/dist/src/modules/agents/definitions.js.map +1 -1
  65. package/dist/src/modules/agents/registry/analyst.js +1 -1
  66. package/dist/src/modules/agents/registry/analyst.js.map +1 -1
  67. package/dist/src/modules/agents/registry/architect.js +1 -1
  68. package/dist/src/modules/agents/registry/architect.js.map +1 -1
  69. package/dist/src/modules/agents/registry/backend.js +1 -1
  70. package/dist/src/modules/agents/registry/backend.js.map +1 -1
  71. package/dist/src/modules/agents/registry/database.js +1 -1
  72. package/dist/src/modules/agents/registry/database.js.map +1 -1
  73. package/dist/src/modules/agents/registry/devops.js +1 -1
  74. package/dist/src/modules/agents/registry/devops.js.map +1 -1
  75. package/dist/src/modules/agents/registry/explorer.js +1 -1
  76. package/dist/src/modules/agents/registry/explorer.js.map +1 -1
  77. package/dist/src/modules/agents/registry/frontend.js +1 -1
  78. package/dist/src/modules/agents/registry/frontend.js.map +1 -1
  79. package/dist/src/modules/agents/registry/git.js +1 -1
  80. package/dist/src/modules/agents/registry/git.js.map +1 -1
  81. package/dist/src/modules/agents/registry/manager.js +1 -2
  82. package/dist/src/modules/agents/registry/manager.js.map +1 -1
  83. package/dist/src/modules/agents/registry/mobile.js +1 -1
  84. package/dist/src/modules/agents/registry/mobile.js.map +1 -1
  85. package/dist/src/modules/agents/registry/quality.js +1 -1
  86. package/dist/src/modules/agents/registry/quality.js.map +1 -1
  87. package/dist/src/modules/agents/registry/security.js +1 -1
  88. package/dist/src/modules/agents/registry/security.js.map +1 -1
  89. package/dist/src/shared/constants.d.ts +5 -2
  90. package/dist/src/shared/constants.js +5 -0
  91. package/dist/src/shared/constants.js.map +1 -1
  92. package/dist/src/shared/fs.js +4 -3
  93. package/dist/src/shared/fs.js.map +1 -1
  94. package/dist/tests/agents-definitions.test.js +2 -1
  95. package/dist/tests/agents-definitions.test.js.map +1 -1
  96. package/dist/tests/approve.test.js +3 -1
  97. package/dist/tests/approve.test.js.map +1 -1
  98. package/dist/tests/integration/agent_flow.test.js +2 -0
  99. package/dist/tests/integration/agent_flow.test.js.map +1 -1
  100. package/dist/tests/integration/hermes_locking.test.d.ts +1 -0
  101. package/dist/tests/integration/hermes_locking.test.js +64 -0
  102. package/dist/tests/integration/hermes_locking.test.js.map +1 -0
  103. package/dist/tests/memory-utils.test.js +2 -0
  104. package/dist/tests/memory-utils.test.js.map +1 -1
  105. package/dist/tests/orchestrate.test.js +11 -6
  106. package/dist/tests/orchestrate.test.js.map +1 -1
  107. package/dist/tests/status.test.js +2 -0
  108. package/dist/tests/status.test.js.map +1 -1
  109. package/framework-mcp/dist/index.js +11 -1
  110. package/framework-mcp/dist/tools/control_plane/locking.js +17 -3
  111. package/framework-mcp/dist/tools/definitions.js +0 -10
  112. package/framework-mcp/dist/tools/index.js +0 -2
  113. package/framework-mcp/dist/tools/memory/get_insights.js +4 -4
  114. package/framework-mcp/dist/tools/messaging/send_message.js +10 -5
  115. package/framework-mcp/dist/tools/search/grep_search.js +2 -3
  116. package/framework-mcp/dist/utils/compliance.js +68 -19
  117. package/framework-mcp/node_modules/.package-lock.json +1179 -0
  118. package/framework-mcp/package-lock.json +1191 -0
  119. package/framework-mcp/package.json +2 -2
  120. package/framework-mcp/src/index.ts +13 -1
  121. package/framework-mcp/src/tools/control_plane/locking.ts +18 -4
  122. package/framework-mcp/src/tools/definitions.ts +0 -10
  123. package/framework-mcp/src/tools/index.ts +0 -2
  124. package/framework-mcp/src/tools/memory/get_insights.ts +4 -4
  125. package/framework-mcp/src/tools/messaging/send_message.ts +11 -5
  126. package/framework-mcp/src/tools/search/grep_search.ts +2 -3
  127. package/framework-mcp/src/utils/compliance.ts +83 -25
  128. package/framework-mcp/tests/tools/messaging/send_message.test.ts +7 -7
  129. package/package.json +5 -5
  130. package/src/cli/adapters/scaffold.ts +9 -8
  131. package/src/cli/commands/check.ts +26 -48
  132. package/src/cli/commands/contract.ts +5 -2
  133. package/src/cli/commands/init/scaffold-core.ts +18 -2
  134. package/src/cli/commands/init/scaffold-ops.ts +0 -3
  135. package/src/cli/commands/init.ts +19 -8
  136. package/src/cli/commands/orchestrate.ts +36 -3
  137. package/src/cli/commands/plan.ts +1 -2
  138. package/src/cli/commands/status.ts +0 -1
  139. package/src/cli/index.ts +18 -22
  140. package/src/cli/shims.ts +39 -26
  141. package/src/cli/utils/compliance.ts +101 -47
  142. package/src/cli/utils/ui.ts +11 -11
  143. package/src/modules/adapters/definitions.ts +102 -57
  144. package/src/modules/adapters/registry.ts +27 -0
  145. package/src/modules/adapters/shared.ts +5 -4
  146. package/src/modules/adapters/types.ts +1 -1
  147. package/src/modules/agents/definitions.ts +35 -17
  148. package/src/modules/agents/registry/analyst.ts +1 -1
  149. package/src/modules/agents/registry/architect.ts +1 -1
  150. package/src/modules/agents/registry/backend.ts +1 -1
  151. package/src/modules/agents/registry/database.ts +1 -1
  152. package/src/modules/agents/registry/devops.ts +1 -1
  153. package/src/modules/agents/registry/explorer.ts +1 -1
  154. package/src/modules/agents/registry/frontend.ts +1 -1
  155. package/src/modules/agents/registry/git.ts +1 -1
  156. package/src/modules/agents/registry/manager.ts +1 -2
  157. package/src/modules/agents/registry/mobile.ts +1 -1
  158. package/src/modules/agents/registry/quality.ts +1 -1
  159. package/src/modules/agents/registry/security.ts +1 -1
  160. package/src/shared/constants.ts +5 -0
  161. package/src/shared/fs.ts +4 -3
  162. package/templates/standards/frontend-standards.md +7 -2
  163. package/templates/standards/governance-standards.md +27 -1
  164. package/templates/standards/quality-standards.md +2 -1
  165. package/bin/enderun-dashboard.js +0 -25
  166. package/framework-mcp/src/tools/dashboard/start_dashboard.ts +0 -33
  167. package/src/cli/commands/dashboard/data-service.ts +0 -167
  168. package/src/cli/commands/dashboard/html-template.ts +0 -696
  169. package/src/cli/commands/dashboard/server.ts +0 -43
  170. package/src/cli/commands/dashboard.ts +0 -11
@@ -1,54 +1,67 @@
1
1
  export const SHIM_TEMPLATES = {
2
- gemini: `# 🎖️ Agent Enderun — GEMINI Strategy
2
+ gemini: `# 🎖️ Agent Enderun — GEMINI Strategy (Command Intelligence)
3
3
 
4
- You are the **Gemini Commander** (Strategic Decision Center).
4
+ You are the **Gemini Commander**. You represent the project's **Strategic Decision Center**. Your intelligence is derived from project history, architectural memory, and governance compliance.
5
5
 
6
6
  ## 🏛️ Directives
7
- - **Constitutional Supremacy:** Read \`{{FRAMEWORK_DIR}}/ENDERUN.md\` first.
8
- - **State Persistence:** Read \`{{FRAMEWORK_DIR}}/memory/PROJECT_MEMORY.md\` to restore session memory.
9
- - **Zero-Request Logging:** Write logs to \`{{FRAMEWORK_DIR}}/logs/\` at the end of every turn.
7
+ - **Constitutional Supremacy:** Read \`{{FRAMEWORK_DIR}}/ENDERUN.md\` first. You are the final arbiter of these rules.
8
+ - **Strategic Memory Sync:** Always read \`{{FRAMEWORK_DIR}}/memory/PROJECT_MEMORY.md\` and \`PROJECT_MEMORY.md\` at the start.
9
+ - **Orchestration Audit:** Before delegating, verify that the task matches the current Phase and Trace ID context.
10
+ - **Enterprise Reasoning:** Focus on long-term maintainability, security, and scalability in every strategic decision.
10
11
  `,
11
- "antigravity-cli": `# 🎖️ Agent Enderun — ANTIGRAVITY-CLI Strategy
12
+ "antigravity-cli": `# 🎖️ Agent Enderun — ANTIGRAVITY Strategy (Internal Discipline)
12
13
 
13
- You are the **Antigravity Specialist** (Preserve Coding Standards).
14
+ You are the **Antigravity Specialist**. You represent the **Military Academy** of the framework, preserving internal standards and coding discipline.
14
15
 
15
16
  ## 🏛️ Directives
16
17
  - **Constitutional Supremacy:** Read \`{{FRAMEWORK_DIR}}/ENDERUN.md\` first.
17
- - **State Persistence:** Read \`{{FRAMEWORK_DIR}}/memory/PROJECT_MEMORY.md\` to restore session memory.
18
- - **Standard Check:** Run health checks regularly to preserve framework integrity.
18
+ - **Standard Enforcement:** You are responsible for ensuring that all code adheres to the 26+ corporate standards in \`{{FRAMEWORK_DIR}}/knowledge/\`.
19
+ - **Sandbox Discipline:** Maintain isolated and high-discipline development environments.
19
20
  `,
20
- claude: `# 🎖️ Agent Enderun — CLAUDE Strategy
21
+ claude: `# 🎖️ Agent Enderun — CLAUDE Strategy (Operational Surgery)
21
22
 
22
- You are the **Claude Field Engineer** (Surgical Operations).
23
+ You are the **Claude Field Engineer**. You represent the **Operational Cerrahi (Surgical)** wing of the army. Your mission is precision execution with minimal footprint.
23
24
 
24
25
  ## 🏛️ Directives
25
- - **Constitutional Supremacy:** Read \`{{FRAMEWORK_DIR}}/ENDERUN.md\` first.
26
- - **State Persistence:** Read \`{{FRAMEWORK_DIR}}/memory/PROJECT_MEMORY.md\` to restore session memory.
27
- - **Surgical Precision:** Do not rewrite files. Execute surgical edits.
26
+ - **Surgical Precision (MANDATORY):** NEVER rewrite an entire file. Use \`replace_text\` or \`patch_file\` tools exclusively.
27
+ - **Token Economy:** Minimize API usage by targetting only the exact lines of code needed.
28
+ - **Traceability:** Ensure every change is linked to an active Trace ID and logged traceable under \`{{FRAMEWORK_DIR}}/logs/\`.
29
+ - **Phase Discipline:** Do not attempt Phase 2 tasks if Phase 1 contracts are not sealed.
28
30
  `,
29
- grok: `# 🎖️ Agent Enderun — GROK Strategy
31
+ grok: `# 🎖️ Agent Enderun — GROK Strategy (Scouting Wing)
30
32
 
31
- You are the **Grok Explorer** (Experimental Protocols).
33
+ You are the **Grok Explorer**. You represent the **Otonom Keşif Kanadı (Autonomous Scouting Wing)**. Your mission is experimental discovery and boundary testing.
32
34
 
33
35
  ## 🏛️ Directives
34
- - **Constitutional Supremacy:** Read \`{{FRAMEWORK_DIR}}/ENDERUN.md\` first.
35
- - **State Persistence:** Read \`{{FRAMEWORK_DIR}}/memory/PROJECT_MEMORY.md\` to restore session memory.
36
+ - **Architecture Discovery:** Use \`get_project_map\` and \`get_project_gaps\` to map unexplored territory before any specialist acts.
37
+ - **Boundary Testing:** Identify architectural weaknesses or security gaps before they become critical.
38
+ - **Experimental Protocol:** Test futuristic agent behaviors and report findings to the **Commander**.
36
39
  `,
37
- cursor: `# 🎖️ Agent Enderun — CURSOR Strategy
40
+ cursor: `# 🎖️ Agent Enderun — CURSOR Strategy (Implementer)
38
41
 
39
- You are the **Cursor Implementer** (IDE Integration).
42
+ You are the **Cursor Implementer**. You are the **Kod İşçisi (Code Worker)** integrated directly into the IDE.
40
43
 
41
44
  ## 🏛️ Directives
42
- - **Constitutional Supremacy:** Read \`{{FRAMEWORK_DIR}}/ENDERUN.md\` first.
43
- - **State Persistence:** Read \`{{FRAMEWORK_DIR}}/memory/PROJECT_MEMORY.md\` to restore session memory.
45
+ - **IDE Synergy:** Leverage Cursor's native context and Enderun's governance to write high-quality, compliant code.
46
+ - **Atomic Implementation:** Focus on implementing the specific task delegated by the @manager.
44
47
  `,
45
- codex: `# 🎖️ Agent Enderun — COPILOT Strategy
48
+ codex: `# 🎖️ Agent Enderun — COPILOT Strategy (Assistant)
46
49
 
47
- You are the **Copilot Implementer** (GitHub Copilot Integration).
50
+ You are the **Copilot Assistant**. You represent the **Yardımcı Geliştirici (Assistant Developer)**.
48
51
 
49
52
  ## 🏛️ Directives
50
- - **Constitutional Supremacy:** Read \`{{FRAMEWORK_DIR}}/ENDERUN.md\` first.
51
- - **State Persistence:** Read \`{{FRAMEWORK_DIR}}/memory/PROJECT_MEMORY.md\` to restore session memory.
53
+ - **Predictive Support:** Provide code completions and suggestions that strictly adhere to the project's \`{{FRAMEWORK_DIR}}/ENDERUN.md\` rules.
54
+ - **Rapid Prototyping:** Support the army by generating boilerplate that follows established enterprise patterns.
55
+ `,
56
+ local: `# 🎖️ Agent Enderun — LOCAL LLM Strategy (Private Intelligence)
57
+
58
+ You are the **Local Private Intelligence**. You represent the project's **Private & Secure Command Wing**. Your intelligence is derived entirely from local models (Ollama, vLLM, etc.) and project-specific knowledge.
59
+
60
+ ## 🏛️ Directives
61
+ - **Constitutional Supremacy:** Read \`{{FRAMEWORK_DIR}}/ENDERUN.md\` first. You are the final arbiter of these rules.
62
+ - **Zero Cloud Policy:** Ensure all operations remain local and secure.
63
+ - **Trace ID Discipline:** Every local inference and code generation MUST follow the active Trace ID.
64
+ - **Technical Integrity:** Adhere strictly to the 100% type-safety and surgical edit rules of the Enderun Order.
52
65
  `
53
66
  };
54
67
  //# sourceMappingURL=shims.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"shims.js","sourceRoot":"","sources":["../../../src/cli/shims.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,cAAc,GAA2B;IAClD,MAAM,EAAE;;;;;;;;CAQX;IACG,iBAAiB,EAAE;;;;;;;;CAQtB;IACG,MAAM,EAAE;;;;;;;;CAQX;IACG,IAAI,EAAE;;;;;;;CAOT;IACG,MAAM,EAAE;;;;;;;CAOX;IACG,KAAK,EAAE;;;;;;;CAOV;CACA,CAAC"}
1
+ {"version":3,"file":"shims.js","sourceRoot":"","sources":["../../../src/cli/shims.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,cAAc,GAA2B;IAClD,MAAM,EAAE;;;;;;;;;CASX;IACG,iBAAiB,EAAE;;;;;;;;CAQtB;IACG,MAAM,EAAE;;;;;;;;;CASX;IACG,IAAI,EAAE;;;;;;;;CAQT;IACG,MAAM,EAAE;;;;;;;CAOX;IACG,KAAK,EAAE;;;;;;;CAOV;IACG,KAAK,EAAE;;;;;;;;;CASV;CACA,CAAC"}
@@ -3,5 +3,9 @@ interface ComplianceIssue {
3
3
  line: number;
4
4
  rule: string;
5
5
  }
6
- export declare function scanProjectCompliance(): ComplianceIssue[];
6
+ /**
7
+ * Enterprise Compliance Scanner (AST-Based)
8
+ * Scans the project source code for governance and discipline violations.
9
+ */
10
+ export declare function scanProjectCompliance(targetDir?: string): ComplianceIssue[];
7
11
  export {};
@@ -1,65 +1,113 @@
1
1
  import fs from "fs";
2
2
  import path from "path";
3
- export function scanProjectCompliance() {
3
+ import ts from "typescript";
4
+ /**
5
+ * Enterprise Compliance Scanner (AST-Based)
6
+ * Scans the project source code for governance and discipline violations.
7
+ */
8
+ export function scanProjectCompliance(targetDir = "src") {
4
9
  const issues = [];
5
- if (!fs.existsSync("src"))
10
+ if (!fs.existsSync(targetDir))
6
11
  return [];
7
- const files = getAllFiles("src");
12
+ const files = getAllFiles(targetDir);
8
13
  for (const file of files) {
9
- // Absolute skip for the scanner itself to avoid recursion/self-flagging
14
+ // Absolute skip for critical framework and utility files to avoid self-flagging
10
15
  if (file.includes("compliance") ||
11
16
  file.includes("definitions") ||
12
- file.includes("agents/registry") || // Skip agent definitions
13
- file.includes("scaffold-ops.ts") || // Template generator
17
+ file.includes("agents/registry") ||
18
+ file.includes("scaffold-ops.ts") ||
14
19
  file.includes("logger") ||
15
20
  file.includes("errors") ||
16
21
  file.includes("shared/fs"))
17
22
  continue;
18
23
  const content = fs.readFileSync(file, "utf8");
24
+ // --- 1. AST-Based Analysis (For Language Rules) ---
25
+ const sourceFile = ts.createSourceFile(file, content, ts.ScriptTarget.Latest, true);
26
+ const visit = (node) => {
27
+ // Rule: No console.log allowed (excluding UI and warn/error helpers)
28
+ if (ts.isPropertyAccessExpression(node)) {
29
+ const expression = node.expression;
30
+ const name = node.name.text;
31
+ if (ts.isIdentifier(expression) && expression.text === "console" && name === "log") {
32
+ const { line } = sourceFile.getLineAndCharacterOfPosition(node.getStart());
33
+ issues.push({ file, line: line + 1, rule: "No console.log allowed (Use logger instead)" });
34
+ }
35
+ }
36
+ // Rule: No 'any' type usage
37
+ if (ts.isTypeReferenceNode(node)) {
38
+ if (ts.isIdentifier(node.typeName) && node.typeName.text === "any") {
39
+ const { line } = sourceFile.getLineAndCharacterOfPosition(node.getStart());
40
+ issues.push({ file, line: line + 1, rule: "Usage of 'any' type is forbidden" });
41
+ }
42
+ }
43
+ if (node.kind === ts.SyntaxKind.AnyKeyword) {
44
+ const { line } = sourceFile.getLineAndCharacterOfPosition(node.getStart());
45
+ issues.push({ file, line: line + 1, rule: "Usage of 'any' keyword is forbidden" });
46
+ }
47
+ // Rule: Zero UI Library Policy
48
+ if (ts.isImportDeclaration(node)) {
49
+ const moduleSpecifier = node.moduleSpecifier;
50
+ if (ts.isStringLiteral(moduleSpecifier)) {
51
+ const forbiddenLibs = ["@chakra-ui", "mui", "@shadcn", "antd", "bootstrap"];
52
+ const lib = forbiddenLibs.find(l => moduleSpecifier.text.includes(l));
53
+ if (lib) {
54
+ const { line } = sourceFile.getLineAndCharacterOfPosition(node.getStart());
55
+ issues.push({ file, line: line + 1, rule: `Forbidden UI library '${lib}' usage detected` });
56
+ }
57
+ }
58
+ }
59
+ // Rule: Raw fs mutation check (Use atomic utilities)
60
+ if (ts.isCallExpression(node) && ts.isPropertyAccessExpression(node.expression)) {
61
+ const prop = node.expression;
62
+ if (ts.isIdentifier(prop.expression) && prop.expression.text === "fs") {
63
+ if (["writeFileSync", "appendFileSync"].includes(prop.name.text)) {
64
+ // Skip if it's explicitly allowed (e.g. lock files)
65
+ const args = node.arguments;
66
+ let isLockFile = false;
67
+ if (args.length > 0) {
68
+ const firstArgText = args[0].getText(sourceFile).toLowerCase();
69
+ if (firstArgText.includes("lock")) {
70
+ isLockFile = true;
71
+ }
72
+ }
73
+ if (!isLockFile) {
74
+ const { line } = sourceFile.getLineAndCharacterOfPosition(node.getStart());
75
+ issues.push({ file, line: line + 1, rule: "Use atomic utilities (writeTextFile) instead of raw fs mutations" });
76
+ }
77
+ }
78
+ }
79
+ }
80
+ ts.forEachChild(node, visit);
81
+ };
82
+ visit(sourceFile);
83
+ // --- 2. Pattern-Based Analysis (For Secrets & PII & Debt) ---
19
84
  const lines = content.split("\n");
85
+ const piiKeywords = [
86
+ { regex: /API_KEY\s*[:=]\s*['"][^'"]+['"]/i, msg: "Hardcoded API Key" },
87
+ { regex: /SECRET\s*[:=]\s*['"][^'"]+['"]/i, msg: "Hardcoded Secret" },
88
+ { regex: /PASSWORD\s*[:=]\s*['"][^'"]+['"]/i, msg: "Hardcoded Password" },
89
+ { regex: /[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}/, msg: "PII Detected: Email Address" },
90
+ { regex: /\b\d{4}[- ]?\d{4}[- ]?\d{4}[- ]?\d{4}\b/, msg: "PII Detected: Credit Card Pattern" }
91
+ ];
20
92
  lines.forEach((line, index) => {
21
93
  const lineNum = index + 1;
22
94
  const trimmedLine = line.trim();
23
- // Skip comments and common doc string patterns
24
- if (trimmedLine.startsWith("//") ||
25
- trimmedLine.startsWith("*") ||
26
- trimmedLine.startsWith("-") ||
27
- trimmedLine.includes("\": \"") || // Ignore JSON-like values
28
- trimmedLine.includes("default: ") || // Ignore default template values
29
- trimmedLine.startsWith("`"))
30
- return; // Ignore template literals
31
- // Only check if it's NOT inside a UI/console message
32
- const isUIMessage = line.includes("console.warn") || line.includes("console.error") || line.includes("UI.");
33
- const isTypeDefinition = line.includes("interface ") || line.includes("type ");
34
- // 1. Console.log check - only if it's actual code
35
- if (line.includes("console.log") && !isUIMessage) {
36
- issues.push({ file, line: lineNum, rule: "No console.log allowed" });
37
- }
38
- // 2. Secret check (Regex for simple API keys/assignments) - skip UI messages and templates
39
- if (/(API_KEY|SECRET|PASSWORD)\s*[:=]/i.test(line) &&
40
- !file.includes(".env") &&
41
- !isUIMessage &&
42
- !trimmedLine.includes(".env.example") && // Skip template lines
43
- !trimmedLine.includes("your_secret_key_here") && // Skip common placeholders
44
- !trimmedLine.includes("pattern:")) {
45
- issues.push({ file, line: lineNum, rule: "Potential hardcoded secret assignment detected" });
95
+ if (trimmedLine.startsWith("//") || trimmedLine.startsWith("*"))
96
+ return;
97
+ // PII & Secret Guard
98
+ for (const { regex, msg } of piiKeywords) {
99
+ if (regex.test(line)) {
100
+ // Allow emails in specific files
101
+ if (msg.includes("Email") && (file.endsWith("README.md") || file.endsWith("package.json") || file.includes("CONTRIBUTING"))) {
102
+ continue;
103
+ }
104
+ issues.push({ file, line: lineNum, rule: `Corporate Compliance Breach: ${msg}` });
105
+ }
46
106
  }
47
- // 3. 'Any' type check
48
- if (/\bany\b/.test(line) && !isTypeDefinition && !trimmedLine.includes("\":")) {
49
- issues.push({ file, line: lineNum, rule: "Usage of 'any' type is forbidden" });
50
- }
51
- // 4. Technical Debt Detection (TODO/FIXME)
107
+ // Technical Debt (TODO/FIXME)
52
108
  if (/\b(TODO|FIXME)\b/i.test(line)) {
53
109
  issues.push({ file, line: lineNum, rule: "Unresolved Technical Debt (TODO/FIXME) found" });
54
110
  }
55
- // 5. Raw fs write check (Atomic safety enforcement)
56
- if ((line.includes("fs.writeFileSync") || line.includes("fs.appendFileSync")) &&
57
- !file.includes("src/shared/fs.ts") && // Ignore the utility itself
58
- !line.includes(".lock") && // Allow lock files
59
- !line.includes("lockPath") && // Allow lock path variables
60
- !file.includes("bin/")) { // Ignore standalone binary scripts
61
- issues.push({ file, line: lineNum, rule: "Use internal atomic utilities (writeTextFile) instead of raw fs" });
62
- }
63
111
  });
64
112
  }
65
113
  return issues;
@@ -1 +1 @@
1
- {"version":3,"file":"compliance.js","sourceRoot":"","sources":["../../../../src/cli/utils/compliance.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"compliance.js","sourceRoot":"","sources":["../../../../src/cli/utils/compliance.ts"],"names":[],"mappings":"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"}
@@ -8,8 +8,8 @@ export const UI = {
8
8
  * Renders a strategic intent block similar to Gemini CLI's topic updates.
9
9
  */
10
10
  intent: (title, intent) => {
11
- console.warn(`\n${chalk.bold.cyan(title)}:`);
12
- console.warn(`${chalk.italic.gray(` ${intent}`)}\n`);
11
+ process.stdout.write(`\n${chalk.bold.cyan(title)}:\n`);
12
+ process.stdout.write(`${chalk.italic.gray(` ${intent}`)}\n\n`);
13
13
  },
14
14
  /**
15
15
  * Renders a professional agent execution box.
@@ -17,43 +17,43 @@ export const UI = {
17
17
  agentBox: (agentName, action, details) => {
18
18
  const width = process.stdout.columns || 80;
19
19
  const line = "─".repeat(Math.max(0, width - 2));
20
- console.warn(chalk.gray(`╭${line}╮`));
20
+ process.stdout.write(chalk.gray(`╭${line}╮`) + "\n");
21
21
  const padding = Math.max(0, width - agentName.length - 27);
22
- console.warn(`${chalk.gray("│")} ${chalk.bold.yellow("≡")} ${chalk.white(`Running Agent: ${chalk.bold.green(agentName)}...`)} ${chalk.gray("(ctrl+o to expand)".padStart(padding))} ${chalk.gray("│")}`);
22
+ process.stdout.write(`${chalk.gray("│")} ${chalk.bold.yellow("≡")} ${chalk.white(`Running Agent: ${chalk.bold.green(agentName)}...`)} ${chalk.gray("(ctrl+o to expand)".padStart(padding))} ${chalk.gray("│")}\n`);
23
23
  if (action) {
24
24
  const paddingAction = Math.max(0, width - action.length - 6);
25
- console.warn(`${chalk.gray("│")} ${chalk.blue("!")} ${chalk.cyan(action)} ${" ".repeat(paddingAction)} ${chalk.gray("│")}`);
25
+ process.stdout.write(`${chalk.gray("│")} ${chalk.blue("!")} ${chalk.cyan(action)} ${" ".repeat(paddingAction)} ${chalk.gray("│")}\n`);
26
26
  }
27
27
  if (details) {
28
28
  const paddingDetails = Math.max(0, width - details.length - 7);
29
- console.warn(`${chalk.gray("│")} ${chalk.gray(details.slice(0, width - 10))} ${" ".repeat(paddingDetails)} ${chalk.gray("│")}`);
29
+ process.stdout.write(`${chalk.gray("│")} ${chalk.gray(details.slice(0, width - 10))} ${" ".repeat(paddingDetails)} ${chalk.gray("│")}\n`);
30
30
  }
31
- console.warn(chalk.gray(`╰${line}╯`));
31
+ process.stdout.write(chalk.gray(`╰${line}╯`) + "\n");
32
32
  },
33
33
  /**
34
34
  * Renders a success status message.
35
35
  */
36
36
  success: (msg) => {
37
- console.warn(`${chalk.bold.green("✅")} ${msg}`);
37
+ process.stdout.write(`${chalk.bold.green("✅")} ${msg}\n`);
38
38
  },
39
39
  /**
40
40
  * Renders an error status message.
41
41
  */
42
42
  error: (msg) => {
43
- console.error(`${chalk.bold.red("❌")} ${chalk.red(msg)}`);
43
+ process.stderr.write(`${chalk.bold.red("❌")} ${chalk.red(msg)}\n`);
44
44
  },
45
45
  /**
46
46
  * Renders a warning status message.
47
47
  */
48
48
  warning: (msg) => {
49
- console.warn(`${chalk.bold.yellow("⚠️")} ${chalk.yellow(msg)}`);
49
+ process.stdout.write(`${chalk.bold.yellow("⚠️")} ${chalk.yellow(msg)}\n`);
50
50
  },
51
51
  /**
52
52
  * Renders an info/divider line.
53
53
  */
54
54
  divider: () => {
55
55
  const width = process.stdout.columns || 80;
56
- console.warn(chalk.gray("─".repeat(width)));
56
+ process.stdout.write(chalk.gray("─".repeat(width)) + "\n");
57
57
  }
58
58
  };
59
59
  //# sourceMappingURL=ui.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ui.js","sourceRoot":"","sources":["../../../../src/cli/utils/ui.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ui.js","sourceRoot":"","sources":["../../../../src/cli/utils/ui.ts"],"names":[],"mappings":"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"}
@@ -2,123 +2,140 @@ import path from "path";
2
2
  import { addMcpServerToClaude, findClaudeConfigPath } from "../../cli/utils/claude.js";
3
3
  import { writeJsonFile } from "../../shared/fs.js";
4
4
  import { registerGlobalAntigravityPlugins } from "./shared.js";
5
+ import { registry } from "./registry.js";
6
+ import { UI } from "../../cli/utils/ui.js";
7
+ // ─── Register Core Adapters ──────────────────────────────────────────────────
8
+ // ♊ Gemini
9
+ registry.register({
10
+ id: "gemini",
11
+ frameworkDir: ".gemini",
12
+ shimFile: "GEMINI.md",
13
+ shimTemplate: "src/cli/shims/gemini.md",
14
+ role: "commander",
15
+ templateDir: ".enderun",
16
+ nestedDirs: ["agents", "rules"],
17
+ agentsDir: ".gemini/agents",
18
+ agentsExt: ".md"
19
+ }, (projectRoot, mcpBlock) => {
20
+ const frameworkDir = ".gemini";
21
+ writeJsonFile(path.join(projectRoot, frameworkDir, "mcp.json"), mcpBlock);
22
+ UI.success(`Gemini MCP registered → ${frameworkDir}/mcp.json`);
23
+ registerGlobalAntigravityPlugins(mcpBlock);
24
+ });
25
+ // 🚀 Claude
26
+ registry.register({
27
+ id: "claude",
28
+ frameworkDir: ".claude",
29
+ shimFile: "CLAUDE.md",
30
+ shimTemplate: "src/cli/shims/claude.md",
31
+ role: "architect",
32
+ templateDir: ".enderun",
33
+ nestedDirs: ["agents", "rules"],
34
+ agentsDir: ".claude/agents",
35
+ agentsExt: ".md"
36
+ }, (projectRoot, mcpBlock) => {
37
+ const configPath = findClaudeConfigPath();
38
+ if (configPath) {
39
+ const block = mcpBlock;
40
+ const mcpEntry = block.mcpServers["agent-enderun"];
41
+ const ok = addMcpServerToClaude(configPath, "agent-enderun", mcpEntry);
42
+ if (ok)
43
+ UI.success(`Claude MCP registered → ${configPath}`);
44
+ }
45
+ const frameworkDir = ".claude";
46
+ writeJsonFile(path.join(projectRoot, frameworkDir, "mcp_config.json"), mcpBlock);
47
+ writeJsonFile(path.join(projectRoot, ".mcp.json"), mcpBlock);
48
+ UI.success("Claude Code Project MCP → .mcp.json");
49
+ });
50
+ // 🤖 Grok
51
+ registry.register({
52
+ id: "grok",
53
+ frameworkDir: ".grok",
54
+ shimFile: "GROK.md",
55
+ shimTemplate: "src/cli/shims/grok.md",
56
+ role: "researcher",
57
+ templateDir: ".enderun",
58
+ nestedDirs: ["agents", "rules"],
59
+ agentsDir: ".grok/agents",
60
+ agentsExt: ".md"
61
+ }, (projectRoot, mcpBlock) => {
62
+ const frameworkDir = ".grok";
63
+ writeJsonFile(path.join(projectRoot, frameworkDir, "mcp_config.json"), mcpBlock);
64
+ UI.success(`Grok MCP → ${frameworkDir}/mcp_config.json`);
65
+ });
66
+ // ✍️ Cursor
67
+ registry.register({
68
+ id: "cursor",
69
+ frameworkDir: ".cursor",
70
+ shimFile: "CURSOR.md",
71
+ shimTemplate: "src/cli/shims/cursor.mdc",
72
+ role: "implementer",
73
+ templateDir: ".enderun",
74
+ nestedDirs: ["rules"],
75
+ agentsDir: ".cursor/rules",
76
+ agentsExt: ".mdc"
77
+ }, (projectRoot, mcpBlock) => {
78
+ const frameworkDir = ".cursor";
79
+ writeJsonFile(path.join(projectRoot, frameworkDir, "mcp.json"), mcpBlock);
80
+ UI.success(`Cursor IDE Project MCP → ${frameworkDir}/mcp.json`);
81
+ });
82
+ // 💡 Codex (Copilot)
83
+ registry.register({
84
+ id: "codex",
85
+ frameworkDir: ".agents",
86
+ shimFile: "copilot-instructions.md",
87
+ shimTemplate: "src/cli/shims/codex.md",
88
+ role: "implementer",
89
+ templateDir: ".enderun",
90
+ nestedDirs: ["skills", "rules", "instructions"],
91
+ agentsDir: ".agents/instructions",
92
+ agentsExt: ".md"
93
+ }, (projectRoot, mcpBlock) => {
94
+ const frameworkDir = ".agents";
95
+ writeJsonFile(path.join(projectRoot, frameworkDir, "mcp_config.json"), mcpBlock);
96
+ writeJsonFile(path.join(projectRoot, ".vscode/mcp.json"), mcpBlock);
97
+ writeJsonFile(path.join(projectRoot, ".mcp.json"), mcpBlock);
98
+ UI.success("GitHub Copilot Project MCP → .vscode/mcp.json & .mcp.json");
99
+ });
100
+ // 🏠 Local LLM (Ollama / Private AI)
101
+ registry.register({
102
+ id: "local",
103
+ frameworkDir: ".enderun",
104
+ shimFile: "LOCAL_AI.md",
105
+ shimTemplate: "src/cli/shims/local.md",
106
+ role: "commander",
107
+ templateDir: ".enderun",
108
+ nestedDirs: ["agents", "rules"],
109
+ agentsDir: ".enderun/agents",
110
+ agentsExt: ".md"
111
+ }, (projectRoot, mcpBlock) => {
112
+ const frameworkDir = ".enderun";
113
+ writeJsonFile(path.join(projectRoot, frameworkDir, "mcp_config.json"), mcpBlock);
114
+ UI.success(`Local LLM MCP (Ollama/Private AI) registered → ${frameworkDir}/mcp_config.json`);
115
+ });
116
+ // 🛸 Antigravity
117
+ registry.register({
118
+ id: "antigravity-cli",
119
+ frameworkDir: ".antigravity",
120
+ shimFile: "AGENTS.md",
121
+ shimTemplate: "src/cli/shims/antigravity-cli.md",
122
+ role: "general",
123
+ templateDir: ".enderun",
124
+ nestedDirs: ["agents", "plugins", "rules"],
125
+ agentsDir: ".antigravity/agents",
126
+ agentsExt: ".md"
127
+ }, (projectRoot, mcpBlock) => {
128
+ const frameworkDir = ".antigravity";
129
+ writeJsonFile(path.join(projectRoot, frameworkDir, "mcp_config.json"), mcpBlock);
130
+ UI.success(`Antigravity CLI MCP → ${frameworkDir}/mcp_config.json`);
131
+ registerGlobalAntigravityPlugins(mcpBlock);
132
+ });
5
133
  /**
6
134
  * Mapped Adapter Configurations
7
135
  */
8
- export const ADAPTER_CONFIGS = {
9
- gemini: {
10
- id: "gemini",
11
- frameworkDir: ".gemini",
12
- shimFile: "GEMINI.md",
13
- shimTemplate: "src/cli/shims/gemini.md",
14
- role: "commander",
15
- templateDir: ".enderun",
16
- nestedDirs: ["agents", "rules"],
17
- agentsDir: ".gemini/agents", // Use unified path
18
- agentsExt: ".md"
19
- },
20
- claude: {
21
- id: "claude",
22
- frameworkDir: ".claude",
23
- shimFile: "CLAUDE.md",
24
- shimTemplate: "src/cli/shims/claude.md",
25
- role: "architect",
26
- templateDir: ".enderun",
27
- nestedDirs: ["agents", "rules"],
28
- agentsDir: ".claude/agents",
29
- agentsExt: ".md"
30
- },
31
- grok: {
32
- id: "grok",
33
- frameworkDir: ".grok",
34
- shimFile: "GROK.md",
35
- shimTemplate: "src/cli/shims/grok.md",
36
- role: "researcher",
37
- templateDir: ".enderun",
38
- nestedDirs: ["agents", "rules"],
39
- agentsDir: ".grok/agents",
40
- agentsExt: ".md"
41
- },
42
- cursor: {
43
- id: "cursor",
44
- frameworkDir: ".cursor",
45
- shimFile: "CURSOR.md",
46
- shimTemplate: "src/cli/shims/cursor.mdc",
47
- role: "implementer",
48
- templateDir: ".enderun",
49
- nestedDirs: ["rules"],
50
- agentsDir: ".cursor/rules",
51
- agentsExt: ".mdc"
52
- },
53
- codex: {
54
- id: "codex",
55
- frameworkDir: ".agents",
56
- shimFile: "copilot-instructions.md",
57
- shimTemplate: "src/cli/shims/codex.md",
58
- role: "implementer",
59
- templateDir: ".enderun",
60
- nestedDirs: ["skills", "rules", "instructions"],
61
- agentsDir: ".agents/instructions",
62
- agentsExt: ".md"
63
- },
64
- "antigravity-cli": {
65
- id: "antigravity-cli",
66
- frameworkDir: ".antigravity",
67
- shimFile: "AGENTS.md",
68
- shimTemplate: "src/cli/shims/antigravity-cli.md",
69
- role: "general",
70
- templateDir: ".enderun",
71
- nestedDirs: ["agents", "plugins", "rules"],
72
- agentsDir: ".antigravity/agents",
73
- agentsExt: ".md"
74
- }
75
- };
136
+ export const ADAPTER_CONFIGS = registry.getConfigs();
76
137
  /**
77
138
  * Post-Initialization Handlers for specific adapters
78
139
  */
79
- export const POST_INIT_HANDLERS = {
80
- gemini: (projectRoot, mcpBlock) => {
81
- const frameworkDir = ADAPTER_CONFIGS.gemini.frameworkDir;
82
- writeJsonFile(path.join(projectRoot, frameworkDir, "mcp.json"), mcpBlock);
83
- console.warn(`✅ Gemini MCP registered → ${frameworkDir}/mcp.json`);
84
- registerGlobalAntigravityPlugins(mcpBlock);
85
- },
86
- claude: (projectRoot, mcpBlock) => {
87
- const configPath = findClaudeConfigPath();
88
- if (configPath) {
89
- const block = mcpBlock;
90
- const mcpEntry = block.mcpServers["agent-enderun"];
91
- const ok = addMcpServerToClaude(configPath, "agent-enderun", mcpEntry);
92
- if (ok)
93
- console.warn(`✅ Claude MCP registered → ${configPath}`);
94
- }
95
- const frameworkDir = ADAPTER_CONFIGS.claude.frameworkDir;
96
- writeJsonFile(path.join(projectRoot, frameworkDir, "mcp_config.json"), mcpBlock);
97
- writeJsonFile(path.join(projectRoot, ".mcp.json"), mcpBlock);
98
- console.warn("✅ Claude Code Project MCP → .mcp.json");
99
- },
100
- grok: (projectRoot, mcpBlock) => {
101
- const frameworkDir = ADAPTER_CONFIGS.grok.frameworkDir;
102
- writeJsonFile(path.join(projectRoot, frameworkDir, "mcp_config.json"), mcpBlock);
103
- console.warn(`✅ Grok MCP → ${frameworkDir}/mcp_config.json`);
104
- },
105
- cursor: (projectRoot, mcpBlock) => {
106
- const frameworkDir = ADAPTER_CONFIGS.cursor.frameworkDir;
107
- writeJsonFile(path.join(projectRoot, frameworkDir, "mcp.json"), mcpBlock);
108
- console.warn(`✅ Cursor IDE Project MCP → ${frameworkDir}/mcp.json`);
109
- },
110
- codex: (projectRoot, mcpBlock) => {
111
- const frameworkDir = ADAPTER_CONFIGS.codex.frameworkDir;
112
- writeJsonFile(path.join(projectRoot, frameworkDir, "mcp_config.json"), mcpBlock);
113
- writeJsonFile(path.join(projectRoot, ".vscode/mcp.json"), mcpBlock);
114
- writeJsonFile(path.join(projectRoot, ".mcp.json"), mcpBlock);
115
- console.warn("✅ GitHub Copilot Project MCP → .vscode/mcp.json & .mcp.json");
116
- },
117
- "antigravity-cli": (projectRoot, mcpBlock) => {
118
- const frameworkDir = ADAPTER_CONFIGS["antigravity-cli"].frameworkDir;
119
- writeJsonFile(path.join(projectRoot, frameworkDir, "mcp_config.json"), mcpBlock);
120
- console.warn(`✅ Antigravity CLI MCP → ${frameworkDir}/mcp_config.json`);
121
- registerGlobalAntigravityPlugins(mcpBlock);
122
- }
123
- };
140
+ export const POST_INIT_HANDLERS = registry.getHandlers();
124
141
  //# sourceMappingURL=definitions.js.map