atabey 0.0.37 → 0.1.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/ATABEY.md +1 -1
- package/PRIVACY.md +2 -2
- package/README.md +58 -46
- package/bin/completion.sh +1 -1
- package/dist/atabey/src/cli/commands/api.d.ts +1 -0
- package/dist/atabey/src/cli/commands/api.js +90 -0
- package/dist/atabey/src/cli/commands/api.js.map +1 -0
- package/dist/atabey/src/cli/commands/audit.d.ts +9 -0
- package/dist/atabey/src/cli/commands/audit.js +73 -0
- package/dist/atabey/src/cli/commands/audit.js.map +1 -0
- package/dist/atabey/src/cli/commands/check.js +15 -6
- package/dist/atabey/src/cli/commands/check.js.map +1 -1
- package/dist/atabey/src/cli/commands/contract.js +51 -8
- package/dist/atabey/src/cli/commands/contract.js.map +1 -1
- package/dist/atabey/src/cli/commands/coverage.js +17 -12
- package/dist/atabey/src/cli/commands/coverage.js.map +1 -1
- package/dist/atabey/src/cli/commands/dashboard.js +101 -16
- package/dist/atabey/src/cli/commands/dashboard.js.map +1 -1
- package/dist/atabey/src/cli/commands/db.d.ts +1 -0
- package/dist/atabey/src/cli/commands/db.js +58 -0
- package/dist/atabey/src/cli/commands/db.js.map +1 -0
- package/dist/atabey/src/cli/commands/hitl.js +2 -1
- package/dist/atabey/src/cli/commands/hitl.js.map +1 -1
- package/dist/atabey/src/cli/commands/index-codebase.js +10 -0
- package/dist/atabey/src/cli/commands/index-codebase.js.map +1 -1
- package/dist/atabey/src/cli/commands/init/scaffold-app.js +82 -7
- package/dist/atabey/src/cli/commands/init/scaffold-app.js.map +1 -1
- package/dist/atabey/src/cli/commands/init/scaffold-core.js +3 -3
- package/dist/atabey/src/cli/commands/init/scaffold-core.js.map +1 -1
- package/dist/atabey/src/cli/commands/init/scaffold-docs.js +1 -1
- package/dist/atabey/src/cli/commands/init/scaffold-docs.js.map +1 -1
- package/dist/atabey/src/cli/commands/init/scaffold-ops.js +47 -7
- package/dist/atabey/src/cli/commands/init/scaffold-ops.js.map +1 -1
- package/dist/atabey/src/cli/commands/init/scaffold-standards.js +8 -15
- package/dist/atabey/src/cli/commands/init/scaffold-standards.js.map +1 -1
- package/dist/atabey/src/cli/commands/init.js +28 -62
- package/dist/atabey/src/cli/commands/init.js.map +1 -1
- package/dist/atabey/src/cli/commands/lint.d.ts +2 -1
- package/dist/atabey/src/cli/commands/lint.js +20 -1
- package/dist/atabey/src/cli/commands/lint.js.map +1 -1
- package/dist/atabey/src/cli/commands/mcp.js +71 -33
- package/dist/atabey/src/cli/commands/mcp.js.map +1 -1
- package/dist/atabey/src/cli/commands/orchestrate.d.ts +4 -4
- package/dist/atabey/src/cli/commands/orchestrate.js +1 -1
- package/dist/atabey/src/cli/commands/orchestrate.js.map +1 -1
- package/dist/atabey/src/cli/commands/plan.d.ts +1 -1
- package/dist/atabey/src/cli/commands/plan.js +10 -0
- package/dist/atabey/src/cli/commands/plan.js.map +1 -1
- package/dist/atabey/src/cli/commands/quickstart.js +1 -1
- package/dist/atabey/src/cli/commands/quickstart.js.map +1 -1
- package/dist/atabey/src/cli/commands/script.js +4 -0
- package/dist/atabey/src/cli/commands/script.js.map +1 -1
- package/dist/atabey/src/cli/commands/secrets.d.ts +1 -0
- package/dist/atabey/src/cli/commands/secrets.js +146 -0
- package/dist/atabey/src/cli/commands/secrets.js.map +1 -0
- package/dist/atabey/src/cli/commands/worktree.d.ts +10 -0
- package/dist/atabey/src/cli/commands/worktree.js +90 -0
- package/dist/atabey/src/cli/commands/worktree.js.map +1 -0
- package/dist/atabey/src/cli/index.js +75 -16
- package/dist/atabey/src/cli/index.js.map +1 -1
- package/dist/atabey/src/cli/platforms/core.d.ts +0 -1
- package/dist/atabey/src/cli/platforms/core.js +0 -14
- package/dist/atabey/src/cli/platforms/core.js.map +1 -1
- package/dist/atabey/src/cli/platforms/index.d.ts +2 -2
- package/dist/atabey/src/cli/platforms/index.js +1 -1
- package/dist/atabey/src/cli/platforms/index.js.map +1 -1
- package/dist/atabey/src/cli/platforms/paths.d.ts +0 -2
- package/dist/atabey/src/cli/platforms/paths.js +1 -8
- package/dist/atabey/src/cli/platforms/paths.js.map +1 -1
- package/dist/atabey/src/cli/platforms/scaffold.js +1 -1
- package/dist/atabey/src/cli/platforms/scaffold.js.map +1 -1
- package/dist/atabey/src/cli/utils/claude.js +6 -0
- package/dist/atabey/src/cli/utils/claude.js.map +1 -1
- package/dist/atabey/src/cli/utils/compliance.d.ts +1 -1
- package/dist/atabey/src/cli/utils/compliance.js +33 -20
- package/dist/atabey/src/cli/utils/compliance.js.map +1 -1
- package/dist/atabey/src/cli/utils/fs.js +1 -1
- package/dist/atabey/src/cli/utils/fs.js.map +1 -1
- package/dist/atabey/src/cli/utils/i18n.js +2 -2
- package/dist/atabey/src/cli/utils/i18n.js.map +1 -1
- package/dist/atabey/src/cli/utils/memory.js +27 -16
- package/dist/atabey/src/cli/utils/memory.js.map +1 -1
- package/dist/atabey/src/cli/utils/pkg.js +5 -2
- package/dist/atabey/src/cli/utils/pkg.js.map +1 -1
- package/dist/atabey/src/cli/utils/quality.d.ts +1 -1
- package/dist/atabey/src/cli/utils/ui.d.ts +1 -1
- package/dist/atabey/src/cli/utils/ui.js +1 -1
- package/dist/atabey/src/modules/agents/definitions.d.ts +1 -1
- package/dist/atabey/src/modules/agents/definitions.js +13 -9
- package/dist/atabey/src/modules/agents/definitions.js.map +1 -1
- package/dist/atabey/src/modules/agents/registry/analyst.js +0 -2
- package/dist/atabey/src/modules/agents/registry/analyst.js.map +1 -1
- package/dist/atabey/src/modules/agents/registry/architect.js +0 -2
- package/dist/atabey/src/modules/agents/registry/architect.js.map +1 -1
- package/dist/atabey/src/modules/agents/registry/backend.js +0 -2
- package/dist/atabey/src/modules/agents/registry/backend.js.map +1 -1
- package/dist/atabey/src/modules/agents/registry/database.js +0 -2
- package/dist/atabey/src/modules/agents/registry/database.js.map +1 -1
- package/dist/atabey/src/modules/agents/registry/devops.js +0 -2
- package/dist/atabey/src/modules/agents/registry/devops.js.map +1 -1
- package/dist/atabey/src/modules/agents/registry/explorer.js +0 -2
- package/dist/atabey/src/modules/agents/registry/explorer.js.map +1 -1
- package/dist/atabey/src/modules/agents/registry/frontend.js +0 -2
- package/dist/atabey/src/modules/agents/registry/frontend.js.map +1 -1
- package/dist/atabey/src/modules/agents/registry/git.js +0 -2
- package/dist/atabey/src/modules/agents/registry/git.js.map +1 -1
- package/dist/atabey/src/modules/agents/registry/manager.js +0 -3
- package/dist/atabey/src/modules/agents/registry/manager.js.map +1 -1
- package/dist/atabey/src/modules/agents/registry/mobile.js +0 -2
- package/dist/atabey/src/modules/agents/registry/mobile.js.map +1 -1
- package/dist/atabey/src/modules/agents/registry/native.js +0 -2
- package/dist/atabey/src/modules/agents/registry/native.js.map +1 -1
- package/dist/atabey/src/modules/agents/registry/quality.js +3 -5
- package/dist/atabey/src/modules/agents/registry/quality.js.map +1 -1
- package/dist/atabey/src/modules/agents/registry/security.js +0 -2
- package/dist/atabey/src/modules/agents/registry/security.js.map +1 -1
- package/dist/atabey/src/modules/agents/types.d.ts +0 -1
- package/dist/atabey/src/modules/audit/export.d.ts +22 -0
- package/dist/atabey/src/modules/audit/export.js +58 -0
- package/dist/atabey/src/modules/audit/export.js.map +1 -0
- package/dist/atabey/src/modules/contracts/api.d.ts +2 -2
- package/dist/atabey/src/modules/engines/agent-executor.js +37 -0
- package/dist/atabey/src/modules/engines/agent-executor.js.map +1 -1
- package/dist/atabey/src/modules/engines/evaluation-engine.js +10 -0
- package/dist/atabey/src/modules/engines/evaluation-engine.js.map +1 -1
- package/dist/atabey/src/modules/engines/quality-gate.js +2 -2
- package/dist/atabey/src/modules/engines/quality-gate.js.map +1 -1
- package/dist/atabey/src/modules/engines/routing-engine.js +1 -1
- package/dist/atabey/src/modules/engines/routing-engine.js.map +1 -1
- package/dist/atabey/src/modules/memory/code-graph.d.ts +44 -0
- package/dist/atabey/src/modules/memory/code-graph.js +180 -0
- package/dist/atabey/src/modules/memory/code-graph.js.map +1 -0
- package/dist/atabey/src/modules/memory/context-assembler.d.ts +50 -0
- package/dist/atabey/src/modules/memory/context-assembler.js +146 -0
- package/dist/atabey/src/modules/memory/context-assembler.js.map +1 -0
- package/dist/atabey/src/modules/providers/definitions.js +78 -41
- package/dist/atabey/src/modules/providers/definitions.js.map +1 -1
- package/dist/atabey/src/modules/providers/shared.d.ts +1 -1
- package/dist/atabey/src/modules/providers/shared.js +34 -15
- package/dist/atabey/src/modules/providers/shared.js.map +1 -1
- package/dist/atabey/src/modules/providers/types.d.ts +0 -4
- package/dist/atabey/src/modules/runtime/adapters/headless-cli.d.ts +35 -0
- package/dist/atabey/src/modules/runtime/adapters/headless-cli.js +115 -0
- package/dist/atabey/src/modules/runtime/adapters/headless-cli.js.map +1 -0
- package/dist/atabey/src/modules/runtime/adapters/index.d.ts +2 -0
- package/dist/atabey/src/modules/runtime/adapters/index.js +3 -0
- package/dist/atabey/src/modules/runtime/adapters/index.js.map +1 -0
- package/dist/atabey/src/modules/runtime/adapters/types.d.ts +48 -0
- package/dist/atabey/src/modules/runtime/adapters/types.js +12 -0
- package/dist/atabey/src/modules/runtime/adapters/types.js.map +1 -0
- package/dist/atabey/src/modules/runtime/agent-runtime.d.ts +54 -0
- package/dist/atabey/src/modules/runtime/agent-runtime.js +203 -0
- package/dist/atabey/src/modules/runtime/agent-runtime.js.map +1 -0
- package/dist/atabey/src/modules/runtime/dispatcher.d.ts +75 -0
- package/dist/atabey/src/modules/runtime/dispatcher.js +255 -0
- package/dist/atabey/src/modules/runtime/dispatcher.js.map +1 -0
- package/dist/atabey/src/modules/runtime/evidence.d.ts +39 -0
- package/dist/atabey/src/modules/runtime/evidence.js +53 -0
- package/dist/atabey/src/modules/runtime/evidence.js.map +1 -0
- package/dist/atabey/src/modules/runtime/worktree.d.ts +44 -0
- package/dist/atabey/src/modules/runtime/worktree.js +259 -0
- package/dist/atabey/src/modules/runtime/worktree.js.map +1 -0
- package/dist/atabey/src/modules/skills/adapter-skills.d.ts +0 -29
- package/dist/atabey/src/modules/skills/adapter-skills.js +0 -61
- package/dist/atabey/src/modules/skills/adapter-skills.js.map +1 -1
- package/dist/atabey/src/modules/skills/definitions.d.ts +1 -1
- package/dist/atabey/src/modules/skills/definitions.js +8 -8
- package/dist/atabey/src/schema/agent-lifecycle.d.ts +36 -0
- package/dist/atabey/src/schema/agent-lifecycle.js +96 -0
- package/dist/atabey/src/schema/agent-lifecycle.js.map +1 -0
- package/dist/atabey-mcp/src/mcp/utils/ast-scan.d.ts +21 -0
- package/dist/atabey-mcp/src/mcp/utils/ast-scan.js +64 -0
- package/dist/atabey-mcp/src/mcp/utils/ast-scan.js.map +1 -0
- package/dist/atabey-mcp/src/mcp/utils/auth.d.ts +73 -0
- package/dist/atabey-mcp/src/mcp/utils/auth.js +316 -0
- package/dist/atabey-mcp/src/mcp/utils/auth.js.map +1 -0
- package/dist/atabey-mcp/src/mcp/utils/auto-rollback.d.ts +83 -0
- package/dist/atabey-mcp/src/mcp/utils/auto-rollback.js +418 -0
- package/dist/atabey-mcp/src/mcp/utils/auto-rollback.js.map +1 -0
- package/dist/atabey-mcp/src/mcp/utils/context-optimizer.d.ts +85 -0
- package/dist/atabey-mcp/src/mcp/utils/context-optimizer.js +296 -0
- package/dist/atabey-mcp/src/mcp/utils/context-optimizer.js.map +1 -0
- package/dist/atabey-mcp/src/mcp/utils/discipline.d.ts +72 -0
- package/dist/atabey-mcp/src/mcp/utils/discipline.js +385 -0
- package/dist/atabey-mcp/src/mcp/utils/discipline.js.map +1 -0
- package/dist/atabey-mcp/src/mcp/utils/finops.d.ts +81 -0
- package/dist/atabey-mcp/src/mcp/utils/finops.js +274 -0
- package/dist/atabey-mcp/src/mcp/utils/finops.js.map +1 -0
- package/dist/atabey-mcp/src/mcp/utils/loop-detector.d.ts +106 -0
- package/dist/atabey-mcp/src/mcp/utils/loop-detector.js +419 -0
- package/dist/atabey-mcp/src/mcp/utils/loop-detector.js.map +1 -0
- package/dist/atabey-mcp/src/mcp/utils/rules-engine.d.ts +80 -0
- package/dist/atabey-mcp/src/mcp/utils/rules-engine.js +296 -0
- package/dist/atabey-mcp/src/mcp/utils/rules-engine.js.map +1 -0
- package/dist/atabey-mcp/src/mcp/utils/telemetry-streamer.d.ts +133 -0
- package/dist/atabey-mcp/src/mcp/utils/telemetry-streamer.js +400 -0
- package/dist/atabey-mcp/src/mcp/utils/telemetry-streamer.js.map +1 -0
- package/dist/atabey-mcp/src/shared/logger.d.ts +1 -0
- package/dist/atabey-mcp/src/shared/logger.js +2 -0
- package/dist/atabey-mcp/src/shared/logger.js.map +1 -0
- package/dist/atabey-mcp/src/shared/pii.d.ts +1 -0
- package/dist/atabey-mcp/src/shared/pii.js +2 -0
- package/dist/atabey-mcp/src/shared/pii.js.map +1 -0
- package/dist/atabey-mcp/src/shared/storage.d.ts +2 -0
- package/dist/atabey-mcp/src/shared/storage.js +3 -0
- package/dist/atabey-mcp/src/shared/storage.js.map +1 -0
- package/dist/shared/src/agent-identity.d.ts +1 -0
- package/dist/shared/src/agent-identity.js +2 -0
- package/dist/shared/src/agent-identity.js.map +1 -0
- package/dist/shared/src/api-catalog.d.ts +1 -0
- package/dist/shared/src/api-catalog.js +2 -0
- package/dist/shared/src/api-catalog.js.map +1 -0
- package/dist/shared/src/audit-chain.d.ts +1 -51
- package/dist/shared/src/audit-chain.js +1 -84
- package/dist/shared/src/audit-chain.js.map +1 -1
- package/dist/shared/src/audit.d.ts +1 -113
- package/dist/shared/src/audit.js +1 -284
- package/dist/shared/src/audit.js.map +1 -1
- package/dist/shared/src/constants.d.ts +1 -152
- package/dist/shared/src/constants.js +1 -215
- package/dist/shared/src/constants.js.map +1 -1
- package/dist/shared/src/database.d.ts +1 -5
- package/dist/shared/src/database.js +1 -12
- package/dist/shared/src/database.js.map +1 -1
- package/dist/shared/src/errors.d.ts +1 -46
- package/dist/shared/src/errors.js +1 -68
- package/dist/shared/src/errors.js.map +1 -1
- package/dist/shared/src/file-lock.d.ts +1 -88
- package/dist/shared/src/file-lock.js +1 -250
- package/dist/shared/src/file-lock.js.map +1 -1
- package/dist/shared/src/fs.d.ts +1 -9
- package/dist/shared/src/fs.js +1 -53
- package/dist/shared/src/fs.js.map +1 -1
- package/dist/shared/src/index.d.ts +2 -22
- package/dist/shared/src/index.js +2 -22
- package/dist/shared/src/index.js.map +1 -1
- package/dist/shared/src/job-queue.d.ts +1 -53
- package/dist/shared/src/job-queue.js +1 -126
- package/dist/shared/src/job-queue.js.map +1 -1
- package/dist/shared/src/lock.d.ts +1 -82
- package/dist/shared/src/lock.js +1 -158
- package/dist/shared/src/lock.js.map +1 -1
- package/dist/shared/src/logger.d.ts +1 -30
- package/dist/shared/src/logger.js +1 -126
- package/dist/shared/src/logger.js.map +1 -1
- package/dist/shared/src/memory-prune.d.ts +1 -0
- package/dist/shared/src/memory-prune.js +2 -0
- package/dist/shared/src/memory-prune.js.map +1 -0
- package/dist/shared/src/migrations.d.ts +1 -0
- package/dist/shared/src/migrations.js +2 -0
- package/dist/shared/src/migrations.js.map +1 -0
- package/dist/shared/src/modules/agent/agent-identity.d.ts +34 -0
- package/dist/shared/src/modules/agent/agent-identity.js +77 -0
- package/dist/shared/src/modules/agent/agent-identity.js.map +1 -0
- package/dist/shared/src/modules/agent/api-catalog.d.ts +57 -0
- package/dist/shared/src/modules/agent/api-catalog.js +254 -0
- package/dist/shared/src/modules/agent/api-catalog.js.map +1 -0
- package/dist/shared/src/modules/agent/index.d.ts +3 -0
- package/dist/shared/src/modules/agent/index.js +4 -0
- package/dist/shared/src/modules/agent/index.js.map +1 -0
- package/dist/shared/src/modules/agent/tokenizer.d.ts +54 -0
- package/dist/shared/src/modules/agent/tokenizer.js +272 -0
- package/dist/shared/src/modules/agent/tokenizer.js.map +1 -0
- package/dist/shared/src/modules/concurrency/file-lock.d.ts +93 -0
- package/dist/shared/src/modules/concurrency/file-lock.js +240 -0
- package/dist/shared/src/modules/concurrency/file-lock.js.map +1 -0
- package/dist/shared/src/modules/concurrency/index.d.ts +6 -0
- package/dist/shared/src/modules/concurrency/index.js +7 -0
- package/dist/shared/src/modules/concurrency/index.js.map +1 -0
- package/dist/shared/src/modules/concurrency/job-queue.d.ts +76 -0
- package/dist/shared/src/modules/concurrency/job-queue.js +200 -0
- package/dist/shared/src/modules/concurrency/job-queue.js.map +1 -0
- package/dist/shared/src/modules/concurrency/lock.d.ts +82 -0
- package/dist/shared/src/modules/concurrency/lock.js +159 -0
- package/dist/shared/src/modules/concurrency/lock.js.map +1 -0
- package/dist/shared/src/modules/concurrency/resilience.d.ts +84 -0
- package/dist/shared/src/modules/concurrency/resilience.js +217 -0
- package/dist/shared/src/modules/concurrency/resilience.js.map +1 -0
- package/dist/shared/src/modules/concurrency/worker-pool.d.ts +52 -0
- package/dist/shared/src/modules/concurrency/worker-pool.js +229 -0
- package/dist/shared/src/modules/concurrency/worker-pool.js.map +1 -0
- package/dist/shared/src/modules/concurrency/worker-thread.d.ts +21 -0
- package/dist/shared/src/modules/concurrency/worker-thread.js +67 -0
- package/dist/shared/src/modules/concurrency/worker-thread.js.map +1 -0
- package/dist/shared/src/modules/index.d.ts +14 -0
- package/dist/shared/src/modules/index.js +15 -0
- package/dist/shared/src/modules/index.js.map +1 -0
- package/dist/shared/src/modules/observability/audit-chain.d.ts +80 -0
- package/dist/shared/src/modules/observability/audit-chain.js +262 -0
- package/dist/shared/src/modules/observability/audit-chain.js.map +1 -0
- package/dist/shared/src/modules/observability/audit.d.ts +121 -0
- package/dist/shared/src/modules/observability/audit.js +322 -0
- package/dist/shared/src/modules/observability/audit.js.map +1 -0
- package/dist/shared/src/modules/observability/index.d.ts +4 -0
- package/dist/shared/src/modules/observability/index.js +5 -0
- package/dist/shared/src/modules/observability/index.js.map +1 -0
- package/dist/shared/src/modules/observability/logger.d.ts +31 -0
- package/dist/shared/src/modules/observability/logger.js +153 -0
- package/dist/shared/src/modules/observability/logger.js.map +1 -0
- package/dist/shared/src/modules/observability/otel.d.ts +39 -0
- package/dist/shared/src/modules/observability/otel.js +93 -0
- package/dist/shared/src/modules/observability/otel.js.map +1 -0
- package/dist/shared/src/modules/primitives/constants.d.ts +150 -0
- package/dist/shared/src/modules/primitives/constants.js +212 -0
- package/dist/shared/src/modules/primitives/constants.js.map +1 -0
- package/dist/shared/src/modules/primitives/errors.d.ts +46 -0
- package/dist/shared/src/modules/primitives/errors.js +69 -0
- package/dist/shared/src/modules/primitives/errors.js.map +1 -0
- package/dist/shared/src/modules/primitives/fs.d.ts +9 -0
- package/dist/shared/src/modules/primitives/fs.js +54 -0
- package/dist/shared/src/modules/primitives/fs.js.map +1 -0
- package/dist/shared/src/modules/primitives/index.d.ts +7 -0
- package/dist/shared/src/modules/primitives/index.js +8 -0
- package/dist/shared/src/modules/primitives/index.js.map +1 -0
- package/dist/shared/src/modules/primitives/outbound-http.d.ts +32 -0
- package/dist/shared/src/modules/primitives/outbound-http.js +88 -0
- package/dist/shared/src/modules/primitives/outbound-http.js.map +1 -0
- package/dist/shared/src/modules/primitives/string.d.ts +1 -0
- package/dist/shared/src/modules/primitives/string.js +30 -0
- package/dist/shared/src/modules/primitives/string.js.map +1 -0
- package/dist/shared/src/modules/primitives/time.d.ts +5 -0
- package/dist/shared/src/modules/primitives/time.js +35 -0
- package/dist/shared/src/modules/primitives/time.js.map +1 -0
- package/dist/shared/src/modules/primitives/types.d.ts +27 -0
- package/dist/shared/src/modules/primitives/types.js +17 -0
- package/dist/shared/src/modules/primitives/types.js.map +1 -0
- package/dist/shared/src/modules/sandbox/index.d.ts +3 -0
- package/dist/shared/src/modules/sandbox/index.js +4 -0
- package/dist/shared/src/modules/sandbox/index.js.map +1 -0
- package/dist/shared/src/modules/sandbox/sandbox-fs.d.ts +28 -0
- package/dist/shared/src/modules/sandbox/sandbox-fs.js +143 -0
- package/dist/shared/src/modules/sandbox/sandbox-fs.js.map +1 -0
- package/dist/shared/src/modules/sandbox/sandbox-runtime.d.ts +78 -0
- package/dist/shared/src/modules/sandbox/sandbox-runtime.js +282 -0
- package/dist/shared/src/modules/sandbox/sandbox-runtime.js.map +1 -0
- package/dist/shared/src/modules/sandbox/sandbox.d.ts +54 -0
- package/dist/shared/src/modules/sandbox/sandbox.js +179 -0
- package/dist/shared/src/modules/sandbox/sandbox.js.map +1 -0
- package/dist/shared/src/modules/security/index.d.ts +5 -0
- package/dist/shared/src/modules/security/index.js +6 -0
- package/dist/shared/src/modules/security/index.js.map +1 -0
- package/dist/shared/src/modules/security/pii.d.ts +70 -0
- package/dist/shared/src/modules/security/pii.js +276 -0
- package/dist/shared/src/modules/security/pii.js.map +1 -0
- package/dist/shared/src/modules/security/policy-gate.d.ts +42 -0
- package/dist/shared/src/modules/security/policy-gate.js +172 -0
- package/dist/shared/src/modules/security/policy-gate.js.map +1 -0
- package/dist/shared/src/modules/security/retention.d.ts +68 -0
- package/dist/shared/src/modules/security/retention.js +218 -0
- package/dist/shared/src/modules/security/retention.js.map +1 -0
- package/dist/shared/src/modules/security/secrets.d.ts +99 -0
- package/dist/shared/src/modules/security/secrets.js +371 -0
- package/dist/shared/src/modules/security/secrets.js.map +1 -0
- package/dist/shared/src/modules/security/tls.d.ts +87 -0
- package/dist/shared/src/modules/security/tls.js +154 -0
- package/dist/shared/src/modules/security/tls.js.map +1 -0
- package/dist/shared/src/modules/storage/database.d.ts +6 -0
- package/dist/shared/src/modules/storage/database.js +16 -0
- package/dist/shared/src/modules/storage/database.js.map +1 -0
- package/dist/shared/src/modules/storage/index.d.ts +4 -0
- package/dist/shared/src/modules/storage/index.js +5 -0
- package/dist/shared/src/modules/storage/index.js.map +1 -0
- package/dist/shared/src/modules/storage/memory-prune.d.ts +18 -0
- package/dist/shared/src/modules/storage/memory-prune.js +48 -0
- package/dist/shared/src/modules/storage/memory-prune.js.map +1 -0
- package/dist/shared/src/modules/storage/migrations.d.ts +69 -0
- package/dist/shared/src/modules/storage/migrations.js +394 -0
- package/dist/shared/src/modules/storage/migrations.js.map +1 -0
- package/dist/shared/src/modules/storage/storage.d.ts +341 -0
- package/dist/shared/src/modules/storage/storage.js +1004 -0
- package/dist/shared/src/modules/storage/storage.js.map +1 -0
- package/dist/shared/src/otel.d.ts +1 -0
- package/dist/shared/src/otel.js +2 -0
- package/dist/shared/src/otel.js.map +1 -0
- package/dist/shared/src/outbound-http.d.ts +1 -0
- package/dist/shared/src/outbound-http.js +2 -0
- package/dist/shared/src/outbound-http.js.map +1 -0
- package/dist/shared/src/pii.d.ts +1 -69
- package/dist/shared/src/pii.js +1 -219
- package/dist/shared/src/pii.js.map +1 -1
- package/dist/shared/src/policy-gate.d.ts +1 -42
- package/dist/shared/src/policy-gate.js +1 -147
- package/dist/shared/src/policy-gate.js.map +1 -1
- package/dist/shared/src/resilience.d.ts +1 -84
- package/dist/shared/src/resilience.js +1 -216
- package/dist/shared/src/resilience.js.map +1 -1
- package/dist/shared/src/retention.d.ts +1 -63
- package/dist/shared/src/retention.js +1 -170
- package/dist/shared/src/retention.js.map +1 -1
- package/dist/shared/src/sandbox-fs.d.ts +1 -28
- package/dist/shared/src/sandbox-fs.js +1 -149
- package/dist/shared/src/sandbox-fs.js.map +1 -1
- package/dist/shared/src/sandbox-runtime.d.ts +1 -85
- package/dist/shared/src/sandbox-runtime.js +1 -249
- package/dist/shared/src/sandbox-runtime.js.map +1 -1
- package/dist/shared/src/sandbox.d.ts +1 -54
- package/dist/shared/src/sandbox.js +1 -178
- package/dist/shared/src/sandbox.js.map +1 -1
- package/dist/shared/src/secrets.d.ts +1 -0
- package/dist/shared/src/secrets.js +2 -0
- package/dist/shared/src/secrets.js.map +1 -0
- package/dist/shared/src/storage.d.ts +1 -274
- package/dist/shared/src/storage.js +1 -723
- package/dist/shared/src/storage.js.map +1 -1
- package/dist/shared/src/string.d.ts +1 -1
- package/dist/shared/src/string.js +1 -29
- package/dist/shared/src/string.js.map +1 -1
- package/dist/shared/src/time.d.ts +1 -5
- package/dist/shared/src/time.js +1 -30
- package/dist/shared/src/time.js.map +1 -1
- package/dist/shared/src/tls.d.ts +1 -0
- package/dist/shared/src/tls.js +2 -0
- package/dist/shared/src/tls.js.map +1 -0
- package/dist/shared/src/tokenizer.d.ts +1 -0
- package/dist/shared/src/tokenizer.js +2 -0
- package/dist/shared/src/tokenizer.js.map +1 -0
- package/dist/shared/src/types.d.ts +1 -27
- package/dist/shared/src/types.js +1 -16
- package/dist/shared/src/types.js.map +1 -1
- package/dist/shared/src/worker-pool.d.ts +1 -52
- package/dist/shared/src/worker-pool.js +1 -209
- package/dist/shared/src/worker-pool.js.map +1 -1
- package/dist/shared/src/worker-thread.d.ts +1 -21
- package/dist/shared/src/worker-thread.js +1 -66
- package/dist/shared/src/worker-thread.js.map +1 -1
- package/package.json +4 -6
- package/templates/docs/tech-stack.md +21 -0
- package/templates/full/ATABEY_FULL.md +38 -50
- package/templates/prompts/security-audit-recipe.md +1 -1
- package/templates/standards/architecture-standards.md +6 -4
- package/templates/standards/crud-governance.md +1 -1
- package/templates/standards/deployment-standards.md +1 -1
- package/templates/standards/enterprise-systems-standards.md +5 -1
- package/templates/standards/eslint-standards.md +10 -0
- package/templates/standards/frontend-standards.md +2 -2
- package/templates/standards/governance-standards.md +2 -2
- package/templates/standards/i18n-standards.md +1 -1
- package/templates/standards/logging-and-secrets.md +1 -1
- package/templates/standards/native-standards.md +1 -1
- package/templates/standards/quality-standards.md +1 -1
- package/templates/standards/security-audit-standards.md +1 -1
- package/templates/standards/security-standards.md +1 -1
- package/templates/standards/testing-standards.md +1 -1
- package/templates/standards/token-economy.md +27 -0
- package/dist/atabey/src/cli/commands/init/create-agent.d.ts +0 -4
- package/dist/atabey/src/cli/commands/init/create-agent.js +0 -59
- package/dist/atabey/src/cli/commands/init/create-agent.js.map +0 -1
- package/dist/atabey/src/cli/utils/config-schema.d.ts +0 -213
- package/dist/atabey/src/cli/utils/config-schema.js +0 -58
- package/dist/atabey/src/cli/utils/config-schema.js.map +0 -1
- package/dist/atabey/src/cli/utils/schemas.d.ts +0 -49
- package/dist/atabey/src/cli/utils/schemas.js +0 -20
- package/dist/atabey/src/cli/utils/schemas.js.map +0 -1
- package/dist/atabey/src/contracts/index.d.ts +0 -1
- package/dist/atabey/src/contracts/index.js +0 -2
- package/dist/atabey/src/contracts/index.js.map +0 -1
- package/dist/atabey/src/contracts/tasks.d.ts +0 -44
- package/dist/atabey/src/contracts/tasks.js +0 -21
- package/dist/atabey/src/contracts/tasks.js.map +0 -1
- package/dist/atabey/src/modules/contracts/index.d.ts +0 -5
- package/dist/atabey/src/modules/contracts/index.js +0 -6
- package/dist/atabey/src/modules/contracts/index.js.map +0 -1
- package/dist/atabey/src/modules/engines/contract-engine.d.ts +0 -46
- package/dist/atabey/src/modules/engines/contract-engine.js +0 -116
- package/dist/atabey/src/modules/engines/contract-engine.js.map +0 -1
- package/dist/atabey/src/modules/engines/discovery-engine.d.ts +0 -42
- package/dist/atabey/src/modules/engines/discovery-engine.js +0 -161
- package/dist/atabey/src/modules/engines/discovery-engine.js.map +0 -1
- package/dist/atabey/src/modules/engines/file-lock.d.ts +0 -56
- package/dist/atabey/src/modules/engines/file-lock.js +0 -171
- package/dist/atabey/src/modules/engines/file-lock.js.map +0 -1
- package/dist/atabey/src/modules/engines/phase-engine.d.ts +0 -82
- package/dist/atabey/src/modules/engines/phase-engine.js +0 -204
- package/dist/atabey/src/modules/engines/phase-engine.js.map +0 -1
- package/dist/atabey/src/modules/engines/policy-engine.d.ts +0 -63
- package/dist/atabey/src/modules/engines/policy-engine.js +0 -188
- package/dist/atabey/src/modules/engines/policy-engine.js.map +0 -1
- package/dist/atabey/src/modules/engines/sandbox.d.ts +0 -31
- package/dist/atabey/src/modules/engines/sandbox.js +0 -57
- package/dist/atabey/src/modules/engines/sandbox.js.map +0 -1
- package/dist/atabey/src/modules/engines/session-engine.d.ts +0 -68
- package/dist/atabey/src/modules/engines/session-engine.js +0 -141
- package/dist/atabey/src/modules/engines/session-engine.js.map +0 -1
- package/dist/atabey/src/modules/engines/worker-pool.d.ts +0 -8
- package/dist/atabey/src/modules/engines/worker-pool.js +0 -9
- package/dist/atabey/src/modules/engines/worker-pool.js.map +0 -1
- package/dist/atabey/src/modules/providers/llm-provider.d.ts +0 -87
- package/dist/atabey/src/modules/providers/llm-provider.js +0 -242
- package/dist/atabey/src/modules/providers/llm-provider.js.map +0 -1
- package/dist/atabey/src/shared/file-lock.d.ts +0 -1
- package/dist/atabey/src/shared/file-lock.js +0 -2
- package/dist/atabey/src/shared/file-lock.js.map +0 -1
- package/dist/atabey/src/shared/job-queue.d.ts +0 -1
- package/dist/atabey/src/shared/job-queue.js +0 -2
- package/dist/atabey/src/shared/job-queue.js.map +0 -1
- package/dist/atabey/src/shared/lock.d.ts +0 -1
- package/dist/atabey/src/shared/lock.js +0 -2
- package/dist/atabey/src/shared/lock.js.map +0 -1
- package/dist/atabey/src/shared/resilience.d.ts +0 -1
- package/dist/atabey/src/shared/resilience.js +0 -2
- package/dist/atabey/src/shared/resilience.js.map +0 -1
- package/dist/atabey/src/shared/retention.d.ts +0 -1
- package/dist/atabey/src/shared/retention.js +0 -2
- package/dist/atabey/src/shared/retention.js.map +0 -1
- package/dist/atabey/src/shared/sandbox-runtime.d.ts +0 -1
- package/dist/atabey/src/shared/sandbox-runtime.js +0 -2
- package/dist/atabey/src/shared/sandbox-runtime.js.map +0 -1
- package/dist/atabey/src/shared/sandbox.d.ts +0 -1
- package/dist/atabey/src/shared/sandbox.js +0 -2
- package/dist/atabey/src/shared/sandbox.js.map +0 -1
- package/dist/atabey/src/shared/worker-pool.d.ts +0 -1
- package/dist/atabey/src/shared/worker-pool.js +0 -2
- package/dist/atabey/src/shared/worker-pool.js.map +0 -1
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Real AST scanning using the TypeScript Compiler API (no regex heuristics).
|
|
3
|
+
*
|
|
4
|
+
* Detects:
|
|
5
|
+
* - `any` keyword types (AnyKeyword)
|
|
6
|
+
* - console.log/error/warn/debug/info property-access calls
|
|
7
|
+
* - `debugger` statements
|
|
8
|
+
* - TypeScript suppression directives (ts-ignore / ts-nocheck)
|
|
9
|
+
*
|
|
10
|
+
* Used by the rules engine to replace the fragile `:\s*any\b` regex so that
|
|
11
|
+
* comments/strings containing "any" no longer trigger false positives and
|
|
12
|
+
* type aliases / generic `any` are caught.
|
|
13
|
+
*/
|
|
14
|
+
export type AstRuleId = "no-any-types" | "no-console-log" | "no-ts-directives" | "no-debugger";
|
|
15
|
+
export interface AstViolation {
|
|
16
|
+
ruleId: AstRuleId;
|
|
17
|
+
line: number;
|
|
18
|
+
column: number;
|
|
19
|
+
text: string;
|
|
20
|
+
}
|
|
21
|
+
export declare function scanSourceForViolations(filePath: string, content: string): AstViolation[];
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Real AST scanning using the TypeScript Compiler API (no regex heuristics).
|
|
3
|
+
*
|
|
4
|
+
* Detects:
|
|
5
|
+
* - `any` keyword types (AnyKeyword)
|
|
6
|
+
* - console.log/error/warn/debug/info property-access calls
|
|
7
|
+
* - `debugger` statements
|
|
8
|
+
* - TypeScript suppression directives (ts-ignore / ts-nocheck)
|
|
9
|
+
*
|
|
10
|
+
* Used by the rules engine to replace the fragile `:\s*any\b` regex so that
|
|
11
|
+
* comments/strings containing "any" no longer trigger false positives and
|
|
12
|
+
* type aliases / generic `any` are caught.
|
|
13
|
+
*/
|
|
14
|
+
import ts from "typescript";
|
|
15
|
+
const CONSOLE_METHODS = new Set(["log", "error", "warn", "debug", "info", "trace"]);
|
|
16
|
+
export function scanSourceForViolations(filePath, content) {
|
|
17
|
+
const scriptKind = /\.tsx$/i.test(filePath)
|
|
18
|
+
? ts.ScriptKind.TSX
|
|
19
|
+
: /\.jsx$/i.test(filePath)
|
|
20
|
+
? ts.ScriptKind.JSX
|
|
21
|
+
: /\.js$/i.test(filePath)
|
|
22
|
+
? ts.ScriptKind.JS
|
|
23
|
+
: ts.ScriptKind.TS;
|
|
24
|
+
let sourceFile;
|
|
25
|
+
try {
|
|
26
|
+
sourceFile = ts.createSourceFile(filePath, content, ts.ScriptTarget.Latest, true, scriptKind);
|
|
27
|
+
}
|
|
28
|
+
catch {
|
|
29
|
+
return [];
|
|
30
|
+
}
|
|
31
|
+
const violations = [];
|
|
32
|
+
const at = (node, ruleId, text) => {
|
|
33
|
+
const start = node.getStart(sourceFile);
|
|
34
|
+
const { line, character } = sourceFile.getLineAndCharacterOfPosition(start);
|
|
35
|
+
violations.push({ ruleId, line: line + 1, column: character + 1, text });
|
|
36
|
+
};
|
|
37
|
+
const visit = (node) => {
|
|
38
|
+
// `any` keyword type
|
|
39
|
+
if (node.kind === ts.SyntaxKind.AnyKeyword) {
|
|
40
|
+
at(node, "no-any-types", "any");
|
|
41
|
+
}
|
|
42
|
+
// console.* calls
|
|
43
|
+
if (ts.isPropertyAccessExpression(node) && ts.isIdentifier(node.expression) && node.expression.text === "console") {
|
|
44
|
+
const method = node.name.text;
|
|
45
|
+
if (CONSOLE_METHODS.has(method))
|
|
46
|
+
at(node, "no-console-log", `console.${method}`);
|
|
47
|
+
}
|
|
48
|
+
// debugger
|
|
49
|
+
if (node.kind === ts.SyntaxKind.DebuggerStatement) {
|
|
50
|
+
at(node, "no-debugger", "debugger");
|
|
51
|
+
}
|
|
52
|
+
ts.forEachChild(node, visit);
|
|
53
|
+
};
|
|
54
|
+
visit(sourceFile);
|
|
55
|
+
// TypeScript suppression directives (comment-based)
|
|
56
|
+
const lines = content.split(/\r?\n/);
|
|
57
|
+
for (let i = 0; i < lines.length; i++) {
|
|
58
|
+
if (/@ts-(ignore|nocheck|expect-error)\b/.test(lines[i])) {
|
|
59
|
+
violations.push({ ruleId: "no-ts-directives", line: i + 1, column: 1, text: lines[i].trim().slice(0, 80) });
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
return violations;
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=ast-scan.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ast-scan.js","sourceRoot":"","sources":["../../../../../../atabey-mcp/src/mcp/utils/ast-scan.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
export interface AuthResult {
|
|
2
|
+
authenticated: boolean;
|
|
3
|
+
user: string;
|
|
4
|
+
reason?: string;
|
|
5
|
+
method?: "none" | "master" | "user" | "db" | "anonymous" | "denied";
|
|
6
|
+
}
|
|
7
|
+
export interface AuthStatus {
|
|
8
|
+
enabled: boolean;
|
|
9
|
+
required: boolean;
|
|
10
|
+
masterConfigured: boolean;
|
|
11
|
+
userCount: number;
|
|
12
|
+
dbUserCount: number;
|
|
13
|
+
openAccess: boolean;
|
|
14
|
+
}
|
|
15
|
+
/** Paths that never require a bearer token (health + login only by default). */
|
|
16
|
+
export declare const DEFAULT_PUBLIC_API_PATHS: Set<string>;
|
|
17
|
+
/**
|
|
18
|
+
* Initialize authentication from environment variables.
|
|
19
|
+
* Safe to call multiple times (re-reads env).
|
|
20
|
+
*/
|
|
21
|
+
export declare function initAuth(): void;
|
|
22
|
+
/**
|
|
23
|
+
* Whether auth is mandatory (fail closed).
|
|
24
|
+
*/
|
|
25
|
+
export declare function isAuthRequired(): boolean;
|
|
26
|
+
/**
|
|
27
|
+
* Whether any credential mechanism is configured.
|
|
28
|
+
*/
|
|
29
|
+
export declare function isAuthEnabled(): boolean;
|
|
30
|
+
/**
|
|
31
|
+
* Authenticate a request using the Authorization header.
|
|
32
|
+
*/
|
|
33
|
+
export declare function authenticate(req: {
|
|
34
|
+
headers: Record<string, string | string[] | undefined>;
|
|
35
|
+
}): AuthResult;
|
|
36
|
+
/**
|
|
37
|
+
* Authenticate using a raw token string.
|
|
38
|
+
*/
|
|
39
|
+
export declare function authenticateToken(token: string): AuthResult;
|
|
40
|
+
/**
|
|
41
|
+
* Whether this path may be accessed without a valid token.
|
|
42
|
+
*/
|
|
43
|
+
export declare function isPublicPath(pathname: string): boolean;
|
|
44
|
+
/**
|
|
45
|
+
* Require auth for a path. Returns 401 payload or null if allowed.
|
|
46
|
+
*/
|
|
47
|
+
export declare function requireAuthForPath(pathname: string, req: {
|
|
48
|
+
headers: Record<string, string | string[] | undefined>;
|
|
49
|
+
}): {
|
|
50
|
+
allowed: true;
|
|
51
|
+
user: string;
|
|
52
|
+
} | {
|
|
53
|
+
allowed: false;
|
|
54
|
+
status: 401;
|
|
55
|
+
error: string;
|
|
56
|
+
};
|
|
57
|
+
/**
|
|
58
|
+
* True when the request may perform admin-only operations.
|
|
59
|
+
* Open local mode (no auth configured) is treated as admin; otherwise the
|
|
60
|
+
* master token or a DB user with role "admin" is required.
|
|
61
|
+
*/
|
|
62
|
+
export declare function isAdminRequest(req: {
|
|
63
|
+
headers: Record<string, string | string[] | undefined>;
|
|
64
|
+
}): boolean;
|
|
65
|
+
/**
|
|
66
|
+
* Stdio mode user identity (not HTTP).
|
|
67
|
+
*/
|
|
68
|
+
export declare function getCurrentUser(): string;
|
|
69
|
+
export declare function getAuthHeader(user: string, token: string): string;
|
|
70
|
+
export declare function getConfiguredUsers(): string[];
|
|
71
|
+
export declare function getAuthStatus(): AuthStatus;
|
|
72
|
+
/** Test helper */
|
|
73
|
+
export declare function resetAuthForTests(): void;
|
|
@@ -0,0 +1,316 @@
|
|
|
1
|
+
import { execSync } from "child_process";
|
|
2
|
+
import crypto from "crypto";
|
|
3
|
+
import { AtabeyStorage } from "../../shared/storage.js";
|
|
4
|
+
let authUsers = [];
|
|
5
|
+
let masterToken = null;
|
|
6
|
+
let authRequired = false;
|
|
7
|
+
let initialized = false;
|
|
8
|
+
/** Paths that never require a bearer token (health + login only by default). */
|
|
9
|
+
export const DEFAULT_PUBLIC_API_PATHS = new Set([
|
|
10
|
+
"/api/health",
|
|
11
|
+
"/mcp/health",
|
|
12
|
+
"/api/auth/login",
|
|
13
|
+
]);
|
|
14
|
+
function timingSafeTokenEqual(a, b) {
|
|
15
|
+
try {
|
|
16
|
+
const ba = Buffer.from(a, "utf8");
|
|
17
|
+
const bb = Buffer.from(b, "utf8");
|
|
18
|
+
if (ba.length !== bb.length || ba.length === 0) {
|
|
19
|
+
// Still do a compare to reduce timing signal on length
|
|
20
|
+
const dummy = Buffer.alloc(ba.length || 1);
|
|
21
|
+
crypto.timingSafeEqual(dummy, dummy);
|
|
22
|
+
return false;
|
|
23
|
+
}
|
|
24
|
+
return crypto.timingSafeEqual(ba, bb);
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
return false;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
function hasCredentialStore() {
|
|
31
|
+
let dbUsers;
|
|
32
|
+
try {
|
|
33
|
+
dbUsers = AtabeyStorage.hasUsers();
|
|
34
|
+
}
|
|
35
|
+
catch {
|
|
36
|
+
dbUsers = false;
|
|
37
|
+
}
|
|
38
|
+
return !!masterToken || authUsers.length > 0 || dbUsers;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Initialize authentication from environment variables.
|
|
42
|
+
* Safe to call multiple times (re-reads env).
|
|
43
|
+
*/
|
|
44
|
+
export function initAuth() {
|
|
45
|
+
masterToken = process.env.MCP_AUTH_TOKEN?.trim() || null;
|
|
46
|
+
authRequired =
|
|
47
|
+
process.env.MCP_AUTH_REQUIRED === "true" ||
|
|
48
|
+
process.env.MCP_AUTH_REQUIRED === "1" ||
|
|
49
|
+
process.env.ATABEY_AUTH_REQUIRED === "true" ||
|
|
50
|
+
process.env.ATABEY_AUTH_REQUIRED === "1";
|
|
51
|
+
const usersStr = process.env.MCP_AUTH_USERS || "";
|
|
52
|
+
if (usersStr) {
|
|
53
|
+
authUsers = usersStr.split(",").map((pair) => {
|
|
54
|
+
const idx = pair.indexOf(":");
|
|
55
|
+
if (idx <= 0)
|
|
56
|
+
return { name: "unknown", token: "" };
|
|
57
|
+
return {
|
|
58
|
+
name: pair.slice(0, idx).trim() || "unknown",
|
|
59
|
+
token: pair.slice(idx + 1).trim() || "",
|
|
60
|
+
};
|
|
61
|
+
}).filter((u) => u.token);
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
authUsers = [];
|
|
65
|
+
}
|
|
66
|
+
if (masterToken) {
|
|
67
|
+
process.stderr.write(`[AUTH] Master token configured (${masterToken.length} chars)\n`);
|
|
68
|
+
}
|
|
69
|
+
if (authUsers.length > 0) {
|
|
70
|
+
process.stderr.write(`[AUTH] ${authUsers.length} user(s) configured: ${authUsers.map((u) => u.name).join(", ")}\n`);
|
|
71
|
+
}
|
|
72
|
+
try {
|
|
73
|
+
if (AtabeyStorage.hasUsers()) {
|
|
74
|
+
const dbUsers = AtabeyStorage.getUsers();
|
|
75
|
+
process.stderr.write(`[AUTH] Database authentication active (${dbUsers.length} users)\n`);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
catch {
|
|
79
|
+
// storage not ready
|
|
80
|
+
}
|
|
81
|
+
if (authRequired) {
|
|
82
|
+
process.stderr.write("[AUTH] REQUIRED mode ON — unauthenticated API/MCP HTTP access denied\n");
|
|
83
|
+
if (!hasCredentialStore()) {
|
|
84
|
+
process.stderr.write("[AUTH] WARNING: Auth required but no MCP_AUTH_TOKEN / MCP_AUTH_USERS / DB users configured. All requests will be denied.\n");
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
else if (!hasCredentialStore()) {
|
|
88
|
+
process.stderr.write("[AUTH] No authentication configured — OPEN ACCESS (anonymous)\n");
|
|
89
|
+
process.stderr.write("[AUTH] Set MCP_AUTH_REQUIRED=true and MCP_AUTH_TOKEN=<key> to require token authentication\n");
|
|
90
|
+
}
|
|
91
|
+
initialized = true;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Whether auth is mandatory (fail closed).
|
|
95
|
+
*/
|
|
96
|
+
export function isAuthRequired() {
|
|
97
|
+
if (!initialized)
|
|
98
|
+
initAuth();
|
|
99
|
+
return authRequired;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Whether any credential mechanism is configured.
|
|
103
|
+
*/
|
|
104
|
+
export function isAuthEnabled() {
|
|
105
|
+
if (!initialized)
|
|
106
|
+
initAuth();
|
|
107
|
+
return hasCredentialStore();
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Authenticate a request using the Authorization header.
|
|
111
|
+
*/
|
|
112
|
+
export function authenticate(req) {
|
|
113
|
+
if (!initialized)
|
|
114
|
+
initAuth();
|
|
115
|
+
const credentials = hasCredentialStore();
|
|
116
|
+
// Open access only when not required and no credentials
|
|
117
|
+
if (!authRequired && !credentials) {
|
|
118
|
+
return { authenticated: true, user: "anonymous", method: "anonymous" };
|
|
119
|
+
}
|
|
120
|
+
// Required but no credentials configured → fail closed
|
|
121
|
+
if (authRequired && !credentials) {
|
|
122
|
+
return {
|
|
123
|
+
authenticated: false,
|
|
124
|
+
user: "",
|
|
125
|
+
method: "denied",
|
|
126
|
+
reason: "Auth required but no tokens configured",
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
const authHeader = req.headers["authorization"];
|
|
130
|
+
const headerVal = Array.isArray(authHeader) ? authHeader[0] : authHeader;
|
|
131
|
+
if (!headerVal) {
|
|
132
|
+
return {
|
|
133
|
+
authenticated: false,
|
|
134
|
+
user: "",
|
|
135
|
+
method: "denied",
|
|
136
|
+
reason: "Missing Authorization header",
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
const token = headerVal.startsWith("Bearer ") ? headerVal.slice(7).trim() : headerVal.trim();
|
|
140
|
+
if (!token) {
|
|
141
|
+
return { authenticated: false, user: "", method: "denied", reason: "Empty bearer token" };
|
|
142
|
+
}
|
|
143
|
+
return authenticateToken(token);
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Authenticate using a raw token string.
|
|
147
|
+
*/
|
|
148
|
+
export function authenticateToken(token) {
|
|
149
|
+
if (!initialized)
|
|
150
|
+
initAuth();
|
|
151
|
+
const credentials = hasCredentialStore();
|
|
152
|
+
if (!authRequired && !credentials) {
|
|
153
|
+
return { authenticated: true, user: "anonymous", method: "anonymous" };
|
|
154
|
+
}
|
|
155
|
+
if (authRequired && !credentials) {
|
|
156
|
+
return {
|
|
157
|
+
authenticated: false,
|
|
158
|
+
user: "",
|
|
159
|
+
method: "denied",
|
|
160
|
+
reason: "Auth required but no tokens configured",
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
if (masterToken && timingSafeTokenEqual(token, masterToken)) {
|
|
164
|
+
return { authenticated: true, user: "admin", method: "master" };
|
|
165
|
+
}
|
|
166
|
+
for (const user of authUsers) {
|
|
167
|
+
if (timingSafeTokenEqual(token, user.token)) {
|
|
168
|
+
return { authenticated: true, user: user.name, method: "user" };
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
try {
|
|
172
|
+
const dbUser = AtabeyStorage.getUserByToken(token);
|
|
173
|
+
if (dbUser) {
|
|
174
|
+
return { authenticated: true, user: dbUser.name, method: "db" };
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
catch {
|
|
178
|
+
/* ignore */
|
|
179
|
+
}
|
|
180
|
+
return { authenticated: false, user: "", method: "denied", reason: "Invalid token" };
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Whether this path may be accessed without a valid token.
|
|
184
|
+
*/
|
|
185
|
+
export function isPublicPath(pathname) {
|
|
186
|
+
if (DEFAULT_PUBLIC_API_PATHS.has(pathname))
|
|
187
|
+
return true;
|
|
188
|
+
if (pathname === "/")
|
|
189
|
+
return true;
|
|
190
|
+
return false;
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Require auth for a path. Returns 401 payload or null if allowed.
|
|
194
|
+
*/
|
|
195
|
+
export function requireAuthForPath(pathname, req) {
|
|
196
|
+
if (isPublicPath(pathname)) {
|
|
197
|
+
const auth = authenticate(req);
|
|
198
|
+
return { allowed: true, user: auth.authenticated ? auth.user : "anonymous" };
|
|
199
|
+
}
|
|
200
|
+
// When auth not required and open access, allow
|
|
201
|
+
if (!isAuthRequired() && !isAuthEnabled()) {
|
|
202
|
+
return { allowed: true, user: "anonymous" };
|
|
203
|
+
}
|
|
204
|
+
// When credentials configured OR required → enforce
|
|
205
|
+
if (isAuthRequired() || isAuthEnabled()) {
|
|
206
|
+
const auth = authenticate(req);
|
|
207
|
+
if (!auth.authenticated) {
|
|
208
|
+
return {
|
|
209
|
+
allowed: false,
|
|
210
|
+
status: 401,
|
|
211
|
+
error: auth.reason ||
|
|
212
|
+
"Unauthorized. Provide Authorization: Bearer <token> header.",
|
|
213
|
+
};
|
|
214
|
+
}
|
|
215
|
+
return { allowed: true, user: auth.user };
|
|
216
|
+
}
|
|
217
|
+
return { allowed: true, user: "anonymous" };
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* True when the request may perform admin-only operations.
|
|
221
|
+
* Open local mode (no auth configured) is treated as admin; otherwise the
|
|
222
|
+
* master token or a DB user with role "admin" is required.
|
|
223
|
+
*/
|
|
224
|
+
export function isAdminRequest(req) {
|
|
225
|
+
if (!initialized)
|
|
226
|
+
initAuth();
|
|
227
|
+
if (!isAuthRequired() && !isAuthEnabled())
|
|
228
|
+
return true; // open local mode
|
|
229
|
+
const auth = authenticate(req);
|
|
230
|
+
if (!auth.authenticated)
|
|
231
|
+
return false;
|
|
232
|
+
if (auth.method === "master" || auth.user === "admin")
|
|
233
|
+
return true;
|
|
234
|
+
try {
|
|
235
|
+
const header = req.headers["authorization"];
|
|
236
|
+
const hv = Array.isArray(header) ? header[0] : header;
|
|
237
|
+
const token = hv ? (hv.startsWith("Bearer ") ? hv.slice(7).trim() : hv.trim()) : "";
|
|
238
|
+
if (token) {
|
|
239
|
+
const u = AtabeyStorage.getUserByToken(token);
|
|
240
|
+
if (u?.role === "admin")
|
|
241
|
+
return true;
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
catch {
|
|
245
|
+
/* fall through → not admin */
|
|
246
|
+
}
|
|
247
|
+
return false;
|
|
248
|
+
}
|
|
249
|
+
/**
|
|
250
|
+
* Stdio mode user identity (not HTTP).
|
|
251
|
+
*/
|
|
252
|
+
export function getCurrentUser() {
|
|
253
|
+
const envUser = process.env.MCP_USER;
|
|
254
|
+
if (envUser)
|
|
255
|
+
return envUser;
|
|
256
|
+
try {
|
|
257
|
+
const gitUser = execSync("git config user.name", { encoding: "utf8" }).trim();
|
|
258
|
+
if (gitUser)
|
|
259
|
+
return gitUser;
|
|
260
|
+
}
|
|
261
|
+
catch {
|
|
262
|
+
/* ignore */
|
|
263
|
+
}
|
|
264
|
+
const systemUser = process.env.USER || process.env.USERNAME;
|
|
265
|
+
if (systemUser)
|
|
266
|
+
return systemUser;
|
|
267
|
+
return "anonymous";
|
|
268
|
+
}
|
|
269
|
+
export function getAuthHeader(user, token) {
|
|
270
|
+
return `Bearer ${token}`;
|
|
271
|
+
}
|
|
272
|
+
export function getConfiguredUsers() {
|
|
273
|
+
const list = new Set();
|
|
274
|
+
if (masterToken)
|
|
275
|
+
list.add("admin");
|
|
276
|
+
authUsers.forEach((u) => list.add(u.name));
|
|
277
|
+
try {
|
|
278
|
+
AtabeyStorage.getUsers().forEach((u) => list.add(u.name));
|
|
279
|
+
}
|
|
280
|
+
catch {
|
|
281
|
+
/* ignore */
|
|
282
|
+
}
|
|
283
|
+
if (list.size === 0)
|
|
284
|
+
return ["anonymous"];
|
|
285
|
+
return Array.from(list);
|
|
286
|
+
}
|
|
287
|
+
export function getAuthStatus() {
|
|
288
|
+
if (!initialized)
|
|
289
|
+
initAuth();
|
|
290
|
+
let dbUserCount;
|
|
291
|
+
try {
|
|
292
|
+
dbUserCount = AtabeyStorage.getUsers().length;
|
|
293
|
+
}
|
|
294
|
+
catch {
|
|
295
|
+
dbUserCount = 0;
|
|
296
|
+
}
|
|
297
|
+
const enabled = isAuthEnabled();
|
|
298
|
+
return {
|
|
299
|
+
enabled,
|
|
300
|
+
required: authRequired,
|
|
301
|
+
masterConfigured: !!masterToken,
|
|
302
|
+
userCount: authUsers.length,
|
|
303
|
+
dbUserCount,
|
|
304
|
+
openAccess: !authRequired && !hasCredentialStore(),
|
|
305
|
+
};
|
|
306
|
+
}
|
|
307
|
+
/** Test helper */
|
|
308
|
+
export function resetAuthForTests() {
|
|
309
|
+
authUsers = [];
|
|
310
|
+
masterToken = null;
|
|
311
|
+
authRequired = false;
|
|
312
|
+
initialized = false;
|
|
313
|
+
}
|
|
314
|
+
// Auto-initialize on load
|
|
315
|
+
initAuth();
|
|
316
|
+
//# sourceMappingURL=auth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../../../../atabey-mcp/src/mcp/utils/auth.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ─── AUTO-ROLLBACK + REGENERATE ───────────────────────────────────
|
|
3
|
+
*
|
|
4
|
+
* When the AI generates code that violates governance rules (e.g., `any` type,
|
|
5
|
+
* console.log, copyleft license), this module:
|
|
6
|
+
* 1. Captures the file content before the write
|
|
7
|
+
* 2. Validates the new content against governance rules
|
|
8
|
+
* 3. If violation found: blocks the write, restores original, and sends
|
|
9
|
+
* a regenerate instruction back to the AI via MCP notification
|
|
10
|
+
*
|
|
11
|
+
* Flow:
|
|
12
|
+
* [Pre-Write Snapshot] → [Validate Content] → [Violation?] ─yes→ [Rollback] → [Notify AI]
|
|
13
|
+
* └─no─→ [Allow Write]
|
|
14
|
+
*
|
|
15
|
+
* Key Innovation: Unlike simple blocking, this tells the AI WHY it was
|
|
16
|
+
* blocked and gives it specific instructions to self-correct.
|
|
17
|
+
*/
|
|
18
|
+
/** Set the project root used for durable rollback snapshots. */
|
|
19
|
+
export declare function setAutoRollbackRoot(projectRoot: string): void;
|
|
20
|
+
export interface ViolationRecord {
|
|
21
|
+
rule: string;
|
|
22
|
+
severity: "CRITICAL" | "HIGH" | "MEDIUM" | "LOW";
|
|
23
|
+
filePath: string;
|
|
24
|
+
line: number;
|
|
25
|
+
detail: string;
|
|
26
|
+
regenerateInstruction: string;
|
|
27
|
+
}
|
|
28
|
+
export declare class AutoRollback {
|
|
29
|
+
private static snapshots;
|
|
30
|
+
/**
|
|
31
|
+
* Initialize the auto-rollback system.
|
|
32
|
+
* Sets up file watcher cleanup.
|
|
33
|
+
*/
|
|
34
|
+
static initialize(): void;
|
|
35
|
+
/**
|
|
36
|
+
* Prepare for a file write by capturing the current state.
|
|
37
|
+
* Call this BEFORE the tool handler writes to the file.
|
|
38
|
+
*/
|
|
39
|
+
static prepareWrite(filePath: string, traceId: string): void;
|
|
40
|
+
/**
|
|
41
|
+
* Validate content and rollback if violations are found.
|
|
42
|
+
* This is called after the tool handler writes the file, but
|
|
43
|
+
* BEFORE the response is returned to the AI.
|
|
44
|
+
*
|
|
45
|
+
* Returns:
|
|
46
|
+
* - null if content is clean
|
|
47
|
+
* - ViolationRecord[] if violations were found and rolled back
|
|
48
|
+
*/
|
|
49
|
+
static validateAndRollback(filePath: string, content: string, violations: ViolationRecord[]): ViolationRecord[] | null;
|
|
50
|
+
/**
|
|
51
|
+
* Restore a set of files to their pre-write snapshots (atomic multi-file
|
|
52
|
+
* rollback). Files without a snapshot are skipped.
|
|
53
|
+
*/
|
|
54
|
+
static restoreFiles(filePaths: string[]): number;
|
|
55
|
+
/**
|
|
56
|
+
* Restore every snapshot captured under a given trace id (task-level
|
|
57
|
+
* transaction rollback).
|
|
58
|
+
*/
|
|
59
|
+
static restoreTrace(traceId: string): number;
|
|
60
|
+
/**
|
|
61
|
+
* Build a regenerate instruction for the AI.
|
|
62
|
+
* This is what gets sent back to the AI to tell it to fix its output.
|
|
63
|
+
*/
|
|
64
|
+
static buildRegenerateInstruction(violations: ViolationRecord[], toolName: string): string;
|
|
65
|
+
/**
|
|
66
|
+
* Validate tool response content against governance rules.
|
|
67
|
+
* Used by the MCP middleware to check file write content before returning.
|
|
68
|
+
*/
|
|
69
|
+
static checkWriteContent(filePath: string, content: string, traceId: string): {
|
|
70
|
+
allowed: boolean;
|
|
71
|
+
violations: ViolationRecord[];
|
|
72
|
+
instruction: string | null;
|
|
73
|
+
};
|
|
74
|
+
/**
|
|
75
|
+
* Get snapshot stats.
|
|
76
|
+
*/
|
|
77
|
+
static getSnapshotStats(): {
|
|
78
|
+
total: number;
|
|
79
|
+
restored: number;
|
|
80
|
+
pending: number;
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
export { AutoRollback as AutoRollbackEngine };
|