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,282 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sandbox Runtime — Pure local OS process isolation for agent commands (Zero Docker/Container).
|
|
3
|
+
*
|
|
4
|
+
* Modes (ATABEY_SANDBOX_RUNTIME):
|
|
5
|
+
* none — host spawn (allow-list + env scrubbing)
|
|
6
|
+
* uid — host spawn with POSIX uid/gid drop (see sandbox.ts)
|
|
7
|
+
* seatbelt — macOS kernel sandbox (/usr/bin/sandbox-exec) confining writes to projectRoot
|
|
8
|
+
* and denying network access by default
|
|
9
|
+
* auto — seatbelt if available on macOS, else uid if configured, else none
|
|
10
|
+
*
|
|
11
|
+
* Hardening:
|
|
12
|
+
* ATABEY_SANDBOX_REQUIRED=true → deny execution when isolation is effectively "none"
|
|
13
|
+
* ATABEY_SANDBOX_NETWORK=none → deny outbound/inbound network inside seatbelt (default: none)
|
|
14
|
+
*/
|
|
15
|
+
import { spawn, execFileSync } from "child_process";
|
|
16
|
+
import fs from "fs";
|
|
17
|
+
import path from "path";
|
|
18
|
+
import { applySandboxToSpawnOptions, resolveSandboxIdentity, sandboxSpawn, } from "./sandbox.js";
|
|
19
|
+
import { scrubEnvForSubprocess } from "../security/secrets.js";
|
|
20
|
+
export class SandboxRequiredError extends Error {
|
|
21
|
+
constructor(message) {
|
|
22
|
+
super(message);
|
|
23
|
+
this.name = "SandboxRequiredError";
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
export const SEATBELT_BINARY = "/usr/bin/sandbox-exec";
|
|
27
|
+
let cachedEngine = null;
|
|
28
|
+
function envStr(key, fallback) {
|
|
29
|
+
const v = process.env[key];
|
|
30
|
+
return v && v.trim() ? v.trim() : fallback;
|
|
31
|
+
}
|
|
32
|
+
function envBool(key, fallback = false) {
|
|
33
|
+
const v = process.env[key];
|
|
34
|
+
if (v === undefined)
|
|
35
|
+
return fallback;
|
|
36
|
+
return v === "true" || v === "1" || v === "yes";
|
|
37
|
+
}
|
|
38
|
+
let warnedDevUnsandboxed = false;
|
|
39
|
+
export function resolveDefaultSandboxRequired(_mode = "auto") {
|
|
40
|
+
if (process.env.ATABEY_SANDBOX_REQUIRED !== undefined) {
|
|
41
|
+
return envBool("ATABEY_SANDBOX_REQUIRED", true);
|
|
42
|
+
}
|
|
43
|
+
if (envBool("ATABEY_ALLOW_UNSANDBOXED", false)) {
|
|
44
|
+
return false;
|
|
45
|
+
}
|
|
46
|
+
const profile = (process.env.ATABEY_PROFILE || "").toLowerCase();
|
|
47
|
+
if (process.env.NODE_ENV === "production" || profile === "enterprise") {
|
|
48
|
+
return true;
|
|
49
|
+
}
|
|
50
|
+
const isTestEnv = Boolean(process.env.VITEST) || process.env.NODE_ENV === "test";
|
|
51
|
+
if (isTestEnv) {
|
|
52
|
+
return false;
|
|
53
|
+
}
|
|
54
|
+
if (!warnedDevUnsandboxed) {
|
|
55
|
+
warnedDevUnsandboxed = true;
|
|
56
|
+
process.stderr.write("[SANDBOX] No isolation enforced (local dev). Set ATABEY_SANDBOX_REQUIRED=true " +
|
|
57
|
+
"to enforce OS process isolation (seatbelt/uid).\n");
|
|
58
|
+
}
|
|
59
|
+
return false;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Detect available native OS sandbox engine (cached).
|
|
63
|
+
*/
|
|
64
|
+
export function detectOsSandboxEngine() {
|
|
65
|
+
if (cachedEngine)
|
|
66
|
+
return cachedEngine;
|
|
67
|
+
const prefer = envStr("ATABEY_SANDBOX_ENGINE", "auto").toLowerCase();
|
|
68
|
+
if (prefer === "none") {
|
|
69
|
+
cachedEngine = "none";
|
|
70
|
+
return cachedEngine;
|
|
71
|
+
}
|
|
72
|
+
try {
|
|
73
|
+
execFileSync(SEATBELT_BINARY, ["-p", "(version 1)(allow default)", "/usr/bin/true"], {
|
|
74
|
+
encoding: "utf8",
|
|
75
|
+
timeout: 3000,
|
|
76
|
+
stdio: ["ignore", "pipe", "ignore"],
|
|
77
|
+
});
|
|
78
|
+
cachedEngine = "seatbelt";
|
|
79
|
+
return cachedEngine;
|
|
80
|
+
}
|
|
81
|
+
catch {
|
|
82
|
+
cachedEngine = "none";
|
|
83
|
+
return cachedEngine;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
/** Test helper */
|
|
87
|
+
export function clearSandboxRuntimeCache() {
|
|
88
|
+
cachedEngine = null;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Resolve full runtime configuration for a project.
|
|
92
|
+
*/
|
|
93
|
+
export function resolveSandboxRuntimeConfig(projectRoot, timeoutMs) {
|
|
94
|
+
const rawMode = envStr("ATABEY_SANDBOX_RUNTIME", "auto").toLowerCase() || "auto";
|
|
95
|
+
const mode = ["none", "uid", "seatbelt", "auto"].includes(rawMode)
|
|
96
|
+
? rawMode
|
|
97
|
+
: "auto";
|
|
98
|
+
const engine = detectOsSandboxEngine();
|
|
99
|
+
const identity = resolveSandboxIdentity();
|
|
100
|
+
const required = resolveDefaultSandboxRequired(mode);
|
|
101
|
+
let effectiveMode;
|
|
102
|
+
if (mode === "none") {
|
|
103
|
+
effectiveMode = "none";
|
|
104
|
+
}
|
|
105
|
+
else if (mode === "uid") {
|
|
106
|
+
effectiveMode = identity.enabled ? "uid" : "none";
|
|
107
|
+
}
|
|
108
|
+
else if (mode === "seatbelt") {
|
|
109
|
+
effectiveMode = engine === "seatbelt" ? "seatbelt" : "none";
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
// auto: prefer native OS seatbelt, then uid drop, else none
|
|
113
|
+
if (engine === "seatbelt")
|
|
114
|
+
effectiveMode = "seatbelt";
|
|
115
|
+
else if (identity.enabled)
|
|
116
|
+
effectiveMode = "uid";
|
|
117
|
+
else
|
|
118
|
+
effectiveMode = "none";
|
|
119
|
+
}
|
|
120
|
+
return {
|
|
121
|
+
mode,
|
|
122
|
+
effectiveMode,
|
|
123
|
+
engine: effectiveMode === "seatbelt" ? "seatbelt" : "none",
|
|
124
|
+
network: envStr("ATABEY_SANDBOX_NETWORK", "none"),
|
|
125
|
+
required,
|
|
126
|
+
projectRoot: path.resolve(projectRoot),
|
|
127
|
+
timeoutMs: timeoutMs ?? parseInt(process.env.MCP_COMMAND_TIMEOUT_MS || "30000", 10),
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
function isolationLabel(cfg) {
|
|
131
|
+
if (cfg.effectiveMode === "seatbelt") {
|
|
132
|
+
return `os/seatbelt network=${cfg.network} root=${cfg.projectRoot}`;
|
|
133
|
+
}
|
|
134
|
+
if (cfg.effectiveMode === "uid") {
|
|
135
|
+
const id = resolveSandboxIdentity();
|
|
136
|
+
return `uid=${id.uid}${id.gid !== undefined ? ` gid=${id.gid}` : ""}`;
|
|
137
|
+
}
|
|
138
|
+
return "none (host process)";
|
|
139
|
+
}
|
|
140
|
+
function escapeSbplString(value) {
|
|
141
|
+
return value.replace(/\\/g, "\\\\").replace(/"/g, '\\"');
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Build macOS Seatbelt (`/usr/bin/sandbox-exec`) SBPL profile and argv.
|
|
145
|
+
* Confines file writes strictly to `projectRoot` and OS temp directories,
|
|
146
|
+
* and denies network access when `cfg.network === "none"`.
|
|
147
|
+
*/
|
|
148
|
+
export function buildSeatbeltArgs(cfg, command, args) {
|
|
149
|
+
const resolvedRoot = fs.existsSync(cfg.projectRoot)
|
|
150
|
+
? fs.realpathSync(cfg.projectRoot)
|
|
151
|
+
: path.resolve(cfg.projectRoot);
|
|
152
|
+
const lexicalRoot = path.resolve(cfg.projectRoot);
|
|
153
|
+
const allowPaths = new Set([
|
|
154
|
+
resolvedRoot,
|
|
155
|
+
lexicalRoot,
|
|
156
|
+
"/tmp",
|
|
157
|
+
"/private/tmp",
|
|
158
|
+
"/var/folders",
|
|
159
|
+
"/private/var/folders",
|
|
160
|
+
]);
|
|
161
|
+
const subpathRules = [...allowPaths]
|
|
162
|
+
.map((p) => `(subpath "${escapeSbplString(p)}")`)
|
|
163
|
+
.join(" ");
|
|
164
|
+
const netRule = cfg.network === "none" ? "(deny network*)" : "";
|
|
165
|
+
const profile = [
|
|
166
|
+
"(version 1)",
|
|
167
|
+
"(allow default)",
|
|
168
|
+
netRule,
|
|
169
|
+
'(deny file-write* (subpath "/"))',
|
|
170
|
+
`(allow file-write* ${subpathRules} (literal "/dev/null") (literal "/dev/zero") (literal "/dev/tty"))`,
|
|
171
|
+
]
|
|
172
|
+
.filter(Boolean)
|
|
173
|
+
.join("");
|
|
174
|
+
return ["-p", profile, command, ...args];
|
|
175
|
+
}
|
|
176
|
+
function collectOutput(child, stdin) {
|
|
177
|
+
return new Promise((resolve) => {
|
|
178
|
+
let stdout = "";
|
|
179
|
+
let stderr = "";
|
|
180
|
+
child.stdout?.on("data", (d) => { stdout += d.toString(); });
|
|
181
|
+
child.stderr?.on("data", (d) => { stderr += d.toString(); });
|
|
182
|
+
child.on("error", (err) => {
|
|
183
|
+
stderr += err.message;
|
|
184
|
+
resolve({ code: 1, stdout, stderr });
|
|
185
|
+
});
|
|
186
|
+
child.on("close", (code) => {
|
|
187
|
+
resolve({ code, stdout, stderr });
|
|
188
|
+
});
|
|
189
|
+
if (stdin !== undefined && child.stdin) {
|
|
190
|
+
child.stdin.end(stdin);
|
|
191
|
+
}
|
|
192
|
+
else if (child.stdin) {
|
|
193
|
+
child.stdin.end();
|
|
194
|
+
}
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* Run a command under the configured local OS sandbox runtime.
|
|
199
|
+
*/
|
|
200
|
+
export async function runInSandbox(req) {
|
|
201
|
+
const cfg = resolveSandboxRuntimeConfig(req.projectRoot, req.timeoutMs);
|
|
202
|
+
const label = isolationLabel(cfg);
|
|
203
|
+
if (cfg.required && cfg.effectiveMode === "none") {
|
|
204
|
+
throw new SandboxRequiredError("[SANDBOX_REQUIRED] ATABEY_SANDBOX_REQUIRED=true but no OS isolation is available. " +
|
|
205
|
+
"Use macOS seatbelt (ATABEY_SANDBOX_RUNTIME=seatbelt) or configure ATABEY_SANDBOX_UID/USER " +
|
|
206
|
+
"(ATABEY_SANDBOX_RUNTIME=uid), or set ATABEY_SANDBOX_REQUIRED=false for local dev.");
|
|
207
|
+
}
|
|
208
|
+
if (!fs.existsSync(cfg.projectRoot)) {
|
|
209
|
+
throw new Error(`[SANDBOX] Project root does not exist: ${cfg.projectRoot}`);
|
|
210
|
+
}
|
|
211
|
+
const stdio = [
|
|
212
|
+
req.stdin !== undefined ? "pipe" : "ignore",
|
|
213
|
+
"pipe",
|
|
214
|
+
"pipe",
|
|
215
|
+
];
|
|
216
|
+
const baseEnv = req.env ?? process.env;
|
|
217
|
+
const childEnv = envBool("ATABEY_SANDBOX_PASS_ENV", false)
|
|
218
|
+
? baseEnv
|
|
219
|
+
: scrubEnvForSubprocess(baseEnv);
|
|
220
|
+
if (!envBool("ATABEY_ALLOW_INTERACTIVE", false)) {
|
|
221
|
+
const nonInteractive = {
|
|
222
|
+
CI: "true",
|
|
223
|
+
DEBIAN_FRONTEND: "noninteractive",
|
|
224
|
+
GIT_TERMINAL_PROMPT: "0",
|
|
225
|
+
GIT_ASKPASS: "echo",
|
|
226
|
+
PAGER: "cat",
|
|
227
|
+
TERM: "dumb",
|
|
228
|
+
npm_config_yes: "true",
|
|
229
|
+
PIP_NO_INPUT: "1",
|
|
230
|
+
};
|
|
231
|
+
for (const [k, v] of Object.entries(nonInteractive)) {
|
|
232
|
+
if (childEnv[k] === undefined)
|
|
233
|
+
childEnv[k] = v;
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
if (cfg.effectiveMode === "seatbelt" && cfg.engine === "seatbelt") {
|
|
237
|
+
const seatbeltArgs = buildSeatbeltArgs(cfg, req.command, req.args);
|
|
238
|
+
const child = spawn(SEATBELT_BINARY, seatbeltArgs, {
|
|
239
|
+
cwd: cfg.projectRoot,
|
|
240
|
+
timeout: cfg.timeoutMs,
|
|
241
|
+
shell: false,
|
|
242
|
+
stdio,
|
|
243
|
+
env: childEnv,
|
|
244
|
+
});
|
|
245
|
+
const result = await collectOutput(child, req.stdin);
|
|
246
|
+
return {
|
|
247
|
+
...result,
|
|
248
|
+
runtime: "seatbelt",
|
|
249
|
+
engine: "seatbelt",
|
|
250
|
+
isolationLabel: label,
|
|
251
|
+
};
|
|
252
|
+
}
|
|
253
|
+
const spawnOpts = {
|
|
254
|
+
cwd: cfg.projectRoot,
|
|
255
|
+
timeout: cfg.timeoutMs,
|
|
256
|
+
shell: false,
|
|
257
|
+
stdio,
|
|
258
|
+
env: childEnv,
|
|
259
|
+
};
|
|
260
|
+
const child = cfg.effectiveMode === "uid"
|
|
261
|
+
? sandboxSpawn(req.command, req.args, spawnOpts)
|
|
262
|
+
: spawn(req.command, req.args, applySandboxToSpawnOptions({ ...spawnOpts, disableSandbox: true }));
|
|
263
|
+
const result = await collectOutput(child, req.stdin);
|
|
264
|
+
return {
|
|
265
|
+
...result,
|
|
266
|
+
runtime: cfg.effectiveMode,
|
|
267
|
+
engine: "none",
|
|
268
|
+
isolationLabel: label,
|
|
269
|
+
};
|
|
270
|
+
}
|
|
271
|
+
/**
|
|
272
|
+
* Diagnostic snapshot for CLI.
|
|
273
|
+
*/
|
|
274
|
+
export function getSandboxRuntimeStatus(projectRoot = process.cwd()) {
|
|
275
|
+
const config = resolveSandboxRuntimeConfig(projectRoot);
|
|
276
|
+
return {
|
|
277
|
+
config,
|
|
278
|
+
isolationLabel: isolationLabel(config),
|
|
279
|
+
identity: resolveSandboxIdentity(),
|
|
280
|
+
};
|
|
281
|
+
}
|
|
282
|
+
//# sourceMappingURL=sandbox-runtime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sandbox-runtime.js","sourceRoot":"","sources":["../../../../../../shared/src/modules/sandbox/sandbox-runtime.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OS-level subprocess isolation via uid/gid (no Docker required).
|
|
3
|
+
*
|
|
4
|
+
* On Unix, child_process.spawn accepts `uid` and `gid`. When configured,
|
|
5
|
+
* agent-triggered shell commands run as a restricted system user so that
|
|
6
|
+
* even a hallucinated destructive command hits EACCES / Permission Denied
|
|
7
|
+
* on protected paths.
|
|
8
|
+
*
|
|
9
|
+
* Windows: uid/gid are ignored; isolation is a no-op (allow-list still applies).
|
|
10
|
+
*
|
|
11
|
+
* Configuration (any of):
|
|
12
|
+
* ATABEY_SANDBOX_UID=501
|
|
13
|
+
* ATABEY_SANDBOX_GID=20
|
|
14
|
+
* ATABEY_SANDBOX_USER=atabey-sandbox (resolved via `id -u` / `id -g` when possible)
|
|
15
|
+
* ATABEY_SANDBOX_ENABLED=true|false (default: true when uid/gid resolvable)
|
|
16
|
+
*/
|
|
17
|
+
import { SpawnOptions, ChildProcess } from "child_process";
|
|
18
|
+
export interface SandboxIdentity {
|
|
19
|
+
uid?: number;
|
|
20
|
+
gid?: number;
|
|
21
|
+
user?: string;
|
|
22
|
+
enabled: boolean;
|
|
23
|
+
/** Why sandbox is off (for diagnostics). */
|
|
24
|
+
reason?: string;
|
|
25
|
+
}
|
|
26
|
+
export interface SandboxSpawnOptions extends SpawnOptions {
|
|
27
|
+
/** Force-disable sandbox for this call. */
|
|
28
|
+
disableSandbox?: boolean;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Resolve sandbox identity from env (cached).
|
|
32
|
+
* Call `clearSandboxIdentityCache()` in tests after env changes.
|
|
33
|
+
*/
|
|
34
|
+
export declare function resolveSandboxIdentity(): SandboxIdentity;
|
|
35
|
+
export declare function clearSandboxIdentityCache(): void;
|
|
36
|
+
/**
|
|
37
|
+
* Build spawn options with uid/gid when sandbox is active.
|
|
38
|
+
*/
|
|
39
|
+
export declare function applySandboxToSpawnOptions(options?: SandboxSpawnOptions): SpawnOptions;
|
|
40
|
+
/**
|
|
41
|
+
* spawn() wrapper that applies OS sandbox identity when configured.
|
|
42
|
+
*/
|
|
43
|
+
export declare function sandboxSpawn(command: string, args: readonly string[], options?: SandboxSpawnOptions): ChildProcess;
|
|
44
|
+
/**
|
|
45
|
+
* Human-readable status for CLI diagnostics.
|
|
46
|
+
*/
|
|
47
|
+
export declare function getSandboxStatus(): {
|
|
48
|
+
platform: string;
|
|
49
|
+
identity: SandboxIdentity;
|
|
50
|
+
processUid: number | null;
|
|
51
|
+
processGid: number | null;
|
|
52
|
+
};
|
|
53
|
+
/** Default restricted paths agents should not touch even with shell allow-list. */
|
|
54
|
+
export declare const SANDBOX_PROTECTED_HINTS: readonly ["/etc", "/usr", "/bin", "/sbin", "/System", string];
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OS-level subprocess isolation via uid/gid (no Docker required).
|
|
3
|
+
*
|
|
4
|
+
* On Unix, child_process.spawn accepts `uid` and `gid`. When configured,
|
|
5
|
+
* agent-triggered shell commands run as a restricted system user so that
|
|
6
|
+
* even a hallucinated destructive command hits EACCES / Permission Denied
|
|
7
|
+
* on protected paths.
|
|
8
|
+
*
|
|
9
|
+
* Windows: uid/gid are ignored; isolation is a no-op (allow-list still applies).
|
|
10
|
+
*
|
|
11
|
+
* Configuration (any of):
|
|
12
|
+
* ATABEY_SANDBOX_UID=501
|
|
13
|
+
* ATABEY_SANDBOX_GID=20
|
|
14
|
+
* ATABEY_SANDBOX_USER=atabey-sandbox (resolved via `id -u` / `id -g` when possible)
|
|
15
|
+
* ATABEY_SANDBOX_ENABLED=true|false (default: true when uid/gid resolvable)
|
|
16
|
+
*/
|
|
17
|
+
import { spawn } from "child_process";
|
|
18
|
+
import { execFileSync } from "child_process";
|
|
19
|
+
import os from "os";
|
|
20
|
+
let cachedIdentity = null;
|
|
21
|
+
function parseUint(value) {
|
|
22
|
+
if (value === undefined || value === "")
|
|
23
|
+
return undefined;
|
|
24
|
+
const n = Number.parseInt(value, 10);
|
|
25
|
+
if (!Number.isFinite(n) || n < 0)
|
|
26
|
+
return undefined;
|
|
27
|
+
return n;
|
|
28
|
+
}
|
|
29
|
+
function resolveUserIds(username) {
|
|
30
|
+
if (process.platform === "win32")
|
|
31
|
+
return {};
|
|
32
|
+
try {
|
|
33
|
+
const uidRaw = execFileSync("id", ["-u", username], {
|
|
34
|
+
encoding: "utf8",
|
|
35
|
+
timeout: 2000,
|
|
36
|
+
stdio: ["ignore", "pipe", "ignore"],
|
|
37
|
+
}).trim();
|
|
38
|
+
const gidRaw = execFileSync("id", ["-g", username], {
|
|
39
|
+
encoding: "utf8",
|
|
40
|
+
timeout: 2000,
|
|
41
|
+
stdio: ["ignore", "pipe", "ignore"],
|
|
42
|
+
}).trim();
|
|
43
|
+
return {
|
|
44
|
+
uid: parseUint(uidRaw),
|
|
45
|
+
gid: parseUint(gidRaw),
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
catch {
|
|
49
|
+
return {};
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Resolve sandbox identity from env (cached).
|
|
54
|
+
* Call `clearSandboxIdentityCache()` in tests after env changes.
|
|
55
|
+
*/
|
|
56
|
+
export function resolveSandboxIdentity() {
|
|
57
|
+
if (cachedIdentity)
|
|
58
|
+
return cachedIdentity;
|
|
59
|
+
if (process.platform === "win32") {
|
|
60
|
+
cachedIdentity = {
|
|
61
|
+
enabled: false,
|
|
62
|
+
reason: "uid/gid isolation is not available on Windows",
|
|
63
|
+
};
|
|
64
|
+
return cachedIdentity;
|
|
65
|
+
}
|
|
66
|
+
const explicitOff = process.env.ATABEY_SANDBOX_ENABLED === "false" ||
|
|
67
|
+
process.env.ATABEY_SANDBOX_ENABLED === "0";
|
|
68
|
+
if (explicitOff) {
|
|
69
|
+
cachedIdentity = { enabled: false, reason: "ATABEY_SANDBOX_ENABLED=false" };
|
|
70
|
+
return cachedIdentity;
|
|
71
|
+
}
|
|
72
|
+
let uid = parseUint(process.env.ATABEY_SANDBOX_UID);
|
|
73
|
+
let gid = parseUint(process.env.ATABEY_SANDBOX_GID);
|
|
74
|
+
const user = process.env.ATABEY_SANDBOX_USER?.trim() || undefined;
|
|
75
|
+
if (user && (uid === undefined || gid === undefined)) {
|
|
76
|
+
const resolved = resolveUserIds(user);
|
|
77
|
+
uid = uid ?? resolved.uid;
|
|
78
|
+
gid = gid ?? resolved.gid;
|
|
79
|
+
}
|
|
80
|
+
// Never drop privileges to root (0) — that would be a no-op or worse
|
|
81
|
+
if (uid === 0) {
|
|
82
|
+
cachedIdentity = {
|
|
83
|
+
enabled: false,
|
|
84
|
+
reason: "ATABEY_SANDBOX_UID=0 (root) is refused",
|
|
85
|
+
uid,
|
|
86
|
+
gid,
|
|
87
|
+
user,
|
|
88
|
+
};
|
|
89
|
+
return cachedIdentity;
|
|
90
|
+
}
|
|
91
|
+
if (uid === undefined) {
|
|
92
|
+
// Optional: if current process is already non-root and no sandbox user
|
|
93
|
+
// configured, we leave sandbox disabled rather than inventing a user.
|
|
94
|
+
cachedIdentity = {
|
|
95
|
+
enabled: false,
|
|
96
|
+
reason: "No ATABEY_SANDBOX_UID / ATABEY_SANDBOX_USER configured — shell runs as current user",
|
|
97
|
+
user,
|
|
98
|
+
};
|
|
99
|
+
return cachedIdentity;
|
|
100
|
+
}
|
|
101
|
+
// Dropping privileges only works if we are root (or have CAP_SETUID).
|
|
102
|
+
// If we are a normal user with a different target uid, spawn will fail —
|
|
103
|
+
// detect and warn via reason, still pass options (caller sees Permission error).
|
|
104
|
+
const canSetUid = typeof process.getuid === "function" && process.getuid() === 0;
|
|
105
|
+
if (!canSetUid && typeof process.getuid === "function" && process.getuid() !== uid) {
|
|
106
|
+
cachedIdentity = {
|
|
107
|
+
enabled: false,
|
|
108
|
+
uid,
|
|
109
|
+
gid,
|
|
110
|
+
user,
|
|
111
|
+
reason: `Sandbox uid=${uid} requested but process uid=${process.getuid()} is not root; ` +
|
|
112
|
+
`setuid will fail. Run MCP as root with a dedicated sandbox user, or unset sandbox env.`,
|
|
113
|
+
};
|
|
114
|
+
return cachedIdentity;
|
|
115
|
+
}
|
|
116
|
+
cachedIdentity = {
|
|
117
|
+
enabled: true,
|
|
118
|
+
uid,
|
|
119
|
+
gid,
|
|
120
|
+
user,
|
|
121
|
+
};
|
|
122
|
+
return cachedIdentity;
|
|
123
|
+
}
|
|
124
|
+
export function clearSandboxIdentityCache() {
|
|
125
|
+
cachedIdentity = null;
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Build spawn options with uid/gid when sandbox is active.
|
|
129
|
+
*/
|
|
130
|
+
export function applySandboxToSpawnOptions(options = {}) {
|
|
131
|
+
const { disableSandbox, ...rest } = options;
|
|
132
|
+
if (disableSandbox)
|
|
133
|
+
return { ...rest };
|
|
134
|
+
const identity = resolveSandboxIdentity();
|
|
135
|
+
if (!identity.enabled || identity.uid === undefined) {
|
|
136
|
+
return { ...rest };
|
|
137
|
+
}
|
|
138
|
+
return {
|
|
139
|
+
...rest,
|
|
140
|
+
uid: identity.uid,
|
|
141
|
+
...(identity.gid !== undefined ? { gid: identity.gid } : {}),
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* spawn() wrapper that applies OS sandbox identity when configured.
|
|
146
|
+
*/
|
|
147
|
+
export function sandboxSpawn(command, args, options = {}) {
|
|
148
|
+
const opts = applySandboxToSpawnOptions(options);
|
|
149
|
+
return spawn(command, args, opts);
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Human-readable status for CLI diagnostics.
|
|
153
|
+
*/
|
|
154
|
+
export function getSandboxStatus() {
|
|
155
|
+
return {
|
|
156
|
+
platform: process.platform,
|
|
157
|
+
identity: resolveSandboxIdentity(),
|
|
158
|
+
processUid: typeof process.getuid === "function" ? process.getuid() : null,
|
|
159
|
+
processGid: typeof process.getgid === "function" ? process.getgid() : null,
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
/** Default restricted paths agents should not touch even with shell allow-list. */
|
|
163
|
+
export const SANDBOX_PROTECTED_HINTS = [
|
|
164
|
+
"/etc",
|
|
165
|
+
"/usr",
|
|
166
|
+
"/bin",
|
|
167
|
+
"/sbin",
|
|
168
|
+
"/System",
|
|
169
|
+
pathHomeDotSsh(),
|
|
170
|
+
];
|
|
171
|
+
function pathHomeDotSsh() {
|
|
172
|
+
try {
|
|
173
|
+
return `${os.homedir()}/.ssh`;
|
|
174
|
+
}
|
|
175
|
+
catch {
|
|
176
|
+
return "~/.ssh";
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
//# sourceMappingURL=sandbox.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sandbox.js","sourceRoot":"","sources":["../../../../../../shared/src/modules/sandbox/sandbox.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../shared/src/modules/security/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC;AACzB,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* [PII] Personally Identifiable Information Masking Service
|
|
3
|
+
*
|
|
4
|
+
* Detects and masks sensitive data in compliance with KVKK/GDPR.
|
|
5
|
+
* Used in audit log, logger, storage layers, and MCP middleware.
|
|
6
|
+
*
|
|
7
|
+
* Supported patterns:
|
|
8
|
+
* - Email addresses
|
|
9
|
+
* - Phone numbers (international, Turkish, US, UK)
|
|
10
|
+
* - TC Identification number (11 digits)
|
|
11
|
+
* - API keys / tokens (OpenAI, Anthropic, Google, GitHub, generic)
|
|
12
|
+
* - Bearer tokens / JWTs
|
|
13
|
+
* - IP addresses (IPv4, IPv6)
|
|
14
|
+
* - Credit card numbers (AMEX, Visa, Mastercard, etc.)
|
|
15
|
+
* - Password / secret fields in structured data
|
|
16
|
+
* - Bank account / IBAN
|
|
17
|
+
* - Date of birth / full address patterns
|
|
18
|
+
* - Custom names (configurable)
|
|
19
|
+
*/
|
|
20
|
+
/**
|
|
21
|
+
* Mask sensitive data in a text string.
|
|
22
|
+
*/
|
|
23
|
+
export declare function maskText(text: string): string;
|
|
24
|
+
/**
|
|
25
|
+
* Recursively mask sensitive fields in an object.
|
|
26
|
+
* Returns a new object with sensitive values redacted.
|
|
27
|
+
* Strict mode: when true, also masks values in objects even if the key
|
|
28
|
+
* is not a known sensitive field name (catches data passed to unknown schemas).
|
|
29
|
+
*/
|
|
30
|
+
export declare function maskObject(obj: unknown, depth?: number, strictMode?: boolean): unknown;
|
|
31
|
+
/**
|
|
32
|
+
* Check if a string contains potential PII.
|
|
33
|
+
* Useful for warning before sending data to external APIs.
|
|
34
|
+
*/
|
|
35
|
+
export declare function containsPII(text: string): boolean;
|
|
36
|
+
/**
|
|
37
|
+
* Check if an object contains PII in any of its string values (recursive).
|
|
38
|
+
*/
|
|
39
|
+
export declare function containsPIIInObject(obj: unknown, depth?: number): boolean;
|
|
40
|
+
/**
|
|
41
|
+
* Data classification levels for audit/log decisions.
|
|
42
|
+
*/
|
|
43
|
+
export type DataClassification = "public" | "internal" | "confidential" | "restricted" | "critical";
|
|
44
|
+
/**
|
|
45
|
+
* Classify a piece of data based on content analysis.
|
|
46
|
+
*/
|
|
47
|
+
export declare function classifyData(text: string): DataClassification;
|
|
48
|
+
/**
|
|
49
|
+
* Mask the content field of an MCP tool result.
|
|
50
|
+
* This is used by the MCP middleware layer to automatically
|
|
51
|
+
* sanitize all tool outputs before they reach the AI.
|
|
52
|
+
*/
|
|
53
|
+
export declare function maskToolResult(result: {
|
|
54
|
+
content: Array<{
|
|
55
|
+
type: string;
|
|
56
|
+
text: string;
|
|
57
|
+
}>;
|
|
58
|
+
}): {
|
|
59
|
+
content: Array<{
|
|
60
|
+
type: string;
|
|
61
|
+
text: string;
|
|
62
|
+
}>;
|
|
63
|
+
};
|
|
64
|
+
/**
|
|
65
|
+
* Mask sensitive arguments in an MCP tool call.
|
|
66
|
+
* This is applied BEFORE the tool handler executes, ensuring
|
|
67
|
+
* PII never reaches any processing layer unnecessarily.
|
|
68
|
+
*/
|
|
69
|
+
export declare function maskToolArgs(args: Record<string, unknown>): Record<string, unknown>;
|
|
70
|
+
export declare function shouldBypassPiiMaskingForPath(filePath?: string): boolean;
|