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,276 @@
|
|
|
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
|
+
/** Turkish TC Kimlik No checksum (reduces over-masking of arbitrary 11-digit numbers). */
|
|
21
|
+
function isValidTckn(value) {
|
|
22
|
+
if (!/^[1-9]\d{10}$/.test(value))
|
|
23
|
+
return false;
|
|
24
|
+
const d = value.split("").map(Number);
|
|
25
|
+
const odd = d[0] + d[2] + d[4] + d[6] + d[8];
|
|
26
|
+
const even = d[1] + d[3] + d[5] + d[7];
|
|
27
|
+
const tenth = (((odd * 7) - even) % 10 + 10) % 10;
|
|
28
|
+
if (tenth !== d[9])
|
|
29
|
+
return false;
|
|
30
|
+
const sumFirst10 = d.slice(0, 10).reduce((a, b) => a + b, 0);
|
|
31
|
+
return sumFirst10 % 10 === d[10];
|
|
32
|
+
}
|
|
33
|
+
function isValidIpv4(value) {
|
|
34
|
+
return value.split(".").every((o) => {
|
|
35
|
+
const n = Number(o);
|
|
36
|
+
return Number.isInteger(n) && n >= 0 && n <= 255;
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
/** Only treat a colon-group as IPv6 when it has a hex letter or a `::` (not a time). */
|
|
40
|
+
function looksLikeIpv6(value) {
|
|
41
|
+
return value.includes("::") || /[a-fA-F]/.test(value);
|
|
42
|
+
}
|
|
43
|
+
const SENSITIVE_PATTERNS = [
|
|
44
|
+
// JWT tokens (complete JWT format) - must be before Bearer
|
|
45
|
+
{ pattern: /eyJ[a-zA-Z0-9_-]+\.eyJ[a-zA-Z0-9_-]+\.[a-zA-Z0-9_-]+/g, replacement: "***-JWT-REDACTED-***" },
|
|
46
|
+
// Bearer tokens in Authorization headers (case-insensitive; includes base64url chars)
|
|
47
|
+
{ pattern: /Bearer\s+[A-Za-z0-9._~+/=-]+/gi, replacement: "Bearer ***-REDACTED-***" },
|
|
48
|
+
// Basic auth in Authorization headers
|
|
49
|
+
{ pattern: /Basic\s+[a-zA-Z0-9=+/]+/gi, replacement: "Basic ***-REDACTED-***" },
|
|
50
|
+
// API keys (common formats) - must be before generic patterns
|
|
51
|
+
// Note: ghp_ tokens can contain digits that look like phone numbers, so we mask the entire prefix + suffix
|
|
52
|
+
{ pattern: /\b(sk-[a-zA-Z0-9]{20,}|pk-[a-zA-Z0-9]{20,}|xai-[a-zA-Z0-9]{20,}|AIza[0-9A-Za-z_-]{35}|ghp_[a-zA-Z0-9]{36,}|gho_[a-zA-Z0-9]{36,}|ghu_[a-zA-Z0-9]{36,}|ghb_[a-zA-Z0-9]{36,}|github_pat_[a-zA-Z0-9]{36,}|sk-[a-zA-Z0-9_-]{32,}|sk-[a-zA-Z0-9]{48,}|whsec_[a-zA-Z0-9]{16,})\b/g, replacement: "***-REDACTED-***" },
|
|
53
|
+
// Social Security Number (US SSN: XXX-XX-XXXX) - must be before generic phone
|
|
54
|
+
{ pattern: /\b(?!000|666|9[0-9]{2})\d{3}-(?!00)\d{2}-(?!0000)\d{4}\b/g, replacement: "***-**-****" },
|
|
55
|
+
// Date of birth patterns - must be before generic phone
|
|
56
|
+
{ pattern: /\b(0[1-9]|[12][0-9]|3[01])[/.-](0[1-9]|1[0-2])[/.-](19[0-9]{2}|20[0-9]{2})\b/g, replacement: "**/**/****" },
|
|
57
|
+
// IBAN (international bank account) - strictly matches ISO country codes and length >= 15
|
|
58
|
+
{ pattern: /\b(?:TR|DE|FR|GB|IT|ES|NL|CH|AT|BE|PL|SE|NO|DK|FI|PT|GR|IE|CZ|RO|HU|BG|HR|LT|SI|LV|EE|CY|LU|MT|SK|US|CA)\d{2}[A-Z0-9]{11,30}\b/g, replacement: "****-IBAN-REDACTED-****" },
|
|
59
|
+
// TC Kimlik (11 digits) — validated with the official checksum to avoid masking arbitrary IDs
|
|
60
|
+
{ pattern: /\b[1-9]\d{10}\b/g, replacement: "***********", validate: isValidTckn },
|
|
61
|
+
// Email
|
|
62
|
+
{ pattern: /[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}/g, replacement: "***@***" },
|
|
63
|
+
// Phone (Turkish: +90 5xx xxx xx xx, 05xx xxx xx xx, or formatted 5xx xxx xx xx)
|
|
64
|
+
{ pattern: /(?:(?:\+90|0090|\b0)[\s.-]?)5\d{2}[\s.-]?\d{3}[\s.-]?\d{2}[\s.-]?\d{2}\b/g, replacement: "***-***-****" },
|
|
65
|
+
{ pattern: /\b5\d{2}[\s.-]\d{3}[\s.-]\d{2}[\s.-]\d{2}\b/g, replacement: "***-***-****" },
|
|
66
|
+
// Phone (international with leading + or delimited format e.g. +1 (555) 123-4567, +44 20 7946 0950)
|
|
67
|
+
// Delimiters or leading '+' are strictly required so that raw Unix timestamps / IDs are not falsely masked.
|
|
68
|
+
{ pattern: /\b(?:\+\d{1,3}[\s.-]?)?(?:\(\d{2,4}\)[\s.-]?|\d{2,4}[\s.-])\d{3,4}[\s.-]\d{2,4}(?:[\s.-]\d{2,4})?\b/g, replacement: "***-***-****" },
|
|
69
|
+
// IP addresses (IPv4) — validated octets only
|
|
70
|
+
{ pattern: /\b(?:\d{1,3}\.){3}\d{1,3}\b/g, replacement: "***.***.***.***", validate: isValidIpv4 },
|
|
71
|
+
// IP addresses (IPv6 - full form)
|
|
72
|
+
{ pattern: /\b(?:[0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}\b/g, replacement: "****:****:****:****" },
|
|
73
|
+
// IPv6 compressed — requires `::` or a hex letter so clock times (10:30:45) are not masked
|
|
74
|
+
{ pattern: /\b(?:[0-9a-fA-F]{0,4}:){2,7}[0-9a-fA-F]{0,4}\b/g, replacement: "****:****:****", validate: looksLikeIpv6 },
|
|
75
|
+
// Credit card (Delimited 16 digits or major card issuer BIN prefixes: Visa 4, MC 51-55/22-27, Discover 6011/65)
|
|
76
|
+
// Prevents false-positive masking of 13-digit Unix timestamps (e.g. 1713000000000)
|
|
77
|
+
{ pattern: /\b\d{4}[ -]\d{4}[ -]\d{4}[ -]\d{4}\b/g, replacement: "****-****-****-****" },
|
|
78
|
+
{ pattern: /\b4\d{3}[ -]?\d{4}[ -]?\d{4}[ -]?\d{4}\b/g, replacement: "****-****-****-****" },
|
|
79
|
+
{ pattern: /\b(?:5[1-5]\d{2}|222[1-9]|22[3-9]\d|2[3-6]\d{2}|27[01]\d|2720)[ -]?\d{4}[ -]?\d{4}[ -]?\d{4}\b/g, replacement: "****-****-****-****" },
|
|
80
|
+
{ pattern: /\b(?:6011|65\d{2})[ -]?\d{4}[ -]?\d{4}[ -]?\d{4}\b/g, replacement: "****-****-****-****" },
|
|
81
|
+
// AMEX (15 digits, starts with 34/37) — no whitespace/newlines, exact length
|
|
82
|
+
{ pattern: /\b3[47]\d{2}[ -]?\d{6}[ -]?\d{5}\b/g, replacement: "****-****-***" },
|
|
83
|
+
// Password fields in JSON (double-quoted)
|
|
84
|
+
{ pattern: /"(password|passwd|secret|api_key|apiKey|apikey|auth_token|refresh_token|access_token)"\s*:\s*"[^"]+"/gi, replacement: "\"$1\": \"***-REDACTED-***\"" },
|
|
85
|
+
// Password fields in JSON (single-quoted)
|
|
86
|
+
{ pattern: /'(password|passwd|secret|api_key|apiKey|apikey|auth_token|refresh_token|access_token)'\s*:\s*'[^']*'/gi, replacement: "'$1': '***-REDACTED-***'" },
|
|
87
|
+
// Turkish address patterns (contextual: only when accompanied by street/neighborhood identifiers)
|
|
88
|
+
{ pattern: /(?:(?:sokak|cadde|mahalle|bulvar|apt|daire|blok)[^,\n]*\b(?:no|kapı no|daire no|numara)[:\s]*\d+)/gi, replacement: "no: ****" },
|
|
89
|
+
];
|
|
90
|
+
// Fields that are considered sensitive and should always be redacted in structured data
|
|
91
|
+
const SENSITIVE_FIELDS = [
|
|
92
|
+
"password", "passwd", "secret", "apiKey", "api_key", "apikey",
|
|
93
|
+
"token", "accessToken", "access_token", "refreshToken", "refresh_token", "authToken", "auth_token",
|
|
94
|
+
"authorization", "Authorization", "bearer",
|
|
95
|
+
"email", "e_mail", "eMail",
|
|
96
|
+
"phone", "phoneNumber", "phone_number", "telephone", "telephoneNumber", "mobile", "mobilePhone", "cellPhone",
|
|
97
|
+
"creditCard", "credit_card", "ccNumber", "cc_number", "ccn", "cvv", "cvv2", "cvc",
|
|
98
|
+
"ssn", "socialSecurity", "social_security",
|
|
99
|
+
"tcKimlik", "tc_kimlik", "identityNumber", "identity_number", "idNumber", "id_number", "nationalId",
|
|
100
|
+
"ipAddress", "ip_address", "ip",
|
|
101
|
+
"dob", "dateOfBirth", "date_of_birth", "birthDate", "birth_date",
|
|
102
|
+
"iban", "IBAN", "bankAccount", "bank_account",
|
|
103
|
+
"address", "homeAddress", "workAddress", "billingAddress", "shippingAddress",
|
|
104
|
+
"fullName", "firstName", "lastName", "surname", "middleName",
|
|
105
|
+
];
|
|
106
|
+
/**
|
|
107
|
+
* Mask sensitive data in a text string.
|
|
108
|
+
*/
|
|
109
|
+
export function maskText(text) {
|
|
110
|
+
if (!text || typeof text !== "string")
|
|
111
|
+
return text;
|
|
112
|
+
let masked = text;
|
|
113
|
+
for (const { pattern, replacement, validate } of SENSITIVE_PATTERNS) {
|
|
114
|
+
if (validate) {
|
|
115
|
+
masked = masked.replace(pattern, (match) => (validate(match) ? replacement : match));
|
|
116
|
+
}
|
|
117
|
+
else {
|
|
118
|
+
masked = masked.replace(pattern, replacement);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
return masked;
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Recursively mask sensitive fields in an object.
|
|
125
|
+
* Returns a new object with sensitive values redacted.
|
|
126
|
+
* Strict mode: when true, also masks values in objects even if the key
|
|
127
|
+
* is not a known sensitive field name (catches data passed to unknown schemas).
|
|
128
|
+
*/
|
|
129
|
+
export function maskObject(obj, depth = 0, strictMode = false) {
|
|
130
|
+
if (depth > 10)
|
|
131
|
+
return strictMode ? "***-REDACTED-***" : obj; // Prevent infinite recursion
|
|
132
|
+
if (obj === null || obj === undefined)
|
|
133
|
+
return obj;
|
|
134
|
+
if (typeof Buffer !== "undefined" && Buffer.isBuffer(obj))
|
|
135
|
+
return `<Buffer ${obj.length} bytes>`;
|
|
136
|
+
if (typeof obj === "string")
|
|
137
|
+
return maskText(obj);
|
|
138
|
+
if (typeof obj !== "object")
|
|
139
|
+
return obj;
|
|
140
|
+
if (Array.isArray(obj)) {
|
|
141
|
+
return obj.map(item => maskObject(item, depth + 1, strictMode));
|
|
142
|
+
}
|
|
143
|
+
const result = {};
|
|
144
|
+
for (const [key, value] of Object.entries(obj)) {
|
|
145
|
+
// Sensitive by exact name, or (strict mode) by name heuristic.
|
|
146
|
+
const isSensitive = SENSITIVE_FIELDS.includes(key) ||
|
|
147
|
+
(strictMode && /(pass|secret|token|key|credential|auth)/i.test(key));
|
|
148
|
+
if (isSensitive) {
|
|
149
|
+
result[key] = typeof value === "string" ? "***-REDACTED-***" : maskObject(value, depth + 1, strictMode);
|
|
150
|
+
}
|
|
151
|
+
else if (typeof value === "string") {
|
|
152
|
+
result[key] = maskText(value);
|
|
153
|
+
}
|
|
154
|
+
else if (typeof value === "object") {
|
|
155
|
+
result[key] = maskObject(value, depth + 1, strictMode);
|
|
156
|
+
}
|
|
157
|
+
else {
|
|
158
|
+
result[key] = value;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
return result;
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Check if a string contains potential PII.
|
|
165
|
+
* Useful for warning before sending data to external APIs.
|
|
166
|
+
*/
|
|
167
|
+
export function containsPII(text) {
|
|
168
|
+
for (const { pattern, validate } of SENSITIVE_PATTERNS) {
|
|
169
|
+
const re = new RegExp(pattern.source, pattern.flags);
|
|
170
|
+
let m;
|
|
171
|
+
while ((m = re.exec(text)) !== null) {
|
|
172
|
+
if (!validate || validate(m[0]))
|
|
173
|
+
return true;
|
|
174
|
+
if (m.index === re.lastIndex)
|
|
175
|
+
re.lastIndex++; // avoid zero-length loops
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
return false;
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Check if an object contains PII in any of its string values (recursive).
|
|
182
|
+
*/
|
|
183
|
+
export function containsPIIInObject(obj, depth = 0) {
|
|
184
|
+
if (depth > 10)
|
|
185
|
+
return false;
|
|
186
|
+
if (obj === null || obj === undefined)
|
|
187
|
+
return false;
|
|
188
|
+
if (typeof obj === "string")
|
|
189
|
+
return containsPII(obj);
|
|
190
|
+
if (typeof obj !== "object")
|
|
191
|
+
return false;
|
|
192
|
+
if (Array.isArray(obj)) {
|
|
193
|
+
return obj.some(item => containsPIIInObject(item, depth + 1));
|
|
194
|
+
}
|
|
195
|
+
for (const [, value] of Object.entries(obj)) {
|
|
196
|
+
if (typeof value === "string") {
|
|
197
|
+
if (containsPII(value))
|
|
198
|
+
return true;
|
|
199
|
+
}
|
|
200
|
+
else if (typeof value === "object") {
|
|
201
|
+
if (containsPIIInObject(value, depth + 1))
|
|
202
|
+
return true;
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
return false;
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* Classify a piece of data based on content analysis.
|
|
209
|
+
*/
|
|
210
|
+
export function classifyData(text) {
|
|
211
|
+
if (!text)
|
|
212
|
+
return "public";
|
|
213
|
+
// Check for highly sensitive / critical data
|
|
214
|
+
if (/\b(sk-[a-zA-Z0-9]{20,}|Bearer\s+|eyJ[a-zA-Z0-9_-]+\.)/.test(text) ||
|
|
215
|
+
/\b[1-9][0-9]{10}\b/.test(text) ||
|
|
216
|
+
/"(password|secret|apiKey)"/i.test(text) ||
|
|
217
|
+
/\b[A-Z]{2}[0-9]{2}[A-Z0-9]{1,30}\b/.test(text) // IBAN
|
|
218
|
+
) {
|
|
219
|
+
return "restricted";
|
|
220
|
+
}
|
|
221
|
+
// Check for personally identifiable / confidential data
|
|
222
|
+
if (/[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}/.test(text) ||
|
|
223
|
+
/(\+90|0)?\s?[0-9]{3}\s?[0-9]{3}\s?[0-9]{2}\s?[0-9]{2}/.test(text) ||
|
|
224
|
+
/\b(?:[0-9]{1,3}\.){3}[0-9]{1,3}\b/.test(text) ||
|
|
225
|
+
/\b(0[1-9]|[12][0-9]|3[01])[/.-](0[1-9]|1[0-2])[/.-](19[0-9]{2}|20[0-9]{2})\b/.test(text)) {
|
|
226
|
+
return "confidential";
|
|
227
|
+
}
|
|
228
|
+
return "internal";
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* Mask the content field of an MCP tool result.
|
|
232
|
+
* This is used by the MCP middleware layer to automatically
|
|
233
|
+
* sanitize all tool outputs before they reach the AI.
|
|
234
|
+
*/
|
|
235
|
+
export function maskToolResult(result) {
|
|
236
|
+
if (!result || !result.content)
|
|
237
|
+
return result;
|
|
238
|
+
return {
|
|
239
|
+
...result,
|
|
240
|
+
content: result.content.map(block => ({
|
|
241
|
+
...block,
|
|
242
|
+
text: block.type === "text" ? maskText(block.text) : block.text,
|
|
243
|
+
})),
|
|
244
|
+
};
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* Mask sensitive arguments in an MCP tool call.
|
|
248
|
+
* This is applied BEFORE the tool handler executes, ensuring
|
|
249
|
+
* PII never reaches any processing layer unnecessarily.
|
|
250
|
+
*/
|
|
251
|
+
export function maskToolArgs(args) {
|
|
252
|
+
const masked = maskObject(args, 0, true);
|
|
253
|
+
return masked;
|
|
254
|
+
}
|
|
255
|
+
/**
|
|
256
|
+
* Paths where PII masking of tool *results* is intentionally skipped to avoid
|
|
257
|
+
* corrupting technical content (tests, docs, examples, fixtures). Real
|
|
258
|
+
* production secrets are still caught by the secret-leak guard.
|
|
259
|
+
*/
|
|
260
|
+
const PII_BYPASS_PATH_PATTERNS = [
|
|
261
|
+
/(^|\/)tests?\//i,
|
|
262
|
+
/(^|\/)__tests__\//i,
|
|
263
|
+
/\.(test|spec)\.[cm]?[jt]sx?$/i,
|
|
264
|
+
/\.mdx?$/i,
|
|
265
|
+
/(^|\/)docs?\//i,
|
|
266
|
+
/\.env\.example$/i,
|
|
267
|
+
/\.example$/i,
|
|
268
|
+
/(^|\/)fixtures?\//i,
|
|
269
|
+
];
|
|
270
|
+
export function shouldBypassPiiMaskingForPath(filePath) {
|
|
271
|
+
if (!filePath)
|
|
272
|
+
return false;
|
|
273
|
+
const normalized = filePath.replace(/\\/g, "/");
|
|
274
|
+
return PII_BYPASS_PATH_PATTERNS.some((re) => re.test(normalized));
|
|
275
|
+
}
|
|
276
|
+
//# sourceMappingURL=pii.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pii.js","sourceRoot":"","sources":["../../../../../../shared/src/modules/security/pii.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PolicyGate — single decision point for mutating / sensitive operations.
|
|
3
|
+
*
|
|
4
|
+
* Phase 0 foundation for enterprise hard-gate security.
|
|
5
|
+
* Every MCP mutating tool should call evaluateToolCall() before side effects.
|
|
6
|
+
*
|
|
7
|
+
* Decision is pure (no I/O) except optional hooks; MCP layer may enrich with
|
|
8
|
+
* project-specific RBAC before/after this gate.
|
|
9
|
+
*/
|
|
10
|
+
export type PolicyEffect = "allow" | "deny";
|
|
11
|
+
export type PolicyCode = "ALLOW" | "DENY_UNKNOWN_TOOL" | "DENY_PATH_TRAVERSAL" | "DENY_PROTECTED_PATH" | "DENY_ABSOLUTE_ESCAPE" | "DENY_RECON_MUTATION" | "DENY_SHELL_METACHAR" | "DENY_EMPTY_PATH";
|
|
12
|
+
export interface PolicyDecision {
|
|
13
|
+
effect: PolicyEffect;
|
|
14
|
+
code: PolicyCode;
|
|
15
|
+
reason: string;
|
|
16
|
+
}
|
|
17
|
+
export interface ToolCallPolicyInput {
|
|
18
|
+
tool: string;
|
|
19
|
+
agent: string;
|
|
20
|
+
args: Record<string, unknown>;
|
|
21
|
+
/** Optional agent tier when known (supreme | core | recon). */
|
|
22
|
+
tier?: "supreme" | "core" | "recon";
|
|
23
|
+
}
|
|
24
|
+
/** Tools that mutate disk, process state, or external systems. */
|
|
25
|
+
export declare const MUTATING_TOOLS: Set<string>;
|
|
26
|
+
/**
|
|
27
|
+
* Normalize agent id to @name form.
|
|
28
|
+
*/
|
|
29
|
+
export declare function normalizeAgentId(agent: string): string;
|
|
30
|
+
/**
|
|
31
|
+
* Evaluate a tool call against baseline hard rules (path safety, recon, shell meta).
|
|
32
|
+
* Does NOT replace full RBAC matrix — call permissions layer separately or wrap here later.
|
|
33
|
+
*/
|
|
34
|
+
export declare function evaluateToolCall(input: ToolCallPolicyInput): PolicyDecision;
|
|
35
|
+
/**
|
|
36
|
+
* True when decision is allow.
|
|
37
|
+
*/
|
|
38
|
+
export declare function isAllowed(decision: PolicyDecision): boolean;
|
|
39
|
+
/**
|
|
40
|
+
* Format decision for MCP error payloads.
|
|
41
|
+
*/
|
|
42
|
+
export declare function formatPolicyDenial(decision: PolicyDecision): string;
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PolicyGate — single decision point for mutating / sensitive operations.
|
|
3
|
+
*
|
|
4
|
+
* Phase 0 foundation for enterprise hard-gate security.
|
|
5
|
+
* Every MCP mutating tool should call evaluateToolCall() before side effects.
|
|
6
|
+
*
|
|
7
|
+
* Decision is pure (no I/O) except optional hooks; MCP layer may enrich with
|
|
8
|
+
* project-specific RBAC before/after this gate.
|
|
9
|
+
*/
|
|
10
|
+
/** Tools that mutate disk, process state, or external systems. */
|
|
11
|
+
export const MUTATING_TOOLS = new Set([
|
|
12
|
+
"write_file",
|
|
13
|
+
"replace_text",
|
|
14
|
+
"patch_file",
|
|
15
|
+
"batch_surgical_edit",
|
|
16
|
+
"run_shell_command",
|
|
17
|
+
"run_tests",
|
|
18
|
+
"check_lint",
|
|
19
|
+
"analyze_code_quality",
|
|
20
|
+
"check_architecture_compliance",
|
|
21
|
+
"delete_knowledge",
|
|
22
|
+
"update_project_memory",
|
|
23
|
+
"store_knowledge",
|
|
24
|
+
"update_contract_hash",
|
|
25
|
+
// Control-plane / security-relevant operations
|
|
26
|
+
"http_proxy_request",
|
|
27
|
+
"orchestrate_loop",
|
|
28
|
+
"submit_plan",
|
|
29
|
+
"approve_operation",
|
|
30
|
+
"register_agent",
|
|
31
|
+
"acquire_lock",
|
|
32
|
+
"release_lock",
|
|
33
|
+
]);
|
|
34
|
+
/** Path-like arg keys commonly used by tools. */
|
|
35
|
+
const PATH_KEYS = ["path", "file", "filePath", "target", "output", "source", "archive", "filename"];
|
|
36
|
+
/** Relative path segments that must never be written by agents by default. */
|
|
37
|
+
const PROTECTED_PATH_PATTERNS = [
|
|
38
|
+
/(^|\/)\.env(\.|$)/i,
|
|
39
|
+
/(^|\/)\.env\.[^/]+$/i,
|
|
40
|
+
/(^|\/)\.ssh(\/|$)/i,
|
|
41
|
+
/(^|\/)\.gnupg(\/|$)/i,
|
|
42
|
+
/(^|\/)id_rsa$/i,
|
|
43
|
+
/(^|\/)id_ed25519$/i,
|
|
44
|
+
/(^|\/)credentials\.json$/i,
|
|
45
|
+
/(^|\/)\.aws\/credentials$/i,
|
|
46
|
+
/(^|\/)\.npmrc$/i,
|
|
47
|
+
/(^|\/)\.netrc$/i,
|
|
48
|
+
// Git/container/kube config and hooks — rewriting these yields code execution.
|
|
49
|
+
/(^|\/)\.git\/config$/i,
|
|
50
|
+
/(^|\/)\.git\/hooks(\/|$)/i,
|
|
51
|
+
/(^|\/)\.docker\/config\.json$/i,
|
|
52
|
+
/(^|\/)\.kube\/config$/i,
|
|
53
|
+
/(^|\/)\.gitconfig$/i,
|
|
54
|
+
// Private keys / certs
|
|
55
|
+
/\.pem$/i,
|
|
56
|
+
/\.key$/i,
|
|
57
|
+
/\.crt$/i,
|
|
58
|
+
/(^|\/)\.bashrc$/i,
|
|
59
|
+
/(^|\/)\.zshrc$/i,
|
|
60
|
+
/(^|\/)\.profile$/i,
|
|
61
|
+
/(^|\/)\.bash_profile$/i,
|
|
62
|
+
];
|
|
63
|
+
function allow(code = "ALLOW", reason = "Allowed") {
|
|
64
|
+
return { effect: "allow", code, reason };
|
|
65
|
+
}
|
|
66
|
+
function deny(code, reason) {
|
|
67
|
+
return { effect: "deny", code, reason };
|
|
68
|
+
}
|
|
69
|
+
function collectPaths(args) {
|
|
70
|
+
const paths = [];
|
|
71
|
+
for (const key of PATH_KEYS) {
|
|
72
|
+
const v = args[key];
|
|
73
|
+
if (typeof v === "string" && v.trim())
|
|
74
|
+
paths.push(v.trim());
|
|
75
|
+
}
|
|
76
|
+
// batch_surgical_edit
|
|
77
|
+
if (Array.isArray(args.edits)) {
|
|
78
|
+
for (const edit of args.edits) {
|
|
79
|
+
if (edit && typeof edit === "object" && typeof edit.path === "string") {
|
|
80
|
+
paths.push(edit.path.trim());
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
return paths;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Normalize agent id to @name form.
|
|
88
|
+
*/
|
|
89
|
+
export function normalizeAgentId(agent) {
|
|
90
|
+
const a = (agent || "mcp-client").trim();
|
|
91
|
+
if (!a)
|
|
92
|
+
return "@mcp-client";
|
|
93
|
+
return a.startsWith("@") ? a : `@${a}`;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Evaluate a tool call against baseline hard rules (path safety, recon, shell meta).
|
|
97
|
+
* Does NOT replace full RBAC matrix — call permissions layer separately or wrap here later.
|
|
98
|
+
*/
|
|
99
|
+
export function evaluateToolCall(input) {
|
|
100
|
+
const tool = input.tool;
|
|
101
|
+
const agent = normalizeAgentId(input.agent);
|
|
102
|
+
const tier = input.tier;
|
|
103
|
+
const args = input.args || {};
|
|
104
|
+
if (!tool) {
|
|
105
|
+
return deny("DENY_UNKNOWN_TOOL", "Missing tool name");
|
|
106
|
+
}
|
|
107
|
+
const isMutating = MUTATING_TOOLS.has(tool);
|
|
108
|
+
// Path safety for any tool that carries paths (read or write)
|
|
109
|
+
const paths = collectPaths(args);
|
|
110
|
+
for (const p of paths) {
|
|
111
|
+
if (!p) {
|
|
112
|
+
return deny("DENY_EMPTY_PATH", "Empty path argument is not allowed");
|
|
113
|
+
}
|
|
114
|
+
// Null bytes / obvious traversal
|
|
115
|
+
if (p.includes("\0")) {
|
|
116
|
+
return deny("DENY_PATH_TRAVERSAL", "Path contains illegal null byte");
|
|
117
|
+
}
|
|
118
|
+
// Windows + POSIX traversal
|
|
119
|
+
if (p.includes("..")) {
|
|
120
|
+
// Allow only if not used as parent segment — simple hard deny for Phase 0
|
|
121
|
+
const segments = p.replace(/\\/g, "/").split("/");
|
|
122
|
+
if (segments.some((s) => s === "..")) {
|
|
123
|
+
return deny("DENY_PATH_TRAVERSAL", `Path traversal denied for "${p}". Paths must stay inside the project root.`);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
// Absolute paths that look like host escapes (MCP should still safePath; belt-and-suspenders)
|
|
127
|
+
if (p.startsWith("/") || /^[A-Za-z]:[\\/]/.test(p)) {
|
|
128
|
+
// Absolute can be OK if still under project after safePath — flag high-risk patterns only
|
|
129
|
+
if (p.startsWith("/etc") ||
|
|
130
|
+
p.startsWith("/usr") ||
|
|
131
|
+
p.startsWith("/bin") ||
|
|
132
|
+
p.startsWith("/sbin") ||
|
|
133
|
+
p.includes("/.ssh") ||
|
|
134
|
+
p.startsWith("/System")) {
|
|
135
|
+
return deny("DENY_ABSOLUTE_ESCAPE", `Absolute system path denied: "${p}"`);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
if (isMutating) {
|
|
139
|
+
const normalized = p.replace(/\\/g, "/");
|
|
140
|
+
for (const re of PROTECTED_PATH_PATTERNS) {
|
|
141
|
+
if (re.test(normalized)) {
|
|
142
|
+
return deny("DENY_PROTECTED_PATH", `Write/mutate denied for protected path "${p}". Secrets and credential files are blocked by PolicyGate.`);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
// Recon agents: no mutating tools (matrix may later grant exceptions — Phase 0 hard deny)
|
|
148
|
+
if (isMutating && tier === "recon") {
|
|
149
|
+
return deny("DENY_RECON_MUTATION", `Agent ${agent} (tier: recon) cannot invoke mutating tool "${tool}".`);
|
|
150
|
+
}
|
|
151
|
+
// Shell metacharacters (defense in depth; shell tool also checks)
|
|
152
|
+
if (tool === "run_shell_command") {
|
|
153
|
+
const command = String(args.command ?? "");
|
|
154
|
+
if (/[;&|><$`\n\r]/.test(command)) {
|
|
155
|
+
return deny("DENY_SHELL_METACHAR", "Shell metacharacters are forbidden to prevent command injection.");
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
return allow();
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* True when decision is allow.
|
|
162
|
+
*/
|
|
163
|
+
export function isAllowed(decision) {
|
|
164
|
+
return decision.effect === "allow";
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Format decision for MCP error payloads.
|
|
168
|
+
*/
|
|
169
|
+
export function formatPolicyDenial(decision) {
|
|
170
|
+
return `[POLICY_GATE] ${decision.code}: ${decision.reason}`;
|
|
171
|
+
}
|
|
172
|
+
//# sourceMappingURL=policy-gate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"policy-gate.js","sourceRoot":"","sources":["../../../../../../shared/src/modules/security/policy-gate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Data retention categories and default durations (days)
|
|
3
|
+
*/
|
|
4
|
+
export declare const RETENTION_POLICIES: Record<string, number>;
|
|
5
|
+
/**
|
|
6
|
+
* [KVKK/GDPR] Data Retention Manager
|
|
7
|
+
*/
|
|
8
|
+
export declare class DataRetention {
|
|
9
|
+
private static cleanupInterval;
|
|
10
|
+
/**
|
|
11
|
+
* Initialize data retention with automatic cleanup.
|
|
12
|
+
* Starts a periodic cleanup job.
|
|
13
|
+
*
|
|
14
|
+
* @param intervalMs Cleanup interval in milliseconds (default: 1 hour)
|
|
15
|
+
*/
|
|
16
|
+
static initialize(intervalMs?: number): void;
|
|
17
|
+
/**
|
|
18
|
+
* Run cleanup for all data stores.
|
|
19
|
+
* Cleans audit logs, messages, and logs based on retention policies.
|
|
20
|
+
*/
|
|
21
|
+
static runCleanup(): {
|
|
22
|
+
audit: number;
|
|
23
|
+
messages: number;
|
|
24
|
+
logs: number;
|
|
25
|
+
};
|
|
26
|
+
/**
|
|
27
|
+
* [KVKK Art. 7] "Right to Erasure" — Deletes all data for a given trace ID.
|
|
28
|
+
* Cleans audit records, messages, logs, and tasks.
|
|
29
|
+
*
|
|
30
|
+
* @param traceId Trace ID to erase
|
|
31
|
+
* @returns Total number of deleted records
|
|
32
|
+
*/
|
|
33
|
+
static eraseTraceData(traceId: string): number;
|
|
34
|
+
/**
|
|
35
|
+
* [KVKK Art. 11] Erases all data across every store (full right-to-erasure).
|
|
36
|
+
* Only works with the confirmation code.
|
|
37
|
+
*/
|
|
38
|
+
static eraseAllData(confirmationCode: string): number;
|
|
39
|
+
/**
|
|
40
|
+
* Recompute the agent-log chain anchor after a legitimate deletion so that
|
|
41
|
+
* verification does not mistake retention/erasure for tampering.
|
|
42
|
+
*/
|
|
43
|
+
private static refreshLogAnchor;
|
|
44
|
+
/**
|
|
45
|
+
* Get retention statistics.
|
|
46
|
+
*/
|
|
47
|
+
static getStats(): {
|
|
48
|
+
auditExpired: number;
|
|
49
|
+
messageCount: number;
|
|
50
|
+
logCount: number;
|
|
51
|
+
taskCount: number;
|
|
52
|
+
policies: Record<string, number>;
|
|
53
|
+
};
|
|
54
|
+
/**
|
|
55
|
+
* Stop the periodic cleanup job.
|
|
56
|
+
*/
|
|
57
|
+
static shutdown(): void;
|
|
58
|
+
/**
|
|
59
|
+
* Clean old messages from the Hermes queue.
|
|
60
|
+
* Messages older than 30 days are removed.
|
|
61
|
+
*/
|
|
62
|
+
private static cleanOldMessages;
|
|
63
|
+
/**
|
|
64
|
+
* Clean old logs.
|
|
65
|
+
* Logs older than 30 days are removed.
|
|
66
|
+
*/
|
|
67
|
+
private static cleanOldLogs;
|
|
68
|
+
}
|