byterover-cli 0.4.1 → 1.0.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/README.md +1 -9
- package/dist/commands/curate.d.ts +1 -3
- package/dist/commands/curate.js +14 -51
- package/dist/commands/main.d.ts +8 -0
- package/dist/commands/main.js +29 -8
- package/dist/commands/query.d.ts +1 -3
- package/dist/commands/query.js +8 -35
- package/dist/config/context-tree-domains.d.ts +5 -0
- package/dist/config/context-tree-domains.js +6 -1
- package/dist/config/environment.js +9 -9
- package/dist/constants.d.ts +14 -0
- package/dist/constants.js +18 -0
- package/dist/core/domain/cipher/agent/agent-info.d.ts +199 -0
- package/dist/core/domain/cipher/agent/agent-info.js +143 -0
- package/dist/core/domain/cipher/agent/agent-registry.d.ts +96 -0
- package/dist/core/domain/cipher/agent/agent-registry.js +254 -0
- package/dist/core/domain/cipher/agent/index.d.ts +4 -1
- package/dist/core/domain/cipher/agent/index.js +7 -1
- package/dist/core/domain/cipher/agent-events/types.d.ts +355 -2
- package/dist/core/domain/cipher/agent-events/types.js +11 -0
- package/dist/core/domain/cipher/errors/error-normalizer.d.ts +156 -0
- package/dist/core/domain/cipher/errors/error-normalizer.js +379 -0
- package/dist/core/domain/cipher/errors/file-system-error.d.ts +2 -1
- package/dist/core/domain/cipher/errors/file-system-error.js +3 -2
- package/dist/core/domain/cipher/errors/system-prompt-error-codes.d.ts +79 -0
- package/dist/core/domain/cipher/errors/system-prompt-error-codes.js +80 -0
- package/dist/core/domain/cipher/errors/system-prompt-error.d.ts +114 -0
- package/dist/core/domain/cipher/errors/system-prompt-error.js +144 -0
- package/dist/core/domain/cipher/file-system/types.d.ts +57 -0
- package/dist/core/domain/cipher/llm/error-codes.d.ts +51 -0
- package/dist/core/domain/cipher/llm/error-codes.js +51 -0
- package/dist/core/domain/cipher/llm/index.d.ts +9 -0
- package/dist/core/domain/cipher/llm/index.js +13 -0
- package/dist/core/domain/cipher/llm/registry.d.ts +113 -0
- package/dist/core/domain/cipher/llm/registry.js +244 -0
- package/dist/core/domain/cipher/llm/schemas.d.ts +155 -0
- package/dist/core/domain/cipher/llm/schemas.js +151 -0
- package/dist/core/domain/cipher/llm/types.d.ts +121 -0
- package/dist/core/domain/cipher/llm/types.js +60 -0
- package/dist/core/domain/cipher/storage/message-storage-types.d.ts +114 -5
- package/dist/core/domain/cipher/streaming/types.d.ts +119 -0
- package/dist/core/domain/cipher/streaming/types.js +16 -0
- package/dist/core/domain/cipher/system-prompt/types.d.ts +44 -0
- package/dist/core/domain/cipher/todos/types.d.ts +34 -0
- package/dist/core/domain/cipher/tools/constants.d.ts +5 -2
- package/dist/core/domain/cipher/tools/constants.js +5 -2
- package/dist/core/domain/cipher/tools/types.d.ts +31 -0
- package/dist/core/domain/errors/connection-error.d.ts +33 -0
- package/dist/core/domain/errors/connection-error.js +54 -0
- package/dist/core/domain/errors/core-process-error.d.ts +27 -0
- package/dist/core/domain/errors/core-process-error.js +43 -0
- package/dist/core/domain/errors/task-error.d.ts +64 -0
- package/dist/core/domain/errors/task-error.js +116 -0
- package/dist/core/domain/errors/transport-error.d.ts +72 -0
- package/dist/core/domain/errors/transport-error.js +114 -0
- package/dist/core/domain/instance/index.d.ts +1 -0
- package/dist/core/domain/instance/index.js +1 -0
- package/dist/core/domain/instance/types.d.ts +57 -0
- package/dist/core/domain/instance/types.js +72 -0
- package/dist/core/domain/knowledge/directory-manager.d.ts +16 -0
- package/dist/core/domain/knowledge/directory-manager.js +31 -0
- package/dist/core/domain/transport/index.d.ts +2 -0
- package/dist/core/domain/transport/index.js +2 -0
- package/dist/core/domain/transport/schemas.d.ts +1149 -0
- package/dist/core/domain/transport/schemas.js +554 -0
- package/dist/core/domain/transport/types.d.ts +67 -0
- package/dist/core/domain/transport/types.js +7 -0
- package/dist/core/interfaces/cipher/cipher-services.d.ts +15 -3
- package/dist/core/interfaces/cipher/i-chat-session.d.ts +47 -5
- package/dist/core/interfaces/cipher/i-cipher-agent.d.ts +39 -4
- package/dist/core/interfaces/cipher/i-content-generator.d.ts +3 -5
- package/dist/core/interfaces/cipher/i-file-system.d.ts +12 -1
- package/dist/core/interfaces/cipher/i-llm-service.d.ts +4 -5
- package/dist/core/interfaces/cipher/i-todo-storage.d.ts +24 -0
- package/dist/core/interfaces/cipher/i-todo-storage.js +1 -0
- package/dist/core/interfaces/cipher/i-tool-plugin.d.ts +90 -0
- package/dist/core/interfaces/cipher/i-tool-plugin.js +1 -0
- package/dist/core/interfaces/cipher/i-tool-provider.d.ts +3 -2
- package/dist/core/interfaces/cipher/i-tool-scheduler.d.ts +4 -0
- package/dist/core/interfaces/cipher/index.d.ts +35 -0
- package/dist/core/interfaces/cipher/index.js +11 -0
- package/dist/core/interfaces/cipher/message-factory.d.ts +155 -0
- package/dist/core/interfaces/cipher/message-factory.js +252 -0
- package/dist/core/interfaces/cipher/message-type-guards.d.ts +139 -0
- package/dist/core/interfaces/cipher/message-type-guards.js +173 -0
- package/dist/core/interfaces/cipher/message-types.d.ts +279 -5
- package/dist/core/interfaces/cipher/message-types.js +6 -0
- package/dist/core/interfaces/cipher/sanitization-types.d.ts +147 -0
- package/dist/core/interfaces/cipher/sanitization-types.js +46 -0
- package/dist/core/interfaces/executor/i-curate-executor.d.ts +34 -0
- package/dist/core/interfaces/executor/i-curate-executor.js +1 -0
- package/dist/core/interfaces/executor/i-query-executor.d.ts +32 -0
- package/dist/core/interfaces/executor/i-query-executor.js +1 -0
- package/dist/core/interfaces/executor/index.d.ts +2 -0
- package/dist/core/interfaces/executor/index.js +2 -0
- package/dist/core/interfaces/instance/i-instance-discovery.d.ts +45 -0
- package/dist/core/interfaces/instance/i-instance-discovery.js +1 -0
- package/dist/core/interfaces/instance/i-instance-manager.d.ts +58 -0
- package/dist/core/interfaces/instance/i-instance-manager.js +1 -0
- package/dist/core/interfaces/instance/index.d.ts +2 -0
- package/dist/core/interfaces/instance/index.js +2 -0
- package/dist/core/interfaces/noop-implementations.d.ts +53 -0
- package/dist/core/interfaces/noop-implementations.js +62 -0
- package/dist/core/interfaces/transport/i-transport-client.d.ts +97 -0
- package/dist/core/interfaces/transport/i-transport-client.js +1 -0
- package/dist/core/interfaces/transport/i-transport-server.d.ts +93 -0
- package/dist/core/interfaces/transport/i-transport-server.js +1 -0
- package/dist/core/interfaces/transport/index.d.ts +2 -0
- package/dist/core/interfaces/transport/index.js +2 -0
- package/dist/infra/cipher/agent/agent-error-codes.d.ts +16 -0
- package/dist/infra/cipher/agent/agent-error-codes.js +17 -0
- package/dist/infra/cipher/agent/agent-error.d.ts +54 -0
- package/dist/infra/cipher/agent/agent-error.js +79 -0
- package/dist/infra/cipher/agent/agent-schemas.d.ts +264 -0
- package/dist/infra/cipher/agent/agent-schemas.js +97 -0
- package/dist/infra/cipher/agent/agent-state-manager.d.ts +140 -0
- package/dist/infra/cipher/agent/agent-state-manager.js +275 -0
- package/dist/infra/cipher/agent/base-agent.d.ts +118 -0
- package/dist/infra/cipher/agent/base-agent.js +240 -0
- package/dist/infra/cipher/agent/cipher-agent.d.ts +165 -0
- package/dist/infra/cipher/agent/cipher-agent.js +546 -0
- package/dist/infra/cipher/agent/index.d.ts +22 -0
- package/dist/infra/cipher/agent/index.js +24 -0
- package/dist/infra/cipher/agent/service-initializer.d.ts +79 -0
- package/dist/infra/cipher/{agent-service-factory.js → agent/service-initializer.js} +117 -68
- package/dist/infra/cipher/agent/types.d.ts +35 -0
- package/dist/infra/cipher/agent/types.js +1 -0
- package/dist/infra/cipher/blob/blob-reference-resolver.d.ts +107 -0
- package/dist/infra/cipher/blob/blob-reference-resolver.js +228 -0
- package/dist/infra/cipher/blob/blob-reference-utils.d.ts +117 -0
- package/dist/infra/cipher/blob/blob-reference-utils.js +230 -0
- package/dist/infra/cipher/consumer/consumer-lock.js +1 -0
- package/dist/infra/cipher/consumer/consumer-service.js +1 -0
- package/dist/infra/cipher/consumer/execution-consumer.d.ts +6 -1
- package/dist/infra/cipher/consumer/execution-consumer.js +54 -16
- package/dist/infra/cipher/consumer/index.d.ts +1 -1
- package/dist/infra/cipher/consumer/index.js +2 -1
- package/dist/infra/cipher/consumer/queue-polling-service.js +1 -0
- package/dist/infra/cipher/file-system/binary-utils.d.ts +43 -0
- package/dist/infra/cipher/file-system/binary-utils.js +164 -0
- package/dist/infra/cipher/file-system/context-tree-file-system-factory.d.ts +9 -0
- package/dist/infra/cipher/file-system/context-tree-file-system-factory.js +24 -0
- package/dist/infra/cipher/file-system/file-system-service.d.ts +17 -1
- package/dist/infra/cipher/file-system/file-system-service.js +327 -36
- package/dist/infra/cipher/file-system/path-validator.d.ts +32 -0
- package/dist/infra/cipher/file-system/path-validator.js +111 -6
- package/dist/infra/cipher/interactive-loop.js +41 -33
- package/dist/infra/cipher/llm/capability-cache.d.ts +87 -0
- package/dist/infra/cipher/llm/capability-cache.js +125 -0
- package/dist/infra/cipher/llm/context/compaction/compaction-service.d.ts +32 -0
- package/dist/infra/cipher/llm/context/compaction/compaction-service.js +44 -3
- package/dist/infra/cipher/llm/context/compression/enhanced-compaction.d.ts +112 -0
- package/dist/infra/cipher/llm/context/compression/enhanced-compaction.js +175 -0
- package/dist/infra/cipher/llm/context/compression/filter-compacted.d.ts +83 -0
- package/dist/infra/cipher/llm/context/compression/filter-compacted.js +150 -0
- package/dist/infra/cipher/llm/context/compression/index.d.ts +5 -0
- package/dist/infra/cipher/llm/context/compression/index.js +6 -0
- package/dist/infra/cipher/llm/context/compression/reactive-overflow.d.ts +107 -0
- package/dist/infra/cipher/llm/context/compression/reactive-overflow.js +272 -0
- package/dist/infra/cipher/llm/context/context-manager.d.ts +47 -1
- package/dist/infra/cipher/llm/context/context-manager.js +129 -0
- package/dist/infra/cipher/llm/context/utils.js +17 -4
- package/dist/infra/cipher/llm/generators/byterover-content-generator.js +4 -2
- package/dist/infra/cipher/llm/internal-llm-service.d.ts +50 -17
- package/dist/infra/cipher/llm/internal-llm-service.js +273 -50
- package/dist/infra/cipher/llm/openrouter-llm-service.d.ts +6 -8
- package/dist/infra/cipher/llm/openrouter-llm-service.js +14 -16
- package/dist/infra/cipher/llm/retry/retry-policy.d.ts +1 -0
- package/dist/infra/cipher/llm/retry/retry-policy.js +11 -0
- package/dist/infra/cipher/llm/retry/retry-with-backoff.js +3 -2
- package/dist/infra/cipher/llm/sanitization/base64-utils.d.ts +102 -0
- package/dist/infra/cipher/llm/sanitization/base64-utils.js +182 -0
- package/dist/infra/cipher/llm/sanitization/index.d.ts +12 -0
- package/dist/infra/cipher/llm/sanitization/index.js +13 -0
- package/dist/infra/cipher/llm/sanitization/tool-sanitizer.d.ts +74 -0
- package/dist/infra/cipher/llm/sanitization/tool-sanitizer.js +398 -0
- package/dist/infra/cipher/llm/stream-processor.d.ts +158 -0
- package/dist/infra/cipher/llm/stream-processor.js +276 -0
- package/dist/infra/cipher/llm/tokenizers/claude-tokenizer.d.ts +13 -20
- package/dist/infra/cipher/llm/tokenizers/claude-tokenizer.js +17 -24
- package/dist/infra/cipher/llm/tokenizers/gemini-tokenizer.d.ts +12 -11
- package/dist/infra/cipher/llm/tokenizers/gemini-tokenizer.js +16 -15
- package/dist/infra/cipher/llm/tokenizers/openrouter-tokenizer.d.ts +15 -7
- package/dist/infra/cipher/llm/tokenizers/openrouter-tokenizer.js +22 -10
- package/dist/infra/cipher/llm/tool-output-processor.d.ts +51 -0
- package/dist/infra/cipher/llm/tool-output-processor.js +139 -0
- package/dist/infra/cipher/process/command-validator.d.ts +23 -0
- package/dist/infra/cipher/process/command-validator.js +75 -0
- package/dist/infra/cipher/process/path-utils.d.ts +66 -0
- package/dist/infra/cipher/process/path-utils.js +94 -0
- package/dist/infra/cipher/process/process-service.d.ts +32 -0
- package/dist/infra/cipher/process/process-service.js +98 -17
- package/dist/infra/cipher/session/chat-session.d.ts +56 -7
- package/dist/infra/cipher/session/chat-session.js +163 -13
- package/dist/infra/cipher/session/index.d.ts +1 -0
- package/dist/infra/cipher/session/index.js +2 -0
- package/dist/infra/cipher/session/message-queue.d.ts +65 -0
- package/dist/infra/cipher/session/message-queue.js +90 -0
- package/dist/infra/cipher/session/session-manager.d.ts +106 -5
- package/dist/infra/cipher/session/session-manager.js +254 -7
- package/dist/infra/cipher/session/session-status.d.ts +137 -0
- package/dist/infra/cipher/session/session-status.js +184 -0
- package/dist/infra/cipher/session/title-generator.d.ts +8 -0
- package/dist/infra/cipher/session/title-generator.js +31 -0
- package/dist/infra/cipher/storage/message-storage-service.d.ts +65 -2
- package/dist/infra/cipher/storage/message-storage-service.js +300 -54
- package/dist/infra/cipher/storage/tool-part-factory.d.ts +116 -0
- package/dist/infra/cipher/storage/tool-part-factory.js +197 -0
- package/dist/infra/cipher/system-prompt/contributor-schemas.d.ts +516 -0
- package/dist/infra/cipher/system-prompt/contributor-schemas.js +85 -0
- package/dist/infra/cipher/system-prompt/contributors/agent-prompt-contributor.d.ts +59 -0
- package/dist/infra/cipher/system-prompt/contributors/agent-prompt-contributor.js +131 -0
- package/dist/infra/cipher/system-prompt/contributors/companion-contributor.d.ts +54 -0
- package/dist/infra/cipher/system-prompt/contributors/companion-contributor.js +107 -0
- package/dist/infra/cipher/system-prompt/contributors/context-tree-structure-contributor.d.ts +68 -0
- package/dist/infra/cipher/system-prompt/contributors/context-tree-structure-contributor.js +179 -0
- package/dist/infra/cipher/system-prompt/contributors/datetime-contributor.d.ts +25 -0
- package/dist/infra/cipher/system-prompt/contributors/datetime-contributor.js +29 -0
- package/dist/infra/cipher/system-prompt/contributors/environment-contributor.d.ts +25 -0
- package/dist/infra/cipher/system-prompt/contributors/environment-contributor.js +54 -0
- package/dist/infra/cipher/system-prompt/contributors/file-contributor.d.ts +60 -0
- package/dist/infra/cipher/system-prompt/contributors/file-contributor.js +128 -0
- package/dist/infra/cipher/system-prompt/contributors/index.d.ts +13 -0
- package/dist/infra/cipher/system-prompt/contributors/index.js +8 -0
- package/dist/infra/cipher/system-prompt/contributors/memory-contributor.d.ts +40 -0
- package/dist/infra/cipher/system-prompt/contributors/memory-contributor.js +56 -0
- package/dist/infra/cipher/system-prompt/contributors/static-contributor.d.ts +26 -0
- package/dist/infra/cipher/system-prompt/contributors/static-contributor.js +31 -0
- package/dist/infra/cipher/system-prompt/environment-context-builder.d.ts +112 -0
- package/dist/infra/cipher/system-prompt/environment-context-builder.js +256 -0
- package/dist/infra/cipher/system-prompt/prompt-cache.d.ts +102 -0
- package/dist/infra/cipher/system-prompt/prompt-cache.js +156 -0
- package/dist/infra/cipher/system-prompt/schemas.d.ts +151 -0
- package/dist/infra/cipher/system-prompt/schemas.js +94 -0
- package/dist/infra/cipher/system-prompt/system-prompt-manager.d.ts +136 -0
- package/dist/infra/cipher/system-prompt/system-prompt-manager.js +307 -0
- package/dist/infra/cipher/todos/todo-storage-service.d.ts +26 -0
- package/dist/infra/cipher/todos/todo-storage-service.js +28 -0
- package/dist/infra/cipher/tools/core-tool-scheduler.js +5 -1
- package/dist/infra/cipher/tools/default-policy-rules.js +1 -1
- package/dist/infra/cipher/tools/implementations/bash-exec-tool.d.ts +1 -0
- package/dist/infra/cipher/tools/implementations/bash-exec-tool.js +27 -10
- package/dist/infra/cipher/tools/implementations/bash-output-tool.js +1 -5
- package/dist/infra/cipher/tools/implementations/batch-tool.d.ts +12 -0
- package/dist/infra/cipher/tools/implementations/batch-tool.js +142 -0
- package/dist/infra/cipher/tools/implementations/curate-tool.js +195 -68
- package/dist/infra/cipher/tools/implementations/list-directory-tool.d.ts +12 -0
- package/dist/infra/cipher/tools/implementations/list-directory-tool.js +52 -0
- package/dist/infra/cipher/tools/implementations/read-file-tool.d.ts +8 -1
- package/dist/infra/cipher/tools/implementations/read-file-tool.js +17 -7
- package/dist/infra/cipher/tools/implementations/read-todos-tool.d.ts +11 -0
- package/dist/infra/cipher/tools/implementations/read-todos-tool.js +39 -0
- package/dist/infra/cipher/tools/implementations/{detect-domains-tool.d.ts → spec-analyze-tool.d.ts} +1 -1
- package/dist/infra/cipher/tools/implementations/{detect-domains-tool.js → spec-analyze-tool.js} +9 -7
- package/dist/infra/cipher/tools/implementations/task-tool.d.ts +34 -0
- package/dist/infra/cipher/tools/implementations/task-tool.js +207 -0
- package/dist/infra/cipher/tools/implementations/write-todos-tool.d.ts +4 -1
- package/dist/infra/cipher/tools/implementations/write-todos-tool.js +19 -63
- package/dist/infra/cipher/tools/index.d.ts +1 -1
- package/dist/infra/cipher/tools/index.js +1 -1
- package/dist/infra/cipher/tools/plugins/index.d.ts +3 -0
- package/dist/infra/cipher/tools/plugins/index.js +2 -0
- package/dist/infra/cipher/tools/plugins/logging-plugin.d.ts +28 -0
- package/dist/infra/cipher/tools/plugins/logging-plugin.js +66 -0
- package/dist/infra/cipher/tools/plugins/plugin-manager.d.ts +81 -0
- package/dist/infra/cipher/tools/plugins/plugin-manager.js +122 -0
- package/dist/infra/cipher/tools/streaming/index.d.ts +1 -0
- package/dist/infra/cipher/tools/streaming/index.js +1 -0
- package/dist/infra/cipher/tools/streaming/metadata-handler.d.ts +31 -0
- package/dist/infra/cipher/tools/streaming/metadata-handler.js +39 -0
- package/dist/infra/cipher/tools/tool-description-loader.d.ts +57 -0
- package/dist/infra/cipher/tools/tool-description-loader.js +108 -0
- package/dist/infra/cipher/tools/tool-manager.d.ts +38 -4
- package/dist/infra/cipher/tools/tool-manager.js +107 -11
- package/dist/infra/cipher/tools/tool-provider-getter.d.ts +6 -0
- package/dist/infra/cipher/tools/tool-provider-getter.js +1 -0
- package/dist/infra/cipher/tools/tool-provider.d.ts +32 -7
- package/dist/infra/cipher/tools/tool-provider.js +81 -25
- package/dist/infra/cipher/tools/tool-registry.d.ts +23 -0
- package/dist/infra/cipher/tools/tool-registry.js +58 -16
- package/dist/infra/context-tree/file-context-tree-snapshot-service.js +10 -4
- package/dist/infra/context-tree/file-context-tree-writer-service.d.ts +4 -3
- package/dist/infra/context-tree/file-context-tree-writer-service.js +6 -4
- package/dist/infra/context-tree/path-utils.d.ts +7 -0
- package/dist/infra/context-tree/path-utils.js +7 -0
- package/dist/infra/core/executors/curate-executor.d.ts +35 -0
- package/dist/infra/core/executors/curate-executor.js +123 -0
- package/dist/infra/core/executors/index.d.ts +2 -0
- package/dist/infra/core/executors/index.js +2 -0
- package/dist/infra/core/executors/query-executor.d.ts +23 -0
- package/dist/infra/core/executors/query-executor.js +51 -0
- package/dist/infra/core/task-processor.d.ts +81 -0
- package/dist/infra/core/task-processor.js +115 -0
- package/dist/infra/instance/file-instance-discovery.d.ts +31 -0
- package/dist/infra/instance/file-instance-discovery.js +84 -0
- package/dist/infra/instance/file-instance-manager.d.ts +46 -0
- package/dist/infra/instance/file-instance-manager.js +123 -0
- package/dist/infra/instance/index.d.ts +3 -0
- package/dist/infra/instance/index.js +3 -0
- package/dist/infra/instance/process-utils.d.ts +14 -0
- package/dist/infra/instance/process-utils.js +39 -0
- package/dist/infra/process/agent-worker.d.ts +20 -0
- package/dist/infra/process/agent-worker.js +602 -0
- package/dist/infra/process/index.d.ts +12 -0
- package/dist/infra/process/index.js +11 -0
- package/dist/infra/process/ipc-types.d.ts +55 -0
- package/dist/infra/process/ipc-types.js +12 -0
- package/dist/infra/process/process-manager.d.ts +154 -0
- package/dist/infra/process/process-manager.js +471 -0
- package/dist/infra/process/task-queue-manager.d.ts +123 -0
- package/dist/infra/process/task-queue-manager.js +226 -0
- package/dist/infra/process/transport-handlers.d.ts +124 -0
- package/dist/infra/process/transport-handlers.js +348 -0
- package/dist/infra/process/transport-worker.d.ts +20 -0
- package/dist/infra/process/transport-worker.js +168 -0
- package/dist/infra/repl/commands/curate-command.js +0 -5
- package/dist/infra/repl/commands/query-command.js +0 -3
- package/dist/infra/repl/repl-startup.d.ts +4 -0
- package/dist/infra/repl/repl-startup.js +8 -1
- package/dist/infra/repl/transport-client-helper.d.ts +9 -0
- package/dist/infra/repl/transport-client-helper.js +96 -0
- package/dist/infra/transport/index.d.ts +4 -0
- package/dist/infra/transport/index.js +4 -0
- package/dist/infra/transport/port-utils.d.ts +42 -0
- package/dist/infra/transport/port-utils.js +84 -0
- package/dist/infra/transport/socket-io-transport-client.d.ts +45 -0
- package/dist/infra/transport/socket-io-transport-client.js +270 -0
- package/dist/infra/transport/socket-io-transport-server.d.ts +35 -0
- package/dist/infra/transport/socket-io-transport-server.js +207 -0
- package/dist/infra/transport/transport-client-factory.d.ts +76 -0
- package/dist/infra/transport/transport-client-factory.js +168 -0
- package/dist/infra/transport/transport-factory.d.ts +33 -0
- package/dist/infra/transport/transport-factory.js +59 -0
- package/dist/infra/usecase/curate-use-case.d.ts +8 -55
- package/dist/infra/usecase/curate-use-case.js +71 -262
- package/dist/infra/usecase/init-use-case.js +3 -2
- package/dist/infra/usecase/query-use-case.d.ts +18 -45
- package/dist/infra/usecase/query-use-case.js +250 -326
- package/dist/infra/usecase/status-use-case.js +1 -1
- package/dist/resources/prompts/{curate-context-tree-curation.yml → curate.yml} +25 -22
- package/dist/resources/prompts/explore.yml +78 -0
- package/dist/resources/prompts/plan.yml +114 -0
- package/dist/resources/prompts/reflection.yml +1 -1
- package/dist/resources/prompts/system-prompt.yml +15 -8
- package/dist/resources/prompts/tool-outputs.yml +0 -5
- package/dist/resources/tools/bash_exec.txt +98 -0
- package/dist/resources/tools/bash_output.txt +40 -0
- package/dist/resources/tools/batch.txt +28 -0
- package/dist/resources/tools/create_knowledge_topic.txt +23 -0
- package/dist/resources/tools/curate.txt +22 -0
- package/dist/resources/tools/delete_memory.txt +1 -0
- package/dist/resources/tools/detect_domains.txt +11 -0
- package/dist/resources/tools/edit_file.txt +1 -0
- package/dist/resources/tools/edit_memory.txt +1 -0
- package/dist/resources/tools/glob_files.txt +20 -0
- package/dist/resources/tools/grep_content.txt +18 -0
- package/dist/resources/tools/kill_process.txt +16 -0
- package/dist/resources/tools/list_directory.txt +16 -0
- package/dist/resources/tools/list_memories.txt +1 -0
- package/dist/resources/tools/read_file.txt +31 -0
- package/dist/resources/tools/read_memory.txt +1 -0
- package/dist/resources/tools/read_todos.txt +17 -0
- package/dist/resources/tools/search_history.txt +1 -0
- package/dist/resources/tools/task.txt +23 -0
- package/dist/resources/tools/write_file.txt +1 -0
- package/dist/resources/tools/write_memory.txt +1 -0
- package/dist/resources/tools/write_todos.txt +29 -0
- package/dist/tui/app.js +9 -13
- package/dist/tui/components/command-details.d.ts +14 -0
- package/dist/tui/components/command-details.js +35 -0
- package/dist/tui/components/execution/execution-changes.d.ts +5 -0
- package/dist/tui/components/execution/execution-changes.js +19 -4
- package/dist/tui/components/execution/execution-content.d.ts +4 -2
- package/dist/tui/components/execution/execution-content.js +26 -13
- package/dist/tui/components/execution/execution-input.js +3 -3
- package/dist/tui/components/execution/execution-progress.d.ts +2 -2
- package/dist/tui/components/execution/execution-progress.js +8 -6
- package/dist/tui/components/execution/log-item.d.ts +3 -4
- package/dist/tui/components/execution/log-item.js +2 -5
- package/dist/tui/components/footer.js +9 -4
- package/dist/tui/components/header.d.ts +3 -3
- package/dist/tui/components/header.js +5 -3
- package/dist/tui/components/index.d.ts +1 -0
- package/dist/tui/components/index.js +1 -0
- package/dist/tui/components/onboarding/copyable-prompt.d.ts +5 -3
- package/dist/tui/components/onboarding/copyable-prompt.js +7 -8
- package/dist/tui/components/onboarding/onboarding-flow.js +35 -25
- package/dist/tui/components/scrollable-list.js +12 -10
- package/dist/tui/components/suggestions.js +39 -41
- package/dist/tui/components/tab-bar.d.ts +2 -1
- package/dist/tui/components/tab-bar.js +3 -4
- package/dist/tui/constants.d.ts +0 -5
- package/dist/tui/constants.js +0 -5
- package/dist/tui/contexts/auth-context.js +9 -2
- package/dist/tui/contexts/{use-commands.js → commands-context.js} +3 -3
- package/dist/tui/contexts/index.d.ts +6 -1
- package/dist/tui/contexts/index.js +6 -1
- package/dist/tui/contexts/onboarding-context.d.ts +1 -1
- package/dist/tui/contexts/onboarding-context.js +9 -9
- package/dist/tui/contexts/tasks-context.d.ts +84 -0
- package/dist/tui/contexts/tasks-context.js +218 -0
- package/dist/tui/contexts/transport-context.d.ts +29 -0
- package/dist/tui/contexts/transport-context.js +82 -0
- package/dist/tui/hooks/index.d.ts +10 -6
- package/dist/tui/hooks/index.js +7 -6
- package/dist/tui/hooks/use-activity-logs.d.ts +3 -11
- package/dist/tui/hooks/use-activity-logs.js +87 -34
- package/dist/tui/hooks/use-auth-polling.d.ts +24 -0
- package/dist/tui/hooks/use-auth-polling.js +104 -0
- package/dist/tui/hooks/use-slash-command-processor.js +0 -1
- package/dist/tui/hooks/use-slash-completion.js +1 -1
- package/dist/tui/hooks/use-tab-navigation.d.ts +2 -1
- package/dist/tui/hooks/use-tab-navigation.js +16 -7
- package/dist/tui/hooks/use-terminal-breakpoint.d.ts +21 -0
- package/dist/tui/hooks/use-terminal-breakpoint.js +38 -0
- package/dist/tui/hooks/use-ui-heights.d.ts +120 -0
- package/dist/tui/hooks/use-ui-heights.js +88 -0
- package/dist/tui/providers/app-providers.js +2 -6
- package/dist/tui/types/commands.d.ts +0 -26
- package/dist/tui/types/index.d.ts +1 -1
- package/dist/tui/types/ui.d.ts +9 -4
- package/dist/tui/utils/line.d.ts +11 -0
- package/dist/tui/utils/line.js +16 -0
- package/dist/tui/utils/log.d.ts +27 -0
- package/dist/tui/utils/log.js +114 -0
- package/dist/tui/views/command-view.d.ts +7 -0
- package/dist/tui/views/command-view.js +103 -80
- package/dist/tui/views/login-view.js +7 -4
- package/dist/tui/views/logs-view.d.ts +13 -0
- package/dist/tui/views/logs-view.js +27 -52
- package/dist/utils/connection-error-handler.d.ts +16 -0
- package/dist/utils/connection-error-handler.js +49 -0
- package/dist/utils/crash-log.d.ts +14 -0
- package/dist/utils/crash-log.js +19 -0
- package/dist/utils/file-helpers.d.ts +14 -0
- package/dist/utils/file-helpers.js +21 -0
- package/dist/utils/global-logs-path.d.ts +11 -0
- package/dist/utils/global-logs-path.js +37 -0
- package/dist/utils/process-logger.d.ts +53 -0
- package/dist/utils/process-logger.js +253 -0
- package/dist/utils/sandbox-detector.d.ts +31 -0
- package/dist/utils/sandbox-detector.js +122 -0
- package/oclif.manifest.json +10 -198
- package/package.json +5 -1
- package/dist/commands/cipher-agent/run.d.ts +0 -142
- package/dist/commands/cipher-agent/run.js +0 -555
- package/dist/commands/cipher-agent/set-prompt.d.ts +0 -16
- package/dist/commands/cipher-agent/set-prompt.js +0 -58
- package/dist/commands/cipher-agent/show-prompt.d.ts +0 -13
- package/dist/commands/cipher-agent/show-prompt.js +0 -53
- package/dist/commands/foo.d.ts +0 -14
- package/dist/commands/foo.js +0 -66
- package/dist/infra/cipher/agent-service-factory.d.ts +0 -93
- package/dist/infra/cipher/cipher-agent-state-manager.d.ts +0 -63
- package/dist/infra/cipher/cipher-agent-state-manager.js +0 -108
- package/dist/infra/cipher/cipher-agent.d.ts +0 -182
- package/dist/infra/cipher/cipher-agent.js +0 -317
- package/dist/infra/cipher/system-prompt/simple-prompt-factory.d.ts +0 -106
- package/dist/infra/cipher/system-prompt/simple-prompt-factory.js +0 -297
- package/dist/infra/cipher/tools/implementations/find-knowledge-topics-tool.d.ts +0 -7
- package/dist/infra/cipher/tools/implementations/find-knowledge-topics-tool.js +0 -424
- package/dist/resources/prompts/modes/autonomous.yml +0 -9
- package/dist/resources/prompts/query-context-tree-retrieval.yml +0 -48
- package/dist/tui/contexts/consumer.d.ts +0 -31
- package/dist/tui/contexts/consumer.js +0 -56
- package/dist/tui/hooks/use-consumer.d.ts +0 -12
- package/dist/tui/hooks/use-consumer.js +0 -50
- package/dist/tui/hooks/use-queue-polling.d.ts +0 -31
- package/dist/tui/hooks/use-queue-polling.js +0 -90
- /package/dist/tui/contexts/{use-commands.d.ts → commands-context.d.ts} +0 -0
- /package/dist/tui/contexts/{use-mode.d.ts → mode-context.d.ts} +0 -0
- /package/dist/tui/contexts/{use-mode.js → mode-context.js} +0 -0
- /package/dist/tui/contexts/{use-theme.d.ts → theme-context.d.ts} +0 -0
- /package/dist/tui/contexts/{use-theme.js → theme-context.js} +0 -0
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Crash Log - Re-exports from unified process-logger.
|
|
3
|
+
*
|
|
4
|
+
* @deprecated Use crashLog from process-logger.ts directly.
|
|
5
|
+
* This file is kept for backwards compatibility.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* @deprecated Use crashLog from process-logger.ts
|
|
9
|
+
*/
|
|
10
|
+
export declare function writeCrashLog(error: Error | string, context?: string): Promise<string>;
|
|
11
|
+
/**
|
|
12
|
+
* @deprecated Use getSessionLogPath from process-logger.ts
|
|
13
|
+
*/
|
|
14
|
+
export declare function getLogsDir(): string;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Crash Log - Re-exports from unified process-logger.
|
|
3
|
+
*
|
|
4
|
+
* @deprecated Use crashLog from process-logger.ts directly.
|
|
5
|
+
* This file is kept for backwards compatibility.
|
|
6
|
+
*/
|
|
7
|
+
import { crashLog, getSessionLogPath } from './process-logger.js';
|
|
8
|
+
/**
|
|
9
|
+
* @deprecated Use crashLog from process-logger.ts
|
|
10
|
+
*/
|
|
11
|
+
export async function writeCrashLog(error, context) {
|
|
12
|
+
return crashLog(error, context);
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* @deprecated Use getSessionLogPath from process-logger.ts
|
|
16
|
+
*/
|
|
17
|
+
export function getLogsDir() {
|
|
18
|
+
return getSessionLogPath();
|
|
19
|
+
}
|
|
@@ -19,6 +19,20 @@ export declare function clearDirectory(dirPath: string): Promise<number>;
|
|
|
19
19
|
* @returns The sanitized folder path
|
|
20
20
|
*/
|
|
21
21
|
export declare function sanitizeFolderName(folderName: string): string;
|
|
22
|
+
/**
|
|
23
|
+
* Converts a string to lowercase snake_case for file/folder naming.
|
|
24
|
+
* Replaces spaces and special characters with underscores, converts to lowercase.
|
|
25
|
+
* @param name - The name to convert
|
|
26
|
+
* @returns The snake_case version of the name
|
|
27
|
+
*
|
|
28
|
+
* @example
|
|
29
|
+
* ```ts
|
|
30
|
+
* toSnakeCase('Best Practices') // => 'best_practices'
|
|
31
|
+
* toSnakeCase('Error-Handling') // => 'error_handling'
|
|
32
|
+
* toSnakeCase('QuickSort Optimizations') // => 'quicksort_optimizations'
|
|
33
|
+
* ```
|
|
34
|
+
*/
|
|
35
|
+
export declare function toSnakeCase(name: string): string;
|
|
22
36
|
/**
|
|
23
37
|
* Lists all immediate children (files and directories) of the given directory,
|
|
24
38
|
* and, for each child folder, shows its own immediate children.
|
|
@@ -52,6 +52,27 @@ export async function clearDirectory(dirPath) {
|
|
|
52
52
|
export function sanitizeFolderName(folderName) {
|
|
53
53
|
return folderName.replaceAll(/[^\w\-./]/g, '-');
|
|
54
54
|
}
|
|
55
|
+
/**
|
|
56
|
+
* Converts a string to lowercase snake_case for file/folder naming.
|
|
57
|
+
* Replaces spaces and special characters with underscores, converts to lowercase.
|
|
58
|
+
* @param name - The name to convert
|
|
59
|
+
* @returns The snake_case version of the name
|
|
60
|
+
*
|
|
61
|
+
* @example
|
|
62
|
+
* ```ts
|
|
63
|
+
* toSnakeCase('Best Practices') // => 'best_practices'
|
|
64
|
+
* toSnakeCase('Error-Handling') // => 'error_handling'
|
|
65
|
+
* toSnakeCase('QuickSort Optimizations') // => 'quicksort_optimizations'
|
|
66
|
+
* ```
|
|
67
|
+
*/
|
|
68
|
+
export function toSnakeCase(name) {
|
|
69
|
+
return name
|
|
70
|
+
.toLowerCase()
|
|
71
|
+
.trim()
|
|
72
|
+
.replaceAll(/[^\w]+/g, '_')
|
|
73
|
+
.replaceAll(/_{2,}/g, '_')
|
|
74
|
+
.replaceAll(/^_|_$/g, '');
|
|
75
|
+
}
|
|
55
76
|
/**
|
|
56
77
|
* Lists all immediate children (files and directories) of the given directory,
|
|
57
78
|
* and, for each child folder, shows its own immediate children.
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Returns the global logs directory path following platform conventions:
|
|
3
|
+
* - Windows: %LOCALAPPDATA%/brv/logs
|
|
4
|
+
* - macOS: ~/Library/Logs/brv
|
|
5
|
+
* - Linux: $XDG_STATE_HOME/brv/logs (defaults to ~/.local/state/brv/logs)
|
|
6
|
+
*
|
|
7
|
+
* Falls back to temp directory if any system call fails.
|
|
8
|
+
*
|
|
9
|
+
* @returns Absolute path to the global logs directory
|
|
10
|
+
*/
|
|
11
|
+
export declare function getGlobalLogsDir(): string;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { homedir, platform, tmpdir } from 'node:os';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
/**
|
|
4
|
+
* Returns the global logs directory path following platform conventions:
|
|
5
|
+
* - Windows: %LOCALAPPDATA%/brv/logs
|
|
6
|
+
* - macOS: ~/Library/Logs/brv
|
|
7
|
+
* - Linux: $XDG_STATE_HOME/brv/logs (defaults to ~/.local/state/brv/logs)
|
|
8
|
+
*
|
|
9
|
+
* Falls back to temp directory if any system call fails.
|
|
10
|
+
*
|
|
11
|
+
* @returns Absolute path to the global logs directory
|
|
12
|
+
*/
|
|
13
|
+
export function getGlobalLogsDir() {
|
|
14
|
+
try {
|
|
15
|
+
const currentPlatform = platform();
|
|
16
|
+
if (currentPlatform === 'win32') {
|
|
17
|
+
const localAppData = process.env.LOCALAPPDATA;
|
|
18
|
+
if (localAppData) {
|
|
19
|
+
return join(localAppData, 'brv', 'logs');
|
|
20
|
+
}
|
|
21
|
+
return join(homedir(), 'AppData', 'Local', 'brv', 'logs');
|
|
22
|
+
}
|
|
23
|
+
if (currentPlatform === 'darwin') {
|
|
24
|
+
return join(homedir(), 'Library', 'Logs', 'brv');
|
|
25
|
+
}
|
|
26
|
+
// Linux: XDG_STATE_HOME/brv/logs
|
|
27
|
+
const xdgStateHome = process.env.XDG_STATE_HOME;
|
|
28
|
+
if (xdgStateHome) {
|
|
29
|
+
return join(xdgStateHome, 'brv', 'logs');
|
|
30
|
+
}
|
|
31
|
+
return join(homedir(), '.local', 'state', 'brv', 'logs');
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
// Fallback to temp directory if any system call fails
|
|
35
|
+
return join(tmpdir(), 'brv', 'logs');
|
|
36
|
+
}
|
|
37
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unified Process Logger - Single log file per session.
|
|
3
|
+
*
|
|
4
|
+
* Logs are stored following platform conventions:
|
|
5
|
+
* - Windows: %LOCALAPPDATA%/brv/logs/brv-{timestamp}.log
|
|
6
|
+
* - macOS: ~/Library/Logs/brv/brv-{timestamp}.log
|
|
7
|
+
* - Linux: $XDG_STATE_HOME/brv/logs/brv-{timestamp}.log
|
|
8
|
+
*
|
|
9
|
+
* Each session creates a new log file with timestamp.
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* Initialize session log - creates a new log file for this session.
|
|
13
|
+
* Should be called once when the main process starts.
|
|
14
|
+
*/
|
|
15
|
+
export declare function initSessionLog(): void;
|
|
16
|
+
/**
|
|
17
|
+
* Write a log entry to the log file.
|
|
18
|
+
* Uses synchronous append for reliability in process shutdown scenarios.
|
|
19
|
+
*/
|
|
20
|
+
export declare function processLog(message: string): void;
|
|
21
|
+
/**
|
|
22
|
+
* Log with [Transport] prefix.
|
|
23
|
+
*/
|
|
24
|
+
export declare function transportLog(message: string): void;
|
|
25
|
+
/**
|
|
26
|
+
* Log with [Agent] prefix.
|
|
27
|
+
*/
|
|
28
|
+
export declare function agentLog(message: string): void;
|
|
29
|
+
/**
|
|
30
|
+
* Log with [ProcessManager] prefix.
|
|
31
|
+
*/
|
|
32
|
+
export declare function processManagerLog(message: string): void;
|
|
33
|
+
/**
|
|
34
|
+
* Log a transport event (for TUI monitoring).
|
|
35
|
+
*/
|
|
36
|
+
export declare function eventLog(eventName: string, data?: unknown): void;
|
|
37
|
+
/**
|
|
38
|
+
* Log an error with full details.
|
|
39
|
+
*/
|
|
40
|
+
export declare function errorLog(error: Error | string, context?: string): void;
|
|
41
|
+
/**
|
|
42
|
+
* Log a crash with full environment details.
|
|
43
|
+
* Everything goes to the session log file.
|
|
44
|
+
* Never throws - always returns a log path (even if logging failed).
|
|
45
|
+
*
|
|
46
|
+
* @returns The path to the log file (for user feedback)
|
|
47
|
+
*/
|
|
48
|
+
export declare function crashLog(error: Error | string, contextStr?: string): string;
|
|
49
|
+
/**
|
|
50
|
+
* Get the path to the current session's log file.
|
|
51
|
+
* Never throws - returns fallback path if session path unavailable.
|
|
52
|
+
*/
|
|
53
|
+
export declare function getSessionLogPath(): string;
|
|
@@ -0,0 +1,253 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unified Process Logger - Single log file per session.
|
|
3
|
+
*
|
|
4
|
+
* Logs are stored following platform conventions:
|
|
5
|
+
* - Windows: %LOCALAPPDATA%/brv/logs/brv-{timestamp}.log
|
|
6
|
+
* - macOS: ~/Library/Logs/brv/brv-{timestamp}.log
|
|
7
|
+
* - Linux: $XDG_STATE_HOME/brv/logs/brv-{timestamp}.log
|
|
8
|
+
*
|
|
9
|
+
* Each session creates a new log file with timestamp.
|
|
10
|
+
*/
|
|
11
|
+
import { appendFileSync, existsSync, mkdirSync, readdirSync, statSync, unlinkSync, writeFileSync } from 'node:fs';
|
|
12
|
+
import { join } from 'node:path';
|
|
13
|
+
import { getGlobalLogsDir } from './global-logs-path.js';
|
|
14
|
+
/** Current session's log file path (set on init) */
|
|
15
|
+
let sessionLogPath;
|
|
16
|
+
/**
|
|
17
|
+
* Get the logs directory path.
|
|
18
|
+
*/
|
|
19
|
+
function getLogsDir() {
|
|
20
|
+
return getGlobalLogsDir();
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Ensure logs directory exists.
|
|
24
|
+
* Silently ignores errors to prevent crashes.
|
|
25
|
+
*/
|
|
26
|
+
function ensureLogDir() {
|
|
27
|
+
try {
|
|
28
|
+
const logsDir = getLogsDir();
|
|
29
|
+
if (!existsSync(logsDir)) {
|
|
30
|
+
mkdirSync(logsDir, { recursive: true });
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
// Silently ignore - directory creation may fail due to permissions
|
|
35
|
+
// Logging will fail gracefully later when trying to write
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
/** Max age for log files in milliseconds (30 days) */
|
|
39
|
+
const LOG_MAX_AGE_MS = 30 * 24 * 60 * 60 * 1000;
|
|
40
|
+
/**
|
|
41
|
+
* Clean up log files older than 30 days.
|
|
42
|
+
* Runs silently - errors are ignored to not affect the main process.
|
|
43
|
+
*/
|
|
44
|
+
function cleanupOldLogs() {
|
|
45
|
+
try {
|
|
46
|
+
const logsDir = getLogsDir();
|
|
47
|
+
if (!existsSync(logsDir))
|
|
48
|
+
return;
|
|
49
|
+
const now = Date.now();
|
|
50
|
+
const files = readdirSync(logsDir);
|
|
51
|
+
for (const file of files) {
|
|
52
|
+
if (!file.endsWith('.log'))
|
|
53
|
+
continue;
|
|
54
|
+
const filePath = join(logsDir, file);
|
|
55
|
+
const stats = statSync(filePath);
|
|
56
|
+
const age = now - stats.mtimeMs;
|
|
57
|
+
if (age > LOG_MAX_AGE_MS) {
|
|
58
|
+
unlinkSync(filePath);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
catch {
|
|
63
|
+
// Silently ignore - don't crash the process
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Format timestamp for log entries.
|
|
68
|
+
*/
|
|
69
|
+
function formatTimestamp() {
|
|
70
|
+
const now = new Date();
|
|
71
|
+
return now.toISOString().replace('T', ' ').slice(0, 23);
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Generate session log filename with timestamp.
|
|
75
|
+
*/
|
|
76
|
+
function generateSessionLogFilename() {
|
|
77
|
+
const timestamp = new Date().toISOString().replaceAll(/[:.]/g, '-').slice(0, 19);
|
|
78
|
+
return `brv-${timestamp}.log`;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Get current session's log file path.
|
|
82
|
+
* Uses BRV_SESSION_LOG env var if set (for child processes),
|
|
83
|
+
* otherwise creates new session file.
|
|
84
|
+
*/
|
|
85
|
+
function getLogPath() {
|
|
86
|
+
if (!sessionLogPath) {
|
|
87
|
+
// Check if parent process set the log path
|
|
88
|
+
const envLogPath = process.env.BRV_SESSION_LOG;
|
|
89
|
+
if (envLogPath) {
|
|
90
|
+
sessionLogPath = envLogPath;
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
// Try to create log directory, but don't crash if it fails
|
|
94
|
+
// getLogsDir() has its own fallback to tmpdir() via getGlobalLogsDir()
|
|
95
|
+
try {
|
|
96
|
+
ensureLogDir();
|
|
97
|
+
}
|
|
98
|
+
catch {
|
|
99
|
+
// Directory creation failed - subsequent writes will also fail silently
|
|
100
|
+
// This prevents crash when getSessionLogPath() is called from process-manager
|
|
101
|
+
}
|
|
102
|
+
sessionLogPath = join(getLogsDir(), generateSessionLogFilename());
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
return sessionLogPath;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Initialize session log - creates a new log file for this session.
|
|
109
|
+
* Should be called once when the main process starts.
|
|
110
|
+
*/
|
|
111
|
+
export function initSessionLog() {
|
|
112
|
+
if (sessionLogPath)
|
|
113
|
+
return;
|
|
114
|
+
try {
|
|
115
|
+
ensureLogDir();
|
|
116
|
+
cleanupOldLogs();
|
|
117
|
+
sessionLogPath = join(getLogsDir(), generateSessionLogFilename());
|
|
118
|
+
const timestamp = formatTimestamp();
|
|
119
|
+
const header = [
|
|
120
|
+
'='.repeat(70),
|
|
121
|
+
`BRV Session Log - Started: ${timestamp}`,
|
|
122
|
+
`CWD: ${process.cwd()}`,
|
|
123
|
+
`Node: ${process.version} | Platform: ${process.platform} | PID: ${process.pid}`,
|
|
124
|
+
'='.repeat(70),
|
|
125
|
+
'',
|
|
126
|
+
].join('\n');
|
|
127
|
+
writeFileSync(sessionLogPath, header);
|
|
128
|
+
}
|
|
129
|
+
catch {
|
|
130
|
+
// Silently ignore - don't crash the process
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Write a log entry to the log file.
|
|
135
|
+
* Uses synchronous append for reliability in process shutdown scenarios.
|
|
136
|
+
*/
|
|
137
|
+
export function processLog(message) {
|
|
138
|
+
try {
|
|
139
|
+
ensureLogDir();
|
|
140
|
+
const timestamp = formatTimestamp();
|
|
141
|
+
const logLine = `${timestamp} ${message}\n`;
|
|
142
|
+
appendFileSync(getLogPath(), logLine);
|
|
143
|
+
}
|
|
144
|
+
catch {
|
|
145
|
+
// Silently ignore log failures - don't crash the process
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Log with [Transport] prefix.
|
|
150
|
+
*/
|
|
151
|
+
export function transportLog(message) {
|
|
152
|
+
processLog(`[Transport] ${message}`);
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Log with [Agent] prefix.
|
|
156
|
+
*/
|
|
157
|
+
export function agentLog(message) {
|
|
158
|
+
processLog(`[Agent] ${message}`);
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Log with [ProcessManager] prefix.
|
|
162
|
+
*/
|
|
163
|
+
export function processManagerLog(message) {
|
|
164
|
+
processLog(`[ProcessManager] ${message}`);
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Log a transport event (for TUI monitoring).
|
|
168
|
+
*/
|
|
169
|
+
export function eventLog(eventName, data) {
|
|
170
|
+
const dataStr = data ? ` ${JSON.stringify(data)}` : '';
|
|
171
|
+
processLog(`[Event] ${eventName}${dataStr}`);
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Log an error with full details.
|
|
175
|
+
*/
|
|
176
|
+
export function errorLog(error, context) {
|
|
177
|
+
const errorMessage = error instanceof Error ? error.message : error;
|
|
178
|
+
const errorStack = error instanceof Error ? error.stack : undefined;
|
|
179
|
+
const contextStr = context ? ` (${context})` : '';
|
|
180
|
+
processLog(`[ERROR]${contextStr} ${errorMessage}`);
|
|
181
|
+
if (errorStack) {
|
|
182
|
+
const indentedStack = errorStack
|
|
183
|
+
.split('\n')
|
|
184
|
+
.slice(1)
|
|
185
|
+
.map((line) => ` ${line}`)
|
|
186
|
+
.join('\n');
|
|
187
|
+
processLog(indentedStack);
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Log a crash with full environment details.
|
|
192
|
+
* Everything goes to the session log file.
|
|
193
|
+
* Never throws - always returns a log path (even if logging failed).
|
|
194
|
+
*
|
|
195
|
+
* @returns The path to the log file (for user feedback)
|
|
196
|
+
*/
|
|
197
|
+
export function crashLog(error, contextStr = 'Unknown') {
|
|
198
|
+
let logPath;
|
|
199
|
+
try {
|
|
200
|
+
const errorMessage = error instanceof Error ? error.message : error;
|
|
201
|
+
const errorStack = error instanceof Error ? error.stack : undefined;
|
|
202
|
+
const timestamp = formatTimestamp();
|
|
203
|
+
logPath = getLogPath();
|
|
204
|
+
ensureLogDir();
|
|
205
|
+
const crashContent = [
|
|
206
|
+
'',
|
|
207
|
+
'!'.repeat(70),
|
|
208
|
+
`CRASH at ${timestamp}`,
|
|
209
|
+
'!'.repeat(70),
|
|
210
|
+
'',
|
|
211
|
+
`Context: ${contextStr}`,
|
|
212
|
+
`Message: ${errorMessage}`,
|
|
213
|
+
'',
|
|
214
|
+
'Stack Trace:',
|
|
215
|
+
errorStack ?? '(No stack trace available)',
|
|
216
|
+
'',
|
|
217
|
+
'Environment:',
|
|
218
|
+
` Node.js: ${process.version}`,
|
|
219
|
+
` Platform: ${process.platform}`,
|
|
220
|
+
` Arch: ${process.arch}`,
|
|
221
|
+
` CWD: ${process.cwd()}`,
|
|
222
|
+
` PID: ${process.pid}`,
|
|
223
|
+
'',
|
|
224
|
+
'Memory Usage:',
|
|
225
|
+
JSON.stringify(process.memoryUsage(), null, 2)
|
|
226
|
+
.split('\n')
|
|
227
|
+
.map((line) => ` ${line}`)
|
|
228
|
+
.join('\n'),
|
|
229
|
+
'',
|
|
230
|
+
'!'.repeat(70),
|
|
231
|
+
'',
|
|
232
|
+
].join('\n');
|
|
233
|
+
appendFileSync(logPath, crashContent);
|
|
234
|
+
}
|
|
235
|
+
catch {
|
|
236
|
+
// If we can't write or get path, return a fallback path for user feedback
|
|
237
|
+
logPath = logPath || join(getGlobalLogsDir(), 'brv-crash.log');
|
|
238
|
+
}
|
|
239
|
+
return logPath;
|
|
240
|
+
}
|
|
241
|
+
/**
|
|
242
|
+
* Get the path to the current session's log file.
|
|
243
|
+
* Never throws - returns fallback path if session path unavailable.
|
|
244
|
+
*/
|
|
245
|
+
export function getSessionLogPath() {
|
|
246
|
+
try {
|
|
247
|
+
return getLogPath();
|
|
248
|
+
}
|
|
249
|
+
catch {
|
|
250
|
+
// Fallback to a predictable path if getLogPath fails
|
|
251
|
+
return join(getGlobalLogsDir(), 'brv-session.log');
|
|
252
|
+
}
|
|
253
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Detects if the current process is running in a sandboxed environment
|
|
3
|
+
* (e.g., Cursor AI agent, VSCode extension, Claude Code, Codex, etc.)
|
|
4
|
+
*
|
|
5
|
+
* Sandboxed environments typically have restricted network access and
|
|
6
|
+
* may set specific environment variables or have characteristic error patterns.
|
|
7
|
+
*/
|
|
8
|
+
export declare function isSandboxEnvironment(): boolean;
|
|
9
|
+
/**
|
|
10
|
+
* Detects if an error is specifically a sandbox network restriction error.
|
|
11
|
+
*
|
|
12
|
+
* Sandbox network errors have characteristic patterns:
|
|
13
|
+
* - WebSocket connection failures with "network" or "websocket error"
|
|
14
|
+
* - XHR poll errors (Socket.IO fallback blocked)
|
|
15
|
+
* - Connection refused errors that occur immediately (sandbox blocks before connection)
|
|
16
|
+
*
|
|
17
|
+
* This is more specific than general network errors which might be:
|
|
18
|
+
* - Actual network connectivity issues
|
|
19
|
+
* - Firewall blocks
|
|
20
|
+
* - Server not running
|
|
21
|
+
* - CORS origin errors (though with CORS origin = '*', this shouldn't happen)
|
|
22
|
+
*
|
|
23
|
+
* Note: With CORS origin configured as '*', CORS errors are impossible.
|
|
24
|
+
* When connection fails in sandbox, it's almost certainly due to network permission,
|
|
25
|
+
* not origin restrictions.
|
|
26
|
+
*/
|
|
27
|
+
export declare function isSandboxNetworkError(error: Error | string): boolean;
|
|
28
|
+
/**
|
|
29
|
+
* Gets a user-friendly description of the detected sandbox environment.
|
|
30
|
+
*/
|
|
31
|
+
export declare function getSandboxEnvironmentName(): string;
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Detects if the current process is running in a sandboxed environment
|
|
3
|
+
* (e.g., Cursor AI agent, VSCode extension, Claude Code, Codex, etc.)
|
|
4
|
+
*
|
|
5
|
+
* Sandboxed environments typically have restricted network access and
|
|
6
|
+
* may set specific environment variables or have characteristic error patterns.
|
|
7
|
+
*/
|
|
8
|
+
export function isSandboxEnvironment() {
|
|
9
|
+
// Check for IDE-specific environment variables
|
|
10
|
+
const { env } = process;
|
|
11
|
+
// Cursor IDE
|
|
12
|
+
if (env.CURSOR_AGENT || env.CURSOR_SESSION_ID) {
|
|
13
|
+
return true;
|
|
14
|
+
}
|
|
15
|
+
// VS Code / GitHub Copilot
|
|
16
|
+
if (env.VSCODE_INJECTION || env.VSCODE_PID || env.VSCODE_IPC_HOOK) {
|
|
17
|
+
return true;
|
|
18
|
+
}
|
|
19
|
+
// Claude Code
|
|
20
|
+
if (env.CLAUDE_AGENT || env.CLAUDE_SESSION) {
|
|
21
|
+
return true;
|
|
22
|
+
}
|
|
23
|
+
// Codex
|
|
24
|
+
if (env.CODEX_AGENT || env.CODEX_SESSION) {
|
|
25
|
+
return true;
|
|
26
|
+
}
|
|
27
|
+
// Windsurf
|
|
28
|
+
if (env.WINDSURF_AGENT || env.WINDSURF_SESSION) {
|
|
29
|
+
return true;
|
|
30
|
+
}
|
|
31
|
+
// Check for common sandbox indicators
|
|
32
|
+
// Sandboxed terminals often have restricted stdin/stdout
|
|
33
|
+
if (!process.stdin.isTTY && !process.stdout.isTTY) {
|
|
34
|
+
// This alone isn't enough, but combined with error patterns it helps
|
|
35
|
+
// We'll rely more on error message patterns for detection
|
|
36
|
+
}
|
|
37
|
+
return false;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Detects if an error is specifically a sandbox network restriction error.
|
|
41
|
+
*
|
|
42
|
+
* Sandbox network errors have characteristic patterns:
|
|
43
|
+
* - WebSocket connection failures with "network" or "websocket error"
|
|
44
|
+
* - XHR poll errors (Socket.IO fallback blocked)
|
|
45
|
+
* - Connection refused errors that occur immediately (sandbox blocks before connection)
|
|
46
|
+
*
|
|
47
|
+
* This is more specific than general network errors which might be:
|
|
48
|
+
* - Actual network connectivity issues
|
|
49
|
+
* - Firewall blocks
|
|
50
|
+
* - Server not running
|
|
51
|
+
* - CORS origin errors (though with CORS origin = '*', this shouldn't happen)
|
|
52
|
+
*
|
|
53
|
+
* Note: With CORS origin configured as '*', CORS errors are impossible.
|
|
54
|
+
* When connection fails in sandbox, it's almost certainly due to network permission,
|
|
55
|
+
* not origin restrictions.
|
|
56
|
+
*/
|
|
57
|
+
export function isSandboxNetworkError(error) {
|
|
58
|
+
const errorMessage = typeof error === 'string' ? error : error.message;
|
|
59
|
+
const lowerMessage = errorMessage.toLowerCase();
|
|
60
|
+
// First, check if it's a CORS/origin error (unlikely with origin = '*', but check anyway)
|
|
61
|
+
const isCorsError = lowerMessage.includes('cors') ||
|
|
62
|
+
lowerMessage.includes('origin') ||
|
|
63
|
+
(lowerMessage.includes('forbidden') && lowerMessage.includes('origin'));
|
|
64
|
+
// If it's a CORS error, it's NOT a sandbox network permission error
|
|
65
|
+
// (though with origin = '*', CORS errors shouldn't occur)
|
|
66
|
+
if (isCorsError) {
|
|
67
|
+
return false;
|
|
68
|
+
}
|
|
69
|
+
// Specific sandbox network permission error patterns
|
|
70
|
+
const sandboxPatterns = [
|
|
71
|
+
// WebSocket errors that indicate sandbox blocking
|
|
72
|
+
'websocket error',
|
|
73
|
+
'xhr poll error',
|
|
74
|
+
// Network errors that occur immediately (sandbox blocks before connection)
|
|
75
|
+
'network',
|
|
76
|
+
// Connection refused that happens immediately (sandbox blocks)
|
|
77
|
+
'econnrefused',
|
|
78
|
+
];
|
|
79
|
+
// Check if error matches sandbox patterns
|
|
80
|
+
const matchesSandboxPattern = sandboxPatterns.some((pattern) => lowerMessage.includes(pattern));
|
|
81
|
+
// Additional check: if it's a connection error but instance is likely running
|
|
82
|
+
// (we can't know for sure, but sandbox errors are usually immediate failures)
|
|
83
|
+
const isConnectionError = lowerMessage.includes('connection') || lowerMessage.includes('connect');
|
|
84
|
+
// Only consider it a sandbox network permission error if:
|
|
85
|
+
// 1. Matches sandbox patterns AND
|
|
86
|
+
// 2. Is a connection-related error AND
|
|
87
|
+
// 3. We're in a sandbox environment (or error pattern strongly suggests it)
|
|
88
|
+
// 4. NOT a CORS error (already checked above)
|
|
89
|
+
if (matchesSandboxPattern && isConnectionError) {
|
|
90
|
+
// Prefer environment detection, but if error pattern is very specific, trust it
|
|
91
|
+
if (isSandboxEnvironment()) {
|
|
92
|
+
return true;
|
|
93
|
+
}
|
|
94
|
+
// Very specific sandbox error patterns that we can trust even without env detection
|
|
95
|
+
if (lowerMessage.includes('websocket error') || lowerMessage.includes('xhr poll error')) {
|
|
96
|
+
return true;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
return false;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Gets a user-friendly description of the detected sandbox environment.
|
|
103
|
+
*/
|
|
104
|
+
export function getSandboxEnvironmentName() {
|
|
105
|
+
const { env } = process;
|
|
106
|
+
if (env.CURSOR_AGENT || env.CURSOR_SESSION_ID) {
|
|
107
|
+
return 'Cursor';
|
|
108
|
+
}
|
|
109
|
+
if (env.VSCODE_INJECTION || env.VSCODE_PID || env.VSCODE_IPC_HOOK) {
|
|
110
|
+
return 'VS Code / GitHub Copilot';
|
|
111
|
+
}
|
|
112
|
+
if (env.CLAUDE_AGENT || env.CLAUDE_SESSION) {
|
|
113
|
+
return 'Claude Code';
|
|
114
|
+
}
|
|
115
|
+
if (env.CODEX_AGENT || env.CODEX_SESSION) {
|
|
116
|
+
return 'Codex';
|
|
117
|
+
}
|
|
118
|
+
if (env.WINDSURF_AGENT || env.WINDSURF_SESSION) {
|
|
119
|
+
return 'Windsurf';
|
|
120
|
+
}
|
|
121
|
+
return 'IDE sandbox';
|
|
122
|
+
}
|