codehere 0.1.1 → 0.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +68 -329
- package/dist/application/agents/execution-agent.js +4 -30
- package/dist/application/agents/multi-agent-orchestrator.js +0 -1
- package/dist/application/agents/planning-agent.js +79 -199
- package/dist/application/services/dependency-container.js +9 -20
- package/dist/application/services/intelligent-router.js +56 -64
- package/dist/application/use-cases/ask-question-use-case.js +22 -121
- package/dist/application/use-cases/edit-file-use-case.js +171 -160
- package/dist/application/use-cases/react-orchestration-use-case.js +10 -43
- package/dist/chat.js +130 -54
- package/dist/domain/services/query-intent-classifier.js +3 -36
- package/dist/embed.js +61 -74
- package/dist/index.js +1299 -259
- package/dist/infrastructure/ai/cohere-ai-service.js +9 -78
- package/dist/infrastructure/ai/provider-ai-service.js +18 -121
- package/dist/infrastructure/config/config-manager.js +14 -135
- package/dist/infrastructure/config/product-context.js +66 -0
- package/dist/infrastructure/context/conversation-context.js +1 -86
- package/dist/infrastructure/cost/cost-router.js +104 -0
- package/dist/infrastructure/cost/cost-tracker.js +2 -3
- package/dist/infrastructure/governance/policy-as-code.js +2 -1
- package/dist/infrastructure/hooks/claude-sdk-hook.js +253 -0
- package/dist/infrastructure/hooks/session-analyzer.js +111 -0
- package/dist/infrastructure/observability/execution-tracer.js +7 -180
- package/dist/infrastructure/protocols/mcp-helpers.js +45 -0
- package/dist/infrastructure/protocols/mcp-server-impl.js +286 -0
- package/dist/infrastructure/providers/cohere-provider.js +5 -31
- package/dist/infrastructure/providers/fake-provider.js +0 -8
- package/dist/infrastructure/providers/local-llm-provider.js +2 -8
- package/dist/infrastructure/providers/openai-provider.js +5 -37
- package/dist/infrastructure/providers/openrouter-provider.js +3 -11
- package/dist/infrastructure/safety/pattern-detector.js +133 -0
- package/dist/infrastructure/security/ai-sast-scanner.js +62 -13
- package/dist/infrastructure/security/enhanced-security-gate.js +2 -61
- package/dist/infrastructure/security/input-validator.js +29 -146
- package/dist/infrastructure/security/trust-scorer.js +337 -0
- package/dist/infrastructure/storage/embeddings-path.js +4 -14
- package/dist/infrastructure/storage/plan-repository.js +5 -4
- package/dist/infrastructure/storage/sqlite-decision-repository.js +8 -4
- package/dist/infrastructure/storage/sqlite-embedding-repository.js +11 -23
- package/dist/infrastructure/storage/sqlite-knowledge-graph-repository.js +8 -4
- package/dist/infrastructure/storage/sqlite-knowledge-preservation-repository.js +8 -4
- package/dist/infrastructure/storage/sqlite-memory-repository.js +8 -4
- package/dist/infrastructure/storage/sqlite-pattern-repository.js +8 -4
- package/dist/infrastructure/ux/stream-markdown.js +151 -0
- package/dist/infrastructure/ux/transparency.js +71 -0
- package/dist/infrastructure/validation/agent-feedback.js +12 -57
- package/dist/monitoring.js +8 -17
- package/dist/parallel-processor.js +50 -122
- package/dist/presentation/cli/commands/ask-command.js +39 -80
- package/dist/presentation/cli/commands/config-command.js +1 -1
- package/dist/presentation/cli/commands/cost-command.js +6 -6
- package/dist/presentation/cli/commands/decision-command.js +5 -5
- package/dist/presentation/cli/commands/fix-command.js +4 -44
- package/dist/presentation/cli/commands/help-command.js +151 -100
- package/dist/presentation/cli/commands/hook-command.js +272 -0
- package/dist/presentation/cli/commands/knowledge-command.js +4 -4
- package/dist/presentation/cli/commands/learning-dashboard-command.js +3 -3
- package/dist/presentation/cli/commands/orchestrate-command.js +6 -48
- package/dist/presentation/cli/commands/plan-command.js +1 -1
- package/dist/presentation/cli/commands/product-command.js +193 -16
- package/dist/presentation/cli/commands/report-command.js +353 -0
- package/dist/presentation/cli/commands/run-command.js +3 -3
- package/dist/presentation/cli/commands/scan-tool-command.js +65 -0
- package/dist/presentation/cli/commands/setup-command.js +34 -81
- package/dist/presentation/cli/commands/smart-command.js +50 -172
- package/dist/presentation/cli/commands/status-command.js +304 -119
- package/dist/presentation/cli/commands/trust-command.js +267 -274
- package/dist/presentation/cli/commands/undo-command.js +2 -2
- package/dist/search.js +37 -67
- package/dist/session.js +595 -484
- package/dist/task-verification.js +4 -4
- package/dist/token-optimizer.js +1 -6
- package/dist/ui.js +132 -16
- package/dist/utils/check-api-status.js +30 -12
- package/dist/utils/diff-parser.js +18 -48
- package/dist/verification/compiler.js +12 -11
- package/package.json +36 -43
- package/dist/agents/base.d.ts +0 -107
- package/dist/agents/base.d.ts.map +0 -1
- package/dist/agents/base.js.map +0 -1
- package/dist/agents/orchestrator-model-driven.d.ts +0 -41
- package/dist/agents/orchestrator-model-driven.d.ts.map +0 -1
- package/dist/agents/orchestrator-model-driven.js.map +0 -1
- package/dist/agents/react-orchestrator-agent.d.ts +0 -15
- package/dist/agents/react-orchestrator-agent.d.ts.map +0 -1
- package/dist/agents/react-orchestrator-agent.js.map +0 -1
- package/dist/application/agents/execution-agent.d.ts +0 -79
- package/dist/application/agents/execution-agent.d.ts.map +0 -1
- package/dist/application/agents/execution-agent.js.map +0 -1
- package/dist/application/agents/multi-agent-orchestrator.d.ts +0 -69
- package/dist/application/agents/multi-agent-orchestrator.d.ts.map +0 -1
- package/dist/application/agents/multi-agent-orchestrator.js.map +0 -1
- package/dist/application/agents/planning-agent.d.ts +0 -65
- package/dist/application/agents/planning-agent.d.ts.map +0 -1
- package/dist/application/agents/planning-agent.js.map +0 -1
- package/dist/application/agents/validation-agent.d.ts +0 -68
- package/dist/application/agents/validation-agent.d.ts.map +0 -1
- package/dist/application/agents/validation-agent.js.map +0 -1
- package/dist/application/architectures/plan-and-act.d.ts +0 -94
- package/dist/application/architectures/plan-and-act.d.ts.map +0 -1
- package/dist/application/architectures/plan-and-act.js.map +0 -1
- package/dist/application/index.d.ts +0 -12
- package/dist/application/index.d.ts.map +0 -1
- package/dist/application/index.js.map +0 -1
- package/dist/application/services/agent-factory.d.ts +0 -9
- package/dist/application/services/agent-factory.d.ts.map +0 -1
- package/dist/application/services/agent-factory.js.map +0 -1
- package/dist/application/services/context-importer.d.ts +0 -71
- package/dist/application/services/context-importer.d.ts.map +0 -1
- package/dist/application/services/context-importer.js +0 -436
- package/dist/application/services/context-importer.js.map +0 -1
- package/dist/application/services/context-manager.d.ts +0 -132
- package/dist/application/services/context-manager.d.ts.map +0 -1
- package/dist/application/services/context-manager.js +0 -369
- package/dist/application/services/context-manager.js.map +0 -1
- package/dist/application/services/dependency-container.d.ts +0 -187
- package/dist/application/services/dependency-container.d.ts.map +0 -1
- package/dist/application/services/dependency-container.js.map +0 -1
- package/dist/application/services/git-context-service.d.ts +0 -30
- package/dist/application/services/git-context-service.d.ts.map +0 -1
- package/dist/application/services/git-context-service.js.map +0 -1
- package/dist/application/services/intelligent-router.d.ts +0 -90
- package/dist/application/services/intelligent-router.d.ts.map +0 -1
- package/dist/application/services/intelligent-router.js.map +0 -1
- package/dist/application/services/token-counting-service.d.ts +0 -87
- package/dist/application/services/token-counting-service.d.ts.map +0 -1
- package/dist/application/services/token-counting-service.js +0 -196
- package/dist/application/services/token-counting-service.js.map +0 -1
- package/dist/application/services/tool-executor-service.d.ts +0 -14
- package/dist/application/services/tool-executor-service.d.ts.map +0 -1
- package/dist/application/services/tool-executor-service.js.map +0 -1
- package/dist/application/use-cases/ask-question-use-case.d.ts +0 -67
- package/dist/application/use-cases/ask-question-use-case.d.ts.map +0 -1
- package/dist/application/use-cases/ask-question-use-case.js.map +0 -1
- package/dist/application/use-cases/edit-file-use-case.d.ts +0 -92
- package/dist/application/use-cases/edit-file-use-case.d.ts.map +0 -1
- package/dist/application/use-cases/edit-file-use-case.js.map +0 -1
- package/dist/application/use-cases/explain-file-use-case.d.ts +0 -21
- package/dist/application/use-cases/explain-file-use-case.d.ts.map +0 -1
- package/dist/application/use-cases/explain-file-use-case.js.map +0 -1
- package/dist/application/use-cases/index-codebase-use-case.d.ts +0 -46
- package/dist/application/use-cases/index-codebase-use-case.d.ts.map +0 -1
- package/dist/application/use-cases/index-codebase-use-case.js.map +0 -1
- package/dist/application/use-cases/planning-use-case.d.ts +0 -46
- package/dist/application/use-cases/planning-use-case.d.ts.map +0 -1
- package/dist/application/use-cases/planning-use-case.js.map +0 -1
- package/dist/application/use-cases/react-orchestration-use-case.d.ts +0 -51
- package/dist/application/use-cases/react-orchestration-use-case.d.ts.map +0 -1
- package/dist/application/use-cases/react-orchestration-use-case.js.map +0 -1
- package/dist/application/use-cases/reflexion-use-case.d.ts +0 -24
- package/dist/application/use-cases/reflexion-use-case.d.ts.map +0 -1
- package/dist/application/use-cases/reflexion-use-case.js.map +0 -1
- package/dist/application/workflows/deterministic-workflows.d.ts +0 -61
- package/dist/application/workflows/deterministic-workflows.d.ts.map +0 -1
- package/dist/application/workflows/deterministic-workflows.js.map +0 -1
- package/dist/ast-parser.d 2.ts +0 -55
- package/dist/ast-parser.d.ts +0 -55
- package/dist/ast-parser.d.ts.map +0 -1
- package/dist/ast-parser.js.map +0 -1
- package/dist/cache.d.ts +0 -45
- package/dist/cache.d.ts.map +0 -1
- package/dist/cache.js.map +0 -1
- package/dist/chat.d.ts +0 -4
- package/dist/chat.d.ts.map +0 -1
- package/dist/chat.js.map +0 -1
- package/dist/code-analysis 2.js +0 -327
- package/dist/code-analysis.d.ts +0 -50
- package/dist/code-analysis.d.ts.map +0 -1
- package/dist/code-analysis.js.map +0 -1
- package/dist/context.d.ts +0 -44
- package/dist/context.d.ts 2.map +0 -1
- package/dist/context.d.ts.map +0 -1
- package/dist/context.js.map +0 -1
- package/dist/docs.d.ts +0 -21
- package/dist/docs.d.ts.map +0 -1
- package/dist/docs.js.map +0 -1
- package/dist/domain/entities/code-chunk.d.ts +0 -26
- package/dist/domain/entities/code-chunk.d.ts.map +0 -1
- package/dist/domain/entities/code-chunk.js.map +0 -1
- package/dist/domain/entities/conversation-context.d.ts +0 -245
- package/dist/domain/entities/conversation-context.d.ts.map +0 -1
- package/dist/domain/entities/conversation-context.js +0 -50
- package/dist/domain/entities/conversation-context.js.map +0 -1
- package/dist/domain/entities/decision.d.ts +0 -37
- package/dist/domain/entities/decision.d.ts.map +0 -1
- package/dist/domain/entities/decision.js.map +0 -1
- package/dist/domain/entities/edit.d.ts +0 -35
- package/dist/domain/entities/edit.d.ts.map +0 -1
- package/dist/domain/entities/edit.js.map +0 -1
- package/dist/domain/entities/knowledge-node.d.ts +0 -83
- package/dist/domain/entities/knowledge-node.d.ts.map +0 -1
- package/dist/domain/entities/knowledge-node.js.map +0 -1
- package/dist/domain/entities/knowledge-preservation.d.ts +0 -42
- package/dist/domain/entities/knowledge-preservation.d.ts.map +0 -1
- package/dist/domain/entities/knowledge-preservation.js.map +0 -1
- package/dist/domain/entities/memory.d.ts +0 -36
- package/dist/domain/entities/memory.d.ts.map +0 -1
- package/dist/domain/entities/memory.js.map +0 -1
- package/dist/domain/entities/pattern.d.ts +0 -49
- package/dist/domain/entities/pattern.d.ts.map +0 -1
- package/dist/domain/entities/pattern.js.map +0 -1
- package/dist/domain/entities/plan.d.ts +0 -42
- package/dist/domain/entities/plan.d.ts.map +0 -1
- package/dist/domain/entities/plan.js.map +0 -1
- package/dist/domain/entities/query.d.ts +0 -17
- package/dist/domain/entities/query.d.ts.map +0 -1
- package/dist/domain/entities/query.js.map +0 -1
- package/dist/domain/entities/task.d.ts +0 -152
- package/dist/domain/entities/task.d.ts.map +0 -1
- package/dist/domain/entities/task.js.map +0 -1
- package/dist/domain/errors/embeddings-not-found-error.d.ts +0 -9
- package/dist/domain/errors/embeddings-not-found-error.d.ts.map +0 -1
- package/dist/domain/errors/embeddings-not-found-error.js.map +0 -1
- package/dist/domain/index.d.ts +0 -16
- package/dist/domain/index.d.ts.map +0 -1
- package/dist/domain/index.js.map +0 -1
- package/dist/domain/interfaces/ai-service.interface.d.ts +0 -72
- package/dist/domain/interfaces/ai-service.interface.d.ts.map +0 -1
- package/dist/domain/interfaces/ai-service.interface.js.map +0 -1
- package/dist/domain/interfaces/code-analyzer.interface.d.ts +0 -38
- package/dist/domain/interfaces/code-analyzer.interface.d.ts.map +0 -1
- package/dist/domain/interfaces/code-analyzer.interface.js.map +0 -1
- package/dist/domain/interfaces/context-repository.interface.d.ts +0 -71
- package/dist/domain/interfaces/context-repository.interface.d.ts.map +0 -1
- package/dist/domain/interfaces/context-repository.interface.js +0 -10
- package/dist/domain/interfaces/context-repository.interface.js.map +0 -1
- package/dist/domain/interfaces/decision-repository.interface.d.ts +0 -51
- package/dist/domain/interfaces/decision-repository.interface.d.ts.map +0 -1
- package/dist/domain/interfaces/decision-repository.interface.js.map +0 -1
- package/dist/domain/interfaces/embedding-repository.interface.d.ts +0 -33
- package/dist/domain/interfaces/embedding-repository.interface.d.ts.map +0 -1
- package/dist/domain/interfaces/embedding-repository.interface.js.map +0 -1
- package/dist/domain/interfaces/knowledge-graph-repository.interface.d.ts +0 -91
- package/dist/domain/interfaces/knowledge-graph-repository.interface.d.ts.map +0 -1
- package/dist/domain/interfaces/knowledge-graph-repository.interface.js.map +0 -1
- package/dist/domain/interfaces/knowledge-preservation-repository.interface.d.ts +0 -50
- package/dist/domain/interfaces/knowledge-preservation-repository.interface.d.ts.map +0 -1
- package/dist/domain/interfaces/knowledge-preservation-repository.interface.js.map +0 -1
- package/dist/domain/interfaces/memory-repository.interface.d.ts +0 -49
- package/dist/domain/interfaces/memory-repository.interface.d.ts.map +0 -1
- package/dist/domain/interfaces/memory-repository.interface.js.map +0 -1
- package/dist/domain/interfaces/pattern-repository.interface.d.ts +0 -48
- package/dist/domain/interfaces/pattern-repository.interface.d.ts.map +0 -1
- package/dist/domain/interfaces/pattern-repository.interface.js.map +0 -1
- package/dist/domain/interfaces/verification-service.interface.d.ts +0 -20
- package/dist/domain/interfaces/verification-service.interface.d.ts.map +0 -1
- package/dist/domain/interfaces/verification-service.interface.js.map +0 -1
- package/dist/domain/services/codebase-detector.d.ts +0 -18
- package/dist/domain/services/codebase-detector.d.ts.map +0 -1
- package/dist/domain/services/codebase-detector.js.map +0 -1
- package/dist/domain/services/cross-team-pattern-sharing.d.ts +0 -65
- package/dist/domain/services/cross-team-pattern-sharing.d.ts.map +0 -1
- package/dist/domain/services/cross-team-pattern-sharing.js.map +0 -1
- package/dist/domain/services/decision-recorder.d.ts +0 -76
- package/dist/domain/services/decision-recorder.d.ts.map +0 -1
- package/dist/domain/services/decision-recorder.js.map +0 -1
- package/dist/domain/services/decision-retriever.d.ts +0 -75
- package/dist/domain/services/decision-retriever.d.ts.map +0 -1
- package/dist/domain/services/decision-retriever.js.map +0 -1
- package/dist/domain/services/environment-mode-manager.d.ts +0 -12
- package/dist/domain/services/environment-mode-manager.d.ts.map +0 -1
- package/dist/domain/services/environment-mode-manager.js.map +0 -1
- package/dist/domain/services/graded-memory-activation.d.ts +0 -37
- package/dist/domain/services/graded-memory-activation.d.ts.map +0 -1
- package/dist/domain/services/graded-memory-activation.js.map +0 -1
- package/dist/domain/services/knowledge-access.d.ts +0 -63
- package/dist/domain/services/knowledge-access.d.ts.map +0 -1
- package/dist/domain/services/knowledge-access.js.map +0 -1
- package/dist/domain/services/knowledge-extractor.d.ts +0 -54
- package/dist/domain/services/knowledge-extractor.d.ts.map +0 -1
- package/dist/domain/services/knowledge-extractor.js.map +0 -1
- package/dist/domain/services/knowledge-graph-builder.d.ts +0 -70
- package/dist/domain/services/knowledge-graph-builder.d.ts.map +0 -1
- package/dist/domain/services/knowledge-graph-builder.js.map +0 -1
- package/dist/domain/services/knowledge-graph-query.d.ts +0 -69
- package/dist/domain/services/knowledge-graph-query.d.ts.map +0 -1
- package/dist/domain/services/knowledge-graph-query.js.map +0 -1
- package/dist/domain/services/memory-retriever.d.ts +0 -30
- package/dist/domain/services/memory-retriever.d.ts.map +0 -1
- package/dist/domain/services/memory-retriever.js.map +0 -1
- package/dist/domain/services/memory-synthesizer.d.ts +0 -57
- package/dist/domain/services/memory-synthesizer.d.ts.map +0 -1
- package/dist/domain/services/memory-synthesizer.js.map +0 -1
- package/dist/domain/services/pattern-extractor.d.ts +0 -108
- package/dist/domain/services/pattern-extractor.d.ts.map +0 -1
- package/dist/domain/services/pattern-extractor.js.map +0 -1
- package/dist/domain/services/query-intent-classifier.d.ts +0 -16
- package/dist/domain/services/query-intent-classifier.d.ts.map +0 -1
- package/dist/domain/services/query-intent-classifier.js.map +0 -1
- package/dist/domain/services/react-loop.d.ts +0 -52
- package/dist/domain/services/react-loop.d.ts.map +0 -1
- package/dist/domain/services/react-loop.js.map +0 -1
- package/dist/domain/services/risk-tier-detector.d.ts +0 -17
- package/dist/domain/services/risk-tier-detector.d.ts.map +0 -1
- package/dist/domain/services/risk-tier-detector.js.map +0 -1
- package/dist/edit.d.ts +0 -26
- package/dist/edit.d.ts 2.map +0 -1
- package/dist/edit.d.ts.map +0 -1
- package/dist/edit.js.map +0 -1
- package/dist/embed.d 2.ts +0 -14
- package/dist/embed.d.ts +0 -14
- package/dist/embed.d.ts.map +0 -1
- package/dist/embed.js.map +0 -1
- package/dist/error-handler.d 2.ts +0 -77
- package/dist/error-handler.d.ts +0 -77
- package/dist/error-handler.d.ts.map +0 -1
- package/dist/error-handler.js.map +0 -1
- package/dist/formatter 2.js +0 -168
- package/dist/formatter.d.ts +0 -25
- package/dist/formatter.d.ts 2.map +0 -1
- package/dist/formatter.d.ts.map +0 -1
- package/dist/formatter.js.map +0 -1
- package/dist/git 2.js +0 -198
- package/dist/git.d 2.ts +0 -55
- package/dist/git.d.ts +0 -55
- package/dist/git.d.ts.map +0 -1
- package/dist/git.js.map +0 -1
- package/dist/index 2.d.ts +0 -16
- package/dist/index 2.d.ts.map +0 -1
- package/dist/index 2.js +0 -429
- package/dist/index 2.js.map +0 -1
- package/dist/index-backup-before-lazy-loading.d.ts +0 -3
- package/dist/index-backup-before-lazy-loading.d.ts.map +0 -1
- package/dist/index-backup-before-lazy-loading.js +0 -1551
- package/dist/index-backup-before-lazy-loading.js.map +0 -1
- package/dist/index.d.ts +0 -16
- package/dist/index.d.ts 2.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js 2.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/infrastructure/ai/cohere-ai-service.d.ts +0 -71
- package/dist/infrastructure/ai/cohere-ai-service.d.ts.map +0 -1
- package/dist/infrastructure/ai/cohere-ai-service.js.map +0 -1
- package/dist/infrastructure/ai/command-r-evaluation.d.ts +0 -42
- package/dist/infrastructure/ai/command-r-evaluation.d.ts.map +0 -1
- package/dist/infrastructure/ai/command-r-evaluation.js.map +0 -1
- package/dist/infrastructure/ai/model-config.d.ts +0 -47
- package/dist/infrastructure/ai/model-config.d.ts.map +0 -1
- package/dist/infrastructure/ai/model-config.js.map +0 -1
- package/dist/infrastructure/ai/provider-ai-service.d.ts +0 -67
- package/dist/infrastructure/ai/provider-ai-service.d.ts.map +0 -1
- package/dist/infrastructure/ai/provider-ai-service.js.map +0 -1
- package/dist/infrastructure/cache/embedding-cache.d.ts +0 -58
- package/dist/infrastructure/cache/embedding-cache.d.ts.map +0 -1
- package/dist/infrastructure/cache/embedding-cache.js.map +0 -1
- package/dist/infrastructure/cache/query-result-cache.d.ts +0 -27
- package/dist/infrastructure/cache/query-result-cache.d.ts.map +0 -1
- package/dist/infrastructure/cache/query-result-cache.js.map +0 -1
- package/dist/infrastructure/cache/response-cache.d.ts +0 -18
- package/dist/infrastructure/cache/response-cache.d.ts.map +0 -1
- package/dist/infrastructure/cache/response-cache.js.map +0 -1
- package/dist/infrastructure/cache/security-scan-cache.d.ts +0 -16
- package/dist/infrastructure/cache/security-scan-cache.d.ts.map +0 -1
- package/dist/infrastructure/cache/security-scan-cache.js.map +0 -1
- package/dist/infrastructure/chunking/ast-code-chunker.d.ts +0 -12
- package/dist/infrastructure/chunking/ast-code-chunker.d.ts.map +0 -1
- package/dist/infrastructure/chunking/ast-code-chunker.js.map +0 -1
- package/dist/infrastructure/chunking/code-aware-chunker.d.ts +0 -63
- package/dist/infrastructure/chunking/code-aware-chunker.d.ts.map +0 -1
- package/dist/infrastructure/chunking/code-aware-chunker.js.map +0 -1
- package/dist/infrastructure/completion/bash-completion.d.ts +0 -7
- package/dist/infrastructure/completion/bash-completion.d.ts.map +0 -1
- package/dist/infrastructure/completion/bash-completion.js.map +0 -1
- package/dist/infrastructure/completion/fish-completion.d.ts +0 -7
- package/dist/infrastructure/completion/fish-completion.d.ts.map +0 -1
- package/dist/infrastructure/completion/fish-completion.js.map +0 -1
- package/dist/infrastructure/completion/zsh-completion.d.ts +0 -7
- package/dist/infrastructure/completion/zsh-completion.d.ts.map +0 -1
- package/dist/infrastructure/completion/zsh-completion.js.map +0 -1
- package/dist/infrastructure/config/config-manager.d.ts +0 -158
- package/dist/infrastructure/config/config-manager.d.ts.map +0 -1
- package/dist/infrastructure/config/config-manager.js.map +0 -1
- package/dist/infrastructure/context/context-compressor.d.ts +0 -94
- package/dist/infrastructure/context/context-compressor.d.ts.map +0 -1
- package/dist/infrastructure/context/context-compressor.js.map +0 -1
- package/dist/infrastructure/context/conversation-context.d.ts +0 -82
- package/dist/infrastructure/context/conversation-context.d.ts.map +0 -1
- package/dist/infrastructure/context/conversation-context.js.map +0 -1
- package/dist/infrastructure/context/direct-context-provider.d.ts +0 -18
- package/dist/infrastructure/context/direct-context-provider.d.ts.map +0 -1
- package/dist/infrastructure/context/direct-context-provider.js +0 -222
- package/dist/infrastructure/context/direct-context-provider.js.map +0 -1
- package/dist/infrastructure/context/git-context-provider.d.ts +0 -30
- package/dist/infrastructure/context/git-context-provider.d.ts.map +0 -1
- package/dist/infrastructure/context/git-context-provider.js +0 -140
- package/dist/infrastructure/context/git-context-provider.js.map +0 -1
- package/dist/infrastructure/context/project-context-loader.d.ts +0 -35
- package/dist/infrastructure/context/project-context-loader.d.ts.map +0 -1
- package/dist/infrastructure/context/project-context-loader.js +0 -184
- package/dist/infrastructure/context/project-context-loader.js.map +0 -1
- package/dist/infrastructure/context/session-manager.d.ts +0 -42
- package/dist/infrastructure/context/session-manager.d.ts.map +0 -1
- package/dist/infrastructure/context/session-manager.js.map +0 -1
- package/dist/infrastructure/cost/cost-tracker.d.ts +0 -91
- package/dist/infrastructure/cost/cost-tracker.d.ts.map +0 -1
- package/dist/infrastructure/cost/cost-tracker.js.map +0 -1
- package/dist/infrastructure/cost/session-token-tracker.d.ts +0 -68
- package/dist/infrastructure/cost/session-token-tracker.d.ts.map +0 -1
- package/dist/infrastructure/cost/session-token-tracker.js +0 -178
- package/dist/infrastructure/cost/session-token-tracker.js.map +0 -1
- package/dist/infrastructure/cost-calculator.d.ts +0 -34
- package/dist/infrastructure/cost-calculator.d.ts.map +0 -1
- package/dist/infrastructure/cost-calculator.js +0 -145
- package/dist/infrastructure/cost-calculator.js.map +0 -1
- package/dist/infrastructure/cost-estimator.d.ts +0 -48
- package/dist/infrastructure/cost-estimator.d.ts.map +0 -1
- package/dist/infrastructure/cost-estimator.js +0 -201
- package/dist/infrastructure/cost-estimator.js.map +0 -1
- package/dist/infrastructure/file-scanner/file-scanner.d.ts +0 -31
- package/dist/infrastructure/file-scanner/file-scanner.d.ts.map +0 -1
- package/dist/infrastructure/file-scanner/file-scanner.js.map +0 -1
- package/dist/infrastructure/governance/nist-ai-rmf.d.ts +0 -105
- package/dist/infrastructure/governance/nist-ai-rmf.d.ts.map +0 -1
- package/dist/infrastructure/governance/nist-ai-rmf.js.map +0 -1
- package/dist/infrastructure/governance/policy-as-code.d.ts +0 -88
- package/dist/infrastructure/governance/policy-as-code.d.ts.map +0 -1
- package/dist/infrastructure/governance/policy-as-code.js.map +0 -1
- package/dist/infrastructure/governance/prompt-to-code-lineage.d.ts +0 -136
- package/dist/infrastructure/governance/prompt-to-code-lineage.d.ts.map +0 -1
- package/dist/infrastructure/governance/prompt-to-code-lineage.js.map +0 -1
- package/dist/infrastructure/index.d.ts +0 -7
- package/dist/infrastructure/index.d.ts.map +0 -1
- package/dist/infrastructure/index.js.map +0 -1
- package/dist/infrastructure/observability/execution-tracer.d.ts +0 -130
- package/dist/infrastructure/observability/execution-tracer.d.ts.map +0 -1
- package/dist/infrastructure/observability/execution-tracer.js.map +0 -1
- package/dist/infrastructure/observability/prompt-versioner.d.ts +0 -67
- package/dist/infrastructure/observability/prompt-versioner.d.ts.map +0 -1
- package/dist/infrastructure/observability/prompt-versioner.js.map +0 -1
- package/dist/infrastructure/protocols/a2a-metadata.d.ts +0 -278
- package/dist/infrastructure/protocols/a2a-metadata.d.ts.map +0 -1
- package/dist/infrastructure/protocols/a2a-metadata.js.map +0 -1
- package/dist/infrastructure/protocols/a2a-protocol.d.ts +0 -132
- package/dist/infrastructure/protocols/a2a-protocol.d.ts.map +0 -1
- package/dist/infrastructure/protocols/a2a-protocol.js.map +0 -1
- package/dist/infrastructure/protocols/mcp-oauth.d.ts +0 -91
- package/dist/infrastructure/protocols/mcp-oauth.d.ts.map +0 -1
- package/dist/infrastructure/protocols/mcp-oauth.js.map +0 -1
- package/dist/infrastructure/protocols/mcp-server.d.ts +0 -126
- package/dist/infrastructure/protocols/mcp-server.d.ts.map +0 -1
- package/dist/infrastructure/protocols/mcp-server.js.map +0 -1
- package/dist/infrastructure/protocols/streaming-handler.d.ts +0 -57
- package/dist/infrastructure/protocols/streaming-handler.d.ts.map +0 -1
- package/dist/infrastructure/protocols/streaming-handler.js.map +0 -1
- package/dist/infrastructure/providers/cohere-provider.d.ts +0 -39
- package/dist/infrastructure/providers/cohere-provider.d.ts.map +0 -1
- package/dist/infrastructure/providers/cohere-provider.js.map +0 -1
- package/dist/infrastructure/providers/fake-provider.d.ts +0 -43
- package/dist/infrastructure/providers/fake-provider.d.ts.map +0 -1
- package/dist/infrastructure/providers/fake-provider.js.map +0 -1
- package/dist/infrastructure/providers/local-llm-provider.d.ts +0 -49
- package/dist/infrastructure/providers/local-llm-provider.d.ts.map +0 -1
- package/dist/infrastructure/providers/local-llm-provider.js.map +0 -1
- package/dist/infrastructure/providers/model-config.types.d.ts +0 -70
- package/dist/infrastructure/providers/model-config.types.d.ts.map +0 -1
- package/dist/infrastructure/providers/model-config.types.js.map +0 -1
- package/dist/infrastructure/providers/model-provider.interface.d.ts +0 -113
- package/dist/infrastructure/providers/model-provider.interface.d.ts.map +0 -1
- package/dist/infrastructure/providers/model-provider.interface.js.map +0 -1
- package/dist/infrastructure/providers/openai-provider.d.ts +0 -38
- package/dist/infrastructure/providers/openai-provider.d.ts.map +0 -1
- package/dist/infrastructure/providers/openai-provider.js.map +0 -1
- package/dist/infrastructure/providers/openrouter-provider.d.ts +0 -42
- package/dist/infrastructure/providers/openrouter-provider.d.ts.map +0 -1
- package/dist/infrastructure/providers/openrouter-provider.js.map +0 -1
- package/dist/infrastructure/providers/operation-provider-resolver.d.ts +0 -48
- package/dist/infrastructure/providers/operation-provider-resolver.d.ts.map +0 -1
- package/dist/infrastructure/providers/operation-provider-resolver.js.map +0 -1
- package/dist/infrastructure/providers/provider-config-loader.d.ts +0 -37
- package/dist/infrastructure/providers/provider-config-loader.d.ts.map +0 -1
- package/dist/infrastructure/providers/provider-config-loader.js.map +0 -1
- package/dist/infrastructure/providers/provider-registry.d.ts +0 -53
- package/dist/infrastructure/providers/provider-registry.d.ts.map +0 -1
- package/dist/infrastructure/providers/provider-registry.js.map +0 -1
- package/dist/infrastructure/security/ai-sast-scanner.d.ts +0 -59
- package/dist/infrastructure/security/ai-sast-scanner.d.ts.map +0 -1
- package/dist/infrastructure/security/ai-sast-scanner.js.map +0 -1
- package/dist/infrastructure/security/docker-sandbox.d.ts +0 -57
- package/dist/infrastructure/security/docker-sandbox.d.ts.map +0 -1
- package/dist/infrastructure/security/docker-sandbox.js.map +0 -1
- package/dist/infrastructure/security/enhanced-security-gate.d.ts +0 -66
- package/dist/infrastructure/security/enhanced-security-gate.d.ts.map +0 -1
- package/dist/infrastructure/security/enhanced-security-gate.js.map +0 -1
- package/dist/infrastructure/security/input-validator.d.ts +0 -46
- package/dist/infrastructure/security/input-validator.d.ts.map +0 -1
- package/dist/infrastructure/security/input-validator.js.map +0 -1
- package/dist/infrastructure/security/license-scanner.d.ts +0 -55
- package/dist/infrastructure/security/license-scanner.d.ts.map +0 -1
- package/dist/infrastructure/security/license-scanner.js.map +0 -1
- package/dist/infrastructure/security/provider-bias-detector.d.ts +0 -53
- package/dist/infrastructure/security/provider-bias-detector.d.ts.map +0 -1
- package/dist/infrastructure/security/provider-bias-detector.js.map +0 -1
- package/dist/infrastructure/security/sandbox-executor.d.ts +0 -34
- package/dist/infrastructure/security/sandbox-executor.d.ts.map +0 -1
- package/dist/infrastructure/security/sandbox-executor.js.map +0 -1
- package/dist/infrastructure/serialization/toon-serializer.d.ts +0 -45
- package/dist/infrastructure/serialization/toon-serializer.d.ts.map +0 -1
- package/dist/infrastructure/serialization/toon-serializer.js.map +0 -1
- package/dist/infrastructure/storage/embeddings-path.d.ts +0 -18
- package/dist/infrastructure/storage/embeddings-path.d.ts.map +0 -1
- package/dist/infrastructure/storage/embeddings-path.js.map +0 -1
- package/dist/infrastructure/storage/memory-stream-service.d.ts +0 -47
- package/dist/infrastructure/storage/memory-stream-service.d.ts.map +0 -1
- package/dist/infrastructure/storage/memory-stream-service.js.map +0 -1
- package/dist/infrastructure/storage/plan-repository.d.ts +0 -40
- package/dist/infrastructure/storage/plan-repository.d.ts.map +0 -1
- package/dist/infrastructure/storage/plan-repository.js.map +0 -1
- package/dist/infrastructure/storage/sqlite-context-repository.d.ts +0 -95
- package/dist/infrastructure/storage/sqlite-context-repository.d.ts.map +0 -1
- package/dist/infrastructure/storage/sqlite-context-repository.js +0 -467
- package/dist/infrastructure/storage/sqlite-context-repository.js.map +0 -1
- package/dist/infrastructure/storage/sqlite-decision-repository.d.ts +0 -29
- package/dist/infrastructure/storage/sqlite-decision-repository.d.ts.map +0 -1
- package/dist/infrastructure/storage/sqlite-decision-repository.js.map +0 -1
- package/dist/infrastructure/storage/sqlite-embedding-repository.d.ts +0 -47
- package/dist/infrastructure/storage/sqlite-embedding-repository.d.ts.map +0 -1
- package/dist/infrastructure/storage/sqlite-embedding-repository.js.map +0 -1
- package/dist/infrastructure/storage/sqlite-knowledge-graph-repository.d.ts +0 -41
- package/dist/infrastructure/storage/sqlite-knowledge-graph-repository.d.ts.map +0 -1
- package/dist/infrastructure/storage/sqlite-knowledge-graph-repository.js.map +0 -1
- package/dist/infrastructure/storage/sqlite-knowledge-preservation-repository.d.ts +0 -29
- package/dist/infrastructure/storage/sqlite-knowledge-preservation-repository.d.ts.map +0 -1
- package/dist/infrastructure/storage/sqlite-knowledge-preservation-repository.js.map +0 -1
- package/dist/infrastructure/storage/sqlite-memory-repository.d.ts +0 -40
- package/dist/infrastructure/storage/sqlite-memory-repository.d.ts.map +0 -1
- package/dist/infrastructure/storage/sqlite-memory-repository.js.map +0 -1
- package/dist/infrastructure/storage/sqlite-pattern-repository.d.ts +0 -25
- package/dist/infrastructure/storage/sqlite-pattern-repository.d.ts.map +0 -1
- package/dist/infrastructure/storage/sqlite-pattern-repository.js.map +0 -1
- package/dist/infrastructure/storage/task-helpers.d.ts +0 -69
- package/dist/infrastructure/storage/task-helpers.d.ts.map +0 -1
- package/dist/infrastructure/storage/task-helpers.js.map +0 -1
- package/dist/infrastructure/storage/task-repository.d.ts +0 -67
- package/dist/infrastructure/storage/task-repository.d.ts.map +0 -1
- package/dist/infrastructure/storage/task-repository.js.map +0 -1
- package/dist/infrastructure/telemetry/telemetry-service.d.ts +0 -74
- package/dist/infrastructure/telemetry/telemetry-service.d.ts.map +0 -1
- package/dist/infrastructure/telemetry/telemetry-service.js.map +0 -1
- package/dist/infrastructure/ux/appropriate-friction.d.ts +0 -77
- package/dist/infrastructure/ux/appropriate-friction.d.ts.map +0 -1
- package/dist/infrastructure/ux/appropriate-friction.js.map +0 -1
- package/dist/infrastructure/ux/bi-directional-learning.d.ts +0 -131
- package/dist/infrastructure/ux/bi-directional-learning.d.ts.map +0 -1
- package/dist/infrastructure/ux/bi-directional-learning.js.map +0 -1
- package/dist/infrastructure/ux/capability-boundaries.d.ts +0 -22
- package/dist/infrastructure/ux/capability-boundaries.d.ts.map +0 -1
- package/dist/infrastructure/ux/capability-boundaries.js.map +0 -1
- package/dist/infrastructure/ux/cli-style-guide.d.ts +0 -105
- package/dist/infrastructure/ux/cli-style-guide.d.ts.map +0 -1
- package/dist/infrastructure/ux/cli-style-guide.js +0 -220
- package/dist/infrastructure/ux/cli-style-guide.js.map +0 -1
- package/dist/infrastructure/ux/comprehensive-formatter.d.ts +0 -21
- package/dist/infrastructure/ux/comprehensive-formatter.d.ts.map +0 -1
- package/dist/infrastructure/ux/comprehensive-formatter.js.map +0 -1
- package/dist/infrastructure/ux/contextual-feature-discovery.d.ts +0 -11
- package/dist/infrastructure/ux/contextual-feature-discovery.d.ts.map +0 -1
- package/dist/infrastructure/ux/contextual-feature-discovery.js.map +0 -1
- package/dist/infrastructure/ux/expectation-management.d.ts +0 -98
- package/dist/infrastructure/ux/expectation-management.d.ts.map +0 -1
- package/dist/infrastructure/ux/expectation-management.js.map +0 -1
- package/dist/infrastructure/ux/feature-discovery.d.ts +0 -17
- package/dist/infrastructure/ux/feature-discovery.d.ts.map +0 -1
- package/dist/infrastructure/ux/feature-discovery.js.map +0 -1
- package/dist/infrastructure/ux/feedback-prompt.d.ts +0 -26
- package/dist/infrastructure/ux/feedback-prompt.d.ts.map +0 -1
- package/dist/infrastructure/ux/feedback-prompt.js.map +0 -1
- package/dist/infrastructure/ux/hitl-validation.d.ts +0 -139
- package/dist/infrastructure/ux/hitl-validation.d.ts.map +0 -1
- package/dist/infrastructure/ux/hitl-validation.js.map +0 -1
- package/dist/infrastructure/ux/progress-indicator.d.ts +0 -53
- package/dist/infrastructure/ux/progress-indicator.d.ts.map +0 -1
- package/dist/infrastructure/ux/progress-indicator.js.map +0 -1
- package/dist/infrastructure/ux/progressive-disclosure.d.ts +0 -84
- package/dist/infrastructure/ux/progressive-disclosure.d.ts.map +0 -1
- package/dist/infrastructure/ux/progressive-disclosure.js.map +0 -1
- package/dist/infrastructure/ux/review-checkpoint.d.ts +0 -37
- package/dist/infrastructure/ux/review-checkpoint.d.ts.map +0 -1
- package/dist/infrastructure/ux/review-checkpoint.js.map +0 -1
- package/dist/infrastructure/ux/staged-feature-intro.d.ts +0 -22
- package/dist/infrastructure/ux/staged-feature-intro.d.ts.map +0 -1
- package/dist/infrastructure/ux/staged-feature-intro.js.map +0 -1
- package/dist/infrastructure/ux/syntax-highlighter.d.ts +0 -20
- package/dist/infrastructure/ux/syntax-highlighter.d.ts.map +0 -1
- package/dist/infrastructure/ux/syntax-highlighter.js.map +0 -1
- package/dist/infrastructure/ux/team-standards.d.ts +0 -94
- package/dist/infrastructure/ux/team-standards.d.ts.map +0 -1
- package/dist/infrastructure/ux/team-standards.js.map +0 -1
- package/dist/infrastructure/validation/agent-feedback.d.ts +0 -57
- package/dist/infrastructure/validation/agent-feedback.d.ts.map +0 -1
- package/dist/infrastructure/validation/agent-feedback.js.map +0 -1
- package/dist/infrastructure/validation/agent-validation-helper.d.ts +0 -75
- package/dist/infrastructure/validation/agent-validation-helper.d.ts.map +0 -1
- package/dist/infrastructure/validation/agent-validation-helper.js.map +0 -1
- package/dist/infrastructure/validation/hallucination-detector.d.ts +0 -121
- package/dist/infrastructure/validation/hallucination-detector.d.ts.map +0 -1
- package/dist/infrastructure/validation/hallucination-detector.js +0 -388
- package/dist/infrastructure/validation/hallucination-detector.js.map +0 -1
- package/dist/infrastructure/validation/review-handler.d.ts +0 -26
- package/dist/infrastructure/validation/review-handler.d.ts.map +0 -1
- package/dist/infrastructure/validation/review-handler.js.map +0 -1
- package/dist/infrastructure/validation/summary-aggregator.d.ts +0 -45
- package/dist/infrastructure/validation/summary-aggregator.d.ts.map +0 -1
- package/dist/infrastructure/validation/summary-aggregator.js.map +0 -1
- package/dist/infrastructure/validation/summary-extractor.d.ts +0 -24
- package/dist/infrastructure/validation/summary-extractor.d.ts.map +0 -1
- package/dist/infrastructure/validation/summary-extractor.js.map +0 -1
- package/dist/infrastructure/validation/trace-summary.d.ts +0 -45
- package/dist/infrastructure/validation/trace-summary.d.ts.map +0 -1
- package/dist/infrastructure/validation/trace-summary.js.map +0 -1
- package/dist/infrastructure/verification/verification-service.d.ts +0 -12
- package/dist/infrastructure/verification/verification-service.d.ts.map +0 -1
- package/dist/infrastructure/verification/verification-service.js.map +0 -1
- package/dist/infrastructure/xai/attention-visualizer.d.ts +0 -71
- package/dist/infrastructure/xai/attention-visualizer.d.ts.map +0 -1
- package/dist/infrastructure/xai/attention-visualizer.js.map +0 -1
- package/dist/infrastructure/xai/cot-visualizer.d.ts +0 -103
- package/dist/infrastructure/xai/cot-visualizer.d.ts.map +0 -1
- package/dist/infrastructure/xai/cot-visualizer.js.map +0 -1
- package/dist/infrastructure/xai/decision-tree-log.d.ts +0 -100
- package/dist/infrastructure/xai/decision-tree-log.d.ts.map +0 -1
- package/dist/infrastructure/xai/decision-tree-log.js.map +0 -1
- package/dist/infrastructure/xai/interactive-xai.d.ts +0 -104
- package/dist/infrastructure/xai/interactive-xai.d.ts.map +0 -1
- package/dist/infrastructure/xai/interactive-xai.js.map +0 -1
- package/dist/infrastructure/xai/uncertainty-quantifier.d.ts +0 -77
- package/dist/infrastructure/xai/uncertainty-quantifier.d.ts.map +0 -1
- package/dist/infrastructure/xai/uncertainty-quantifier.js.map +0 -1
- package/dist/intelligent-retrieval 2.js +0 -272
- package/dist/intelligent-retrieval.d.ts +0 -41
- package/dist/intelligent-retrieval.d.ts 2.map +0 -1
- package/dist/intelligent-retrieval.d.ts.map +0 -1
- package/dist/intelligent-retrieval.js.map +0 -1
- package/dist/intent/classifier.d.ts +0 -6
- package/dist/intent/classifier.d.ts.map +0 -1
- package/dist/intent/classifier.js.map +0 -1
- package/dist/intent/context.d.ts +0 -4
- package/dist/intent/context.d.ts.map +0 -1
- package/dist/intent/context.js.map +0 -1
- package/dist/iterative-refinement.d.ts +0 -31
- package/dist/iterative-refinement.d.ts.map +0 -1
- package/dist/iterative-refinement.js.map +0 -1
- package/dist/learning.d.ts +0 -69
- package/dist/learning.d.ts.map +0 -1
- package/dist/learning.js.map +0 -1
- package/dist/log.d.ts +0 -4
- package/dist/log.d.ts.map +0 -1
- package/dist/log.js 2.map +0 -1
- package/dist/log.js.map +0 -1
- package/dist/migrate.d.ts +0 -33
- package/dist/migrate.d.ts.map +0 -1
- package/dist/migrate.js 2.map +0 -1
- package/dist/migrate.js.map +0 -1
- package/dist/monitoring.d.ts +0 -75
- package/dist/monitoring.d.ts.map +0 -1
- package/dist/monitoring.js.map +0 -1
- package/dist/parallel-processor.d 2.ts +0 -44
- package/dist/parallel-processor.d.ts +0 -44
- package/dist/parallel-processor.d.ts.map +0 -1
- package/dist/parallel-processor.js.map +0 -1
- package/dist/planner.d.ts +0 -47
- package/dist/planner.d.ts.map +0 -1
- package/dist/planner.js.map +0 -1
- package/dist/policy.d 2.ts +0 -3
- package/dist/policy.d.ts +0 -3
- package/dist/policy.d.ts.map +0 -1
- package/dist/policy.js.map +0 -1
- package/dist/presentation/cli/commands/ask-command.d.ts +0 -9
- package/dist/presentation/cli/commands/ask-command.d.ts.map +0 -1
- package/dist/presentation/cli/commands/ask-command.js.map +0 -1
- package/dist/presentation/cli/commands/audit-command.d.ts +0 -13
- package/dist/presentation/cli/commands/audit-command.d.ts.map +0 -1
- package/dist/presentation/cli/commands/audit-command.js +0 -96
- package/dist/presentation/cli/commands/audit-command.js.map +0 -1
- package/dist/presentation/cli/commands/config-command.d.ts +0 -9
- package/dist/presentation/cli/commands/config-command.d.ts.map +0 -1
- package/dist/presentation/cli/commands/config-command.js.map +0 -1
- package/dist/presentation/cli/commands/context-command.d.ts +0 -32
- package/dist/presentation/cli/commands/context-command.d.ts.map +0 -1
- package/dist/presentation/cli/commands/context-command.js +0 -295
- package/dist/presentation/cli/commands/context-command.js.map +0 -1
- package/dist/presentation/cli/commands/context-helper.d.ts +0 -16
- package/dist/presentation/cli/commands/context-helper.d.ts.map +0 -1
- package/dist/presentation/cli/commands/context-helper.js +0 -88
- package/dist/presentation/cli/commands/context-helper.js.map +0 -1
- package/dist/presentation/cli/commands/cost-command.d.ts +0 -8
- package/dist/presentation/cli/commands/cost-command.d.ts.map +0 -1
- package/dist/presentation/cli/commands/cost-command.js.map +0 -1
- package/dist/presentation/cli/commands/decision-command.d.ts +0 -12
- package/dist/presentation/cli/commands/decision-command.d.ts.map +0 -1
- package/dist/presentation/cli/commands/decision-command.js.map +0 -1
- package/dist/presentation/cli/commands/docs-command.d.ts +0 -14
- package/dist/presentation/cli/commands/docs-command.d.ts.map +0 -1
- package/dist/presentation/cli/commands/docs-command.js.map +0 -1
- package/dist/presentation/cli/commands/fix-command.d.ts +0 -15
- package/dist/presentation/cli/commands/fix-command.d.ts.map +0 -1
- package/dist/presentation/cli/commands/fix-command.js.map +0 -1
- package/dist/presentation/cli/commands/help-command.d.ts +0 -9
- package/dist/presentation/cli/commands/help-command.d.ts.map +0 -1
- package/dist/presentation/cli/commands/help-command.js.map +0 -1
- package/dist/presentation/cli/commands/knowledge-command.d.ts +0 -13
- package/dist/presentation/cli/commands/knowledge-command.d.ts.map +0 -1
- package/dist/presentation/cli/commands/knowledge-command.js.map +0 -1
- package/dist/presentation/cli/commands/learning-dashboard-command.d.ts +0 -8
- package/dist/presentation/cli/commands/learning-dashboard-command.d.ts.map +0 -1
- package/dist/presentation/cli/commands/learning-dashboard-command.js.map +0 -1
- package/dist/presentation/cli/commands/models-command.d.ts +0 -13
- package/dist/presentation/cli/commands/models-command.d.ts.map +0 -1
- package/dist/presentation/cli/commands/models-command.js.map +0 -1
- package/dist/presentation/cli/commands/orchestrate-command.d.ts +0 -10
- package/dist/presentation/cli/commands/orchestrate-command.d.ts.map +0 -1
- package/dist/presentation/cli/commands/orchestrate-command.js.map +0 -1
- package/dist/presentation/cli/commands/plan-command.d.ts +0 -9
- package/dist/presentation/cli/commands/plan-command.d.ts.map +0 -1
- package/dist/presentation/cli/commands/plan-command.js.map +0 -1
- package/dist/presentation/cli/commands/product-command.d.ts +0 -14
- package/dist/presentation/cli/commands/product-command.d.ts.map +0 -1
- package/dist/presentation/cli/commands/product-command.js.map +0 -1
- package/dist/presentation/cli/commands/react-command.d.ts +0 -8
- package/dist/presentation/cli/commands/react-command.d.ts.map +0 -1
- package/dist/presentation/cli/commands/react-command.js.map +0 -1
- package/dist/presentation/cli/commands/review-command.d.ts +0 -14
- package/dist/presentation/cli/commands/review-command.d.ts.map +0 -1
- package/dist/presentation/cli/commands/review-command.js.map +0 -1
- package/dist/presentation/cli/commands/run-command.d.ts +0 -13
- package/dist/presentation/cli/commands/run-command.d.ts.map +0 -1
- package/dist/presentation/cli/commands/run-command.js.map +0 -1
- package/dist/presentation/cli/commands/setup-command.d.ts +0 -10
- package/dist/presentation/cli/commands/setup-command.d.ts.map +0 -1
- package/dist/presentation/cli/commands/setup-command.js.map +0 -1
- package/dist/presentation/cli/commands/smart-command.d.ts +0 -11
- package/dist/presentation/cli/commands/smart-command.d.ts.map +0 -1
- package/dist/presentation/cli/commands/smart-command.js.map +0 -1
- package/dist/presentation/cli/commands/status-command.d.ts +0 -14
- package/dist/presentation/cli/commands/status-command.d.ts.map +0 -1
- package/dist/presentation/cli/commands/status-command.js.map +0 -1
- package/dist/presentation/cli/commands/suggest-command.d.ts +0 -11
- package/dist/presentation/cli/commands/suggest-command.d.ts.map +0 -1
- package/dist/presentation/cli/commands/suggest-command.js.map +0 -1
- package/dist/presentation/cli/commands/trace-command.d.ts +0 -8
- package/dist/presentation/cli/commands/trace-command.d.ts.map +0 -1
- package/dist/presentation/cli/commands/trace-command.js.map +0 -1
- package/dist/presentation/cli/commands/trust-command.d.ts +0 -28
- package/dist/presentation/cli/commands/trust-command.d.ts.map +0 -1
- package/dist/presentation/cli/commands/trust-command.js.map +0 -1
- package/dist/presentation/cli/commands/undo-command.d.ts +0 -8
- package/dist/presentation/cli/commands/undo-command.d.ts.map +0 -1
- package/dist/presentation/cli/commands/undo-command.js.map +0 -1
- package/dist/presentation/cli/error-display.d.ts +0 -25
- package/dist/presentation/cli/error-display.d.ts.map +0 -1
- package/dist/presentation/cli/error-display.js.map +0 -1
- package/dist/query-optimizer.d.ts +0 -32
- package/dist/query-optimizer.d.ts.map +0 -1
- package/dist/query-optimizer.js.map +0 -1
- package/dist/refactor.d.ts +0 -27
- package/dist/refactor.d.ts.map +0 -1
- package/dist/refactor.js.map +0 -1
- package/dist/review 2.js +0 -206
- package/dist/review.d.ts +0 -31
- package/dist/review.d.ts.map +0 -1
- package/dist/review.js.map +0 -1
- package/dist/search.d.ts +0 -19
- package/dist/search.d.ts.map +0 -1
- package/dist/search.js 2.map +0 -1
- package/dist/search.js.map +0 -1
- package/dist/session 2.js +0 -593
- package/dist/session.d.ts +0 -17
- package/dist/session.d.ts 2.map +0 -1
- package/dist/session.d.ts.map +0 -1
- package/dist/session.js.map +0 -1
- package/dist/task-verification 2.js +0 -336
- package/dist/task-verification.d.ts +0 -39
- package/dist/task-verification.d.ts 2.map +0 -1
- package/dist/task-verification.d.ts.map +0 -1
- package/dist/task-verification.js.map +0 -1
- package/dist/test-minimal.d.ts +0 -2
- package/dist/test-minimal.d.ts.map +0 -1
- package/dist/test-minimal.js +0 -2
- package/dist/test-minimal.js.map +0 -1
- package/dist/testgen.d.ts +0 -24
- package/dist/testgen.d.ts.map +0 -1
- package/dist/testgen.js 2.map +0 -1
- package/dist/testgen.js.map +0 -1
- package/dist/token-optimizer.d 2.ts +0 -20
- package/dist/token-optimizer.d.ts +0 -20
- package/dist/token-optimizer.d.ts.map +0 -1
- package/dist/token-optimizer.js.map +0 -1
- package/dist/tools/bash.d.ts +0 -53
- package/dist/tools/bash.d.ts.map +0 -1
- package/dist/tools/bash.js.map +0 -1
- package/dist/tools/edit.d.ts +0 -48
- package/dist/tools/edit.d.ts.map +0 -1
- package/dist/tools/edit.js.map +0 -1
- package/dist/tools/executor.d.ts +0 -29
- package/dist/tools/executor.d.ts.map +0 -1
- package/dist/tools/executor.js.map +0 -1
- package/dist/tools/git-tool.d.ts +0 -87
- package/dist/tools/git-tool.d.ts.map +0 -1
- package/dist/tools/git-tool.js.map +0 -1
- package/dist/tools/parser.d.ts +0 -33
- package/dist/tools/parser.d.ts.map +0 -1
- package/dist/tools/parser.js.map +0 -1
- package/dist/tools/registry.d.ts +0 -74
- package/dist/tools/registry.d.ts.map +0 -1
- package/dist/tools/registry.js.map +0 -1
- package/dist/tools/search.d.ts +0 -41
- package/dist/tools/search.d.ts.map +0 -1
- package/dist/tools/search.js.map +0 -1
- package/dist/types.d.ts +0 -36
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js.map +0 -1
- package/dist/ui.d.ts +0 -60
- package/dist/ui.d.ts 2.map +0 -1
- package/dist/ui.d.ts.map +0 -1
- package/dist/ui.js.map +0 -1
- package/dist/utils/check-api-status.d.ts +0 -12
- package/dist/utils/check-api-status.d.ts.map +0 -1
- package/dist/utils/check-api-status.js.map +0 -1
- package/dist/utils/debug.d.ts +0 -7
- package/dist/utils/debug.d.ts.map +0 -1
- package/dist/utils/debug.js +0 -24
- package/dist/utils/debug.js.map +0 -1
- package/dist/utils/diff-parser.d.ts +0 -22
- package/dist/utils/diff-parser.d.ts.map +0 -1
- package/dist/utils/diff-parser.js.map +0 -1
- package/dist/utils/provider-check.d.ts +0 -21
- package/dist/utils/provider-check.d.ts.map +0 -1
- package/dist/utils/provider-check.js +0 -124
- package/dist/utils/provider-check.js.map +0 -1
- package/dist/utils/version.d.ts +0 -21
- package/dist/utils/version.d.ts.map +0 -1
- package/dist/utils/version.js.map +0 -1
- package/dist/verification/backup.d.ts +0 -30
- package/dist/verification/backup.d.ts.map +0 -1
- package/dist/verification/backup.js.map +0 -1
- package/dist/verification/compiler.d.ts +0 -20
- package/dist/verification/compiler.d.ts.map +0 -1
- package/dist/verification/compiler.js.map +0 -1
- package/dist/verification/index.d.ts +0 -59
- package/dist/verification/index.d.ts.map +0 -1
- package/dist/verification/index.js.map +0 -1
- package/dist/verification/test-runner.d.ts +0 -27
- package/dist/verification/test-runner.d.ts.map +0 -1
- package/dist/verification/test-runner.js.map +0 -1
- package/dist/verify_db.d.ts +0 -2
- package/dist/verify_db.d.ts.map +0 -1
- package/dist/verify_db.js +0 -52
- package/dist/verify_db.js 2.map +0 -1
- package/dist/verify_db.js.map +0 -1
|
@@ -1,101 +1,16 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Conversation Context Manager
|
|
3
3
|
* Manages conversation history and context for session-aware interactions
|
|
4
|
-
* Supports persistence for session continuity
|
|
5
4
|
*
|
|
6
5
|
* Phase 1: v0.5.0-alpha.0
|
|
7
6
|
*/
|
|
8
|
-
import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'fs';
|
|
9
|
-
import { join } from 'path';
|
|
10
7
|
/**
|
|
11
|
-
*
|
|
8
|
+
* In-memory conversation context manager
|
|
12
9
|
* Stores conversation history per session for reference resolution
|
|
13
|
-
* Supports saving/loading sessions for continuity across CLI invocations
|
|
14
10
|
*/
|
|
15
11
|
class ConversationContextManager {
|
|
16
12
|
sessions = new Map();
|
|
17
13
|
maxHistoryPerSession = 50;
|
|
18
|
-
cacheDir = '.codehere-cache';
|
|
19
|
-
sessionsDir = 'sessions';
|
|
20
|
-
/**
|
|
21
|
-
* Get the sessions directory path
|
|
22
|
-
*/
|
|
23
|
-
getSessionsPath(cwd = process.cwd()) {
|
|
24
|
-
return join(cwd, this.cacheDir, this.sessionsDir);
|
|
25
|
-
}
|
|
26
|
-
/**
|
|
27
|
-
* Get the session file path
|
|
28
|
-
*/
|
|
29
|
-
getSessionFilePath(cwd = process.cwd()) {
|
|
30
|
-
return join(this.getSessionsPath(cwd), 'last-session.json');
|
|
31
|
-
}
|
|
32
|
-
/**
|
|
33
|
-
* Save session to disk for continuity
|
|
34
|
-
*/
|
|
35
|
-
saveSession(sessionId, cwd = process.cwd()) {
|
|
36
|
-
const session = this.sessions.get(sessionId);
|
|
37
|
-
if (!session || session.turns.length === 0) {
|
|
38
|
-
return false;
|
|
39
|
-
}
|
|
40
|
-
try {
|
|
41
|
-
const sessionsPath = this.getSessionsPath(cwd);
|
|
42
|
-
if (!existsSync(sessionsPath)) {
|
|
43
|
-
mkdirSync(sessionsPath, { recursive: true });
|
|
44
|
-
}
|
|
45
|
-
const filePath = this.getSessionFilePath(cwd);
|
|
46
|
-
writeFileSync(filePath, JSON.stringify(session, null, 2));
|
|
47
|
-
return true;
|
|
48
|
-
}
|
|
49
|
-
catch {
|
|
50
|
-
return false;
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
/**
|
|
54
|
-
* Load previous session from disk
|
|
55
|
-
*/
|
|
56
|
-
loadPreviousSession(cwd = process.cwd()) {
|
|
57
|
-
try {
|
|
58
|
-
const filePath = this.getSessionFilePath(cwd);
|
|
59
|
-
if (!existsSync(filePath)) {
|
|
60
|
-
return null;
|
|
61
|
-
}
|
|
62
|
-
const data = readFileSync(filePath, 'utf-8');
|
|
63
|
-
const session = JSON.parse(data);
|
|
64
|
-
// Validate session structure
|
|
65
|
-
if (!session.sessionId || !Array.isArray(session.turns)) {
|
|
66
|
-
return null;
|
|
67
|
-
}
|
|
68
|
-
// Check if session is too old (24 hours)
|
|
69
|
-
const age = Date.now() - session.lastUpdated;
|
|
70
|
-
if (age > 24 * 60 * 60 * 1000) {
|
|
71
|
-
return null;
|
|
72
|
-
}
|
|
73
|
-
// Restore session to memory
|
|
74
|
-
this.sessions.set(session.sessionId, session);
|
|
75
|
-
return session;
|
|
76
|
-
}
|
|
77
|
-
catch {
|
|
78
|
-
return null;
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
/**
|
|
82
|
-
* Get last session summary for display
|
|
83
|
-
*/
|
|
84
|
-
getLastSessionSummary(cwd = process.cwd()) {
|
|
85
|
-
const session = this.loadPreviousSession(cwd);
|
|
86
|
-
if (!session || session.turns.length === 0) {
|
|
87
|
-
return null;
|
|
88
|
-
}
|
|
89
|
-
const lastTurn = session.turns[session.turns.length - 1];
|
|
90
|
-
const lastTime = typeof lastTurn.timestamp === 'string'
|
|
91
|
-
? new Date(lastTurn.timestamp).toLocaleString()
|
|
92
|
-
: new Date(lastTurn.timestamp).toLocaleString();
|
|
93
|
-
return {
|
|
94
|
-
turnCount: session.turns.length,
|
|
95
|
-
lastQuery: lastTurn.query,
|
|
96
|
-
lastTime,
|
|
97
|
-
};
|
|
98
|
-
}
|
|
99
14
|
/**
|
|
100
15
|
* Get conversation history for a session
|
|
101
16
|
*/
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cost Router
|
|
3
|
+
*
|
|
4
|
+
* Given a trust score and task complexity, recommends the cheapest model
|
|
5
|
+
* that's safe to use. The 42x cost difference between Haiku and Opus means
|
|
6
|
+
* routing decisions have real financial impact at scale.
|
|
7
|
+
*
|
|
8
|
+
* Model tiers (approximate $/M output tokens, 2026):
|
|
9
|
+
* fast tier (e.g. claude-haiku-4-5) $1.25 — cheap, good for simple tasks
|
|
10
|
+
* balanced tier (e.g. claude-sonnet-4-6) $15.00 — good for most tasks
|
|
11
|
+
* max tier (e.g. claude-opus-4-6) $75.00 — strongest, use sparingly
|
|
12
|
+
*
|
|
13
|
+
* Routing logic:
|
|
14
|
+
* trust >= 90, simple task → fast tier (60x cheaper than max tier)
|
|
15
|
+
* trust >= 75, any task → balanced tier (5x cheaper than max tier)
|
|
16
|
+
* trust < 75, or critical → balanced tier with human review flag
|
|
17
|
+
* critical findings present → block before reaching model
|
|
18
|
+
*/
|
|
19
|
+
const MODEL_COSTS = {
|
|
20
|
+
haiku: 1.25,
|
|
21
|
+
sonnet: 15.0,
|
|
22
|
+
opus: 75.0,
|
|
23
|
+
};
|
|
24
|
+
const MODEL_IDS = {
|
|
25
|
+
haiku: 'claude-haiku-4-5-20251001',
|
|
26
|
+
sonnet: 'claude-sonnet-4-6',
|
|
27
|
+
opus: 'claude-opus-4-6',
|
|
28
|
+
};
|
|
29
|
+
const TIER_LABELS = {
|
|
30
|
+
haiku: 'fast tier',
|
|
31
|
+
sonnet: 'balanced tier',
|
|
32
|
+
opus: 'max tier',
|
|
33
|
+
};
|
|
34
|
+
function savingsLabel(chosen) {
|
|
35
|
+
if (chosen === 'opus')
|
|
36
|
+
return 'max tier (baseline)';
|
|
37
|
+
const ratio = MODEL_COSTS.opus / MODEL_COSTS[chosen];
|
|
38
|
+
return `${TIER_LABELS[chosen]} · ${Math.round(ratio)}x cheaper than max tier`;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Recommend the optimal model for a given trust score and task complexity.
|
|
42
|
+
*/
|
|
43
|
+
export function recommendModel(trustScore, complexity = 'standard', criticalFindings = 0) {
|
|
44
|
+
// Critical findings → require human review regardless of model
|
|
45
|
+
if (criticalFindings > 0) {
|
|
46
|
+
return {
|
|
47
|
+
model: 'sonnet',
|
|
48
|
+
modelId: MODEL_IDS.sonnet,
|
|
49
|
+
reason: `${criticalFindings} critical finding${criticalFindings !== 1 ? 's' : ''} — human review required before applying any edit`,
|
|
50
|
+
costPer1MTokens: MODEL_COSTS.sonnet,
|
|
51
|
+
savingsVsOpus: savingsLabel('sonnet'),
|
|
52
|
+
humanReview: true,
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
// High-trust simple tasks → Haiku
|
|
56
|
+
if (trustScore >= 90 && complexity === 'simple') {
|
|
57
|
+
return {
|
|
58
|
+
model: 'haiku',
|
|
59
|
+
modelId: MODEL_IDS.haiku,
|
|
60
|
+
reason: `Trust ${trustScore}/100 · simple task — safe for fastest, cheapest model`,
|
|
61
|
+
costPer1MTokens: MODEL_COSTS.haiku,
|
|
62
|
+
savingsVsOpus: savingsLabel('haiku'),
|
|
63
|
+
humanReview: false,
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
// Good trust, standard task → Sonnet
|
|
67
|
+
if (trustScore >= 75) {
|
|
68
|
+
return {
|
|
69
|
+
model: 'sonnet',
|
|
70
|
+
modelId: MODEL_IDS.sonnet,
|
|
71
|
+
reason: `Trust ${trustScore}/100 · ${complexity} task — Sonnet is the right balance`,
|
|
72
|
+
costPer1MTokens: MODEL_COSTS.sonnet,
|
|
73
|
+
savingsVsOpus: savingsLabel('sonnet'),
|
|
74
|
+
humanReview: false,
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
// Low trust → Sonnet with human review
|
|
78
|
+
return {
|
|
79
|
+
model: 'sonnet',
|
|
80
|
+
modelId: MODEL_IDS.sonnet,
|
|
81
|
+
reason: `Trust ${trustScore}/100 — lower confidence; recommend reviewing the output`,
|
|
82
|
+
costPer1MTokens: MODEL_COSTS.sonnet,
|
|
83
|
+
savingsVsOpus: savingsLabel('sonnet'),
|
|
84
|
+
humanReview: true,
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Estimate monthly savings from routing decisions.
|
|
89
|
+
* @param avgTokensPerTask Average output tokens per AI task
|
|
90
|
+
* @param tasksPerMonth Monthly task volume
|
|
91
|
+
* @param distribution Fraction of tasks at each tier
|
|
92
|
+
*/
|
|
93
|
+
export function estimateMonthlySavings(avgTokensPerTask = 2000, tasksPerMonth = 500, distribution = { haiku: 0.4, sonnet: 0.55, opus: 0.05 }) {
|
|
94
|
+
const tokensMillion = avgTokensPerTask / 1_000_000;
|
|
95
|
+
let routedCost = 0;
|
|
96
|
+
for (const [tier, fraction] of Object.entries(distribution)) {
|
|
97
|
+
routedCost += fraction * tasksPerMonth * tokensMillion * MODEL_COSTS[tier];
|
|
98
|
+
}
|
|
99
|
+
const opusCost = tasksPerMonth * tokensMillion * MODEL_COSTS.opus;
|
|
100
|
+
const saving = opusCost - routedCost;
|
|
101
|
+
const savingPct = (saving / opusCost) * 100;
|
|
102
|
+
return { routedCost, opusCost, saving, savingPct };
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=cost-router.js.map
|
|
@@ -13,7 +13,6 @@ import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'fs';
|
|
|
13
13
|
import { join, dirname } from 'path';
|
|
14
14
|
import { fileURLToPath } from 'url';
|
|
15
15
|
import initSqlJs from 'sql.js';
|
|
16
|
-
import { getConfigManager } from '../config/config-manager.js';
|
|
17
16
|
const __filename = fileURLToPath(import.meta.url);
|
|
18
17
|
const __dirname = dirname(__filename);
|
|
19
18
|
// Cohere pricing (as of 2024, update as needed)
|
|
@@ -48,8 +47,8 @@ export class CostTracker {
|
|
|
48
47
|
// Default budget limit when no override is provided
|
|
49
48
|
static DEFAULT_BUDGET_LIMIT = 2.0;
|
|
50
49
|
constructor(budgetLimit, alertThreshold = 0.8) {
|
|
51
|
-
const
|
|
52
|
-
const dataDir =
|
|
50
|
+
const agentDir = join(__dirname, '../../..');
|
|
51
|
+
const dataDir = join(agentDir, 'data');
|
|
53
52
|
if (!existsSync(dataDir)) {
|
|
54
53
|
mkdirSync(dataDir, { recursive: true });
|
|
55
54
|
}
|
|
@@ -85,7 +85,8 @@ export class PolicyAsCode {
|
|
|
85
85
|
for (const condition of rule.conditions) {
|
|
86
86
|
const conditionResult = this.evaluateCondition(condition, context);
|
|
87
87
|
// Debug logging
|
|
88
|
-
|
|
88
|
+
if (process.env.CODEHERE_DEBUG === '1')
|
|
89
|
+
console.log(`[PolicyAsCode] Evaluating condition: ${condition.type} ${condition.operator} ${condition.value}, actual: ${conditionResult.actual}, condition met: ${conditionResult.passed}`);
|
|
89
90
|
// CRITICAL FIX: Policy conditions are "blocking conditions"
|
|
90
91
|
// If condition is met (passed = true), it means we SHOULD block → policy FAILS
|
|
91
92
|
// If condition is NOT met (passed = false), it means we should NOT block → policy PASSES
|
|
@@ -0,0 +1,253 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Claude Agent SDK Hook Handler
|
|
3
|
+
*
|
|
4
|
+
* Intercepts every Claude Code tool call via PreToolUse/PostToolUse hooks.
|
|
5
|
+
* Runs Layer 0 security scan (local, no API, <50ms) before any tool executes.
|
|
6
|
+
*
|
|
7
|
+
* Claude Code hook contract:
|
|
8
|
+
* - stdin: JSON event { session_id, hook_event_name, tool_name, tool_input }
|
|
9
|
+
* - stdout: optional JSON { decision: 'block'|'approve', reason?: string, suppressOutput?: boolean }
|
|
10
|
+
* - stderr: human-readable messages shown to user
|
|
11
|
+
* - exit 0: allow (default)
|
|
12
|
+
* - exit non-0: block with stderr shown to user
|
|
13
|
+
*
|
|
14
|
+
* Docs: https://docs.anthropic.com/en/docs/claude-code/hooks
|
|
15
|
+
*/
|
|
16
|
+
import { appendFileSync, existsSync, mkdirSync } from 'fs';
|
|
17
|
+
import { join } from 'path';
|
|
18
|
+
import { homedir } from 'os';
|
|
19
|
+
const PATTERNS = [
|
|
20
|
+
// Prompt Injection
|
|
21
|
+
{ regex: /ignore\s+(previous|prior|above|all|your)\s+(instructions?|rules?|prompts?|guidelines?)/i, severity: 'critical', category: 'Prompt Injection', description: 'Attempts to override system instructions' },
|
|
22
|
+
{ regex: /disregard\s+(previous|prior|all|your)\s+(instructions?|rules?|prompts?)/i, severity: 'critical', category: 'Prompt Injection', description: 'Disregard instruction override' },
|
|
23
|
+
{ regex: /forget\s+(everything|all|previous|your)\s*(instructions?|rules?|context)?/i, severity: 'critical', category: 'Prompt Injection', description: 'Context clearing attempt' },
|
|
24
|
+
{ regex: /you\s+are\s+now\s+(a|an|my)|new\s+role\s*:|act\s+as\s+(a|an|if)/i, severity: 'critical', category: 'Prompt Injection', description: 'Role hijacking attempt' },
|
|
25
|
+
{ regex: /system\s*prompt|<\/?system>|(?<!['"\\])<\/?instruction>/i, severity: 'critical', category: 'Prompt Injection', description: 'System prompt injection' },
|
|
26
|
+
{ regex: /\bdo\s+not\s+(follow|obey|listen|comply)\b/i, severity: 'critical', category: 'Prompt Injection', description: 'Instruction override attempt' },
|
|
27
|
+
{ regex: /jailbreak|DAN\s+mode|developer\s+mode\s+enabled/i, severity: 'critical', category: 'Prompt Injection', description: 'Jailbreak attempt' },
|
|
28
|
+
{ regex: /bypass\s+(safety|restrictions?|filters?|guidelines?)/i, severity: 'critical', category: 'Prompt Injection', description: 'Safety bypass attempt' },
|
|
29
|
+
{ regex: /\[INST\]|\[\/INST\]|###\s*human:|###\s*assistant:/i, severity: 'high', category: 'Prompt Injection', description: 'Prompt template injection' },
|
|
30
|
+
{ regex: /override\s+(safety|security|policy|restrictions?)/i, severity: 'critical', category: 'Prompt Injection', description: 'Policy override attempt' },
|
|
31
|
+
// Credential Theft
|
|
32
|
+
{ regex: /cat\s+~?\/?(\.env|\.secrets?|credentials?|\.aws\/credentials)/i, severity: 'critical', category: 'Credential Theft', description: 'Reads credential files' },
|
|
33
|
+
{ regex: /echo\s+\$\s*(API_KEY|SECRET|TOKEN|PASSWORD|PRIVATE_KEY)/i, severity: 'critical', category: 'Credential Theft', description: 'Exfiltrates env secrets' },
|
|
34
|
+
{ regex: /printenv|env\s*\|\s*(grep|curl|wget|nc)\b/i, severity: 'high', category: 'Credential Theft', description: 'Environment variable exfiltration' },
|
|
35
|
+
{ regex: /curl.*\$(API_KEY|TOKEN|SECRET|PASSWORD)/i, severity: 'critical', category: 'Credential Theft', description: 'API key exfiltration via curl' },
|
|
36
|
+
{ regex: /ssh-keygen|cat\s+~\/.ssh\/(id_rsa|id_ed25519|authorized_keys)/i, severity: 'high', category: 'Credential Theft', description: 'SSH key access' },
|
|
37
|
+
{ regex: /keychain|security\s+find-generic-password/i, severity: 'high', category: 'Credential Theft', description: 'macOS keychain access attempt' },
|
|
38
|
+
{ regex: /OPENAI_API_KEY|ANTHROPIC_API_KEY|GITHUB_TOKEN/i, severity: 'high', category: 'Credential Theft', description: 'Known API key reference' },
|
|
39
|
+
{ regex: /\bsecret_key\b|\bapi_secret\b|\bauth_token\b/i, severity: 'medium', category: 'Credential Theft', description: 'Secret key reference' },
|
|
40
|
+
{ regex: /curl.*webhook.*\$\w+|wget.*\$\w+.*credentials/i, severity: 'critical', category: 'Credential Theft', description: 'Credential webhook exfiltration' },
|
|
41
|
+
{ regex: /\/proc\/\d+\/environ|\/etc\/shadow/i, severity: 'critical', category: 'Credential Theft', description: 'System credential file access' },
|
|
42
|
+
// Destructive Operations
|
|
43
|
+
{ regex: /rm\s+-rf?\s+(\/|~|\.\.|\*|\/home|\/etc|\/var|\/usr)/i, severity: 'critical', category: 'Destructive', description: 'Recursive deletion of system/home directories' },
|
|
44
|
+
{ regex: /delete\s+all\s+files|wipe\s+(disk|drive|everything)|format\s+[a-z]:/i, severity: 'critical', category: 'Destructive', description: 'Mass file deletion' },
|
|
45
|
+
{ regex: />\s*\/dev\/(sda|hda|vda|nvme)|dd\s+if=.*of=\/dev/i, severity: 'critical', category: 'Destructive', description: 'Raw disk write attempt' },
|
|
46
|
+
{ regex: /DROP\s+TABLE|DROP\s+DATABASE|TRUNCATE\s+TABLE/i, severity: 'critical', category: 'Destructive', description: 'Database destruction' },
|
|
47
|
+
{ regex: /git\s+(push\s+--force|reset\s+--hard)\s+origin/i, severity: 'high', category: 'Destructive', description: 'Force push or hard reset to remote' },
|
|
48
|
+
{ regex: /shutdown\s+-[hr]|reboot\s+--force|init\s+0/i, severity: 'high', category: 'Destructive', description: 'System shutdown/reboot' },
|
|
49
|
+
{ regex: /pkill\s+-9\s+(node|python|ruby|java)\b/i, severity: 'medium', category: 'Destructive', description: 'Process mass termination' },
|
|
50
|
+
{ regex: /crontab\s+-r|at\s+now.*rm|systemctl\s+disable\s+--now/i, severity: 'high', category: 'Destructive', description: 'Scheduled destruction' },
|
|
51
|
+
// Code/Command Injection
|
|
52
|
+
// NOTE: patterns match execution intent, not grep/search of these strings.
|
|
53
|
+
// A command starting with "grep", "rg", "ag", or "find" is a search, not execution —
|
|
54
|
+
// those are pre-filtered in buildScanPayload before patterns run.
|
|
55
|
+
{ regex: /curl\s+\S+\s*\|\s*(bash|sh|python|ruby|perl|node)\b/i, severity: 'critical', category: 'Code Injection', description: 'Remote script piped directly to shell' },
|
|
56
|
+
{ regex: /wget\s+(-qO-\s+)?https?:\/\/\S+\s*\|\s*(bash|sh)/i, severity: 'critical', category: 'Code Injection', description: 'Remote code execution via wget' },
|
|
57
|
+
{ regex: /node\s+-e\s+["'].*eval\s*\(|node\s+-e\s+["'].*require\s*\(/i, severity: 'critical', category: 'Code Injection', description: 'Inline node eval execution' },
|
|
58
|
+
{ regex: /eval\s*\(.*process\.env\.|eval\s*\(.*\$_(GET|POST|REQUEST)/i, severity: 'critical', category: 'Code Injection', description: 'eval() with external or env input' },
|
|
59
|
+
{ regex: /exec\s*\(\s*['"]\s*system/i, severity: 'critical', category: 'Code Injection', description: 'System shell from code' },
|
|
60
|
+
{ regex: /python\s+-c\s+["']import\s+os;os\.system/i, severity: 'high', category: 'Code Injection', description: 'Python shell injection' },
|
|
61
|
+
{ regex: /nc\s+-[eln]+\s+\d{1,3}\.\d{1,3}|bash\s+-i\s+>&\s*\/dev\/tcp/i, severity: 'critical', category: 'Code Injection', description: 'Reverse shell attempt' },
|
|
62
|
+
{ regex: /\bbase64\b.*\|.*(bash|sh)\b|\bbase64\b.*exec/i, severity: 'critical', category: 'Code Injection', description: 'Base64-encoded code execution' },
|
|
63
|
+
{ regex: /\$\(curl|subprocess\.run\(['"]curl/i, severity: 'high', category: 'Code Injection', description: 'Command substitution with curl' },
|
|
64
|
+
// Supply Chain
|
|
65
|
+
{ regex: /npm\s+install\s+[a-z0-9-]+[0-9]{4,}|pip\s+install\s+\w+\d{6,}/i, severity: 'high', category: 'Supply Chain', description: 'Suspicious package version pattern' },
|
|
66
|
+
{ regex: /npm\s+install\s+--save\s+[a-z]{2}\.[a-z]{2}\.[a-z]{2}/i, severity: 'high', category: 'Supply Chain', description: 'Typosquatting package pattern' },
|
|
67
|
+
{ regex: /preinstall|postinstall|prepare/i, severity: 'medium', category: 'Supply Chain', description: 'Lifecycle script reference' },
|
|
68
|
+
{ regex: /registry\.npmjs\.org\/[^/]+\/-\/[^/]+\.tgz.*;\s*bash/i, severity: 'critical', category: 'Supply Chain', description: 'Direct npm tarball execution' },
|
|
69
|
+
// OWASP / Security Misconfig
|
|
70
|
+
{ regex: /Access-Control-Allow-Origin:\s*\*/i, severity: 'medium', category: 'OWASP', description: 'Wildcard CORS header' },
|
|
71
|
+
{ regex: /verify\s*=\s*False|ssl_verify\s*=\s*False|checkCertificate\s*=\s*false/i, severity: 'high', category: 'OWASP', description: 'SSL certificate verification disabled' },
|
|
72
|
+
{ regex: /password\s*=\s*["'][^"']{0,16}["']|secret\s*=\s*["'][^"']{0,16}["']/i, severity: 'medium', category: 'OWASP', description: 'Hardcoded credential' },
|
|
73
|
+
{ regex: /eval\s*\([^)]*user|innerHTML\s*=\s*[^;]*user|document\.write\s*\([^)]*user/i, severity: 'high', category: 'OWASP', description: 'Potential XSS via user input' },
|
|
74
|
+
{ regex: /SELECT\s+\*?\s+FROM\s+\w+\s+WHERE.*['"]\s*\+|query\s*\+\s*user/i, severity: 'critical', category: 'OWASP', description: 'SQL injection pattern' },
|
|
75
|
+
// Data Exfiltration
|
|
76
|
+
{ regex: /curl\s+.*-d\s+@\/|curl\s+.*--data-binary\s+@\//i, severity: 'high', category: 'Data Exfiltration', description: 'File upload via curl' },
|
|
77
|
+
{ regex: /scp\s+.*@\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/i, severity: 'high', category: 'Data Exfiltration', description: 'SCP to external IP' },
|
|
78
|
+
{ regex: /rclone\s+copy|rsync\s+-av?[rpz]+\s+\/\w+.*@/i, severity: 'medium', category: 'Data Exfiltration', description: 'Mass file sync to remote' },
|
|
79
|
+
];
|
|
80
|
+
// ── Risk scoring ────────────────────────────────────────────────────────────
|
|
81
|
+
const SEVERITY_SCORES = {
|
|
82
|
+
critical: 40,
|
|
83
|
+
high: 20,
|
|
84
|
+
medium: 10,
|
|
85
|
+
low: 5,
|
|
86
|
+
};
|
|
87
|
+
/**
|
|
88
|
+
* Scans a text payload against all Layer 0 patterns.
|
|
89
|
+
* Returns findings and a 0-100 risk score.
|
|
90
|
+
* Average run time: < 5ms on a modern CPU.
|
|
91
|
+
*/
|
|
92
|
+
export function scanPayload(text) {
|
|
93
|
+
const findings = [];
|
|
94
|
+
for (const pattern of PATTERNS) {
|
|
95
|
+
const match = text.match(pattern.regex);
|
|
96
|
+
if (match) {
|
|
97
|
+
findings.push({
|
|
98
|
+
severity: pattern.severity,
|
|
99
|
+
category: pattern.category,
|
|
100
|
+
description: pattern.description,
|
|
101
|
+
matched: match[0].substring(0, 120), // truncate for audit log
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
return findings;
|
|
106
|
+
}
|
|
107
|
+
export function calculateRiskScore(findings) {
|
|
108
|
+
let score = 0;
|
|
109
|
+
for (const f of findings) {
|
|
110
|
+
score += SEVERITY_SCORES[f.severity] ?? 5;
|
|
111
|
+
}
|
|
112
|
+
return Math.min(100, score);
|
|
113
|
+
}
|
|
114
|
+
// ── Audit log ───────────────────────────────────────────────────────────────
|
|
115
|
+
const AUDIT_DIR = join(homedir(), '.codehere', 'audit');
|
|
116
|
+
export const AUDIT_FILE = join(AUDIT_DIR, 'hook-events.jsonl');
|
|
117
|
+
function ensureAuditDir() {
|
|
118
|
+
if (!existsSync(AUDIT_DIR)) {
|
|
119
|
+
mkdirSync(AUDIT_DIR, { recursive: true });
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
export function appendAuditLog(entry) {
|
|
123
|
+
try {
|
|
124
|
+
ensureAuditDir();
|
|
125
|
+
appendFileSync(AUDIT_FILE, JSON.stringify(entry) + '\n');
|
|
126
|
+
}
|
|
127
|
+
catch {
|
|
128
|
+
// Audit log failure must not block tool execution
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
// ── Main hook handler ────────────────────────────────────────────────────────
|
|
132
|
+
/**
|
|
133
|
+
* Process a Claude Code hook event.
|
|
134
|
+
* Called with the parsed stdin JSON from Claude Code's hook system.
|
|
135
|
+
*
|
|
136
|
+
* Returns:
|
|
137
|
+
* - null: allow the tool call, print nothing
|
|
138
|
+
* - HookDecision with decision:'block': reject the tool call
|
|
139
|
+
*/
|
|
140
|
+
/**
|
|
141
|
+
* Build a scan payload that is appropriate for the tool type.
|
|
142
|
+
*
|
|
143
|
+
* Bash / NotebookEdit: the command IS the executable — scan everything.
|
|
144
|
+
* Exception: commands that start with grep/rg/find/ag are search operations,
|
|
145
|
+
* not execution — strip the search term so pattern strings in args don't
|
|
146
|
+
* trigger the scanner.
|
|
147
|
+
*
|
|
148
|
+
* Write / Edit / MultiEdit: the content is data being written to disk,
|
|
149
|
+
* not executed. Only scan the file path (destination) and, for Edit,
|
|
150
|
+
* the old_string (what we're matching). Never scan new_string / content
|
|
151
|
+
* — that would block writing security documentation, test fixtures, etc.
|
|
152
|
+
*/
|
|
153
|
+
function buildScanPayload(toolName, toolInput) {
|
|
154
|
+
if (toolName === 'Bash') {
|
|
155
|
+
const cmd = String(toolInput.command ?? '');
|
|
156
|
+
// Search commands — only scan the binary name and flags, not the pattern argument.
|
|
157
|
+
// grep/rg/ag/find searching FOR dangerous strings is not dangerous.
|
|
158
|
+
if (/^\s*(grep|rg|ag|find|awk|sed)\s/.test(cmd)) {
|
|
159
|
+
const binary = cmd.match(/^\s*(\S+)/)?.[1] ?? cmd;
|
|
160
|
+
return JSON.stringify({ command: binary });
|
|
161
|
+
}
|
|
162
|
+
return JSON.stringify({ command: cmd });
|
|
163
|
+
}
|
|
164
|
+
if (toolName === 'Write') {
|
|
165
|
+
// Only scan the destination path — content is data, not a command
|
|
166
|
+
return JSON.stringify({ file_path: toolInput.file_path ?? '' });
|
|
167
|
+
}
|
|
168
|
+
if (toolName === 'Edit') {
|
|
169
|
+
// Scan destination path + old_string (the selector), not new_string (the replacement)
|
|
170
|
+
return JSON.stringify({
|
|
171
|
+
file_path: toolInput.file_path ?? '',
|
|
172
|
+
old_string: toolInput.old_string ?? '',
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
if (toolName === 'MultiEdit') {
|
|
176
|
+
// Scan file paths only
|
|
177
|
+
const edits = Array.isArray(toolInput.edits) ? toolInput.edits : [];
|
|
178
|
+
return JSON.stringify({ file_paths: edits.map((e) => e.file_path ?? '') });
|
|
179
|
+
}
|
|
180
|
+
// Unknown tool — scan everything
|
|
181
|
+
return JSON.stringify(toolInput);
|
|
182
|
+
}
|
|
183
|
+
export function processHookEvent(event) {
|
|
184
|
+
const { hook_event_name, tool_name = 'unknown', tool_input = {}, session_id = 'unknown', } = event;
|
|
185
|
+
// Only intercept PreToolUse events
|
|
186
|
+
if (hook_event_name !== 'PreToolUse') {
|
|
187
|
+
return null;
|
|
188
|
+
}
|
|
189
|
+
// Build context-appropriate scan payload (Bash = full, Write/Edit = path only)
|
|
190
|
+
const payload = buildScanPayload(tool_name, tool_input);
|
|
191
|
+
// Layer 0 scan — local, no API, ~2ms
|
|
192
|
+
const findings = scanPayload(payload);
|
|
193
|
+
const riskScore = calculateRiskScore(findings);
|
|
194
|
+
const criticalFindings = findings.filter(f => f.severity === 'critical');
|
|
195
|
+
// Blocking threshold: critical finding OR risk score too high
|
|
196
|
+
const blocked = criticalFindings.length > 0 || riskScore >= 60;
|
|
197
|
+
// Build audit entry
|
|
198
|
+
const auditEntry = {
|
|
199
|
+
timestamp: new Date().toISOString(),
|
|
200
|
+
sessionId: session_id,
|
|
201
|
+
toolName: tool_name,
|
|
202
|
+
toolInput: payload.substring(0, 500), // truncate long inputs
|
|
203
|
+
riskScore,
|
|
204
|
+
blocked,
|
|
205
|
+
findings: findings.length,
|
|
206
|
+
criticalFindings: criticalFindings.length,
|
|
207
|
+
};
|
|
208
|
+
appendAuditLog(auditEntry);
|
|
209
|
+
if (!blocked) {
|
|
210
|
+
return null; // allow
|
|
211
|
+
}
|
|
212
|
+
// Build human-readable block reason
|
|
213
|
+
const topFinding = criticalFindings[0] ?? findings[0];
|
|
214
|
+
const categoryVoice = {
|
|
215
|
+
'Prompt Injection': 'Caught a prompt injection attempt',
|
|
216
|
+
'Credential Theft': 'Stopped — this looks like it\'s trying to access credentials',
|
|
217
|
+
'Destructive': 'Stopped — this could delete or destroy data',
|
|
218
|
+
'Code Injection': 'Blocked — this pattern looks like code injection',
|
|
219
|
+
'Supply Chain': 'Blocked — suspicious package or dependency pattern',
|
|
220
|
+
'OWASP': 'Blocked — security misconfiguration pattern',
|
|
221
|
+
'Data Exfiltration': 'Blocked — this looks like it\'s trying to send data out',
|
|
222
|
+
};
|
|
223
|
+
const reason = topFinding
|
|
224
|
+
? `[codehere] ${categoryVoice[topFinding.category] ?? 'Blocked'} — ${topFinding.description}. (matched: "${topFinding.matched}")`
|
|
225
|
+
: `[codehere] Blocked — risk score ${riskScore}/100 is too high to allow this through`;
|
|
226
|
+
return {
|
|
227
|
+
decision: 'block',
|
|
228
|
+
reason,
|
|
229
|
+
};
|
|
230
|
+
}
|
|
231
|
+
// ── Hook configuration generator ────────────────────────────────────────────
|
|
232
|
+
/**
|
|
233
|
+
* Returns the JSON config block to add to ~/.claude/settings.json
|
|
234
|
+
* under the "hooks" key.
|
|
235
|
+
*/
|
|
236
|
+
export function generateHookConfig(options = {}) {
|
|
237
|
+
const command = options.logOnly
|
|
238
|
+
? 'codehere scan-tool --log-only'
|
|
239
|
+
: `codehere scan-tool${options.blockMode === 'all' ? ' --block-all' : ''}`;
|
|
240
|
+
// Cover every tool that can mutate the filesystem or run code.
|
|
241
|
+
// NotebookEdit added to catch Jupyter notebook writes.
|
|
242
|
+
const hook = { type: 'command', command };
|
|
243
|
+
return {
|
|
244
|
+
PreToolUse: [
|
|
245
|
+
{ matcher: 'Bash', hooks: [hook] },
|
|
246
|
+
{ matcher: 'Edit', hooks: [hook] },
|
|
247
|
+
{ matcher: 'Write', hooks: [hook] },
|
|
248
|
+
{ matcher: 'MultiEdit', hooks: [hook] },
|
|
249
|
+
{ matcher: 'NotebookEdit', hooks: [hook] },
|
|
250
|
+
],
|
|
251
|
+
};
|
|
252
|
+
}
|
|
253
|
+
//# sourceMappingURL=claude-sdk-hook.js.map
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session Analyzer
|
|
3
|
+
*
|
|
4
|
+
* Detects multi-agent amplification patterns in the hook audit log.
|
|
5
|
+
*
|
|
6
|
+
* When Claude Code spawns sub-agents via the Task tool, each agent makes
|
|
7
|
+
* additional tool calls. One compromised instruction can amplify into
|
|
8
|
+
* many downstream tool calls — the "17.2x amplification" risk.
|
|
9
|
+
*
|
|
10
|
+
* This analyzer groups audit events by session and detects:
|
|
11
|
+
* 1. High tool call volume per session (potential amplification)
|
|
12
|
+
* 2. Sessions with blocked calls (injection attempts)
|
|
13
|
+
* 3. Sessions with unusual tool mix (e.g., many Bash calls in a row)
|
|
14
|
+
*/
|
|
15
|
+
/**
|
|
16
|
+
* Group audit entries by session and compute per-session stats.
|
|
17
|
+
*/
|
|
18
|
+
export function analyzeSessions(entries) {
|
|
19
|
+
const bySession = new Map();
|
|
20
|
+
for (const entry of entries) {
|
|
21
|
+
const sid = entry.sessionId || 'unknown';
|
|
22
|
+
if (!bySession.has(sid))
|
|
23
|
+
bySession.set(sid, []);
|
|
24
|
+
bySession.get(sid).push(entry);
|
|
25
|
+
}
|
|
26
|
+
const summaries = [];
|
|
27
|
+
for (const [sessionId, sessionEntries] of bySession) {
|
|
28
|
+
const sorted = [...sessionEntries].sort((a, b) => new Date(a.timestamp).getTime() - new Date(b.timestamp).getTime());
|
|
29
|
+
const first = sorted[0];
|
|
30
|
+
const last = sorted[sorted.length - 1];
|
|
31
|
+
const durationMs = new Date(last.timestamp).getTime() - new Date(first.timestamp).getTime();
|
|
32
|
+
const toolMix = {};
|
|
33
|
+
let blocked = 0;
|
|
34
|
+
let critical = 0;
|
|
35
|
+
for (const e of sorted) {
|
|
36
|
+
toolMix[e.toolName] = (toolMix[e.toolName] ?? 0) + 1;
|
|
37
|
+
if (e.blocked)
|
|
38
|
+
blocked++;
|
|
39
|
+
if (e.criticalFindings > 0)
|
|
40
|
+
critical++;
|
|
41
|
+
}
|
|
42
|
+
// Risk heuristics:
|
|
43
|
+
// - >50 calls in one session = possible amplification
|
|
44
|
+
// - >10 Bash calls = elevated risk
|
|
45
|
+
// - any blocked calls in a long session = suspicious
|
|
46
|
+
const bashCount = toolMix['Bash'] ?? 0;
|
|
47
|
+
const callCount = sorted.length;
|
|
48
|
+
let risk = 'low';
|
|
49
|
+
if (blocked > 0 && callCount > 20)
|
|
50
|
+
risk = 'high';
|
|
51
|
+
else if (callCount > 50 || (bashCount > 10 && callCount > 20))
|
|
52
|
+
risk = 'medium';
|
|
53
|
+
else if (blocked > 0 || callCount > 25)
|
|
54
|
+
risk = 'medium';
|
|
55
|
+
summaries.push({
|
|
56
|
+
sessionId,
|
|
57
|
+
firstSeen: first.timestamp,
|
|
58
|
+
lastSeen: last.timestamp,
|
|
59
|
+
totalCalls: callCount,
|
|
60
|
+
blockedCalls: blocked,
|
|
61
|
+
criticalCalls: critical,
|
|
62
|
+
toolMix,
|
|
63
|
+
amplificationRisk: risk,
|
|
64
|
+
durationMs,
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
return summaries.sort((a, b) => new Date(b.lastSeen).getTime() - new Date(a.lastSeen).getTime());
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Identify sessions with amplification risk worth flagging.
|
|
71
|
+
*/
|
|
72
|
+
export function detectAmplificationAlerts(sessions) {
|
|
73
|
+
const alerts = [];
|
|
74
|
+
for (const session of sessions) {
|
|
75
|
+
if (session.amplificationRisk === 'low')
|
|
76
|
+
continue;
|
|
77
|
+
let message = '';
|
|
78
|
+
const risk = session.amplificationRisk;
|
|
79
|
+
if (session.blockedCalls > 0 && session.totalCalls > 20) {
|
|
80
|
+
message = `${session.totalCalls} tool calls with ${session.blockedCalls} blocked — possible injection in multi-agent chain`;
|
|
81
|
+
}
|
|
82
|
+
else if (session.totalCalls > 50) {
|
|
83
|
+
message = `${session.totalCalls} tool calls in one session — check for amplification`;
|
|
84
|
+
}
|
|
85
|
+
else if ((session.toolMix['Bash'] ?? 0) > 10) {
|
|
86
|
+
message = `${session.toolMix['Bash']} Bash calls in one session — elevated risk`;
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
message = `${session.totalCalls} calls, ${session.blockedCalls} blocked — worth reviewing`;
|
|
90
|
+
}
|
|
91
|
+
alerts.push({
|
|
92
|
+
sessionId: session.sessionId,
|
|
93
|
+
message,
|
|
94
|
+
callCount: session.totalCalls,
|
|
95
|
+
blockedCount: session.blockedCalls,
|
|
96
|
+
risk: risk === 'high' ? 'high' : 'medium',
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
return alerts.slice(0, 5); // top 5 alerts
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Format session duration for display.
|
|
103
|
+
*/
|
|
104
|
+
export function formatDuration(ms) {
|
|
105
|
+
if (ms < 60_000)
|
|
106
|
+
return `${Math.round(ms / 1000)}s`;
|
|
107
|
+
if (ms < 3_600_000)
|
|
108
|
+
return `${Math.round(ms / 60_000)}m`;
|
|
109
|
+
return `${Math.round(ms / 3_600_000)}h`;
|
|
110
|
+
}
|
|
111
|
+
//# sourceMappingURL=session-analyzer.js.map
|