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
|
@@ -1,82 +1 @@
|
|
|
1
|
-
|
|
2
|
-
* [LOCK] Multi-user Distributed Lock Mechanism
|
|
3
|
-
*
|
|
4
|
-
* Git-based lock system. Enables team members to work on the same
|
|
5
|
-
* files/resources without conflicts.
|
|
6
|
-
*
|
|
7
|
-
* Usage:
|
|
8
|
-
* const lock = new DistributedLock("database/schema.sql");
|
|
9
|
-
* if (lock.acquire("user-123", 60000)) {
|
|
10
|
-
* // Apply changes
|
|
11
|
-
* lock.release("user-123");
|
|
12
|
-
* }
|
|
13
|
-
*/
|
|
14
|
-
export type LockStatus = "LOCKED" | "AVAILABLE" | "STALE" | "EXPIRED";
|
|
15
|
-
export interface LockInfo {
|
|
16
|
-
resource: string;
|
|
17
|
-
ownerId: string;
|
|
18
|
-
ownerName: string;
|
|
19
|
-
acquiredAt: string;
|
|
20
|
-
expiresAt: string;
|
|
21
|
-
reason: string;
|
|
22
|
-
traceId?: string;
|
|
23
|
-
}
|
|
24
|
-
export declare class DistributedLock {
|
|
25
|
-
private static TABLE;
|
|
26
|
-
/**
|
|
27
|
-
* Initialize the locks table (run once at startup).
|
|
28
|
-
*/
|
|
29
|
-
static initialize(): void;
|
|
30
|
-
/**
|
|
31
|
-
* Attempts to acquire a lock on a resource.
|
|
32
|
-
*
|
|
33
|
-
* @param resource - Lock resource name (e.g., "apps/backend/src/types/user.ts")
|
|
34
|
-
* @param ownerId - Unique owner identifier (e.g., "yusuf", "ci-bot-01")
|
|
35
|
-
* @param options - Optional parameters
|
|
36
|
-
* @returns true if lock acquired, false if already locked
|
|
37
|
-
*/
|
|
38
|
-
static acquire(resource: string, ownerId: string, options?: {
|
|
39
|
-
ownerName?: string;
|
|
40
|
-
ttlMs?: number;
|
|
41
|
-
reason?: string;
|
|
42
|
-
traceId?: string;
|
|
43
|
-
force?: boolean;
|
|
44
|
-
}): boolean;
|
|
45
|
-
/**
|
|
46
|
-
* Releases a lock. Only the lock owner can release.
|
|
47
|
-
*
|
|
48
|
-
* @param resource - Lock resource name
|
|
49
|
-
* @param ownerId - Owner identifier for verification
|
|
50
|
-
* @returns true if released successfully
|
|
51
|
-
*/
|
|
52
|
-
static release(resource: string, ownerId: string): boolean;
|
|
53
|
-
/**
|
|
54
|
-
* Checks if a resource is locked.
|
|
55
|
-
*/
|
|
56
|
-
static isLocked(resource: string): boolean;
|
|
57
|
-
/**
|
|
58
|
-
* Gets lock information for a resource.
|
|
59
|
-
*/
|
|
60
|
-
static getLock(resource: string): LockInfo | null;
|
|
61
|
-
/**
|
|
62
|
-
* Lists all active locks.
|
|
63
|
-
*/
|
|
64
|
-
static listActiveLocks(): LockInfo[];
|
|
65
|
-
/**
|
|
66
|
-
* Lists all locks owned by a specific owner.
|
|
67
|
-
*/
|
|
68
|
-
static listOwnerLocks(ownerId: string): LockInfo[];
|
|
69
|
-
/**
|
|
70
|
-
* Releases all locks owned by a specific owner (e.g., on disconnect).
|
|
71
|
-
*/
|
|
72
|
-
static releaseAllByOwner(ownerId: string): number;
|
|
73
|
-
/**
|
|
74
|
-
* Releases all expired/stale locks.
|
|
75
|
-
*/
|
|
76
|
-
private static releaseStaleLocks;
|
|
77
|
-
/**
|
|
78
|
-
* Generates a unique owner ID for the current user/machine.
|
|
79
|
-
* Uses git config user.name or hostname as fallback.
|
|
80
|
-
*/
|
|
81
|
-
static getLocalOwnerId(): string;
|
|
82
|
-
}
|
|
1
|
+
export * from "./modules/concurrency/lock.js";
|
package/dist/shared/src/lock.js
CHANGED
|
@@ -1,159 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
* [LOCK] Multi-user Distributed Lock Mechanism
|
|
3
|
-
*
|
|
4
|
-
* Git-based lock system. Enables team members to work on the same
|
|
5
|
-
* files/resources without conflicts.
|
|
6
|
-
*
|
|
7
|
-
* Usage:
|
|
8
|
-
* const lock = new DistributedLock("database/schema.sql");
|
|
9
|
-
* if (lock.acquire("user-123", 60000)) {
|
|
10
|
-
* // Apply changes
|
|
11
|
-
* lock.release("user-123");
|
|
12
|
-
* }
|
|
13
|
-
*/
|
|
14
|
-
import { execSync } from "child_process";
|
|
15
|
-
import os from "os";
|
|
16
|
-
import { databaseHolder } from "./database.js";
|
|
17
|
-
export class DistributedLock {
|
|
18
|
-
static TABLE = "distributed_locks";
|
|
19
|
-
/**
|
|
20
|
-
* Initialize the locks table (run once at startup).
|
|
21
|
-
*/
|
|
22
|
-
static initialize() {
|
|
23
|
-
const db = databaseHolder.getDB();
|
|
24
|
-
db.exec(`
|
|
25
|
-
CREATE TABLE IF NOT EXISTS ${this.TABLE} (
|
|
26
|
-
resource TEXT PRIMARY KEY,
|
|
27
|
-
ownerId TEXT NOT NULL,
|
|
28
|
-
ownerName TEXT NOT NULL,
|
|
29
|
-
acquiredAt TEXT NOT NULL,
|
|
30
|
-
expiresAt TEXT NOT NULL,
|
|
31
|
-
reason TEXT,
|
|
32
|
-
traceId TEXT
|
|
33
|
-
)
|
|
34
|
-
`);
|
|
35
|
-
}
|
|
36
|
-
/**
|
|
37
|
-
* Attempts to acquire a lock on a resource.
|
|
38
|
-
*
|
|
39
|
-
* @param resource - Lock resource name (e.g., "apps/backend/src/types/user.ts")
|
|
40
|
-
* @param ownerId - Unique owner identifier (e.g., "yusuf", "ci-bot-01")
|
|
41
|
-
* @param options - Optional parameters
|
|
42
|
-
* @returns true if lock acquired, false if already locked
|
|
43
|
-
*/
|
|
44
|
-
static acquire(resource, ownerId, options = {}) {
|
|
45
|
-
const db = databaseHolder.getDB();
|
|
46
|
-
const now = new Date();
|
|
47
|
-
const expiresAt = new Date(now.getTime() + (options.ttlMs || 60000)).toISOString();
|
|
48
|
-
const ownerName = options.ownerName || ownerId;
|
|
49
|
-
const reason = options.reason || "No reason provided";
|
|
50
|
-
// Clean up stale locks first
|
|
51
|
-
this.releaseStaleLocks();
|
|
52
|
-
// If force=true, override existing lock directly using INSERT OR REPLACE
|
|
53
|
-
if (options.force) {
|
|
54
|
-
db.prepare(`
|
|
55
|
-
INSERT OR REPLACE INTO ${this.TABLE} (resource, ownerId, ownerName, acquiredAt, expiresAt, reason, traceId)
|
|
56
|
-
VALUES (?, ?, ?, ?, ?, ?, ?)
|
|
57
|
-
`).run(resource, ownerId, ownerName, now.toISOString(), expiresAt, reason, options.traceId || null);
|
|
58
|
-
return true;
|
|
59
|
-
}
|
|
60
|
-
// Acquire new lock atomically using INSERT OR IGNORE.
|
|
61
|
-
// If the resource is already locked, changes will be 0.
|
|
62
|
-
const result = db.prepare(`
|
|
63
|
-
INSERT OR IGNORE INTO ${this.TABLE} (resource, ownerId, ownerName, acquiredAt, expiresAt, reason, traceId)
|
|
64
|
-
VALUES (?, ?, ?, ?, ?, ?, ?)
|
|
65
|
-
`).run(resource, ownerId, ownerName, now.toISOString(), expiresAt, reason, options.traceId || null);
|
|
66
|
-
return result.changes > 0;
|
|
67
|
-
}
|
|
68
|
-
/**
|
|
69
|
-
* Releases a lock. Only the lock owner can release.
|
|
70
|
-
*
|
|
71
|
-
* @param resource - Lock resource name
|
|
72
|
-
* @param ownerId - Owner identifier for verification
|
|
73
|
-
* @returns true if released successfully
|
|
74
|
-
*/
|
|
75
|
-
static release(resource, ownerId) {
|
|
76
|
-
const db = databaseHolder.getDB();
|
|
77
|
-
const result = db.prepare(`DELETE FROM ${this.TABLE} WHERE resource = ? AND ownerId = ?`).run(resource, ownerId);
|
|
78
|
-
return result.changes > 0;
|
|
79
|
-
}
|
|
80
|
-
/**
|
|
81
|
-
* Checks if a resource is locked.
|
|
82
|
-
*/
|
|
83
|
-
static isLocked(resource) {
|
|
84
|
-
const db = databaseHolder.getDB();
|
|
85
|
-
const nowIso = new Date().toISOString();
|
|
86
|
-
const lock = db.prepare(`SELECT * FROM ${this.TABLE} WHERE resource = ? AND expiresAt > ?`).get(resource, nowIso);
|
|
87
|
-
return !!lock;
|
|
88
|
-
}
|
|
89
|
-
/**
|
|
90
|
-
* Gets lock information for a resource.
|
|
91
|
-
*/
|
|
92
|
-
static getLock(resource) {
|
|
93
|
-
const db = databaseHolder.getDB();
|
|
94
|
-
this.releaseStaleLocks();
|
|
95
|
-
const lock = db.prepare(`SELECT * FROM ${this.TABLE} WHERE resource = ?`).get(resource);
|
|
96
|
-
return lock || null;
|
|
97
|
-
}
|
|
98
|
-
/**
|
|
99
|
-
* Lists all active locks.
|
|
100
|
-
*/
|
|
101
|
-
static listActiveLocks() {
|
|
102
|
-
const db = databaseHolder.getDB();
|
|
103
|
-
this.releaseStaleLocks();
|
|
104
|
-
const nowIso = new Date().toISOString();
|
|
105
|
-
return db.prepare(`SELECT * FROM ${this.TABLE} WHERE expiresAt > ? ORDER BY acquiredAt DESC`).all(nowIso);
|
|
106
|
-
}
|
|
107
|
-
/**
|
|
108
|
-
* Lists all locks owned by a specific owner.
|
|
109
|
-
*/
|
|
110
|
-
static listOwnerLocks(ownerId) {
|
|
111
|
-
const db = databaseHolder.getDB();
|
|
112
|
-
return db.prepare(`SELECT * FROM ${this.TABLE} WHERE ownerId = ? ORDER BY acquiredAt DESC`).all(ownerId);
|
|
113
|
-
}
|
|
114
|
-
/**
|
|
115
|
-
* Releases all locks owned by a specific owner (e.g., on disconnect).
|
|
116
|
-
*/
|
|
117
|
-
static releaseAllByOwner(ownerId) {
|
|
118
|
-
const db = databaseHolder.getDB();
|
|
119
|
-
const result = db.prepare(`DELETE FROM ${this.TABLE} WHERE ownerId = ?`).run(ownerId);
|
|
120
|
-
return result.changes;
|
|
121
|
-
}
|
|
122
|
-
/**
|
|
123
|
-
* Releases all expired/stale locks.
|
|
124
|
-
*/
|
|
125
|
-
static releaseStaleLocks() {
|
|
126
|
-
const db = databaseHolder.getDB();
|
|
127
|
-
const nowIso = new Date().toISOString();
|
|
128
|
-
const result = db.prepare(`DELETE FROM ${this.TABLE} WHERE expiresAt < ?`).run(nowIso);
|
|
129
|
-
return result.changes;
|
|
130
|
-
}
|
|
131
|
-
/**
|
|
132
|
-
* Generates a unique owner ID for the current user/machine.
|
|
133
|
-
* Uses git config user.name or hostname as fallback.
|
|
134
|
-
*/
|
|
135
|
-
static getLocalOwnerId() {
|
|
136
|
-
// Try git config
|
|
137
|
-
try {
|
|
138
|
-
const name = execSync("git config user.name", { encoding: "utf8" }).trim();
|
|
139
|
-
if (name)
|
|
140
|
-
return name;
|
|
141
|
-
}
|
|
142
|
-
catch {
|
|
143
|
-
// Fallback
|
|
144
|
-
}
|
|
145
|
-
// Try environment
|
|
146
|
-
if (process.env.USER)
|
|
147
|
-
return process.env.USER;
|
|
148
|
-
if (process.env.USERNAME)
|
|
149
|
-
return process.env.USERNAME;
|
|
150
|
-
// Fallback to hostname
|
|
151
|
-
try {
|
|
152
|
-
return os.hostname();
|
|
153
|
-
}
|
|
154
|
-
catch {
|
|
155
|
-
return "unknown-user";
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
}
|
|
1
|
+
export * from "./modules/concurrency/lock.js";
|
|
159
2
|
//# sourceMappingURL=lock.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lock.js","sourceRoot":"","sources":["../../../../shared/src/lock.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"lock.js","sourceRoot":"","sources":["../../../../shared/src/lock.ts"],"names":[],"mappings":"AAAA,cAAc,+BAA+B,CAAC"}
|
|
@@ -1,30 +1 @@
|
|
|
1
|
-
export
|
|
2
|
-
DEBUG = 0,
|
|
3
|
-
INFO = 1,
|
|
4
|
-
WARN = 2,
|
|
5
|
-
ERROR = 3,
|
|
6
|
-
FATAL = 4
|
|
7
|
-
}
|
|
8
|
-
export interface LoggerConfig {
|
|
9
|
-
minLevel: LogLevel;
|
|
10
|
-
enableColors: boolean;
|
|
11
|
-
jsonFormat: boolean;
|
|
12
|
-
logFile?: string;
|
|
13
|
-
enablePiiMasking: boolean;
|
|
14
|
-
piiWarning: boolean;
|
|
15
|
-
}
|
|
16
|
-
export declare class EnterpriseLogger {
|
|
17
|
-
private config;
|
|
18
|
-
private static instance;
|
|
19
|
-
private constructor();
|
|
20
|
-
static getInstance(): EnterpriseLogger;
|
|
21
|
-
configure(config: Partial<LoggerConfig>): void;
|
|
22
|
-
private formatMessage;
|
|
23
|
-
private log;
|
|
24
|
-
debug(message: string, meta?: unknown): void;
|
|
25
|
-
info(message: string, meta?: unknown): void;
|
|
26
|
-
warn(message: string, meta?: unknown): void;
|
|
27
|
-
error(message: string, meta?: unknown): void;
|
|
28
|
-
fatal(message: string, meta?: unknown): void;
|
|
29
|
-
}
|
|
30
|
-
export declare const logger: EnterpriseLogger;
|
|
1
|
+
export * from "./modules/observability/logger.js";
|
|
@@ -1,127 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
import path from "path";
|
|
3
|
-
import { appendFile, ensureDir } from "./fs.js";
|
|
4
|
-
import { containsPII, maskObject, maskText } from "./pii.js";
|
|
5
|
-
export var LogLevel;
|
|
6
|
-
(function (LogLevel) {
|
|
7
|
-
LogLevel[LogLevel["DEBUG"] = 0] = "DEBUG";
|
|
8
|
-
LogLevel[LogLevel["INFO"] = 1] = "INFO";
|
|
9
|
-
LogLevel[LogLevel["WARN"] = 2] = "WARN";
|
|
10
|
-
LogLevel[LogLevel["ERROR"] = 3] = "ERROR";
|
|
11
|
-
LogLevel[LogLevel["FATAL"] = 4] = "FATAL";
|
|
12
|
-
})(LogLevel || (LogLevel = {}));
|
|
13
|
-
export class EnterpriseLogger {
|
|
14
|
-
config;
|
|
15
|
-
static instance;
|
|
16
|
-
constructor() {
|
|
17
|
-
const isProd = process.env.NODE_ENV === "production";
|
|
18
|
-
this.config = {
|
|
19
|
-
minLevel: isProd ? LogLevel.INFO : LogLevel.DEBUG,
|
|
20
|
-
enableColors: !isProd,
|
|
21
|
-
jsonFormat: isProd,
|
|
22
|
-
enablePiiMasking: true, // KVKK: PII masking ON by default
|
|
23
|
-
piiWarning: true,
|
|
24
|
-
};
|
|
25
|
-
}
|
|
26
|
-
static getInstance() {
|
|
27
|
-
if (!EnterpriseLogger.instance) {
|
|
28
|
-
EnterpriseLogger.instance = new EnterpriseLogger();
|
|
29
|
-
}
|
|
30
|
-
return EnterpriseLogger.instance;
|
|
31
|
-
}
|
|
32
|
-
configure(config) {
|
|
33
|
-
this.config = { ...this.config, ...config };
|
|
34
|
-
if (this.config.logFile) {
|
|
35
|
-
try {
|
|
36
|
-
ensureDir(path.dirname(this.config.logFile));
|
|
37
|
-
}
|
|
38
|
-
catch (err) {
|
|
39
|
-
// Directly write to stderr — using console here would be circular
|
|
40
|
-
process.stderr.write(`[Logger] Failed to create log directory: ${err}\n`);
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
formatMessage(level, message, meta) {
|
|
45
|
-
const timestamp = new Date().toISOString();
|
|
46
|
-
const pid = process.pid;
|
|
47
|
-
// [KVKK] PII masking — mask sensitive data before logging
|
|
48
|
-
const safeMessage = this.config.enablePiiMasking ? maskText(message) : message;
|
|
49
|
-
const safeMeta = this.config.enablePiiMasking && meta ? maskObject(meta) : meta;
|
|
50
|
-
// [KVKK] Warn if PII detected in production
|
|
51
|
-
if (this.config.piiWarning && (containsPII(message) || (meta && containsPII(JSON.stringify(meta))))) {
|
|
52
|
-
process.stderr.write(`[PII WARNING] Potential PII detected in log at ${timestamp}\n`);
|
|
53
|
-
}
|
|
54
|
-
if (this.config.jsonFormat) {
|
|
55
|
-
return JSON.stringify({
|
|
56
|
-
timestamp,
|
|
57
|
-
level: LogLevel[level],
|
|
58
|
-
pid,
|
|
59
|
-
message: safeMessage,
|
|
60
|
-
meta: safeMeta,
|
|
61
|
-
});
|
|
62
|
-
}
|
|
63
|
-
const levelName = LogLevel[level].padEnd(5);
|
|
64
|
-
let coloredLevel = levelName;
|
|
65
|
-
if (this.config.enableColors) {
|
|
66
|
-
switch (level) {
|
|
67
|
-
case LogLevel.DEBUG:
|
|
68
|
-
coloredLevel = chalk.blue(levelName);
|
|
69
|
-
break;
|
|
70
|
-
case LogLevel.INFO:
|
|
71
|
-
coloredLevel = chalk.green(levelName);
|
|
72
|
-
break;
|
|
73
|
-
case LogLevel.WARN:
|
|
74
|
-
coloredLevel = chalk.yellow(levelName);
|
|
75
|
-
break;
|
|
76
|
-
case LogLevel.ERROR:
|
|
77
|
-
coloredLevel = chalk.red(levelName);
|
|
78
|
-
break;
|
|
79
|
-
case LogLevel.FATAL:
|
|
80
|
-
coloredLevel = chalk.bgRed.white.bold(levelName);
|
|
81
|
-
break;
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
const metaStr = safeMeta ? ` | Meta: ${JSON.stringify(safeMeta)}` : "";
|
|
85
|
-
return `[${timestamp}] [PID:${pid}] [${coloredLevel}]: ${safeMessage}${metaStr}`;
|
|
86
|
-
}
|
|
87
|
-
log(level, message, meta) {
|
|
88
|
-
if (level < this.config.minLevel)
|
|
89
|
-
return;
|
|
90
|
-
const formatted = this.formatMessage(level, message, meta);
|
|
91
|
-
// Route to stderr for ERROR/FATAL, stdout otherwise.
|
|
92
|
-
// Using process.write directly here is intentional — this IS the logger.
|
|
93
|
-
if (level >= LogLevel.ERROR) {
|
|
94
|
-
process.stderr.write(formatted + "\n");
|
|
95
|
-
}
|
|
96
|
-
else {
|
|
97
|
-
process.stdout.write(formatted + "\n");
|
|
98
|
-
}
|
|
99
|
-
// Output to file if configured
|
|
100
|
-
if (this.config.logFile) {
|
|
101
|
-
try {
|
|
102
|
-
appendFile(this.config.logFile, formatted + "\n");
|
|
103
|
-
}
|
|
104
|
-
catch (err) {
|
|
105
|
-
// Directly write to stderr — using console here would be circular
|
|
106
|
-
process.stderr.write(`[Logger] Failed to write to log file: ${err}\n`);
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
debug(message, meta) {
|
|
111
|
-
this.log(LogLevel.DEBUG, message, meta);
|
|
112
|
-
}
|
|
113
|
-
info(message, meta) {
|
|
114
|
-
this.log(LogLevel.INFO, message, meta);
|
|
115
|
-
}
|
|
116
|
-
warn(message, meta) {
|
|
117
|
-
this.log(LogLevel.WARN, message, meta);
|
|
118
|
-
}
|
|
119
|
-
error(message, meta) {
|
|
120
|
-
this.log(LogLevel.ERROR, message, meta);
|
|
121
|
-
}
|
|
122
|
-
fatal(message, meta) {
|
|
123
|
-
this.log(LogLevel.FATAL, message, meta);
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
export const logger = EnterpriseLogger.getInstance();
|
|
1
|
+
export * from "./modules/observability/logger.js";
|
|
127
2
|
//# sourceMappingURL=logger.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../../../shared/src/logger.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../../../shared/src/logger.ts"],"names":[],"mappings":"AAAA,cAAc,mCAAmC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./modules/storage/memory-prune.js";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-prune.js","sourceRoot":"","sources":["../../../../shared/src/memory-prune.ts"],"names":[],"mappings":"AAAA,cAAc,mCAAmC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./modules/storage/migrations.js";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migrations.js","sourceRoot":"","sources":["../../../../shared/src/migrations.ts"],"names":[],"mappings":"AAAA,cAAc,iCAAiC,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agent Identity — cryptographically signed agent tokens.
|
|
3
|
+
*
|
|
4
|
+
* Problem: `ATABEY_ACTIVE_AGENT` is a plain env var, so any tool/subprocess can
|
|
5
|
+
* impersonate `@manager` or `@security`. When `ATABEY_AGENT_SECRET` is set,
|
|
6
|
+
* Atabey accepts an HMAC-signed `ATABEY_AGENT_TOKEN` and verifies it
|
|
7
|
+
* (fail-closed on tampering/expiry). Set `ATABEY_AGENT_IDENTITY_REQUIRED=true`
|
|
8
|
+
* to refuse plain-env identity entirely.
|
|
9
|
+
*
|
|
10
|
+
* Token format: `${agent}.${issuedAt}.${expiresAt}.${hmacSha256Base64url}`
|
|
11
|
+
*/
|
|
12
|
+
export interface AgentIdentity {
|
|
13
|
+
agent: string;
|
|
14
|
+
issuedAt: number;
|
|
15
|
+
expiresAt: number;
|
|
16
|
+
}
|
|
17
|
+
export interface AgentTokenResult {
|
|
18
|
+
valid: boolean;
|
|
19
|
+
agent?: string;
|
|
20
|
+
reason?: string;
|
|
21
|
+
}
|
|
22
|
+
/** True when agent-token verification is mandatory (plain env rejected). */
|
|
23
|
+
export declare function isAgentIdentityEnforced(): boolean;
|
|
24
|
+
/** Sign an agent identity into a compact token. */
|
|
25
|
+
export declare function signAgentToken(agent: string, options?: {
|
|
26
|
+
ttlMs?: number;
|
|
27
|
+
key?: string | Buffer;
|
|
28
|
+
}): string;
|
|
29
|
+
/** Verify an agent token (signature + expiry). */
|
|
30
|
+
export declare function verifyAgentToken(token: string, options?: {
|
|
31
|
+
key?: string | Buffer;
|
|
32
|
+
}): AgentTokenResult;
|
|
33
|
+
/** Decode a token's identity without verification (for diagnostics only). */
|
|
34
|
+
export declare function decodeAgentToken(token: string): AgentIdentity | null;
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agent Identity — cryptographically signed agent tokens.
|
|
3
|
+
*
|
|
4
|
+
* Problem: `ATABEY_ACTIVE_AGENT` is a plain env var, so any tool/subprocess can
|
|
5
|
+
* impersonate `@manager` or `@security`. When `ATABEY_AGENT_SECRET` is set,
|
|
6
|
+
* Atabey accepts an HMAC-signed `ATABEY_AGENT_TOKEN` and verifies it
|
|
7
|
+
* (fail-closed on tampering/expiry). Set `ATABEY_AGENT_IDENTITY_REQUIRED=true`
|
|
8
|
+
* to refuse plain-env identity entirely.
|
|
9
|
+
*
|
|
10
|
+
* Token format: `${agent}.${issuedAt}.${expiresAt}.${hmacSha256Base64url}`
|
|
11
|
+
*/
|
|
12
|
+
import crypto from "crypto";
|
|
13
|
+
import { resolveAuditChainKey } from "../observability/audit-chain.js";
|
|
14
|
+
function resolveKey(explicit) {
|
|
15
|
+
if (explicit) {
|
|
16
|
+
return Buffer.isBuffer(explicit) ? explicit : crypto.createHash("sha256").update(explicit, "utf8").digest();
|
|
17
|
+
}
|
|
18
|
+
const envSecret = process.env.ATABEY_AGENT_SECRET;
|
|
19
|
+
if (envSecret && envSecret.trim()) {
|
|
20
|
+
return crypto.createHash("sha256").update(envSecret.trim(), "utf8").digest();
|
|
21
|
+
}
|
|
22
|
+
return resolveAuditChainKey();
|
|
23
|
+
}
|
|
24
|
+
function timingSafeEqual(a, b) {
|
|
25
|
+
const ba = Buffer.from(a);
|
|
26
|
+
const bb = Buffer.from(b);
|
|
27
|
+
if (ba.length !== bb.length)
|
|
28
|
+
return false;
|
|
29
|
+
return crypto.timingSafeEqual(ba, bb);
|
|
30
|
+
}
|
|
31
|
+
/** True when agent-token verification is mandatory (plain env rejected). */
|
|
32
|
+
export function isAgentIdentityEnforced() {
|
|
33
|
+
return process.env.ATABEY_AGENT_IDENTITY_REQUIRED === "true";
|
|
34
|
+
}
|
|
35
|
+
/** Sign an agent identity into a compact token. */
|
|
36
|
+
export function signAgentToken(agent, options = {}) {
|
|
37
|
+
const key = resolveKey(options.key);
|
|
38
|
+
if (!key) {
|
|
39
|
+
throw new Error("[AGENT_IDENTITY] No signing key. Set ATABEY_AGENT_SECRET.");
|
|
40
|
+
}
|
|
41
|
+
const name = agent.replace(/^@/, "");
|
|
42
|
+
const issuedAt = Date.now();
|
|
43
|
+
const expiresAt = issuedAt + (options.ttlMs ?? 60 * 60 * 1000);
|
|
44
|
+
const payload = `${name}.${issuedAt}.${expiresAt}`;
|
|
45
|
+
const sig = crypto.createHmac("sha256", key).update(payload).digest("base64url");
|
|
46
|
+
return `${payload}.${sig}`;
|
|
47
|
+
}
|
|
48
|
+
/** Verify an agent token (signature + expiry). */
|
|
49
|
+
export function verifyAgentToken(token, options = {}) {
|
|
50
|
+
const key = resolveKey(options.key);
|
|
51
|
+
if (!key)
|
|
52
|
+
return { valid: false, reason: "No signing key configured." };
|
|
53
|
+
if (!token || typeof token !== "string")
|
|
54
|
+
return { valid: false, reason: "Empty token." };
|
|
55
|
+
const parts = token.split(".");
|
|
56
|
+
if (parts.length !== 4)
|
|
57
|
+
return { valid: false, reason: "Malformed token." };
|
|
58
|
+
const [name, issuedAt, expiresAt, sig] = parts;
|
|
59
|
+
const payload = `${name}.${issuedAt}.${expiresAt}`;
|
|
60
|
+
const expected = crypto.createHmac("sha256", key).update(payload).digest("base64url");
|
|
61
|
+
if (!timingSafeEqual(sig, expected))
|
|
62
|
+
return { valid: false, reason: "Signature mismatch." };
|
|
63
|
+
const exp = Number(expiresAt);
|
|
64
|
+
if (!Number.isFinite(exp))
|
|
65
|
+
return { valid: false, reason: "Invalid expiry." };
|
|
66
|
+
if (Date.now() > exp)
|
|
67
|
+
return { valid: false, reason: "Token expired." };
|
|
68
|
+
return { valid: true, agent: `@${name}` };
|
|
69
|
+
}
|
|
70
|
+
/** Decode a token's identity without verification (for diagnostics only). */
|
|
71
|
+
export function decodeAgentToken(token) {
|
|
72
|
+
const parts = token.split(".");
|
|
73
|
+
if (parts.length !== 4)
|
|
74
|
+
return null;
|
|
75
|
+
return { agent: `@${parts[0]}`, issuedAt: Number(parts[1]), expiresAt: Number(parts[2]) };
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=agent-identity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-identity.js","sourceRoot":"","sources":["../../../../../../shared/src/modules/agent/agent-identity.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* API Catalog — endpoint registry, route/OpenAPI scanner, and drift detection.
|
|
3
|
+
*
|
|
4
|
+
* Purpose: let frontend/mobile agents integrate against the backend API using
|
|
5
|
+
* a compact JSON catalog instead of reading large route source files (token
|
|
6
|
+
* savings + zero context pollution).
|
|
7
|
+
*
|
|
8
|
+
* The scanner is HEURISTIC (regex/AST-lite) and covers:
|
|
9
|
+
* - Express / Fastify: app|router|server|fastify.get('/path', ...)
|
|
10
|
+
* - Fastify route(): fastify.route({ method, url, ... })
|
|
11
|
+
* - NestJS decorators: @Get('path') / @Post('path')
|
|
12
|
+
* - OpenAPI v3 / Swagger v2 JSON specs
|
|
13
|
+
*/
|
|
14
|
+
export interface ApiEndpoint {
|
|
15
|
+
method: string;
|
|
16
|
+
path: string;
|
|
17
|
+
tag?: string;
|
|
18
|
+
summary?: string;
|
|
19
|
+
authRequired: boolean;
|
|
20
|
+
requestSchema?: string;
|
|
21
|
+
responseSchema?: string;
|
|
22
|
+
source?: string;
|
|
23
|
+
updatedAt: string;
|
|
24
|
+
}
|
|
25
|
+
export interface ApiCatalog {
|
|
26
|
+
version: 1;
|
|
27
|
+
generatedAt: string;
|
|
28
|
+
endpoints: ApiEndpoint[];
|
|
29
|
+
}
|
|
30
|
+
export interface ApiDrift {
|
|
31
|
+
added: ApiEndpoint[];
|
|
32
|
+
removed: ApiEndpoint[];
|
|
33
|
+
changed: Array<{
|
|
34
|
+
previous: ApiEndpoint;
|
|
35
|
+
current: ApiEndpoint;
|
|
36
|
+
}>;
|
|
37
|
+
}
|
|
38
|
+
export declare function endpointKey(e: {
|
|
39
|
+
method: string;
|
|
40
|
+
path: string;
|
|
41
|
+
}): string;
|
|
42
|
+
export declare function normalizePath(p: string): string;
|
|
43
|
+
/** Parse an OpenAPI v3 or Swagger v2 spec object into endpoints. */
|
|
44
|
+
export declare function parseOpenApiSpec(spec: unknown): ApiEndpoint[];
|
|
45
|
+
/**
|
|
46
|
+
* Walk a project tree and collect endpoints from route source files and any
|
|
47
|
+
* OpenAPI/Swagger JSON specs.
|
|
48
|
+
*/
|
|
49
|
+
export declare function scanProjectForEndpoints(rootDir: string, options?: {
|
|
50
|
+
maxFiles?: number;
|
|
51
|
+
}): ApiEndpoint[];
|
|
52
|
+
export declare function dedupe(endpoints: ApiEndpoint[]): ApiEndpoint[];
|
|
53
|
+
/**
|
|
54
|
+
* Diff a previous catalog against a freshly scanned one.
|
|
55
|
+
*/
|
|
56
|
+
export declare function detectApiDrift(previous: ApiEndpoint[], current: ApiEndpoint[]): ApiDrift;
|
|
57
|
+
export declare function isApiDriftClean(drift: ApiDrift): boolean;
|