tarsk 0.4.4 → 0.4.6
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/dist/index.js +447375 -37
- package/package.json +2 -2
- package/dist/agent/agent.error-utils.d.ts +0 -14
- package/dist/agent/agent.error-utils.js +0 -52
- package/dist/agent/agent.event-transformer.d.ts +0 -55
- package/dist/agent/agent.event-transformer.js +0 -175
- package/dist/agent/agent.executor.d.ts +0 -26
- package/dist/agent/agent.executor.js +0 -286
- package/dist/agent/agent.model-resolver.d.ts +0 -22
- package/dist/agent/agent.model-resolver.js +0 -67
- package/dist/agent/agent.process-manager.d.ts +0 -57
- package/dist/agent/agent.process-manager.js +0 -262
- package/dist/agent/agent.processing-state-manager.d.ts +0 -74
- package/dist/agent/agent.processing-state-manager.js +0 -87
- package/dist/agent/agent.prompt-loader.d.ts +0 -16
- package/dist/agent/agent.prompt-loader.js +0 -227
- package/dist/agent/agent.subagent-executor.d.ts +0 -35
- package/dist/agent/agent.subagent-executor.js +0 -135
- package/dist/bun/index.d.ts +0 -2
- package/dist/bun/index.js +0 -165
- package/dist/cli.d.ts +0 -3
- package/dist/cli.js +0 -22
- package/dist/core/crypto.d.ts +0 -29
- package/dist/core/crypto.js +0 -166
- package/dist/core/dev-server-cache.d.ts +0 -46
- package/dist/core/dev-server-cache.js +0 -59
- package/dist/core/env-manager.d.ts +0 -3
- package/dist/core/env-manager.js +0 -60
- package/dist/core/error-responses.d.ts +0 -61
- package/dist/core/error-responses.js +0 -64
- package/dist/core/logger.d.ts +0 -10
- package/dist/core/logger.js +0 -47
- package/dist/core/paths.d.ts +0 -22
- package/dist/core/paths.js +0 -26
- package/dist/core/random-words.d.ts +0 -18
- package/dist/core/random-words.js +0 -135
- package/dist/core/response-builder.d.ts +0 -50
- package/dist/core/response-builder.js +0 -56
- package/dist/core/route-helpers.d.ts +0 -47
- package/dist/core/route-helpers.js +0 -54
- package/dist/core/run-command-detector.d.ts +0 -26
- package/dist/core/run-command-detector.js +0 -98
- package/dist/core/stream-helper.d.ts +0 -44
- package/dist/core/stream-helper.js +0 -50
- package/dist/core/utils.d.ts +0 -43
- package/dist/core/utils.js +0 -113
- package/dist/core/validation.d.ts +0 -10
- package/dist/core/validation.js +0 -20
- package/dist/database/database.d.ts +0 -40
- package/dist/database/database.encryption.d.ts +0 -33
- package/dist/database/database.encryption.js +0 -62
- package/dist/database/database.js +0 -480
- package/dist/database/database.state.d.ts +0 -52
- package/dist/database/database.state.js +0 -119
- package/dist/database/database.test-utils.d.ts +0 -22
- package/dist/database/database.test-utils.js +0 -39
- package/dist/database/database.types.d.ts +0 -3
- package/dist/database/database.types.js +0 -2
- package/dist/features/agents/agents.manager.d.ts +0 -24
- package/dist/features/agents/agents.manager.js +0 -200
- package/dist/features/ask-user/ask-user.routes.d.ts +0 -9
- package/dist/features/ask-user/ask-user.routes.js +0 -35
- package/dist/features/chat/chat-delete.route.d.ts +0 -15
- package/dist/features/chat/chat-delete.route.js +0 -36
- package/dist/features/chat/chat-post.route.d.ts +0 -11
- package/dist/features/chat/chat-post.route.js +0 -270
- package/dist/features/chat/chat-stop.route.d.ts +0 -21
- package/dist/features/chat/chat-stop.route.js +0 -22
- package/dist/features/chat/chat-subscribe.route.d.ts +0 -9
- package/dist/features/chat/chat-subscribe.route.js +0 -71
- package/dist/features/chat/chat.routes.d.ts +0 -22
- package/dist/features/chat/chat.routes.js +0 -29
- package/dist/features/conversations/conversations-delete.route.d.ts +0 -16
- package/dist/features/conversations/conversations-delete.route.js +0 -34
- package/dist/features/conversations/conversations-get-all.route.d.ts +0 -16
- package/dist/features/conversations/conversations-get-all.route.js +0 -39
- package/dist/features/conversations/conversations-get-by-id.route.d.ts +0 -16
- package/dist/features/conversations/conversations-get-by-id.route.js +0 -38
- package/dist/features/conversations/conversations-get-deleted.route.d.ts +0 -15
- package/dist/features/conversations/conversations-get-deleted.route.js +0 -34
- package/dist/features/conversations/conversations-get-messages.route.d.ts +0 -16
- package/dist/features/conversations/conversations-get-messages.route.js +0 -49
- package/dist/features/conversations/conversations.content.d.ts +0 -28
- package/dist/features/conversations/conversations.content.js +0 -142
- package/dist/features/conversations/conversations.database.d.ts +0 -108
- package/dist/features/conversations/conversations.database.js +0 -373
- package/dist/features/conversations/conversations.manager.d.ts +0 -130
- package/dist/features/conversations/conversations.manager.js +0 -162
- package/dist/features/conversations/conversations.routes.d.ts +0 -21
- package/dist/features/conversations/conversations.routes.js +0 -38
- package/dist/features/conversations/token-usage.route.d.ts +0 -41
- package/dist/features/conversations/token-usage.route.js +0 -419
- package/dist/features/git/git-commit.route.d.ts +0 -12
- package/dist/features/git/git-commit.route.js +0 -39
- package/dist/features/git/git-create-branch.route.d.ts +0 -28
- package/dist/features/git/git-create-branch.route.js +0 -119
- package/dist/features/git/git-create-pr.route.d.ts +0 -13
- package/dist/features/git/git-create-pr.route.js +0 -50
- package/dist/features/git/git-create-repo.route.d.ts +0 -14
- package/dist/features/git/git-create-repo.route.js +0 -108
- package/dist/features/git/git-diff.route.d.ts +0 -30
- package/dist/features/git/git-diff.route.js +0 -189
- package/dist/features/git/git-fetch.route.d.ts +0 -12
- package/dist/features/git/git-fetch.route.js +0 -31
- package/dist/features/git/git-generate-commit-message.route.d.ts +0 -12
- package/dist/features/git/git-generate-commit-message.route.js +0 -76
- package/dist/features/git/git-generate-pr-info.route.d.ts +0 -13
- package/dist/features/git/git-generate-pr-info.route.js +0 -147
- package/dist/features/git/git-github-status.route.d.ts +0 -16
- package/dist/features/git/git-github-status.route.js +0 -68
- package/dist/features/git/git-log.route.d.ts +0 -17
- package/dist/features/git/git-log.route.js +0 -33
- package/dist/features/git/git-pr-status.route.d.ts +0 -15
- package/dist/features/git/git-pr-status.route.js +0 -33
- package/dist/features/git/git-pull.route.d.ts +0 -12
- package/dist/features/git/git-pull.route.js +0 -35
- package/dist/features/git/git-push.route.d.ts +0 -12
- package/dist/features/git/git-push.route.js +0 -46
- package/dist/features/git/git-status-cache.database.d.ts +0 -7
- package/dist/features/git/git-status-cache.database.js +0 -53
- package/dist/features/git/git-status.route.d.ts +0 -15
- package/dist/features/git/git-status.route.js +0 -62
- package/dist/features/git/git-sync-branch.route.d.ts +0 -4
- package/dist/features/git/git-sync-branch.route.js +0 -208
- package/dist/features/git/git-unified-status.route.d.ts +0 -30
- package/dist/features/git/git-unified-status.route.js +0 -165
- package/dist/features/git/git-username.route.d.ts +0 -3
- package/dist/features/git/git-username.route.js +0 -24
- package/dist/features/git/git.manager.d.ts +0 -139
- package/dist/features/git/git.manager.js +0 -352
- package/dist/features/git/git.routes.d.ts +0 -4
- package/dist/features/git/git.routes.js +0 -116
- package/dist/features/git/git.utils.d.ts +0 -82
- package/dist/features/git/git.utils.js +0 -1040
- package/dist/features/mcp/mcp.config.d.ts +0 -27
- package/dist/features/mcp/mcp.config.js +0 -148
- package/dist/features/mcp/mcp.manager.d.ts +0 -61
- package/dist/features/mcp/mcp.manager.js +0 -254
- package/dist/features/mcp/mcp.popular.json +0 -103
- package/dist/features/mcp/mcp.routes.d.ts +0 -13
- package/dist/features/mcp/mcp.routes.js +0 -159
- package/dist/features/mcp/mcp.types.d.ts +0 -80
- package/dist/features/mcp/mcp.types.js +0 -8
- package/dist/features/metadata/metadata.manager.d.ts +0 -126
- package/dist/features/metadata/metadata.manager.js +0 -423
- package/dist/features/models/model-info-aihubmix.d.ts +0 -25
- package/dist/features/models/model-info-aihubmix.js +0 -117
- package/dist/features/models/model-info-openrouter.d.ts +0 -25
- package/dist/features/models/model-info-openrouter.js +0 -104
- package/dist/features/models/model-info.d.ts +0 -37
- package/dist/features/models/model-info.js +0 -39
- package/dist/features/models/models-catalog.d.ts +0 -49
- package/dist/features/models/models-catalog.js +0 -80
- package/dist/features/models/models-catalog.route.d.ts +0 -43
- package/dist/features/models/models-catalog.route.js +0 -15
- package/dist/features/models/models-get-available.route.d.ts +0 -36
- package/dist/features/models/models-get-available.route.js +0 -66
- package/dist/features/models/models-get-enabled.route.d.ts +0 -33
- package/dist/features/models/models-get-enabled.route.js +0 -45
- package/dist/features/models/models-get-model-info.route.d.ts +0 -31
- package/dist/features/models/models-get-model-info.route.js +0 -84
- package/dist/features/models/models-model-disable.route.d.ts +0 -15
- package/dist/features/models/models-model-disable.route.js +0 -20
- package/dist/features/models/models-model-enable.route.d.ts +0 -13
- package/dist/features/models/models-model-enable.route.js +0 -20
- package/dist/features/models/models-provider-refresh.route.d.ts +0 -17
- package/dist/features/models/models-provider-refresh.route.js +0 -20
- package/dist/features/models/models.manager.d.ts +0 -58
- package/dist/features/models/models.manager.js +0 -138
- package/dist/features/models/models.routes.d.ts +0 -18
- package/dist/features/models/models.routes.js +0 -83
- package/dist/features/models/open-router-models.d.ts +0 -38
- package/dist/features/models/open-router-models.js +0 -73
- package/dist/features/models/openai-models.d.ts +0 -63
- package/dist/features/models/openai-models.js +0 -150
- package/dist/features/onboarding/onboarding-get-git-check.route.d.ts +0 -11
- package/dist/features/onboarding/onboarding-get-git-check.route.js +0 -28
- package/dist/features/onboarding/onboarding-get-status.route.d.ts +0 -12
- package/dist/features/onboarding/onboarding-get-status.route.js +0 -15
- package/dist/features/onboarding/onboarding-post-complete.route.d.ts +0 -12
- package/dist/features/onboarding/onboarding-post-complete.route.js +0 -15
- package/dist/features/onboarding/onboarding-post-reset.route.d.ts +0 -12
- package/dist/features/onboarding/onboarding-post-reset.route.js +0 -15
- package/dist/features/onboarding/onboarding.routes.d.ts +0 -18
- package/dist/features/onboarding/onboarding.routes.js +0 -28
- package/dist/features/project-todos/project-todos.database.d.ts +0 -38
- package/dist/features/project-todos/project-todos.database.js +0 -91
- package/dist/features/project-todos/project-todos.routes.d.ts +0 -4
- package/dist/features/project-todos/project-todos.routes.js +0 -94
- package/dist/features/projects/projects-ai-files.route.d.ts +0 -148
- package/dist/features/projects/projects-ai-files.route.js +0 -425
- package/dist/features/projects/projects-commands.route.d.ts +0 -27
- package/dist/features/projects/projects-commands.route.js +0 -39
- package/dist/features/projects/projects-create.route.d.ts +0 -19
- package/dist/features/projects/projects-create.route.js +0 -37
- package/dist/features/projects/projects-delete.route.d.ts +0 -24
- package/dist/features/projects/projects-delete.route.js +0 -34
- package/dist/features/projects/projects-get.route.d.ts +0 -47
- package/dist/features/projects/projects-get.route.js +0 -36
- package/dist/features/projects/projects-list.route.d.ts +0 -58
- package/dist/features/projects/projects-list.route.js +0 -59
- package/dist/features/projects/projects-open-folder.route.d.ts +0 -10
- package/dist/features/projects/projects-open-folder.route.js +0 -11
- package/dist/features/projects/projects-open.route.d.ts +0 -26
- package/dist/features/projects/projects-open.route.js +0 -49
- package/dist/features/projects/projects-package-scripts.route.d.ts +0 -15
- package/dist/features/projects/projects-package-scripts.route.js +0 -96
- package/dist/features/projects/projects-run-command.route.d.ts +0 -8
- package/dist/features/projects/projects-run-command.route.js +0 -21
- package/dist/features/projects/projects-run.route.d.ts +0 -51
- package/dist/features/projects/projects-run.route.js +0 -74
- package/dist/features/projects/projects-update.route.d.ts +0 -24
- package/dist/features/projects/projects-update.route.js +0 -81
- package/dist/features/projects/projects.creator.d.ts +0 -33
- package/dist/features/projects/projects.creator.js +0 -555
- package/dist/features/projects/projects.database.d.ts +0 -61
- package/dist/features/projects/projects.database.js +0 -212
- package/dist/features/projects/projects.manager.d.ts +0 -291
- package/dist/features/projects/projects.manager.js +0 -426
- package/dist/features/projects/projects.open-with.d.ts +0 -27
- package/dist/features/projects/projects.open-with.js +0 -156
- package/dist/features/projects/projects.routes.d.ts +0 -20
- package/dist/features/projects/projects.routes.js +0 -255
- package/dist/features/projects/terminal-session-manager.d.ts +0 -55
- package/dist/features/projects/terminal-session-manager.js +0 -90
- package/dist/features/providers/provider-resolver.d.ts +0 -13
- package/dist/features/providers/provider-resolver.js +0 -22
- package/dist/features/providers/providers-get-credits.route.d.ts +0 -15
- package/dist/features/providers/providers-get-credits.route.js +0 -51
- package/dist/features/providers/providers-get.route.d.ts +0 -16
- package/dist/features/providers/providers-get.route.js +0 -32
- package/dist/features/providers/providers-open-external.route.d.ts +0 -15
- package/dist/features/providers/providers-open-external.route.js +0 -49
- package/dist/features/providers/providers-post-bulk-keys.route.d.ts +0 -14
- package/dist/features/providers/providers-post-bulk-keys.route.js +0 -31
- package/dist/features/providers/providers-post-keys.route.d.ts +0 -14
- package/dist/features/providers/providers-post-keys.route.js +0 -25
- package/dist/features/providers/providers.routes.d.ts +0 -19
- package/dist/features/providers/providers.routes.js +0 -31
- package/dist/features/rules/rules-post.route.d.ts +0 -43
- package/dist/features/rules/rules-post.route.js +0 -89
- package/dist/features/rules/rules.manager.d.ts +0 -36
- package/dist/features/rules/rules.manager.js +0 -203
- package/dist/features/rules/rules.routes.d.ts +0 -12
- package/dist/features/rules/rules.routes.js +0 -13
- package/dist/features/run/run-get-running.route.d.ts +0 -15
- package/dist/features/run/run-get-running.route.js +0 -21
- package/dist/features/run/run-post-start.route.d.ts +0 -8
- package/dist/features/run/run-post-start.route.js +0 -21
- package/dist/features/run/run-post-stop.route.d.ts +0 -15
- package/dist/features/run/run-post-stop.route.js +0 -24
- package/dist/features/run/run-post-suggest.route.d.ts +0 -15
- package/dist/features/run/run-post-suggest.route.js +0 -21
- package/dist/features/run/run-put-command.route.d.ts +0 -15
- package/dist/features/run/run-put-command.route.js +0 -24
- package/dist/features/run/run.routes.d.ts +0 -19
- package/dist/features/run/run.routes.js +0 -31
- package/dist/features/scaffold/index.d.ts +0 -7
- package/dist/features/scaffold/index.js +0 -5
- package/dist/features/scaffold/scaffold-get-templates.route.d.ts +0 -27
- package/dist/features/scaffold/scaffold-get-templates.route.js +0 -17
- package/dist/features/scaffold/scaffold-post.route.d.ts +0 -8
- package/dist/features/scaffold/scaffold-post.route.js +0 -30
- package/dist/features/scaffold/scaffold.routes.d.ts +0 -10
- package/dist/features/scaffold/scaffold.routes.js +0 -16
- package/dist/features/scaffold/scaffold.runner.d.ts +0 -48
- package/dist/features/scaffold/scaffold.runner.js +0 -475
- package/dist/features/scaffold/scaffold.types.d.ts +0 -26
- package/dist/features/scaffold/scaffold.types.js +0 -5
- package/dist/features/skills/skills.activation.d.ts +0 -31
- package/dist/features/skills/skills.activation.js +0 -155
- package/dist/features/skills/skills.manager.d.ts +0 -35
- package/dist/features/skills/skills.manager.js +0 -251
- package/dist/features/slash-commands/slash-commands-delete.route.d.ts +0 -23
- package/dist/features/slash-commands/slash-commands-delete.route.js +0 -36
- package/dist/features/slash-commands/slash-commands-get.route.d.ts +0 -53
- package/dist/features/slash-commands/slash-commands-get.route.js +0 -54
- package/dist/features/slash-commands/slash-commands-post.route.d.ts +0 -39
- package/dist/features/slash-commands/slash-commands-post.route.js +0 -70
- package/dist/features/slash-commands/slash-commands-put.route.d.ts +0 -23
- package/dist/features/slash-commands/slash-commands-put.route.js +0 -36
- package/dist/features/slash-commands/slash-commands.manager.d.ts +0 -46
- package/dist/features/slash-commands/slash-commands.manager.js +0 -265
- package/dist/features/slash-commands/slash-commands.routes.d.ts +0 -13
- package/dist/features/slash-commands/slash-commands.routes.js +0 -20
- package/dist/features/threads/threads-ai-files.route.d.ts +0 -153
- package/dist/features/threads/threads-ai-files.route.js +0 -287
- package/dist/features/threads/threads-conversation-folder-path.route.d.ts +0 -14
- package/dist/features/threads/threads-conversation-folder-path.route.js +0 -23
- package/dist/features/threads/threads-create.route.d.ts +0 -22
- package/dist/features/threads/threads-create.route.js +0 -60
- package/dist/features/threads/threads-delete.route.d.ts +0 -25
- package/dist/features/threads/threads-delete.route.js +0 -35
- package/dist/features/threads/threads-files.route.d.ts +0 -15
- package/dist/features/threads/threads-files.route.js +0 -20
- package/dist/features/threads/threads-fix-comments.route.d.ts +0 -26
- package/dist/features/threads/threads-fix-comments.route.js +0 -45
- package/dist/features/threads/threads-get.route.d.ts +0 -30
- package/dist/features/threads/threads-get.route.js +0 -38
- package/dist/features/threads/threads-list.route.d.ts +0 -56
- package/dist/features/threads/threads-list.route.js +0 -58
- package/dist/features/threads/threads-messages.route.d.ts +0 -28
- package/dist/features/threads/threads-messages.route.js +0 -110
- package/dist/features/threads/threads-open.route.d.ts +0 -26
- package/dist/features/threads/threads-open.route.js +0 -62
- package/dist/features/threads/threads-select.route.d.ts +0 -25
- package/dist/features/threads/threads-select.route.js +0 -35
- package/dist/features/threads/threads-update.route.d.ts +0 -15
- package/dist/features/threads/threads-update.route.js +0 -30
- package/dist/features/threads/threads.database.d.ts +0 -68
- package/dist/features/threads/threads.database.js +0 -215
- package/dist/features/threads/threads.manager.d.ts +0 -204
- package/dist/features/threads/threads.manager.js +0 -505
- package/dist/features/threads/threads.routes.d.ts +0 -20
- package/dist/features/threads/threads.routes.js +0 -230
- package/dist/features/todos/todos.database.d.ts +0 -14
- package/dist/features/todos/todos.database.js +0 -31
- package/dist/features/updates/updates.routes.d.ts +0 -13
- package/dist/features/updates/updates.routes.js +0 -40
- package/dist/index.d.ts +0 -3
- package/dist/project-analyzer.d.ts +0 -26
- package/dist/project-analyzer.js +0 -307
- package/dist/server.d.ts +0 -12
- package/dist/server.js +0 -142
- package/dist/tools/agent-tool.d.ts +0 -49
- package/dist/tools/agent-tool.js +0 -131
- package/dist/tools/ask-user.d.ts +0 -25
- package/dist/tools/ask-user.js +0 -74
- package/dist/tools/ast-grep.d.ts +0 -28
- package/dist/tools/ast-grep.js +0 -273
- package/dist/tools/bash.d.ts +0 -33
- package/dist/tools/bash.js +0 -186
- package/dist/tools/edit-diff.d.ts +0 -24
- package/dist/tools/edit-diff.js +0 -136
- package/dist/tools/edit.d.ts +0 -28
- package/dist/tools/edit.js +0 -78
- package/dist/tools/find.d.ts +0 -31
- package/dist/tools/find.js +0 -117
- package/dist/tools/grep.d.ts +0 -37
- package/dist/tools/grep.js +0 -231
- package/dist/tools/index.d.ts +0 -93
- package/dist/tools/index.js +0 -110
- package/dist/tools/ls.d.ts +0 -31
- package/dist/tools/ls.js +0 -108
- package/dist/tools/mcp-tools.d.ts +0 -31
- package/dist/tools/mcp-tools.js +0 -59
- package/dist/tools/path-utils.d.ts +0 -14
- package/dist/tools/path-utils.js +0 -87
- package/dist/tools/read.d.ts +0 -27
- package/dist/tools/read.js +0 -86
- package/dist/tools/resolve-bin.d.ts +0 -5
- package/dist/tools/resolve-bin.js +0 -28
- package/dist/tools/shell.d.ts +0 -7
- package/dist/tools/shell.js +0 -143
- package/dist/tools/skill-reference-tool.d.ts +0 -30
- package/dist/tools/skill-reference-tool.js +0 -171
- package/dist/tools/skill-tool.d.ts +0 -33
- package/dist/tools/skill-tool.js +0 -213
- package/dist/tools/todo.d.ts +0 -20
- package/dist/tools/todo.js +0 -168
- package/dist/tools/tool-helpers.d.ts +0 -78
- package/dist/tools/tool-helpers.js +0 -109
- package/dist/tools/truncate.d.ts +0 -31
- package/dist/tools/truncate.js +0 -164
- package/dist/tools/write.d.ts +0 -21
- package/dist/tools/write.js +0 -65
|
@@ -1,505 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* ThreadManager handles thread lifecycle and metadata management
|
|
3
|
-
*
|
|
4
|
-
* This manager is responsible for:
|
|
5
|
-
* - Creating new threads for existing projects
|
|
6
|
-
* - Managing thread metadata
|
|
7
|
-
* - Coordinating with GitManager for repository cloning
|
|
8
|
-
* - Providing CRUD operations for threads
|
|
9
|
-
* - Ensuring thread path uniqueness
|
|
10
|
-
*/
|
|
11
|
-
import { randomUUID } from "crypto";
|
|
12
|
-
import { join } from "path";
|
|
13
|
-
import { execSync } from "child_process";
|
|
14
|
-
import { spawnProcess } from "../../core/utils.js";
|
|
15
|
-
import { rm, stat, mkdir } from "fs/promises";
|
|
16
|
-
import { generateRandomThreadName } from '../../core/random-words.js';
|
|
17
|
-
import { getDatabase } from '../../database/database.js';
|
|
18
|
-
import { deleteThread as deleteThreadFromDb } from './threads.database.js';
|
|
19
|
-
/**
|
|
20
|
-
* ThreadManagerImpl provides the implementation for thread operations
|
|
21
|
-
*/
|
|
22
|
-
export class ThreadManagerImpl {
|
|
23
|
-
metadataManager;
|
|
24
|
-
gitManager;
|
|
25
|
-
processingStateManager;
|
|
26
|
-
rootFolder;
|
|
27
|
-
/**
|
|
28
|
-
* Create a new ThreadManager
|
|
29
|
-
* @param metadataManager - Manager for persisting metadata
|
|
30
|
-
* @param gitManager - Manager for git operations
|
|
31
|
-
* @param processingStateManager - Optional manager for processing state (for spinner during clone)
|
|
32
|
-
* @param rootFolder - Base directory where threads will be stored
|
|
33
|
-
*
|
|
34
|
-
* Requirements:
|
|
35
|
-
* - 2.1 - WHEN a user creates a new Thread for a Project, THE CLI SHALL create a new clone of the Project's git repository
|
|
36
|
-
* - 2.4 - THE System SHALL maintain a title for each Thread
|
|
37
|
-
*/
|
|
38
|
-
constructor(metadataManager, gitManager, processingStateManager, rootFolder = "") {
|
|
39
|
-
this.metadataManager = metadataManager;
|
|
40
|
-
this.gitManager = gitManager;
|
|
41
|
-
this.processingStateManager = processingStateManager;
|
|
42
|
-
this.rootFolder = rootFolder;
|
|
43
|
-
}
|
|
44
|
-
/**
|
|
45
|
-
* Creates a new thread for an existing project
|
|
46
|
-
*
|
|
47
|
-
* This method:
|
|
48
|
-
* 1. Validates that the project exists
|
|
49
|
-
* 2. Generates a unique thread ID
|
|
50
|
-
* 3. Gets the project's git URL
|
|
51
|
-
* 4. Generates a unique thread path
|
|
52
|
-
* 5. Delegates to GitManager for cloning
|
|
53
|
-
* 6. Saves thread metadata
|
|
54
|
-
* 7. Updates the project's thread list
|
|
55
|
-
* 8. Yields progress events during the operation
|
|
56
|
-
*
|
|
57
|
-
* @param projectId - The parent project ID
|
|
58
|
-
* @param title - Optional thread title (auto-generated if not provided)
|
|
59
|
-
* @yields ThreadEvent objects during the creation process
|
|
60
|
-
*
|
|
61
|
-
* Requirements:
|
|
62
|
-
* - 2.1 - WHEN a user creates a new Thread for a Project, THE CLI SHALL create a new clone of the Project's git repository
|
|
63
|
-
* - 2.2 - WHEN a Thread is created, THE App SHALL display it under its parent Project in the Side_Panel
|
|
64
|
-
* - 2.4 - THE System SHALL maintain a title for each Thread
|
|
65
|
-
* - 7.4 - THE CLI SHALL ensure each Thread clone is stored in a unique directory path
|
|
66
|
-
*/
|
|
67
|
-
async *createThread(projectId, title) {
|
|
68
|
-
let threadId;
|
|
69
|
-
try {
|
|
70
|
-
// Load project to verify it exists and get git URL
|
|
71
|
-
const projects = await this.metadataManager.loadProjects();
|
|
72
|
-
const project = projects.find((p) => p.id === projectId);
|
|
73
|
-
if (!project) {
|
|
74
|
-
yield {
|
|
75
|
-
type: "error",
|
|
76
|
-
message: `Project not found: ${projectId}`,
|
|
77
|
-
};
|
|
78
|
-
return;
|
|
79
|
-
}
|
|
80
|
-
// Create project directory if it doesn't exist
|
|
81
|
-
try {
|
|
82
|
-
await stat(project.path);
|
|
83
|
-
}
|
|
84
|
-
catch {
|
|
85
|
-
// Create the project directory if it doesn't exist
|
|
86
|
-
await mkdir(project.path, { recursive: true });
|
|
87
|
-
}
|
|
88
|
-
// Generate unique thread ID
|
|
89
|
-
threadId = randomUUID();
|
|
90
|
-
// Generate thread path: {rootFolder}/{threadId}
|
|
91
|
-
const threadPath = this.generateThreadPath(projectId, threadId);
|
|
92
|
-
// Generate thread title if not provided
|
|
93
|
-
const existingThreads = await this.metadataManager.loadThreads();
|
|
94
|
-
const existingTitles = new Set(existingThreads.filter((t) => t.projectId === projectId).map((t) => t.title));
|
|
95
|
-
const threadTitle = title ?? this.generateThreadTitle(existingTitles);
|
|
96
|
-
this.processingStateManager?.setProcessing(threadId);
|
|
97
|
-
yield {
|
|
98
|
-
type: "progress",
|
|
99
|
-
message: `Creating thread "${threadTitle}" for project "${project.name}"...`,
|
|
100
|
-
threadId,
|
|
101
|
-
};
|
|
102
|
-
yield {
|
|
103
|
-
type: "progress",
|
|
104
|
-
message: `Cloning repository to ${threadPath}...`,
|
|
105
|
-
};
|
|
106
|
-
// Handle git clone or directory copy based on project type
|
|
107
|
-
if (this.gitManager.validateGitUrl(project.gitUrl)) {
|
|
108
|
-
// Project has valid git URL - clone from git
|
|
109
|
-
yield {
|
|
110
|
-
type: "progress",
|
|
111
|
-
message: `Cloning repository to ${threadPath}...`,
|
|
112
|
-
};
|
|
113
|
-
for await (const gitEvent of this.gitManager.cloneRepository(project.gitUrl, threadPath)) {
|
|
114
|
-
if (gitEvent.type === "error") {
|
|
115
|
-
this.processingStateManager?.clearProcessing(threadId);
|
|
116
|
-
yield {
|
|
117
|
-
type: "error",
|
|
118
|
-
message: `Git clone failed: ${gitEvent.message}`,
|
|
119
|
-
};
|
|
120
|
-
return;
|
|
121
|
-
}
|
|
122
|
-
else if (gitEvent.type === "stdout" || gitEvent.type === "stderr") {
|
|
123
|
-
yield {
|
|
124
|
-
type: "progress",
|
|
125
|
-
message: gitEvent.data,
|
|
126
|
-
};
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
else {
|
|
131
|
-
// Project has no valid git URL (scaffolded project) - copy directory
|
|
132
|
-
yield {
|
|
133
|
-
type: "progress",
|
|
134
|
-
message: `Copying project files to ${threadPath}...`,
|
|
135
|
-
};
|
|
136
|
-
try {
|
|
137
|
-
// Check if source directory exists
|
|
138
|
-
// Create source directory if it doesn't exist
|
|
139
|
-
try {
|
|
140
|
-
await stat(project.path);
|
|
141
|
-
}
|
|
142
|
-
catch {
|
|
143
|
-
// Create source directory if it doesn't exist
|
|
144
|
-
await mkdir(project.path, { recursive: true });
|
|
145
|
-
}
|
|
146
|
-
// Use cp command for recursive copy (works on Unix-like systems and Windows with modern Node.js)
|
|
147
|
-
if (process.platform === "win32") {
|
|
148
|
-
execSync(`xcopy "${project.path}" "${threadPath}" /E /I /H /Y`, { stdio: "pipe" });
|
|
149
|
-
}
|
|
150
|
-
else {
|
|
151
|
-
execSync(`cp -r "${project.path}" "${threadPath}"`, { stdio: "pipe" });
|
|
152
|
-
}
|
|
153
|
-
yield {
|
|
154
|
-
type: "progress",
|
|
155
|
-
message: `Project files copied successfully`,
|
|
156
|
-
};
|
|
157
|
-
}
|
|
158
|
-
catch (error) {
|
|
159
|
-
this.processingStateManager?.clearProcessing(threadId);
|
|
160
|
-
yield {
|
|
161
|
-
type: "error",
|
|
162
|
-
message: `Failed to copy project files: ${error instanceof Error ? error.message : String(error)}`,
|
|
163
|
-
};
|
|
164
|
-
return;
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
// Sanitize the thread title to create a valid branch name
|
|
168
|
-
let branchName = this.gitManager.sanitizeBranchName(threadTitle);
|
|
169
|
-
yield {
|
|
170
|
-
type: "progress",
|
|
171
|
-
message: `Creating branch "${branchName}"...`,
|
|
172
|
-
};
|
|
173
|
-
// Check if branch exists and find a unique name if needed
|
|
174
|
-
let branchExists = await this.gitManager.checkBranchExists(threadPath, branchName);
|
|
175
|
-
let counter = 2;
|
|
176
|
-
const baseBranchName = branchName;
|
|
177
|
-
while (branchExists) {
|
|
178
|
-
branchName = `${baseBranchName}-${counter}`;
|
|
179
|
-
branchExists = await this.gitManager.checkBranchExists(threadPath, branchName);
|
|
180
|
-
counter++;
|
|
181
|
-
}
|
|
182
|
-
if (branchName !== baseBranchName) {
|
|
183
|
-
yield {
|
|
184
|
-
type: "progress",
|
|
185
|
-
message: `Branch "${baseBranchName}" exists, using "${branchName}" instead`,
|
|
186
|
-
};
|
|
187
|
-
}
|
|
188
|
-
// Create and checkout the new branch
|
|
189
|
-
for await (const gitEvent of this.gitManager.createAndCheckoutBranch(threadPath, branchName)) {
|
|
190
|
-
if (gitEvent.type === "error") {
|
|
191
|
-
this.processingStateManager?.clearProcessing(threadId);
|
|
192
|
-
yield {
|
|
193
|
-
type: "error",
|
|
194
|
-
message: `Failed to create branch: ${gitEvent.message}`,
|
|
195
|
-
};
|
|
196
|
-
return;
|
|
197
|
-
}
|
|
198
|
-
else if (gitEvent.type === "stdout" || gitEvent.type === "stderr") {
|
|
199
|
-
yield {
|
|
200
|
-
type: "progress",
|
|
201
|
-
message: gitEvent.data,
|
|
202
|
-
};
|
|
203
|
-
}
|
|
204
|
-
}
|
|
205
|
-
yield {
|
|
206
|
-
type: "progress",
|
|
207
|
-
message: `Branch "${branchName}" created and checked out`,
|
|
208
|
-
};
|
|
209
|
-
// Run setup script if project has one configured
|
|
210
|
-
if (project.setupScript) {
|
|
211
|
-
yield {
|
|
212
|
-
type: "progress",
|
|
213
|
-
message: `Running setup script: ${project.setupScript}`,
|
|
214
|
-
};
|
|
215
|
-
for await (const event of this.runSetupScript(threadPath, project.setupScript)) {
|
|
216
|
-
yield event;
|
|
217
|
-
}
|
|
218
|
-
}
|
|
219
|
-
// Create thread metadata
|
|
220
|
-
const thread = {
|
|
221
|
-
id: threadId,
|
|
222
|
-
projectId,
|
|
223
|
-
title: threadTitle,
|
|
224
|
-
path: threadPath,
|
|
225
|
-
currentBranch: branchName,
|
|
226
|
-
createdAt: new Date(),
|
|
227
|
-
};
|
|
228
|
-
// Save thread metadata
|
|
229
|
-
const threads = await this.metadataManager.loadThreads();
|
|
230
|
-
threads.push(thread);
|
|
231
|
-
await this.metadataManager.saveThreads(threads);
|
|
232
|
-
// Update project's thread list
|
|
233
|
-
project.threads.push(threadId);
|
|
234
|
-
const updatedProjects = projects.map((p) => (p.id === projectId ? project : p));
|
|
235
|
-
await this.metadataManager.saveProjects(updatedProjects);
|
|
236
|
-
yield {
|
|
237
|
-
type: "progress",
|
|
238
|
-
message: `Thread "${threadTitle}" created successfully`,
|
|
239
|
-
};
|
|
240
|
-
// Yield complete event with thread data
|
|
241
|
-
this.processingStateManager?.clearProcessing(threadId);
|
|
242
|
-
yield {
|
|
243
|
-
type: "complete",
|
|
244
|
-
message: "Thread creation complete",
|
|
245
|
-
thread,
|
|
246
|
-
};
|
|
247
|
-
}
|
|
248
|
-
catch (error) {
|
|
249
|
-
if (typeof threadId !== "undefined") {
|
|
250
|
-
this.processingStateManager?.clearProcessing(threadId);
|
|
251
|
-
}
|
|
252
|
-
yield {
|
|
253
|
-
type: "error",
|
|
254
|
-
message: `Failed to create thread: ${error instanceof Error ? error.message : String(error)}`,
|
|
255
|
-
};
|
|
256
|
-
}
|
|
257
|
-
}
|
|
258
|
-
/**
|
|
259
|
-
* Gets a thread by ID
|
|
260
|
-
* @param threadId - The thread ID
|
|
261
|
-
* @returns The thread or null if not found
|
|
262
|
-
*/
|
|
263
|
-
async getThread(threadId) {
|
|
264
|
-
const threads = await this.metadataManager.loadThreads();
|
|
265
|
-
return threads.find((t) => t.id === threadId) ?? null;
|
|
266
|
-
}
|
|
267
|
-
/**
|
|
268
|
-
* Lists all threads for a specific project
|
|
269
|
-
* @param projectId - The project ID to filter threads
|
|
270
|
-
* @returns Array of threads for the project
|
|
271
|
-
*
|
|
272
|
-
* Requirements:
|
|
273
|
-
* - 2.1 - WHEN a Thread is created, THE App SHALL display it under its parent Project in the Side_Panel
|
|
274
|
-
*/
|
|
275
|
-
async listThreads(projectId) {
|
|
276
|
-
const threads = await this.metadataManager.loadThreads();
|
|
277
|
-
return threads.filter((t) => t.projectId === projectId);
|
|
278
|
-
}
|
|
279
|
-
/**
|
|
280
|
-
* Deletes a thread and removes its directory
|
|
281
|
-
*
|
|
282
|
-
* This method:
|
|
283
|
-
* 1. Finds the thread by ID
|
|
284
|
-
* 2. Removes the thread directory from filesystem
|
|
285
|
-
* 3. Removes the thread from metadata
|
|
286
|
-
* 4. Updates the parent project's thread list
|
|
287
|
-
* 5. Marks the thread as deleted in the database
|
|
288
|
-
*
|
|
289
|
-
* @param threadId - The thread ID to delete
|
|
290
|
-
* @throws Error if thread not found
|
|
291
|
-
*
|
|
292
|
-
* Requirements:
|
|
293
|
-
* - 2.3 - WHEN a user deletes a Thread, THE System SHALL remove the Thread's folder and update the Side_Panel display
|
|
294
|
-
* - 7.5 - WHEN a Thread is deleted, THE CLI SHALL remove the associated git repository clone from the filesystem
|
|
295
|
-
*/
|
|
296
|
-
async deleteThread(threadId) {
|
|
297
|
-
const threads = await this.metadataManager.loadThreads();
|
|
298
|
-
const threadIndex = threads.findIndex((t) => t.id === threadId);
|
|
299
|
-
if (threadIndex === -1) {
|
|
300
|
-
throw new Error(`Thread not found: ${threadId}`);
|
|
301
|
-
}
|
|
302
|
-
const thread = threads[threadIndex];
|
|
303
|
-
// Remove thread directory from filesystem
|
|
304
|
-
try {
|
|
305
|
-
await rm(thread.path, { recursive: true, force: true });
|
|
306
|
-
}
|
|
307
|
-
catch (error) {
|
|
308
|
-
throw new Error(`Failed to remove thread directory: ${error instanceof Error ? error.message : String(error)}`);
|
|
309
|
-
}
|
|
310
|
-
// Remove thread from metadata
|
|
311
|
-
threads.splice(threadIndex, 1);
|
|
312
|
-
await this.metadataManager.saveThreads(threads);
|
|
313
|
-
// Update parent project's thread list
|
|
314
|
-
const projects = await this.metadataManager.loadProjects();
|
|
315
|
-
const project = projects.find((p) => p.id === thread.projectId);
|
|
316
|
-
if (project) {
|
|
317
|
-
project.threads = project.threads.filter((id) => id !== threadId);
|
|
318
|
-
await this.metadataManager.saveProjects(projects);
|
|
319
|
-
}
|
|
320
|
-
// Mark thread as deleted in database
|
|
321
|
-
try {
|
|
322
|
-
const db = await getDatabase();
|
|
323
|
-
await deleteThreadFromDb(db, threadId);
|
|
324
|
-
}
|
|
325
|
-
catch (error) {
|
|
326
|
-
// Log error but don't fail the operation since the thread is already deleted from filesystem and metadata
|
|
327
|
-
console.error(`Failed to mark thread as deleted in database: ${error instanceof Error ? error.message : String(error)}`);
|
|
328
|
-
}
|
|
329
|
-
}
|
|
330
|
-
/**
|
|
331
|
-
* Updates a thread's metadata with partial data
|
|
332
|
-
*
|
|
333
|
-
* This method loads all threads, finds the target, merges the updates,
|
|
334
|
-
* and persists the result.
|
|
335
|
-
*
|
|
336
|
-
* @param threadId - The thread ID to update
|
|
337
|
-
* @param updates - Partial thread data to merge
|
|
338
|
-
* @throws Error if thread not found or model format is invalid
|
|
339
|
-
*/
|
|
340
|
-
async updateThread(threadId, updates) {
|
|
341
|
-
const threads = await this.metadataManager.loadThreads();
|
|
342
|
-
const threadIndex = threads.findIndex((t) => t.id === threadId);
|
|
343
|
-
if (threadIndex === -1) {
|
|
344
|
-
throw new Error(`Thread not found: ${threadId}`);
|
|
345
|
-
}
|
|
346
|
-
// Validate model format if present
|
|
347
|
-
if (updates.model && !updates.modelProvider) {
|
|
348
|
-
throw new Error(`Invalid model: "${updates.model} provider:${updates.modelProvider}". Model must be in format "{provider}/{model}" (e.g., "openrouter/anthropic/claude-3-5-sonnet-20241022")`);
|
|
349
|
-
}
|
|
350
|
-
threads[threadIndex] = { ...threads[threadIndex], ...updates };
|
|
351
|
-
await this.metadataManager.saveThreads(threads);
|
|
352
|
-
}
|
|
353
|
-
/**
|
|
354
|
-
* Selects a thread as the active thread
|
|
355
|
-
*
|
|
356
|
-
* @param threadId - The thread ID to select
|
|
357
|
-
*/
|
|
358
|
-
async selectThread(threadId) {
|
|
359
|
-
await this.metadataManager.setSelectedThread(threadId);
|
|
360
|
-
}
|
|
361
|
-
/**
|
|
362
|
-
* Gets the currently selected thread ID
|
|
363
|
-
*
|
|
364
|
-
* @returns The selected thread ID or null
|
|
365
|
-
*/
|
|
366
|
-
async getSelectedThreadId() {
|
|
367
|
-
return await this.metadataManager.getSelectedThread();
|
|
368
|
-
}
|
|
369
|
-
/**
|
|
370
|
-
* Runs a setup script in the given path and yields progress events
|
|
371
|
-
* @param threadPath - Path to run the command in
|
|
372
|
-
* @param commandLine - The command to execute
|
|
373
|
-
* @yields ThreadEvent progress events
|
|
374
|
-
*/
|
|
375
|
-
async *runSetupScript(threadPath, commandLine) {
|
|
376
|
-
const child = spawnProcess(commandLine, [], {
|
|
377
|
-
shell: true,
|
|
378
|
-
cwd: threadPath,
|
|
379
|
-
});
|
|
380
|
-
const decoder = new TextDecoder();
|
|
381
|
-
let resolveNext = () => { };
|
|
382
|
-
const outputQueue = [];
|
|
383
|
-
const errorQueue = [];
|
|
384
|
-
child.stdout?.on("data", (data) => {
|
|
385
|
-
outputQueue.push(decoder.decode(data));
|
|
386
|
-
resolveNext();
|
|
387
|
-
});
|
|
388
|
-
child.stderr?.on("data", (data) => {
|
|
389
|
-
errorQueue.push(decoder.decode(data));
|
|
390
|
-
resolveNext();
|
|
391
|
-
});
|
|
392
|
-
let isDone = false;
|
|
393
|
-
child.on("close", (code) => {
|
|
394
|
-
if (code !== 0) {
|
|
395
|
-
errorQueue.push(`Process exited with code ${code}`);
|
|
396
|
-
}
|
|
397
|
-
isDone = true;
|
|
398
|
-
resolveNext();
|
|
399
|
-
});
|
|
400
|
-
child.on("error", (err) => {
|
|
401
|
-
errorQueue.push(err.message);
|
|
402
|
-
isDone = true;
|
|
403
|
-
resolveNext();
|
|
404
|
-
});
|
|
405
|
-
const waitForData = () => new Promise((resolve) => {
|
|
406
|
-
resolveNext = resolve;
|
|
407
|
-
});
|
|
408
|
-
while (!isDone || outputQueue.length > 0 || errorQueue.length > 0) {
|
|
409
|
-
if (outputQueue.length > 0) {
|
|
410
|
-
const text = outputQueue.shift();
|
|
411
|
-
for (const line of text.split("\n").filter((l) => l.trim())) {
|
|
412
|
-
yield { type: "progress", message: line };
|
|
413
|
-
}
|
|
414
|
-
}
|
|
415
|
-
else if (errorQueue.length > 0) {
|
|
416
|
-
const text = errorQueue.shift();
|
|
417
|
-
for (const line of text.split("\n").filter((l) => l.trim())) {
|
|
418
|
-
yield { type: "progress", message: line };
|
|
419
|
-
}
|
|
420
|
-
}
|
|
421
|
-
else {
|
|
422
|
-
await waitForData();
|
|
423
|
-
}
|
|
424
|
-
}
|
|
425
|
-
}
|
|
426
|
-
/**
|
|
427
|
-
* Generates a unique thread path
|
|
428
|
-
*
|
|
429
|
-
* Path format: {dataDir}/{threadId}
|
|
430
|
-
*
|
|
431
|
-
* This ensures thread paths are unique across all projects and threads.
|
|
432
|
-
*
|
|
433
|
-
* @param projectPath - The parent project path
|
|
434
|
-
* @param threadId - The thread ID
|
|
435
|
-
* @returns The absolute path to the thread folder
|
|
436
|
-
*
|
|
437
|
-
* Requirements:
|
|
438
|
-
* - 7.4 - THE CLI SHALL ensure each Thread clone is stored in a unique directory path
|
|
439
|
-
*/
|
|
440
|
-
generateThreadPath(_projectId, threadId) {
|
|
441
|
-
return join(this.rootFolder, threadId);
|
|
442
|
-
}
|
|
443
|
-
/**
|
|
444
|
-
* Generates a thread title if not provided
|
|
445
|
-
*
|
|
446
|
-
* Format: {word1}-{word2} where words are random from a curated list
|
|
447
|
-
*
|
|
448
|
-
* @param existingTitles - Set of titles already in use for this project
|
|
449
|
-
* @returns The generated thread title (e.g. bouncy-panda, sparkly-taco)
|
|
450
|
-
*/
|
|
451
|
-
generateThreadTitle(existingTitles) {
|
|
452
|
-
// Generate a random name, ensuring it doesn't already exist
|
|
453
|
-
let threadTitle = generateRandomThreadName();
|
|
454
|
-
let attempts = 0;
|
|
455
|
-
const maxAttempts = 100;
|
|
456
|
-
while (existingTitles.has(threadTitle) && attempts < maxAttempts) {
|
|
457
|
-
threadTitle = generateRandomThreadName();
|
|
458
|
-
attempts++;
|
|
459
|
-
}
|
|
460
|
-
return threadTitle;
|
|
461
|
-
}
|
|
462
|
-
/**
|
|
463
|
-
* Lists all files in a thread's directory (tracked and untracked, but not ignored)
|
|
464
|
-
* @param threadId - The thread ID
|
|
465
|
-
* @returns Array of file paths relative to the thread root
|
|
466
|
-
*/
|
|
467
|
-
async listFiles(threadId) {
|
|
468
|
-
const thread = await this.getThread(threadId);
|
|
469
|
-
if (!thread) {
|
|
470
|
-
throw new Error(`Thread not found: ${threadId}`);
|
|
471
|
-
}
|
|
472
|
-
return new Promise((resolve, reject) => {
|
|
473
|
-
// --cached: tracked files
|
|
474
|
-
// --others: untracked files
|
|
475
|
-
// --exclude-standard: respect .gitignore
|
|
476
|
-
const gitProcess = spawnProcess("git", ["ls-files", "--cached", "--others", "--exclude-standard"], {
|
|
477
|
-
cwd: thread.path,
|
|
478
|
-
});
|
|
479
|
-
let output = "";
|
|
480
|
-
let errorOutput = "";
|
|
481
|
-
gitProcess.stdout?.on("data", (data) => {
|
|
482
|
-
output += data.toString();
|
|
483
|
-
});
|
|
484
|
-
gitProcess.stderr?.on("data", (data) => {
|
|
485
|
-
errorOutput += data.toString();
|
|
486
|
-
});
|
|
487
|
-
gitProcess.on("close", (code) => {
|
|
488
|
-
if (code === 0) {
|
|
489
|
-
const files = output
|
|
490
|
-
.split("\n")
|
|
491
|
-
.map((line) => line.trim())
|
|
492
|
-
.filter((line) => line.length > 0);
|
|
493
|
-
resolve(files);
|
|
494
|
-
}
|
|
495
|
-
else {
|
|
496
|
-
reject(new Error(`git ls-files failed with code ${code}: ${errorOutput}`));
|
|
497
|
-
}
|
|
498
|
-
});
|
|
499
|
-
gitProcess.on("error", (err) => {
|
|
500
|
-
reject(new Error(`Failed to start git process: ${err.message}`));
|
|
501
|
-
});
|
|
502
|
-
});
|
|
503
|
-
}
|
|
504
|
-
}
|
|
505
|
-
//# sourceMappingURL=threads.manager.js.map
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Thread routes for the REST API
|
|
3
|
-
*
|
|
4
|
-
* Handles all thread-related operations:
|
|
5
|
-
* - POST /api/threads - Create a new thread
|
|
6
|
-
* - GET /api/threads?projectId=xxx - List threads for a project
|
|
7
|
-
* - DELETE /api/threads/:id - Delete a thread
|
|
8
|
-
*/
|
|
9
|
-
import { Hono } from "hono";
|
|
10
|
-
import type { ThreadManager } from "./threads.manager.js";
|
|
11
|
-
import type { ConversationManager } from "../conversations/conversations.manager.js";
|
|
12
|
-
import type { GitManager } from "../git/git.manager.js";
|
|
13
|
-
/**
|
|
14
|
-
* Creates thread routes
|
|
15
|
-
* @param threadManager - The ThreadManager instance
|
|
16
|
-
* @param gitManager - The GitManager instance
|
|
17
|
-
* @returns Hono router with thread routes
|
|
18
|
-
*/
|
|
19
|
-
export declare function createThreadRoutes(threadManager: ThreadManager, gitManager: GitManager, conversationManager: ConversationManager): Hono;
|
|
20
|
-
//# sourceMappingURL=threads.routes.d.ts.map
|