agent-enderun 1.10.2 → 1.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +34 -44
- package/dist/framework-mcp/src/constants.d.ts +47 -0
- package/dist/framework-mcp/src/constants.js +65 -0
- package/dist/framework-mcp/src/constants.js.map +1 -0
- package/dist/framework-mcp/src/index.js +26 -5
- package/dist/framework-mcp/src/index.js.map +1 -1
- package/dist/framework-mcp/src/tools/control_plane/locking.d.ts +3 -9
- package/dist/framework-mcp/src/tools/control_plane/locking.js.map +1 -1
- package/dist/framework-mcp/src/tools/control_plane/registry.d.ts +2 -8
- package/dist/framework-mcp/src/tools/control_plane/registry.js.map +1 -1
- package/dist/framework-mcp/src/tools/dashboard/start_dashboard.d.ts +2 -2
- package/dist/framework-mcp/src/tools/dashboard/start_dashboard.js.map +1 -1
- package/dist/framework-mcp/src/tools/definitions.js +30 -0
- package/dist/framework-mcp/src/tools/definitions.js.map +1 -1
- package/dist/framework-mcp/src/tools/file_system/batch_surgical_edit.d.ts +2 -2
- package/dist/framework-mcp/src/tools/file_system/batch_surgical_edit.js +12 -4
- package/dist/framework-mcp/src/tools/file_system/batch_surgical_edit.js.map +1 -1
- package/dist/framework-mcp/src/tools/file_system/patch_file.d.ts +2 -2
- package/dist/framework-mcp/src/tools/file_system/patch_file.js +6 -2
- package/dist/framework-mcp/src/tools/file_system/patch_file.js.map +1 -1
- package/dist/framework-mcp/src/tools/file_system/read_file.d.ts +2 -2
- package/dist/framework-mcp/src/tools/file_system/read_file.js +43 -26
- package/dist/framework-mcp/src/tools/file_system/read_file.js.map +1 -1
- package/dist/framework-mcp/src/tools/file_system/replace_text.d.ts +2 -2
- package/dist/framework-mcp/src/tools/file_system/replace_text.js +7 -3
- package/dist/framework-mcp/src/tools/file_system/replace_text.js.map +1 -1
- package/dist/framework-mcp/src/tools/file_system/write_file.d.ts +2 -2
- package/dist/framework-mcp/src/tools/file_system/write_file.js +27 -15
- package/dist/framework-mcp/src/tools/file_system/write_file.js.map +1 -1
- package/dist/framework-mcp/src/tools/framework/get_status.d.ts +2 -2
- package/dist/framework-mcp/src/tools/framework/get_status.js.map +1 -1
- package/dist/framework-mcp/src/tools/framework/orchestrate.d.ts +2 -2
- package/dist/framework-mcp/src/tools/framework/orchestrate.js.map +1 -1
- package/dist/framework-mcp/src/tools/framework/run_tests.d.ts +2 -2
- package/dist/framework-mcp/src/tools/framework/run_tests.js.map +1 -1
- package/dist/framework-mcp/src/tools/framework/update_contract_hash.d.ts +2 -2
- package/dist/framework-mcp/src/tools/framework/update_contract_hash.js.map +1 -1
- package/dist/framework-mcp/src/tools/framework/update_memory.d.ts +2 -2
- package/dist/framework-mcp/src/tools/framework/update_memory.js +1 -1
- package/dist/framework-mcp/src/tools/framework/update_memory.js.map +1 -1
- package/dist/framework-mcp/src/tools/index.d.ts +1 -2
- package/dist/framework-mcp/src/tools/index.js +33 -25
- package/dist/framework-mcp/src/tools/index.js.map +1 -1
- package/dist/framework-mcp/src/tools/messaging/log_action.d.ts +2 -2
- package/dist/framework-mcp/src/tools/messaging/log_action.js.map +1 -1
- package/dist/framework-mcp/src/tools/messaging/send_message.d.ts +2 -2
- package/dist/framework-mcp/src/tools/messaging/send_message.js +14 -1
- package/dist/framework-mcp/src/tools/messaging/send_message.js.map +1 -1
- package/dist/framework-mcp/src/tools/observability/check_ports.d.ts +2 -2
- package/dist/framework-mcp/src/tools/observability/check_ports.js.map +1 -1
- package/dist/framework-mcp/src/tools/quality/check_lint.d.ts +5 -0
- package/dist/framework-mcp/src/tools/quality/check_lint.js +29 -0
- package/dist/framework-mcp/src/tools/quality/check_lint.js.map +1 -0
- package/dist/framework-mcp/src/tools/search/get_gaps.d.ts +2 -2
- package/dist/framework-mcp/src/tools/search/get_gaps.js.map +1 -1
- package/dist/framework-mcp/src/tools/search/get_map.d.ts +2 -2
- package/dist/framework-mcp/src/tools/search/get_map.js +1 -1
- package/dist/framework-mcp/src/tools/search/get_map.js.map +1 -1
- package/dist/framework-mcp/src/tools/search/grep_search.d.ts +2 -2
- package/dist/framework-mcp/src/tools/search/grep_search.js +45 -28
- package/dist/framework-mcp/src/tools/search/grep_search.js.map +1 -1
- package/dist/framework-mcp/src/tools/search/list_dir.d.ts +2 -2
- package/dist/framework-mcp/src/tools/search/list_dir.js.map +1 -1
- package/dist/framework-mcp/src/tools/shell/run_command.d.ts +2 -0
- package/dist/framework-mcp/src/tools/shell/run_command.js +47 -0
- package/dist/framework-mcp/src/tools/shell/run_command.js.map +1 -0
- package/dist/framework-mcp/src/tools/types.d.ts +95 -28
- package/dist/framework-mcp/src/utils/metrics.d.ts +20 -0
- package/dist/framework-mcp/src/utils/metrics.js +24 -6
- package/dist/framework-mcp/src/utils/metrics.js.map +1 -1
- package/dist/framework-mcp/src/utils/security.d.ts +1 -3
- package/dist/framework-mcp/src/utils/security.js +21 -18
- package/dist/framework-mcp/src/utils/security.js.map +1 -1
- package/dist/framework-mcp/tests/tools/file_system/file_system_tools.test.js +19 -14
- package/dist/framework-mcp/tests/tools/file_system/file_system_tools.test.js.map +1 -1
- package/dist/framework-mcp/tests/tools/messaging/send_message.test.js +1 -1
- package/dist/framework-mcp/tests/tools/messaging/send_message.test.js.map +1 -1
- package/dist/framework-mcp/tests/tools/quality/check_lint.test.d.ts +1 -0
- package/dist/framework-mcp/tests/tools/quality/check_lint.test.js +36 -0
- package/dist/framework-mcp/tests/tools/quality/check_lint.test.js.map +1 -0
- package/dist/framework-mcp/tests/tools/shell/run_command.test.d.ts +1 -0
- package/dist/framework-mcp/tests/tools/shell/run_command.test.js +43 -0
- package/dist/framework-mcp/tests/tools/shell/run_command.test.js.map +1 -0
- package/dist/src/cli/adapters/core.d.ts +1 -1
- package/dist/src/cli/adapters/core.js +4 -0
- package/dist/src/cli/adapters/core.js.map +1 -1
- package/dist/src/cli/adapters/index.d.ts +1 -0
- package/dist/src/cli/adapters/index.js +1 -0
- package/dist/src/cli/adapters/index.js.map +1 -1
- package/dist/src/cli/adapters/paths.d.ts +15 -0
- package/dist/src/cli/adapters/paths.js +101 -0
- package/dist/src/cli/adapters/paths.js.map +1 -0
- package/dist/src/cli/adapters/scaffold.d.ts +1 -1
- package/dist/src/cli/adapters/scaffold.js +10 -7
- package/dist/src/cli/adapters/scaffold.js.map +1 -1
- package/dist/src/cli/commands/check.js +15 -36
- package/dist/src/cli/commands/check.js.map +1 -1
- package/dist/src/cli/commands/dashboard/data-service.d.ts +8 -0
- package/dist/src/cli/commands/dashboard/data-service.js +37 -0
- package/dist/src/cli/commands/dashboard/data-service.js.map +1 -1
- package/dist/src/cli/commands/init/scaffold-core.d.ts +5 -2
- package/dist/src/cli/commands/init/scaffold-core.js +28 -6
- package/dist/src/cli/commands/init/scaffold-core.js.map +1 -1
- package/dist/src/cli/commands/init/scaffold-standards.js +6 -1
- package/dist/src/cli/commands/init/scaffold-standards.js.map +1 -1
- package/dist/src/cli/commands/init.js +30 -6
- package/dist/src/cli/commands/init.js.map +1 -1
- package/dist/src/cli/commands/orchestrate.d.ts +11 -6
- package/dist/src/cli/commands/orchestrate.js +148 -128
- package/dist/src/cli/commands/orchestrate.js.map +1 -1
- package/dist/src/cli/commands/plan.d.ts +3 -1
- package/dist/src/cli/commands/plan.js +79 -22
- package/dist/src/cli/commands/plan.js.map +1 -1
- package/dist/src/cli/index.js +11 -15
- package/dist/src/cli/index.js.map +1 -1
- package/dist/src/cli/utils/compliance.js +0 -1
- package/dist/src/cli/utils/compliance.js.map +1 -1
- package/dist/src/cli/utils/config-schema.d.ts +7 -7
- package/dist/src/cli/utils/fs.js +1 -1
- package/dist/src/cli/utils/fs.js.map +1 -1
- package/dist/src/cli/utils/memory.d.ts +1 -1
- package/dist/src/cli/utils/memory.js +28 -8
- package/dist/src/cli/utils/memory.js.map +1 -1
- package/dist/src/cli/utils/pkg.d.ts +19 -0
- package/dist/src/cli/utils/pkg.js +29 -5
- package/dist/src/cli/utils/pkg.js.map +1 -1
- package/dist/src/modules/adapters/definitions.js +3 -3
- package/dist/src/modules/adapters/definitions.js.map +1 -1
- package/dist/src/modules/agents/definitions.js +2 -1
- 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 -0
- package/dist/src/modules/agents/registry/architect.js.map +1 -1
- package/dist/src/modules/agents/registry/backend.js +7 -6
- package/dist/src/modules/agents/registry/backend.js.map +1 -1
- package/dist/src/modules/agents/registry/database.js +4 -3
- 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/git.js +1 -1
- package/dist/src/modules/agents/registry/git.js.map +1 -1
- package/dist/src/modules/agents/registry/manager.js +3 -2
- package/dist/src/modules/agents/registry/manager.js.map +1 -1
- package/dist/src/modules/agents/registry/native.js +1 -1
- package/dist/src/modules/agents/registry/native.js.map +1 -1
- package/dist/src/modules/agents/registry/quality.js +1 -0
- package/dist/src/modules/agents/registry/quality.js.map +1 -1
- package/dist/src/modules/agents/registry/security.js +1 -0
- package/dist/src/modules/agents/registry/security.js.map +1 -1
- package/dist/src/shared/constants.d.ts +113 -0
- package/dist/src/shared/constants.js +178 -0
- package/dist/src/shared/constants.js.map +1 -0
- package/dist/tests/adapters/paths.test.d.ts +1 -0
- package/dist/tests/adapters/paths.test.js +63 -0
- package/dist/tests/adapters/paths.test.js.map +1 -0
- package/dist/tests/approve.test.js +5 -9
- package/dist/tests/approve.test.js.map +1 -1
- package/dist/tests/cli/init/unified_init.test.d.ts +1 -0
- package/dist/tests/cli/init/unified_init.test.js +47 -0
- package/dist/tests/cli/init/unified_init.test.js.map +1 -0
- package/dist/tests/fs-utils.test.js +1 -1
- package/dist/tests/fs-utils.test.js.map +1 -1
- package/dist/tests/memory-utils.test.js +1 -1
- package/dist/tests/memory-utils.test.js.map +1 -1
- package/dist/tests/shared/constants.test.d.ts +1 -0
- package/dist/tests/shared/constants.test.js +17 -0
- package/dist/tests/shared/constants.test.js.map +1 -0
- package/dist/tests/trace.test.js +2 -2
- package/dist/tests/trace.test.js.map +1 -1
- package/framework-mcp/dist/constants.js +64 -0
- package/framework-mcp/dist/index.js +109 -0
- package/framework-mcp/dist/tools/control_plane/locking.js +64 -0
- package/framework-mcp/dist/tools/control_plane/registry.js +34 -0
- package/framework-mcp/dist/tools/dashboard/start_dashboard.js +29 -0
- package/framework-mcp/dist/tools/definitions.js +300 -0
- package/framework-mcp/dist/tools/file_system/batch_surgical_edit.js +59 -0
- package/framework-mcp/dist/tools/file_system/patch_file.js +25 -0
- package/framework-mcp/dist/tools/file_system/read_file.js +51 -0
- package/framework-mcp/dist/tools/file_system/replace_text.js +43 -0
- package/framework-mcp/dist/tools/file_system/write_file.js +38 -0
- package/framework-mcp/dist/tools/framework/audit_deps.js +41 -0
- package/framework-mcp/dist/tools/framework/get_status.js +5 -0
- package/framework-mcp/dist/tools/framework/orchestrate.js +5 -0
- package/framework-mcp/dist/tools/framework/run_tests.js +25 -0
- package/framework-mcp/dist/tools/framework/update_contract_hash.js +5 -0
- package/framework-mcp/dist/tools/framework/update_memory.js +8 -0
- package/framework-mcp/dist/tools/index.js +62 -0
- package/framework-mcp/dist/tools/memory/get_insights.js +34 -0
- package/framework-mcp/dist/tools/memory/read_memory.js +28 -0
- package/framework-mcp/dist/tools/messaging/log_action.js +22 -0
- package/framework-mcp/dist/tools/messaging/send_message.js +87 -0
- package/framework-mcp/dist/tools/observability/check_ports.js +26 -0
- package/framework-mcp/dist/tools/observability/get_health.js +19 -0
- package/framework-mcp/dist/tools/quality/check_lint.js +28 -0
- package/framework-mcp/dist/tools/search/get_gaps.js +48 -0
- package/framework-mcp/dist/tools/search/get_map.js +43 -0
- package/framework-mcp/dist/tools/search/grep_search.js +76 -0
- package/framework-mcp/dist/tools/search/list_dir.js +28 -0
- package/framework-mcp/dist/tools/shell/run_command.js +46 -0
- package/framework-mcp/dist/tools/types.js +1 -0
- package/framework-mcp/dist/utils/cli.js +20 -0
- package/framework-mcp/dist/utils/compliance.js +29 -0
- package/framework-mcp/dist/utils/fs.js +44 -0
- package/framework-mcp/dist/utils/metrics.js +56 -0
- package/framework-mcp/dist/utils/security.js +60 -0
- package/framework-mcp/package.json +19 -0
- package/framework-mcp/src/constants.ts +78 -0
- package/framework-mcp/src/declarations.d.ts +17 -0
- package/framework-mcp/src/index.ts +132 -0
- package/framework-mcp/src/tools/control_plane/locking.ts +71 -0
- package/framework-mcp/src/tools/control_plane/registry.ts +38 -0
- package/framework-mcp/src/tools/dashboard/start_dashboard.ts +33 -0
- package/framework-mcp/src/tools/definitions.ts +302 -0
- package/framework-mcp/src/tools/file_system/batch_surgical_edit.ts +79 -0
- package/framework-mcp/src/tools/file_system/patch_file.ts +33 -0
- package/framework-mcp/src/tools/file_system/read_file.ts +58 -0
- package/framework-mcp/src/tools/file_system/replace_text.ts +52 -0
- package/framework-mcp/src/tools/file_system/write_file.ts +45 -0
- package/framework-mcp/src/tools/framework/audit_deps.ts +49 -0
- package/framework-mcp/src/tools/framework/get_status.ts +7 -0
- package/framework-mcp/src/tools/framework/orchestrate.ts +7 -0
- package/framework-mcp/src/tools/framework/run_tests.ts +28 -0
- package/framework-mcp/src/tools/framework/update_contract_hash.ts +7 -0
- package/framework-mcp/src/tools/framework/update_memory.ts +10 -0
- package/framework-mcp/src/tools/index.ts +66 -0
- package/framework-mcp/src/tools/memory/get_insights.ts +41 -0
- package/framework-mcp/src/tools/memory/read_memory.ts +31 -0
- package/framework-mcp/src/tools/messaging/log_action.ts +28 -0
- package/framework-mcp/src/tools/messaging/send_message.ts +89 -0
- package/framework-mcp/src/tools/observability/check_ports.ts +30 -0
- package/framework-mcp/src/tools/observability/get_health.ts +24 -0
- package/framework-mcp/src/tools/quality/check_lint.ts +33 -0
- package/framework-mcp/src/tools/search/get_gaps.ts +54 -0
- package/framework-mcp/src/tools/search/get_map.ts +48 -0
- package/framework-mcp/src/tools/search/grep_search.ts +76 -0
- package/framework-mcp/src/tools/search/list_dir.ts +34 -0
- package/framework-mcp/src/tools/shell/run_command.ts +56 -0
- package/framework-mcp/src/tools/types.ts +89 -0
- package/framework-mcp/src/utils/cli.ts +20 -0
- package/framework-mcp/src/utils/compliance.ts +37 -0
- package/framework-mcp/src/utils/fs.ts +45 -0
- package/framework-mcp/src/utils/metrics.ts +73 -0
- package/framework-mcp/src/utils/security.ts +66 -0
- package/framework-mcp/tests/tools/file_system/file_system_tools.test.ts +212 -0
- package/framework-mcp/tests/tools/messaging/send_message.test.ts +136 -0
- package/framework-mcp/tests/tools/quality/check_lint.test.ts +46 -0
- package/framework-mcp/tests/tools/shell/run_command.test.ts +55 -0
- package/framework-mcp/tsconfig.json +14 -0
- package/package.json +9 -7
- package/src/cli/adapters/core.ts +7 -1
- package/src/cli/adapters/index.ts +1 -0
- package/src/cli/adapters/paths.ts +134 -0
- package/src/cli/adapters/scaffold.ts +17 -7
- package/src/cli/commands/check.ts +16 -38
- package/src/cli/commands/dashboard/data-service.ts +48 -0
- package/src/cli/commands/init/scaffold-core.ts +45 -6
- package/src/cli/commands/init/scaffold-standards.ts +6 -1
- package/src/cli/commands/init.ts +32 -6
- package/src/cli/commands/orchestrate.ts +151 -127
- package/src/cli/commands/plan.ts +89 -23
- package/src/cli/index.ts +14 -19
- package/src/cli/utils/compliance.ts +8 -9
- package/src/cli/utils/fs.ts +1 -1
- package/src/cli/utils/memory.ts +32 -7
- package/src/cli/utils/pkg.ts +42 -13
- package/src/modules/adapters/definitions.ts +4 -3
- package/src/modules/agents/definitions.ts +2 -1
- package/src/modules/agents/registry/analyst.ts +1 -1
- package/src/modules/agents/registry/architect.ts +1 -0
- package/src/modules/agents/registry/backend.ts +7 -6
- package/src/modules/agents/registry/database.ts +4 -3
- package/src/modules/agents/registry/devops.ts +1 -1
- package/src/modules/agents/registry/git.ts +1 -1
- package/src/modules/agents/registry/manager.ts +3 -2
- package/src/modules/agents/registry/native.ts +1 -1
- package/src/modules/agents/registry/quality.ts +1 -0
- package/src/modules/agents/registry/security.ts +1 -0
- package/src/shared/constants.ts +212 -0
- package/templates/prompts/bug-fix-recipe.md +20 -0
- package/templates/prompts/contract-design-recipe.md +21 -0
- package/templates/prompts/db-management-recipe.md +25 -0
- package/templates/prompts/deployment-recipe.md +23 -0
- package/templates/prompts/new-feature-recipe.md +19 -0
- package/templates/prompts/performance-optimization-recipe.md +23 -0
- package/templates/prompts/pull-request-template.md +21 -0
- package/templates/prompts/refactoring-recipe.md +21 -0
- package/templates/prompts/security-audit-recipe.md +20 -0
- package/templates/standards/architecture-standards.md +23 -0
- package/templates/standards/auth-standards.md +125 -0
- package/templates/standards/crud-governance.md +21 -0
- package/templates/standards/deployment-standards.md +21 -0
- package/templates/standards/frontend-standards.md +37 -0
- package/templates/standards/github-actions-standards.md +43 -0
- package/templates/standards/i18n-standards.md +17 -0
- package/templates/standards/kysely-standards.md +47 -0
- package/templates/standards/llm-governance.md +15 -0
- package/templates/standards/logging-and-secrets.md +34 -0
- package/templates/standards/mobile-standards.md +23 -0
- package/templates/standards/observability-standards.md +15 -0
- package/templates/standards/performance-standards.md +15 -0
- package/templates/standards/pino-standards.md +46 -0
- package/templates/standards/playwright-standards.md +54 -0
- package/templates/standards/quality-standards.md +31 -0
- package/templates/standards/react-query-standards.md +72 -0
- package/templates/standards/react-router-standards.md +62 -0
- package/templates/standards/security-audit-standards.md +16 -0
- package/templates/standards/security-standards.md +21 -0
- package/templates/standards/swagger-standards.md +50 -0
- package/templates/standards/tailwind-standards.md +20 -0
- package/templates/standards/testing-standards.md +31 -0
- package/templates/standards/typeorm-standards.md +49 -0
- package/templates/standards/vitest-standards.md +110 -0
- package/bin/validate-agent-army.js +0 -148
- package/src/cli/commands/app.ts +0 -56
- package/src/cli/utils/app-backend.ts +0 -257
- package/src/cli/utils/app-docs.ts +0 -83
- package/src/cli/utils/app-frontend.ts +0 -263
- package/src/cli/utils/app-inferrer.ts +0 -63
- package/src/cli/utils/app-mobile.ts +0 -113
- package/src/cli/utils/app-types.ts +0 -248
- package/src/cli/utils/app.ts +0 -6
|
@@ -14,12 +14,11 @@ export function scanProjectCompliance(): ComplianceIssue[] {
|
|
|
14
14
|
|
|
15
15
|
for (const file of files) {
|
|
16
16
|
// Absolute skip for the scanner itself to avoid recursion/self-flagging
|
|
17
|
-
if (file.includes("compliance") ||
|
|
17
|
+
if (file.includes("compliance") ||
|
|
18
18
|
file.includes("definitions") ||
|
|
19
19
|
file.includes("agents/registry") || // Skip agent definitions
|
|
20
|
-
file.includes("app-backend.ts") || // Template generator
|
|
21
20
|
file.includes("scaffold-ops.ts") || // Template generator
|
|
22
|
-
file.includes("logger") ||
|
|
21
|
+
file.includes("logger") ||
|
|
23
22
|
file.includes("errors") ||
|
|
24
23
|
file.includes("shared/fs")) continue;
|
|
25
24
|
|
|
@@ -31,8 +30,8 @@ export function scanProjectCompliance(): ComplianceIssue[] {
|
|
|
31
30
|
const trimmedLine = line.trim();
|
|
32
31
|
|
|
33
32
|
// Skip comments and common doc string patterns
|
|
34
|
-
if (trimmedLine.startsWith("//") ||
|
|
35
|
-
trimmedLine.startsWith("*") ||
|
|
33
|
+
if (trimmedLine.startsWith("//") ||
|
|
34
|
+
trimmedLine.startsWith("*") ||
|
|
36
35
|
trimmedLine.startsWith("-") ||
|
|
37
36
|
trimmedLine.includes("\": \"") || // Ignore JSON-like values
|
|
38
37
|
trimmedLine.includes("default: ") || // Ignore default template values
|
|
@@ -48,9 +47,9 @@ export function scanProjectCompliance(): ComplianceIssue[] {
|
|
|
48
47
|
}
|
|
49
48
|
|
|
50
49
|
// 2. Secret check (Regex for simple API keys/assignments) - skip UI messages and templates
|
|
51
|
-
if (/(API_KEY|SECRET|PASSWORD)\s*[:=]/i.test(line) &&
|
|
52
|
-
!file.includes(".env") &&
|
|
53
|
-
!isUIMessage &&
|
|
50
|
+
if (/(API_KEY|SECRET|PASSWORD)\s*[:=]/i.test(line) &&
|
|
51
|
+
!file.includes(".env") &&
|
|
52
|
+
!isUIMessage &&
|
|
54
53
|
!trimmedLine.includes(".env.example") && // Skip template lines
|
|
55
54
|
!trimmedLine.includes("your_secret_key_here") && // Skip common placeholders
|
|
56
55
|
!trimmedLine.includes("pattern:")) {
|
|
@@ -68,7 +67,7 @@ export function scanProjectCompliance(): ComplianceIssue[] {
|
|
|
68
67
|
}
|
|
69
68
|
|
|
70
69
|
// 5. Raw fs write check (Atomic safety enforcement)
|
|
71
|
-
if ((line.includes("fs.writeFileSync") || line.includes("fs.appendFileSync")) &&
|
|
70
|
+
if ((line.includes("fs.writeFileSync") || line.includes("fs.appendFileSync")) &&
|
|
72
71
|
!file.includes("src/shared/fs.ts") && // Ignore the utility itself
|
|
73
72
|
!line.includes(".lock") && // Allow lock files
|
|
74
73
|
!line.includes("lockPath") && // Allow lock path variables
|
package/src/cli/utils/fs.ts
CHANGED
|
@@ -8,7 +8,7 @@ import { ensureDir, writeTextFile, writeJsonFile, appendFile } from "../../share
|
|
|
8
8
|
|
|
9
9
|
export { ensureDir, writeTextFile, writeJsonFile, appendFile };
|
|
10
10
|
|
|
11
|
-
export function updateGitIgnore(targetPath: string, frameworkDir = ".
|
|
11
|
+
export function updateGitIgnore(targetPath: string, frameworkDir = ".enderun", dryRun = false): void {
|
|
12
12
|
const IGNORE_LINES = [
|
|
13
13
|
"# Agent Enderun",
|
|
14
14
|
`${frameworkDir}/logs/*.json`,
|
package/src/cli/utils/memory.ts
CHANGED
|
@@ -5,9 +5,13 @@ import { logger } from "../../shared/logger.js";
|
|
|
5
5
|
import { ensureDir, writeTextFile, writeJsonFile } from "../../shared/fs.js";
|
|
6
6
|
import { StateSchema, AgentStatusSchema, TaskSchema } from "./schemas.js";
|
|
7
7
|
import type { TraceID } from "../../shared/types.js";
|
|
8
|
+
import {
|
|
9
|
+
FRAMEWORK,
|
|
10
|
+
FRAMEWORK_DIR_CANDIDATES,
|
|
11
|
+
MCP,
|
|
12
|
+
} from "../../shared/constants.js";
|
|
8
13
|
|
|
9
14
|
export { generateULID } from "./time.js";
|
|
10
|
-
export { FRAMEWORK_DIR_CANDIDATES } from "../adapters/index.js";
|
|
11
15
|
|
|
12
16
|
const CWD = process.cwd();
|
|
13
17
|
const HOME = os.homedir();
|
|
@@ -28,9 +32,24 @@ function findFrameworkDir(basePath: string): string | null {
|
|
|
28
32
|
return null;
|
|
29
33
|
}
|
|
30
34
|
|
|
35
|
+
export function isFrameworkDevelopmentRepo(): boolean {
|
|
36
|
+
try {
|
|
37
|
+
const pkgPath = path.join(CWD, "package.json");
|
|
38
|
+
if (fs.existsSync(pkgPath)) {
|
|
39
|
+
const pkg = JSON.parse(fs.readFileSync(pkgPath, "utf8"));
|
|
40
|
+
if (pkg.name === "agent-enderun") {
|
|
41
|
+
return true;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
} catch (err) {
|
|
45
|
+
logger.debug("Failed to read package.json in isFrameworkDevelopmentRepo", err);
|
|
46
|
+
}
|
|
47
|
+
return false;
|
|
48
|
+
}
|
|
49
|
+
|
|
31
50
|
export function getLocalFrameworkDir(): string {
|
|
32
51
|
const localDir = findFrameworkDir(CWD);
|
|
33
|
-
return localDir || path.join(CWD,
|
|
52
|
+
return localDir || path.join(CWD, FRAMEWORK.CORE_DIR);
|
|
34
53
|
}
|
|
35
54
|
|
|
36
55
|
export function getConfigDir(): string {
|
|
@@ -38,17 +57,23 @@ export function getConfigDir(): string {
|
|
|
38
57
|
if (localDir) return localDir;
|
|
39
58
|
|
|
40
59
|
// Check for standard local directories if package.json doesn't specify
|
|
41
|
-
const localCandidates = [
|
|
60
|
+
const localCandidates = [...FRAMEWORK_DIR_CANDIDATES, ".agent"] as string[];
|
|
42
61
|
for (const cand of localCandidates) {
|
|
43
62
|
const p = path.join(CWD, cand);
|
|
44
63
|
if (fs.existsSync(p)) return p;
|
|
45
64
|
}
|
|
46
65
|
|
|
47
|
-
|
|
66
|
+
// In dev repo, don't fall back to global dir. Point to local default.
|
|
67
|
+
if (isFrameworkDevelopmentRepo()) {
|
|
68
|
+
return path.join(CWD, FRAMEWORK.CORE_DIR);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
return path.join(HOME, FRAMEWORK.CORE_DIR);
|
|
48
72
|
}
|
|
49
73
|
|
|
50
74
|
export function getFrameworkDir(): string {
|
|
51
|
-
|
|
75
|
+
const testDir = process.env[MCP.TEST_DIR_ENV];
|
|
76
|
+
if (testDir) return testDir;
|
|
52
77
|
return getConfigDir();
|
|
53
78
|
}
|
|
54
79
|
|
|
@@ -105,7 +130,7 @@ export function readActiveTraceId(memoryContent: string): string | null {
|
|
|
105
130
|
try {
|
|
106
131
|
const state = JSON.parse(memoryContent);
|
|
107
132
|
return state.traceId || null;
|
|
108
|
-
} catch {
|
|
133
|
+
} catch (_e) { /* ignore */
|
|
109
134
|
return null;
|
|
110
135
|
}
|
|
111
136
|
}
|
|
@@ -254,7 +279,7 @@ export function acquireMemoryLock(lockPath: string): boolean {
|
|
|
254
279
|
fs.writeFileSync(lockPath, String(Date.now()), { flag: "wx" });
|
|
255
280
|
return true;
|
|
256
281
|
}
|
|
257
|
-
} catch {
|
|
282
|
+
} catch (_e) { /* ignore */
|
|
258
283
|
// Ignore
|
|
259
284
|
}
|
|
260
285
|
}
|
package/src/cli/utils/pkg.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import fs from "fs";
|
|
2
2
|
import path from "path";
|
|
3
|
-
import {
|
|
3
|
+
import { writeJsonFile, writeTextFile } from "./fs.js";
|
|
4
4
|
|
|
5
5
|
export function getPackageVersion() {
|
|
6
6
|
const root = getPackageRoot();
|
|
@@ -21,7 +21,7 @@ export function getPackageManager() {
|
|
|
21
21
|
// Check for lockfiles in target directory
|
|
22
22
|
if (fs.existsSync(path.join(process.cwd(), "pnpm-lock.yaml")) || fs.existsSync(path.join(process.cwd(), "pnpm-workspace.yaml"))) return "pnpm";
|
|
23
23
|
if (fs.existsSync(path.join(process.cwd(), "yarn.lock"))) return "yarn";
|
|
24
|
-
|
|
24
|
+
|
|
25
25
|
return "npm";
|
|
26
26
|
}
|
|
27
27
|
|
|
@@ -74,28 +74,57 @@ export function getDependencyVersions() {
|
|
|
74
74
|
const dependencies = pkg.dependencies || {};
|
|
75
75
|
|
|
76
76
|
return {
|
|
77
|
-
// Backend
|
|
77
|
+
// ── Backend Core ──────────────────────────────────────────
|
|
78
78
|
"fastify": dependencies["fastify"] || "^5.0.0",
|
|
79
79
|
"@fastify/cors": dependencies["@fastify/cors"] || "^11.0.0",
|
|
80
|
+
"@fastify/swagger": dependencies["@fastify/swagger"] || "^9.0.0",
|
|
81
|
+
"@fastify/swagger-ui": dependencies["@fastify/swagger-ui"] || "^5.0.0",
|
|
82
|
+
"@fastify/rate-limit": dependencies["@fastify/rate-limit"] || "^10.0.0",
|
|
83
|
+
"@fastify/static": dependencies["@fastify/static"] || "^8.0.0",
|
|
80
84
|
"zod": dependencies["zod"] || "^3.24.2",
|
|
81
85
|
|
|
86
|
+
// ── Database / ORM ────────────────────────────────────────
|
|
87
|
+
"kysely": dependencies["kysely"] || "^0.27.0",
|
|
88
|
+
"typeorm": dependencies["typeorm"] || "^0.3.0",
|
|
89
|
+
"reflect-metadata": dependencies["reflect-metadata"] || "^0.2.0",
|
|
90
|
+
"pg": dependencies["pg"] || "^8.13.0",
|
|
91
|
+
"better-sqlite3": dependencies["better-sqlite3"] || "^11.0.0",
|
|
92
|
+
|
|
93
|
+
// ── Authentication ────────────────────────────────────────
|
|
94
|
+
"bcrypt": dependencies["bcrypt"] || "^5.1.0",
|
|
95
|
+
"@types/bcrypt": devDependencies["@types/bcrypt"] || "^5.0.0",
|
|
96
|
+
"jsonwebtoken": dependencies["jsonwebtoken"] || "^9.0.0",
|
|
97
|
+
"@types/jsonwebtoken": devDependencies["@types/jsonwebtoken"] || "^9.0.0",
|
|
98
|
+
|
|
99
|
+
// ── Logging ───────────────────────────────────────────────
|
|
100
|
+
"pino": dependencies["pino"] || "^9.0.0",
|
|
101
|
+
"pino-pretty": devDependencies["pino-pretty"] || "^12.0.0",
|
|
102
|
+
|
|
103
|
+
// ── Validation ────────────────────────────────────────────
|
|
104
|
+
"@fastify/type-provider-typebox": dependencies["@fastify/type-provider-typebox"] || "^5.0.0",
|
|
105
|
+
|
|
82
106
|
// Backend devDependencies
|
|
83
107
|
"@types/node": devDependencies["@types/node"] || "^22.13.4",
|
|
84
108
|
"tsx": devDependencies["tsx"] || "^4.19.4",
|
|
85
109
|
"typescript": devDependencies["typescript"] || "^5.9.3",
|
|
86
|
-
"vitest-backend": devDependencies["vitest"] || "^3.0.5",
|
|
110
|
+
"vitest-backend": devDependencies["vitest"] || "^3.0.5",
|
|
87
111
|
|
|
88
|
-
// Frontend
|
|
112
|
+
// ── Frontend Core ─────────────────────────────────────────
|
|
89
113
|
"@vitejs/plugin-react": dependencies["@vitejs/plugin-react"] || "^5.0.0",
|
|
90
114
|
"vite": dependencies["vite"] || "^7.0.0",
|
|
91
115
|
"react": dependencies["react"] || "^19.0.0",
|
|
92
116
|
"react-dom": dependencies["react-dom"] || "^19.0.0",
|
|
93
117
|
"lucide-react": dependencies["lucide-react"] || "^0.468.0",
|
|
94
|
-
|
|
118
|
+
"react-router-dom": dependencies["react-router-dom"] || "^7.0.0",
|
|
119
|
+
"@tanstack/react-query": dependencies["@tanstack/react-query"] || "^5.0.0",
|
|
120
|
+
|
|
95
121
|
// Frontend devDependencies
|
|
96
122
|
"@types/react": devDependencies["@types/react"] || "^19.0.0",
|
|
97
123
|
"@types/react-dom": devDependencies["@types/react-dom"] || "^19.0.0",
|
|
98
|
-
"vitest-frontend": devDependencies["vitest"] || "^3.0.5",
|
|
124
|
+
"vitest-frontend": devDependencies["vitest"] || "^3.0.5",
|
|
125
|
+
|
|
126
|
+
// ── Testing ───────────────────────────────────────────────
|
|
127
|
+
"@playwright/test": devDependencies["@playwright/test"] || "^1.50.0",
|
|
99
128
|
};
|
|
100
129
|
}
|
|
101
130
|
|
|
@@ -113,7 +142,7 @@ interface PackageJson {
|
|
|
113
142
|
}
|
|
114
143
|
|
|
115
144
|
export function mergePackageJson(targetPath: string, sourcePath: string): void {
|
|
116
|
-
let targetPkg: PackageJson = {};
|
|
145
|
+
let targetPkg: PackageJson = {};
|
|
117
146
|
if (fs.existsSync(targetPath)) {
|
|
118
147
|
try {
|
|
119
148
|
targetPkg = JSON.parse(fs.readFileSync(targetPath, "utf8"));
|
|
@@ -123,7 +152,7 @@ export function mergePackageJson(targetPath: string, sourcePath: string): void {
|
|
|
123
152
|
}
|
|
124
153
|
|
|
125
154
|
const sourcePkg: PackageJson = JSON.parse(fs.readFileSync(sourcePath, "utf8"));
|
|
126
|
-
|
|
155
|
+
|
|
127
156
|
type PackageMap = Record<string, string>;
|
|
128
157
|
const sanitizeDeps = (deps: PackageMap | Record<string, unknown> | undefined): Record<string, string> | undefined => {
|
|
129
158
|
if (!deps) return deps as undefined;
|
|
@@ -159,7 +188,7 @@ export function mergePackageJson(targetPath: string, sourcePath: string): void {
|
|
|
159
188
|
// Merge scripts
|
|
160
189
|
const pkgMgr = getPackageManager();
|
|
161
190
|
const runCmd = pkgMgr === "yarn" ? "yarn" : (pkgMgr === "pnpm" ? "pnpm" : "npm run");
|
|
162
|
-
|
|
191
|
+
|
|
163
192
|
targetPkg.scripts = {
|
|
164
193
|
...targetPkg.scripts,
|
|
165
194
|
"enderun:status": "agent-enderun status",
|
|
@@ -242,12 +271,12 @@ export function sanitizeJson(obj: unknown, targetScope = ""): unknown {
|
|
|
242
271
|
if (typeof value === "string" && value.startsWith("agent-enderun-")) {
|
|
243
272
|
finalValue = value.replace("agent-enderun-", `${scopeName}-`);
|
|
244
273
|
}
|
|
245
|
-
|
|
274
|
+
|
|
246
275
|
// Handle agent-enderun -> target (ONLY for the package name)
|
|
247
276
|
if (key === "name" && value === "agent-enderun") {
|
|
248
277
|
finalValue = scopeName;
|
|
249
278
|
}
|
|
250
|
-
|
|
279
|
+
|
|
251
280
|
// Preserve agent-enderun in dependencies and bin
|
|
252
281
|
// (No action needed as finalKey/finalValue default to original)
|
|
253
282
|
|
|
@@ -265,7 +294,7 @@ export function sanitizeJson(obj: unknown, targetScope = ""): unknown {
|
|
|
265
294
|
|
|
266
295
|
export function deepCleanProtocols(dir: string, targetScope = ""): void {
|
|
267
296
|
if (!fs.existsSync(dir)) return;
|
|
268
|
-
|
|
297
|
+
|
|
269
298
|
const entries = fs.readdirSync(dir, { withFileTypes: true });
|
|
270
299
|
for (const entry of entries) {
|
|
271
300
|
const fullPath = path.join(dir, entry.name);
|
|
@@ -3,6 +3,7 @@ import type { AdapterConfig, AdapterId } from "./types.js";
|
|
|
3
3
|
import { addMcpServerToClaude, findClaudeConfigPath } from "../../cli/utils/claude.js";
|
|
4
4
|
import { writeJsonFile } from "../../shared/fs.js";
|
|
5
5
|
import { registerGlobalAntigravityPlugins } from "./shared.js";
|
|
6
|
+
import { unifiedAdapterPath, UNIFIED_ADAPTER_SLUG } from "../../shared/constants.js";
|
|
6
7
|
|
|
7
8
|
/**
|
|
8
9
|
* Mapped Adapter Configurations
|
|
@@ -16,7 +17,7 @@ export const ADAPTER_CONFIGS: Record<AdapterId, AdapterConfig> = {
|
|
|
16
17
|
role: "commander",
|
|
17
18
|
templateDir: ".enderun",
|
|
18
19
|
nestedDirs: ["agents", "rules"],
|
|
19
|
-
agentsDir: ".gemini/agents",
|
|
20
|
+
agentsDir: ".gemini/agents", // Use unified path
|
|
20
21
|
agentsExt: ".md"
|
|
21
22
|
},
|
|
22
23
|
claude: {
|
|
@@ -38,7 +39,7 @@ export const ADAPTER_CONFIGS: Record<AdapterId, AdapterConfig> = {
|
|
|
38
39
|
role: "researcher",
|
|
39
40
|
templateDir: ".enderun",
|
|
40
41
|
nestedDirs: ["rules"],
|
|
41
|
-
agentsDir: ".grok",
|
|
42
|
+
agentsDir: ".grok/agents",
|
|
42
43
|
agentsExt: ".md"
|
|
43
44
|
},
|
|
44
45
|
cursor: {
|
|
@@ -60,7 +61,7 @@ export const ADAPTER_CONFIGS: Record<AdapterId, AdapterConfig> = {
|
|
|
60
61
|
role: "implementer",
|
|
61
62
|
templateDir: ".enderun",
|
|
62
63
|
nestedDirs: ["skills", "rules", "instructions"],
|
|
63
|
-
agentsDir: ".agents/
|
|
64
|
+
agentsDir: ".agents/instructions",
|
|
64
65
|
agentsExt: ".md"
|
|
65
66
|
},
|
|
66
67
|
"antigravity-cli": {
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
import fs from "fs";
|
|
7
7
|
import path from "path";
|
|
8
8
|
import { AgentDefinition } from "./types.js";
|
|
9
|
+
import { getPackageRoot } from "../../cli/utils/pkg.js";
|
|
9
10
|
|
|
10
11
|
// Import individual agent definitions
|
|
11
12
|
import { manager } from "./registry/manager.js";
|
|
@@ -124,7 +125,7 @@ function resolveModel(
|
|
|
124
125
|
}
|
|
125
126
|
|
|
126
127
|
/** Build a flat system prompt string from structured instructions */
|
|
127
|
-
function buildSystemPrompt(ag: AgentDefinition, baseKnowledgeDir: string = path.join(
|
|
128
|
+
function buildSystemPrompt(ag: AgentDefinition, baseKnowledgeDir: string = path.join(getPackageRoot(), "templates/standards")): string {
|
|
128
129
|
const lines: string[] = [
|
|
129
130
|
"# Identity",
|
|
130
131
|
ag.instructions.identity,
|
|
@@ -10,7 +10,7 @@ export const analyst: AgentDefinition = {
|
|
|
10
10
|
"Specs verification and Contract Audit specialist. " +
|
|
11
11
|
"Audits truth and contracts within the Army.",
|
|
12
12
|
capability: 9,
|
|
13
|
-
tier: "
|
|
13
|
+
tier: "recon",
|
|
14
14
|
tags: ["core", "strategy"],
|
|
15
15
|
stateMachine: STATE_MACHINE,
|
|
16
16
|
tools: [
|
|
@@ -42,5 +42,6 @@ export const architect: AgentDefinition = {
|
|
|
42
42
|
"CONTRACT STABILITY: Validate 'contract.version.json' consistency before and after every schema change.",
|
|
43
43
|
"GOVERNANCE READ: Always read architecture governance docs before making design decisions.",
|
|
44
44
|
],
|
|
45
|
+
knowledgeFiles: ["architecture-standards.md"],
|
|
45
46
|
},
|
|
46
47
|
};
|
|
@@ -7,8 +7,8 @@ export const backend: AgentDefinition = {
|
|
|
7
7
|
displayName: "Backend Specialist",
|
|
8
8
|
role: "Backend Development",
|
|
9
9
|
description:
|
|
10
|
-
"Server logic
|
|
11
|
-
"Owns the
|
|
10
|
+
"Server logic and API implementation specialist. " +
|
|
11
|
+
"Owns the API contracts and business logic implementation.",
|
|
12
12
|
capability: 9,
|
|
13
13
|
tier: "core",
|
|
14
14
|
tags: ["core", "logic"],
|
|
@@ -28,20 +28,21 @@ export const backend: AgentDefinition = {
|
|
|
28
28
|
instructions: {
|
|
29
29
|
identity: "Backend Domain Engineer and Database Management Owner",
|
|
30
30
|
mission:
|
|
31
|
-
"Deliver reliable, type-safe server logic that upholds
|
|
31
|
+
"Deliver reliable, type-safe server logic that upholds Kysely/TypeORM " +
|
|
32
32
|
"data access and strict repository/service separation.",
|
|
33
33
|
chainOfThought: "1. Analyze: Read the task, context, and relevant governance documents.\n" +
|
|
34
34
|
"2. Validate: Cross-reference with project rules, contracts, and architecture standards.\n" +
|
|
35
35
|
"3. Plan: Break down the task into small, atomic, and verifiable steps.\n" +
|
|
36
36
|
"4. Execute: Perform the task using approved tools, adhering to quality and security constraints.",
|
|
37
37
|
rules: [
|
|
38
|
-
"BRANDED TYPES:
|
|
39
|
-
"KYSELY ONLY: All database access via Kysely — raw SQL strings are unconditionally forbidden.",
|
|
38
|
+
"STRICT BRANDED TYPES: Absolute enforcement of branded types for ALL domain IDs (e.g., UserId, ProjectId). Raw 'string' or 'number' for IDs is a Nizam violation and will cause task rejection.",
|
|
39
|
+
"KYSELY ONLY: All database access via Kysely — raw SQL strings are unconditionally forbidden. No exceptions.",
|
|
40
40
|
"LAYER SEPARATION: Isolate queries in repository/service layers — direct DB calls in controllers are forbidden.",
|
|
41
41
|
"ERROR HANDLING: Wrap all async logic in robust try/catch blocks with typed error responses.",
|
|
42
|
+
"PII PROTECTION: Never log or store real user data. Use anonymized hashes for debugging tasks.",
|
|
42
43
|
"HIGH-RISK OPS: Refuse User/Role management, bulk deletes, schema alterations, and billing changes autonomously. " +
|
|
43
44
|
"Return a standard refusal, send a managerApproval request to @manager, and shift to WAITING status.",
|
|
44
45
|
],
|
|
45
|
-
knowledgeFiles: ["
|
|
46
|
+
knowledgeFiles: ["crud-governance.md", "kysely-standards.md", "typeorm-standards.md"],
|
|
46
47
|
},
|
|
47
48
|
};
|
|
@@ -7,8 +7,8 @@ export const database: AgentDefinition = {
|
|
|
7
7
|
displayName: "Database Specialist",
|
|
8
8
|
role: "Data Management",
|
|
9
9
|
description:
|
|
10
|
-
"SQL Schema design and
|
|
11
|
-
"
|
|
10
|
+
"SQL Schema design, migration, and query optimization specialist. " +
|
|
11
|
+
"Owns the database schema, migrations, and data integrity.",
|
|
12
12
|
capability: 9,
|
|
13
13
|
tier: "core",
|
|
14
14
|
tags: ["core", "data"],
|
|
@@ -21,6 +21,7 @@ export const database: AgentDefinition = {
|
|
|
21
21
|
"list_dir",
|
|
22
22
|
"grep_search",
|
|
23
23
|
"read_project_memory",
|
|
24
|
+
"send_agent_message",
|
|
24
25
|
],
|
|
25
26
|
instructions: {
|
|
26
27
|
identity: "Database Architect and Migration Integrity Owner",
|
|
@@ -37,6 +38,6 @@ export const database: AgentDefinition = {
|
|
|
37
38
|
"DETERMINISTIC MIGRATIONS: Every migration must be reversible and produce identical results across environments.",
|
|
38
39
|
"PERFORMANCE FIRST: Design indexes proactively — never retroactively after a performance incident.",
|
|
39
40
|
],
|
|
40
|
-
knowledgeFiles: ["
|
|
41
|
+
knowledgeFiles: ["kysely-standards.md", "typeorm-standards.md", "quality-standards.md"],
|
|
41
42
|
},
|
|
42
43
|
};
|
|
@@ -37,6 +37,6 @@ export const devops: AgentDefinition = {
|
|
|
37
37
|
"ENVIRONMENT ISOLATION: All variables managed via '.env' — hardcoded secrets trigger immediate escalation.",
|
|
38
38
|
"NO UNTRACKED DEPLOYMENTS: Every deployment must be declared, versioned, and traceable.",
|
|
39
39
|
],
|
|
40
|
-
knowledgeFiles: ["
|
|
40
|
+
knowledgeFiles: ["deployment-standards.md"],
|
|
41
41
|
},
|
|
42
42
|
};
|
|
@@ -40,8 +40,9 @@ export const manager: AgentDefinition = {
|
|
|
40
40
|
"4. Execute: Delegate sub-tasks to appropriate specialists and verify compliance at each step.",
|
|
41
41
|
rules: [
|
|
42
42
|
"ABSOLUTE COMPLIANCE: Freeze project and block task on any Nizam violation " +
|
|
43
|
-
"(e.g. 'any' type, 'console.log',
|
|
44
|
-
"
|
|
43
|
+
"(e.g. 'any' type, 'console.log', PII leakage, or raw ID usage). No further action until breach is purged.",
|
|
44
|
+
"PII AUDIT: Proactively scan all specialist logs and memories for PII (Emails, Names). Purge immediately if detected.",
|
|
45
|
+
"PHASE WALL: Gate every phase transition — reject if even one TODO, lint error, or unbranded ID exists in scope.",
|
|
45
46
|
"ORCHESTRATION AUDIT: Audit every specialist message for constitutional compliance before delegating next sub-task.",
|
|
46
47
|
"STRATEGIC RECIPES: Direct specialists to '.enderun/prompts/' for all refactor, bug-fix, or feature tasks.",
|
|
47
48
|
"SURGICAL PRECISION: Reject any full-file overwrite proposal unless the file is under 50 lines.",
|
|
@@ -10,7 +10,7 @@ export const native: AgentDefinition = {
|
|
|
10
10
|
"Desktop apps and system-level logic specialist. " +
|
|
11
11
|
"Handles OS deep layers with paramount security.",
|
|
12
12
|
capability: 9,
|
|
13
|
-
tier: "
|
|
13
|
+
tier: "recon",
|
|
14
14
|
tags: ["core", "native"],
|
|
15
15
|
stateMachine: STATE_MACHINE,
|
|
16
16
|
tools: [
|