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,287 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* AI Files routes for threads REST API
|
|
3
|
-
*
|
|
4
|
-
* Handles listing and editing AI-related files in a thread's path:
|
|
5
|
-
* - GET /api/threads/:id/ai-files - List AI file tree (skills, rules, commands, markdown files)
|
|
6
|
-
* - GET /api/threads/:id/ai-file?path=... - Read file content
|
|
7
|
-
* - PUT /api/threads/:id/ai-file - Write file content
|
|
8
|
-
* - DELETE /api/threads/:id/ai-file?path=... - Delete file or folder
|
|
9
|
-
* - POST /api/threads/:id/ai-files/skill - Create a new skill
|
|
10
|
-
*/
|
|
11
|
-
import { readFile, writeFile, mkdir, access, rm } from "fs/promises";
|
|
12
|
-
import { join } from "path";
|
|
13
|
-
import { existsSync } from "fs";
|
|
14
|
-
import { errorResponse } from "../../core/route-helpers.js";
|
|
15
|
-
import { ErrorCodes } from "../../core/error-responses.js";
|
|
16
|
-
import { buildAIFileTree, validateFilePath } from "../projects/projects-ai-files.route.js";
|
|
17
|
-
/**
|
|
18
|
-
* GET /api/threads/:id/ai-files
|
|
19
|
-
*/
|
|
20
|
-
export async function handleGetThreadAIFiles(c, threadManager) {
|
|
21
|
-
try {
|
|
22
|
-
const threadId = c.req.param("id");
|
|
23
|
-
const thread = await threadManager.getThread(threadId);
|
|
24
|
-
if (!thread) {
|
|
25
|
-
return errorResponse(c, ErrorCodes.THREAD_NOT_FOUND, `Thread not found: ${threadId}`, 404);
|
|
26
|
-
}
|
|
27
|
-
const nodes = await buildAIFileTree(thread.path);
|
|
28
|
-
return c.json({ nodes });
|
|
29
|
-
}
|
|
30
|
-
catch (error) {
|
|
31
|
-
return errorResponse(c, ErrorCodes.INTERNAL_ERROR, "Failed to list AI files", 500, error instanceof Error ? error.message : String(error));
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
/**
|
|
35
|
-
* GET /api/threads/:id/ai-file?path=...
|
|
36
|
-
*/
|
|
37
|
-
export async function handleGetThreadAIFile(c, threadManager) {
|
|
38
|
-
try {
|
|
39
|
-
const threadId = c.req.param("id");
|
|
40
|
-
const filePath = c.req.query("path");
|
|
41
|
-
if (!filePath) {
|
|
42
|
-
return c.json({ error: { code: "BAD_REQUEST", message: "path query parameter is required" } }, 400);
|
|
43
|
-
}
|
|
44
|
-
const thread = await threadManager.getThread(threadId);
|
|
45
|
-
if (!thread) {
|
|
46
|
-
return errorResponse(c, ErrorCodes.THREAD_NOT_FOUND, `Thread not found: ${threadId}`, 404);
|
|
47
|
-
}
|
|
48
|
-
const absPath = validateFilePath(thread.path, filePath);
|
|
49
|
-
if (!absPath) {
|
|
50
|
-
return c.json({ error: { code: "BAD_REQUEST", message: "Invalid file path" } }, 400);
|
|
51
|
-
}
|
|
52
|
-
// Special handling for AGENTS.md - return default content if it doesn't exist
|
|
53
|
-
if (filePath === "AGENTS.md") {
|
|
54
|
-
try {
|
|
55
|
-
await access(absPath);
|
|
56
|
-
}
|
|
57
|
-
catch {
|
|
58
|
-
const defaultContent = `# AGENTS.md
|
|
59
|
-
|
|
60
|
-
This file contains configuration and instructions for AI agents working on this repository.
|
|
61
|
-
|
|
62
|
-
## Overview
|
|
63
|
-
Add information about your project that would be helpful for AI agents to understand:
|
|
64
|
-
|
|
65
|
-
- Project purpose and goals
|
|
66
|
-
- Architecture and technology stack
|
|
67
|
-
- Development workflows and conventions
|
|
68
|
-
- Testing strategies
|
|
69
|
-
- Deployment processes
|
|
70
|
-
|
|
71
|
-
## Guidelines
|
|
72
|
-
Provide specific guidelines for AI agents:
|
|
73
|
-
|
|
74
|
-
- Code style preferences
|
|
75
|
-
- File organization patterns
|
|
76
|
-
- Review processes
|
|
77
|
-
- Communication protocols
|
|
78
|
-
|
|
79
|
-
## Resources
|
|
80
|
-
Links to important documentation, tools, or references.
|
|
81
|
-
|
|
82
|
-
---
|
|
83
|
-
|
|
84
|
-
*This file was automatically created. Edit it to provide context for AI agents.*
|
|
85
|
-
`;
|
|
86
|
-
return c.json({ content: defaultContent, path: filePath });
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
try {
|
|
90
|
-
await access(absPath);
|
|
91
|
-
}
|
|
92
|
-
catch {
|
|
93
|
-
return c.json({ error: { code: "NOT_FOUND", message: `File not found: ${filePath}` } }, 404);
|
|
94
|
-
}
|
|
95
|
-
const content = await readFile(absPath, "utf-8");
|
|
96
|
-
return c.json({ content, path: filePath });
|
|
97
|
-
}
|
|
98
|
-
catch (error) {
|
|
99
|
-
return errorResponse(c, ErrorCodes.INTERNAL_ERROR, "Failed to read file", 500, error instanceof Error ? error.message : String(error));
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
/**
|
|
103
|
-
* PUT /api/threads/:id/ai-file
|
|
104
|
-
* Body: { path: string, content: string }
|
|
105
|
-
*/
|
|
106
|
-
export async function handleSaveThreadAIFile(c, threadManager) {
|
|
107
|
-
try {
|
|
108
|
-
const threadId = c.req.param("id");
|
|
109
|
-
let body;
|
|
110
|
-
try {
|
|
111
|
-
body = await c.req.json();
|
|
112
|
-
}
|
|
113
|
-
catch {
|
|
114
|
-
return c.json({ error: { code: "BAD_REQUEST", message: "Invalid JSON body" } }, 400);
|
|
115
|
-
}
|
|
116
|
-
const { path: filePath, content } = body;
|
|
117
|
-
if (!filePath || content === undefined) {
|
|
118
|
-
return c.json({ error: { code: "BAD_REQUEST", message: "path and content are required" } }, 400);
|
|
119
|
-
}
|
|
120
|
-
const thread = await threadManager.getThread(threadId);
|
|
121
|
-
if (!thread) {
|
|
122
|
-
return errorResponse(c, ErrorCodes.THREAD_NOT_FOUND, `Thread not found: ${threadId}`, 404);
|
|
123
|
-
}
|
|
124
|
-
const absPath = validateFilePath(thread.path, filePath);
|
|
125
|
-
if (!absPath) {
|
|
126
|
-
return c.json({ error: { code: "BAD_REQUEST", message: "Invalid file path" } }, 400);
|
|
127
|
-
}
|
|
128
|
-
const parentDir = join(absPath, "..");
|
|
129
|
-
await mkdir(parentDir, { recursive: true });
|
|
130
|
-
await writeFile(absPath, content, "utf-8");
|
|
131
|
-
return c.json({ success: true, path: filePath });
|
|
132
|
-
}
|
|
133
|
-
catch (error) {
|
|
134
|
-
return errorResponse(c, ErrorCodes.INTERNAL_ERROR, "Failed to save file", 500, error instanceof Error ? error.message : String(error));
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
/**
|
|
138
|
-
* DELETE /api/threads/:id/ai-file?path=...
|
|
139
|
-
*/
|
|
140
|
-
export async function handleDeleteThreadAIFile(c, threadManager) {
|
|
141
|
-
try {
|
|
142
|
-
const threadId = c.req.param("id");
|
|
143
|
-
const filePath = c.req.query("path");
|
|
144
|
-
if (!filePath) {
|
|
145
|
-
return c.json({ error: { code: "BAD_REQUEST", message: "path query parameter is required" } }, 400);
|
|
146
|
-
}
|
|
147
|
-
const thread = await threadManager.getThread(threadId);
|
|
148
|
-
if (!thread) {
|
|
149
|
-
return errorResponse(c, ErrorCodes.THREAD_NOT_FOUND, `Thread not found: ${threadId}`, 404);
|
|
150
|
-
}
|
|
151
|
-
const absPath = validateFilePath(thread.path, filePath);
|
|
152
|
-
if (!absPath) {
|
|
153
|
-
return c.json({ error: { code: "BAD_REQUEST", message: "Invalid file path" } }, 400);
|
|
154
|
-
}
|
|
155
|
-
try {
|
|
156
|
-
await access(absPath);
|
|
157
|
-
}
|
|
158
|
-
catch {
|
|
159
|
-
return c.json({ error: { code: "NOT_FOUND", message: `File or folder not found: ${filePath}` } }, 404);
|
|
160
|
-
}
|
|
161
|
-
await rm(absPath, { recursive: true, force: true });
|
|
162
|
-
return c.json({ success: true, path: filePath });
|
|
163
|
-
}
|
|
164
|
-
catch (error) {
|
|
165
|
-
return errorResponse(c, ErrorCodes.INTERNAL_ERROR, "Failed to delete file", 500, error instanceof Error ? error.message : String(error));
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
|
-
/**
|
|
169
|
-
* POST /api/threads/:id/ai-files/agent
|
|
170
|
-
* Body: { name: string, description: string, tools?: string }
|
|
171
|
-
*/
|
|
172
|
-
export async function handleCreateThreadAgent(c, threadManager) {
|
|
173
|
-
try {
|
|
174
|
-
const threadId = c.req.param("id");
|
|
175
|
-
let body;
|
|
176
|
-
try {
|
|
177
|
-
body = await c.req.json();
|
|
178
|
-
}
|
|
179
|
-
catch {
|
|
180
|
-
return c.json({ error: { code: "BAD_REQUEST", message: "Invalid JSON body" } }, 400);
|
|
181
|
-
}
|
|
182
|
-
const { name, description, tools } = body;
|
|
183
|
-
if (!name || !description) {
|
|
184
|
-
return c.json({ error: { code: "BAD_REQUEST", message: "name and description are required" } }, 400);
|
|
185
|
-
}
|
|
186
|
-
if (!/^[a-z0-9-]+$/.test(name) ||
|
|
187
|
-
name.startsWith("-") ||
|
|
188
|
-
name.endsWith("-") ||
|
|
189
|
-
name.includes("--")) {
|
|
190
|
-
return c.json({
|
|
191
|
-
error: {
|
|
192
|
-
code: "BAD_REQUEST",
|
|
193
|
-
message: "Agent name must be lowercase alphanumeric with hyphens (no leading/trailing/consecutive hyphens)",
|
|
194
|
-
},
|
|
195
|
-
}, 400);
|
|
196
|
-
}
|
|
197
|
-
const thread = await threadManager.getThread(threadId);
|
|
198
|
-
if (!thread) {
|
|
199
|
-
return errorResponse(c, ErrorCodes.THREAD_NOT_FOUND, `Thread not found: ${threadId}`, 404);
|
|
200
|
-
}
|
|
201
|
-
const agentRelPath = join(".agents", "agents", name);
|
|
202
|
-
const agentAbsPath = join(thread.path, agentRelPath);
|
|
203
|
-
const agentFileRelPath = join(agentRelPath, "AGENT.md");
|
|
204
|
-
const agentFileAbsPath = join(agentAbsPath, "AGENT.md");
|
|
205
|
-
if (existsSync(agentAbsPath)) {
|
|
206
|
-
return c.json({ error: { code: "CONFLICT", message: `Agent '${name}' already exists` } }, 409);
|
|
207
|
-
}
|
|
208
|
-
await mkdir(agentAbsPath, { recursive: true });
|
|
209
|
-
const toolsLine = tools ? `\ntools: ${tools}` : "";
|
|
210
|
-
const agentContent = `---
|
|
211
|
-
name: ${name}
|
|
212
|
-
description: ${description}${toolsLine}
|
|
213
|
-
---
|
|
214
|
-
|
|
215
|
-
Place your agent system prompt here as markdown. This will be used as the system prompt when this agent is invoked as a subagent.
|
|
216
|
-
`;
|
|
217
|
-
await writeFile(agentFileAbsPath, agentContent, "utf-8");
|
|
218
|
-
return c.json({
|
|
219
|
-
success: true,
|
|
220
|
-
path: agentFileRelPath,
|
|
221
|
-
content: agentContent,
|
|
222
|
-
});
|
|
223
|
-
}
|
|
224
|
-
catch (error) {
|
|
225
|
-
return errorResponse(c, ErrorCodes.INTERNAL_ERROR, "Failed to create agent", 500, error instanceof Error ? error.message : String(error));
|
|
226
|
-
}
|
|
227
|
-
}
|
|
228
|
-
/**
|
|
229
|
-
* POST /api/threads/:id/ai-files/skill
|
|
230
|
-
* Body: { name: string, description: string }
|
|
231
|
-
*/
|
|
232
|
-
export async function handleCreateThreadSkill(c, threadManager) {
|
|
233
|
-
try {
|
|
234
|
-
const threadId = c.req.param("id");
|
|
235
|
-
let body;
|
|
236
|
-
try {
|
|
237
|
-
body = await c.req.json();
|
|
238
|
-
}
|
|
239
|
-
catch {
|
|
240
|
-
return c.json({ error: { code: "BAD_REQUEST", message: "Invalid JSON body" } }, 400);
|
|
241
|
-
}
|
|
242
|
-
const { name, description } = body;
|
|
243
|
-
if (!name || !description) {
|
|
244
|
-
return c.json({ error: { code: "BAD_REQUEST", message: "name and description are required" } }, 400);
|
|
245
|
-
}
|
|
246
|
-
if (!/^[a-z0-9-]+$/.test(name) ||
|
|
247
|
-
name.startsWith("-") ||
|
|
248
|
-
name.endsWith("-") ||
|
|
249
|
-
name.includes("--")) {
|
|
250
|
-
return c.json({
|
|
251
|
-
error: {
|
|
252
|
-
code: "BAD_REQUEST",
|
|
253
|
-
message: "Skill name must be lowercase alphanumeric with hyphens (no leading/trailing/consecutive hyphens)",
|
|
254
|
-
},
|
|
255
|
-
}, 400);
|
|
256
|
-
}
|
|
257
|
-
const thread = await threadManager.getThread(threadId);
|
|
258
|
-
if (!thread) {
|
|
259
|
-
return errorResponse(c, ErrorCodes.THREAD_NOT_FOUND, `Thread not found: ${threadId}`, 404);
|
|
260
|
-
}
|
|
261
|
-
const skillRelPath = join(".agents", "skills", name);
|
|
262
|
-
const skillAbsPath = join(thread.path, skillRelPath);
|
|
263
|
-
const skillFileRelPath = join(skillRelPath, "SKILL.md");
|
|
264
|
-
const skillFileAbsPath = join(skillAbsPath, "SKILL.md");
|
|
265
|
-
if (existsSync(skillAbsPath)) {
|
|
266
|
-
return c.json({ error: { code: "CONFLICT", message: `Skill '${name}' already exists` } }, 409);
|
|
267
|
-
}
|
|
268
|
-
await mkdir(skillAbsPath, { recursive: true });
|
|
269
|
-
const skillContent = `---
|
|
270
|
-
name: ${name}
|
|
271
|
-
description: ${description}
|
|
272
|
-
---
|
|
273
|
-
|
|
274
|
-
Place your skill instructions here as markdown. This will be used when Tarsk is prompted with a request related to the description of this skill.
|
|
275
|
-
`;
|
|
276
|
-
await writeFile(skillFileAbsPath, skillContent, "utf-8");
|
|
277
|
-
return c.json({
|
|
278
|
-
success: true,
|
|
279
|
-
path: skillFileRelPath,
|
|
280
|
-
content: skillContent,
|
|
281
|
-
});
|
|
282
|
-
}
|
|
283
|
-
catch (error) {
|
|
284
|
-
return errorResponse(c, ErrorCodes.INTERNAL_ERROR, "Failed to create skill", 500, error instanceof Error ? error.message : String(error));
|
|
285
|
-
}
|
|
286
|
-
}
|
|
287
|
-
//# sourceMappingURL=threads-ai-files.route.js.map
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* GET /api/threads/:id/conversation-folder-path
|
|
3
|
-
* Return the absolute path to the folder containing the conversation history JSON for this thread.
|
|
4
|
-
*/
|
|
5
|
-
import { Context } from "hono";
|
|
6
|
-
export declare function handleGetConversationFolderPath(c: Context): Promise<(Response & import("hono").TypedResponse<{
|
|
7
|
-
error: {
|
|
8
|
-
code: string;
|
|
9
|
-
message: string;
|
|
10
|
-
details?: import("hono/utils/types").JSONValue | undefined;
|
|
11
|
-
timestamp: string;
|
|
12
|
-
};
|
|
13
|
-
}, any, "json">) | (Response & import("hono").TypedResponse<import("hono/utils/types").JSONValue, any, "json">)>;
|
|
14
|
-
//# sourceMappingURL=threads-conversation-folder-path.route.d.ts.map
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* GET /api/threads/:id/conversation-folder-path
|
|
3
|
-
* Return the absolute path to the folder containing the conversation history JSON for this thread.
|
|
4
|
-
*/
|
|
5
|
-
import { join } from "path";
|
|
6
|
-
import { getDataDir } from "../../core/paths.js";
|
|
7
|
-
import { errorResponse, successResponse } from "../../core/route-helpers.js";
|
|
8
|
-
import { ErrorCodes } from "../../core/error-responses.js";
|
|
9
|
-
export async function handleGetConversationFolderPath(c) {
|
|
10
|
-
try {
|
|
11
|
-
const threadId = c.req.param("id");
|
|
12
|
-
if (!threadId) {
|
|
13
|
-
return errorResponse(c, ErrorCodes.INVALID_REQUEST, "Thread ID is required", 400);
|
|
14
|
-
}
|
|
15
|
-
const path = join(getDataDir(), threadId);
|
|
16
|
-
return successResponse(c, { path });
|
|
17
|
-
}
|
|
18
|
-
catch (error) {
|
|
19
|
-
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
20
|
-
return errorResponse(c, ErrorCodes.PATH_ERROR, "Failed to get conversation folder path", 500, errorMessage);
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
//# sourceMappingURL=threads-conversation-folder-path.route.js.map
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* POST /api/threads
|
|
3
|
-
* Create a new thread for a project
|
|
4
|
-
*
|
|
5
|
-
* Request body:
|
|
6
|
-
* {
|
|
7
|
-
* "projectId": "uuid",
|
|
8
|
-
* "title": "Optional thread title"
|
|
9
|
-
* }
|
|
10
|
-
*
|
|
11
|
-
* Response: Newline-delimited JSON stream of ThreadEvent objects
|
|
12
|
-
*
|
|
13
|
-
* Requirements:
|
|
14
|
-
* - 6.3 - THE CLI SHALL expose REST API endpoints for Thread operations
|
|
15
|
-
* - 8.3 - WHEN creating a Thread, THE App SHALL send a POST request with the Project identifier to the CLI
|
|
16
|
-
* - 8.4 - THE CLI SHALL support streaming responses to the client
|
|
17
|
-
*/
|
|
18
|
-
import { Context } from "hono";
|
|
19
|
-
import type { ThreadManager } from "../threads/threads.manager.js";
|
|
20
|
-
import type { GitManager } from "../git/git.manager.js";
|
|
21
|
-
export declare function handleCreateThread(c: Context, threadManager: ThreadManager, gitManager: GitManager): Promise<Response>;
|
|
22
|
-
//# sourceMappingURL=threads-create.route.d.ts.map
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* POST /api/threads
|
|
3
|
-
* Create a new thread for a project
|
|
4
|
-
*
|
|
5
|
-
* Request body:
|
|
6
|
-
* {
|
|
7
|
-
* "projectId": "uuid",
|
|
8
|
-
* "title": "Optional thread title"
|
|
9
|
-
* }
|
|
10
|
-
*
|
|
11
|
-
* Response: Newline-delimited JSON stream of ThreadEvent objects
|
|
12
|
-
*
|
|
13
|
-
* Requirements:
|
|
14
|
-
* - 6.3 - THE CLI SHALL expose REST API endpoints for Thread operations
|
|
15
|
-
* - 8.3 - WHEN creating a Thread, THE App SHALL send a POST request with the Project identifier to the CLI
|
|
16
|
-
* - 8.4 - THE CLI SHALL support streaming responses to the client
|
|
17
|
-
*/
|
|
18
|
-
import { streamAsyncGenerator } from "../../core/stream-helper.js";
|
|
19
|
-
import { validateThreadName } from "../../core/validation.js";
|
|
20
|
-
import { errorResponse } from "../../core/route-helpers.js";
|
|
21
|
-
import { ErrorCodes } from "../../core/error-responses.js";
|
|
22
|
-
import { generateRandomThreadName } from "../../core/random-words.js";
|
|
23
|
-
export async function handleCreateThread(c, threadManager, gitManager) {
|
|
24
|
-
try {
|
|
25
|
-
const body = await c.req.json();
|
|
26
|
-
const { projectId, title } = body;
|
|
27
|
-
// Validate projectId is provided
|
|
28
|
-
if (!projectId || typeof projectId !== "string") {
|
|
29
|
-
return errorResponse(c, ErrorCodes.INVALID_REQUEST, "projectId is required and must be a string", 400);
|
|
30
|
-
}
|
|
31
|
-
// Validate title if provided
|
|
32
|
-
if (title !== undefined && typeof title !== "string") {
|
|
33
|
-
return errorResponse(c, ErrorCodes.INVALID_REQUEST, "title must be a string if provided", 400);
|
|
34
|
-
}
|
|
35
|
-
// Validate thread name (empty/whitespace is allowed, will auto-generate)
|
|
36
|
-
if (title && title.trim() !== "") {
|
|
37
|
-
const nameError = validateThreadName(title);
|
|
38
|
-
if (nameError) {
|
|
39
|
-
return errorResponse(c, ErrorCodes.INVALID_REQUEST, nameError, 400);
|
|
40
|
-
}
|
|
41
|
-
// Check for duplicate branch names — if duplicate, fall back to a random name
|
|
42
|
-
const existingThreads = await threadManager.listThreads(projectId);
|
|
43
|
-
const sanitizedNewName = gitManager.sanitizeBranchName(title);
|
|
44
|
-
const existingSanitized = existingThreads.map((t) => gitManager.sanitizeBranchName(t.title));
|
|
45
|
-
if (existingSanitized.includes(sanitizedNewName)) {
|
|
46
|
-
let fallbackTitle = generateRandomThreadName();
|
|
47
|
-
while (existingSanitized.includes(gitManager.sanitizeBranchName(fallbackTitle))) {
|
|
48
|
-
fallbackTitle = generateRandomThreadName();
|
|
49
|
-
}
|
|
50
|
-
return streamAsyncGenerator(c, threadManager.createThread(projectId, fallbackTitle));
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
// Stream the thread creation events
|
|
54
|
-
return streamAsyncGenerator(c, threadManager.createThread(projectId, title));
|
|
55
|
-
}
|
|
56
|
-
catch (error) {
|
|
57
|
-
return errorResponse(c, ErrorCodes.REQUEST_PARSE_ERROR, "Failed to parse request body", 400, error instanceof Error ? error.message : String(error));
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
//# sourceMappingURL=threads-create.route.js.map
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* DELETE /api/threads/:id
|
|
3
|
-
* Delete a thread
|
|
4
|
-
*
|
|
5
|
-
* Response:
|
|
6
|
-
* {
|
|
7
|
-
* "success": true,
|
|
8
|
-
* "message": "Thread deleted successfully"
|
|
9
|
-
* }
|
|
10
|
-
*
|
|
11
|
-
* Requirements:
|
|
12
|
-
* - 6.3 - THE CLI SHALL expose REST API endpoints for Thread operations
|
|
13
|
-
* - 8.4 - WHEN deleting a Thread, THE App SHALL send a DELETE request with the Thread identifier to the CLI
|
|
14
|
-
*/
|
|
15
|
-
import { Context } from "hono";
|
|
16
|
-
import type { ThreadManager } from "../threads/threads.manager.js";
|
|
17
|
-
export declare function handleDeleteThread(c: Context, threadManager: ThreadManager): Promise<(Response & import("hono").TypedResponse<{
|
|
18
|
-
error: {
|
|
19
|
-
code: string;
|
|
20
|
-
message: string;
|
|
21
|
-
details?: import("hono/utils/types").JSONValue | undefined;
|
|
22
|
-
timestamp: string;
|
|
23
|
-
};
|
|
24
|
-
}, any, "json">) | (Response & import("hono").TypedResponse<import("hono/utils/types").JSONValue, any, "json">)>;
|
|
25
|
-
//# sourceMappingURL=threads-delete.route.d.ts.map
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* DELETE /api/threads/:id
|
|
3
|
-
* Delete a thread
|
|
4
|
-
*
|
|
5
|
-
* Response:
|
|
6
|
-
* {
|
|
7
|
-
* "success": true,
|
|
8
|
-
* "message": "Thread deleted successfully"
|
|
9
|
-
* }
|
|
10
|
-
*
|
|
11
|
-
* Requirements:
|
|
12
|
-
* - 6.3 - THE CLI SHALL expose REST API endpoints for Thread operations
|
|
13
|
-
* - 8.4 - WHEN deleting a Thread, THE App SHALL send a DELETE request with the Thread identifier to the CLI
|
|
14
|
-
*/
|
|
15
|
-
import { errorResponse, successResponse } from "../../core/route-helpers.js";
|
|
16
|
-
import { ErrorCodes } from "../../core/error-responses.js";
|
|
17
|
-
export async function handleDeleteThread(c, threadManager) {
|
|
18
|
-
try {
|
|
19
|
-
const threadId = c.req.param("id");
|
|
20
|
-
if (!threadId) {
|
|
21
|
-
return errorResponse(c, ErrorCodes.INVALID_REQUEST, "Thread ID is required", 400);
|
|
22
|
-
}
|
|
23
|
-
await threadManager.deleteThread(threadId);
|
|
24
|
-
return successResponse(c, { success: true, message: "Thread deleted successfully" });
|
|
25
|
-
}
|
|
26
|
-
catch (error) {
|
|
27
|
-
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
28
|
-
// Check if it's a "not found" error
|
|
29
|
-
if (errorMessage.includes("not found")) {
|
|
30
|
-
return errorResponse(c, ErrorCodes.THREAD_NOT_FOUND, errorMessage, 404);
|
|
31
|
-
}
|
|
32
|
-
return errorResponse(c, ErrorCodes.DELETE_THREAD_ERROR, "Failed to delete thread", 500, errorMessage);
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
//# sourceMappingURL=threads-delete.route.js.map
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* GET /api/threads/:id/files
|
|
3
|
-
* List all files in a thread's directory
|
|
4
|
-
*/
|
|
5
|
-
import { Context } from "hono";
|
|
6
|
-
import type { ThreadManager } from "../threads/threads.manager.js";
|
|
7
|
-
export declare function handleListThreadFiles(c: Context, threadManager: ThreadManager): Promise<(Response & import("hono").TypedResponse<{
|
|
8
|
-
error: {
|
|
9
|
-
code: string;
|
|
10
|
-
message: string;
|
|
11
|
-
details?: import("hono/utils/types").JSONValue | undefined;
|
|
12
|
-
timestamp: string;
|
|
13
|
-
};
|
|
14
|
-
}, any, "json">) | (Response & import("hono").TypedResponse<string[], import("hono/utils/http-status").ContentfulStatusCode, "json">)>;
|
|
15
|
-
//# sourceMappingURL=threads-files.route.d.ts.map
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* GET /api/threads/:id/files
|
|
3
|
-
* List all files in a thread's directory
|
|
4
|
-
*/
|
|
5
|
-
import { errorResponse } from "../../core/route-helpers.js";
|
|
6
|
-
import { ErrorCodes } from "../../core/error-responses.js";
|
|
7
|
-
export async function handleListThreadFiles(c, threadManager) {
|
|
8
|
-
try {
|
|
9
|
-
const threadId = c.req.param("id");
|
|
10
|
-
if (!threadId) {
|
|
11
|
-
return errorResponse(c, ErrorCodes.INVALID_REQUEST, "Thread ID is required", 400);
|
|
12
|
-
}
|
|
13
|
-
const files = await threadManager.listFiles(threadId);
|
|
14
|
-
return c.json(files);
|
|
15
|
-
}
|
|
16
|
-
catch (error) {
|
|
17
|
-
return errorResponse(c, ErrorCodes.LIST_THREAD_FILES_ERROR, "Failed to list thread files", 500, error instanceof Error ? error.message : String(error));
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
//# sourceMappingURL=threads-files.route.js.map
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* POST /api/threads/:id/fix-comments
|
|
3
|
-
* Converts diff review comments into todos in the database.
|
|
4
|
-
*
|
|
5
|
-
* Request body:
|
|
6
|
-
* {
|
|
7
|
-
* "comments": DiffCommentRecord[]
|
|
8
|
-
* }
|
|
9
|
-
*
|
|
10
|
-
* Response:
|
|
11
|
-
* {
|
|
12
|
-
* "prompt": string,
|
|
13
|
-
* "todos": TodoRecord[]
|
|
14
|
-
* }
|
|
15
|
-
*/
|
|
16
|
-
import type { Context } from "hono";
|
|
17
|
-
import type { ThreadManager } from "./threads.manager.js";
|
|
18
|
-
export declare function handleFixComments(c: Context, threadManager: ThreadManager): Promise<(Response & import("hono").TypedResponse<{
|
|
19
|
-
error: {
|
|
20
|
-
code: string;
|
|
21
|
-
message: string;
|
|
22
|
-
details?: import("hono/utils/types").JSONValue | undefined;
|
|
23
|
-
timestamp: string;
|
|
24
|
-
};
|
|
25
|
-
}, any, "json">) | (Response & import("hono").TypedResponse<import("hono/utils/types").JSONValue, any, "json">)>;
|
|
26
|
-
//# sourceMappingURL=threads-fix-comments.route.d.ts.map
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* POST /api/threads/:id/fix-comments
|
|
3
|
-
* Converts diff review comments into todos in the database.
|
|
4
|
-
*
|
|
5
|
-
* Request body:
|
|
6
|
-
* {
|
|
7
|
-
* "comments": DiffCommentRecord[]
|
|
8
|
-
* }
|
|
9
|
-
*
|
|
10
|
-
* Response:
|
|
11
|
-
* {
|
|
12
|
-
* "prompt": string,
|
|
13
|
-
* "todos": TodoRecord[]
|
|
14
|
-
* }
|
|
15
|
-
*/
|
|
16
|
-
import { addTodos, clearTodos } from "../todos/todos.database.js";
|
|
17
|
-
import { errorResponse, successResponse } from "../../core/route-helpers.js";
|
|
18
|
-
import { ErrorCodes } from "../../core/error-responses.js";
|
|
19
|
-
export async function handleFixComments(c, threadManager) {
|
|
20
|
-
try {
|
|
21
|
-
const threadId = c.req.param("id");
|
|
22
|
-
if (!threadId) {
|
|
23
|
-
return errorResponse(c, ErrorCodes.INVALID_REQUEST, "Thread ID is required", 400);
|
|
24
|
-
}
|
|
25
|
-
const thread = await threadManager.getThread(threadId);
|
|
26
|
-
if (!thread) {
|
|
27
|
-
return errorResponse(c, ErrorCodes.THREAD_NOT_FOUND, `Thread not found: ${threadId}`, 404);
|
|
28
|
-
}
|
|
29
|
-
const body = await c.req.json();
|
|
30
|
-
const { comments } = body;
|
|
31
|
-
if (!Array.isArray(comments) || comments.length === 0) {
|
|
32
|
-
return errorResponse(c, ErrorCodes.INVALID_REQUEST, "comments must be a non-empty array", 400);
|
|
33
|
-
}
|
|
34
|
-
// Clear existing todos and insert one per comment
|
|
35
|
-
await clearTodos(threadId);
|
|
36
|
-
const descriptions = comments.map((c, i) => `${i + 1}. ${c.filePath} line ${c.lineNumber}: \`${c.lineContent.trim()}\` — ${c.comment}`);
|
|
37
|
-
const todos = await addTodos(threadId, descriptions);
|
|
38
|
-
const prompt = `${comments.length} code review comment${comments.length === 1 ? " has" : "s have"} been added as todos. First, call the todo list tool to display the tasks. Then work through each todo and implement the required changes.`;
|
|
39
|
-
return successResponse(c, { prompt, todos });
|
|
40
|
-
}
|
|
41
|
-
catch (error) {
|
|
42
|
-
return errorResponse(c, ErrorCodes.REQUEST_PARSE_ERROR, "Failed to process fix-comments request", 500, error instanceof Error ? error.message : String(error));
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
//# sourceMappingURL=threads-fix-comments.route.js.map
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* GET /api/threads/:id
|
|
3
|
-
* Get details of a specific thread
|
|
4
|
-
*
|
|
5
|
-
* Response:
|
|
6
|
-
* {
|
|
7
|
-
* "id": "uuid",
|
|
8
|
-
* "projectId": "uuid",
|
|
9
|
-
* "title": "Thread title",
|
|
10
|
-
* "path": "/path/to/thread",
|
|
11
|
-
* "currentBranch": "branch-name",
|
|
12
|
-
* "createdAt": "2024-01-01T00:00:00Z",
|
|
13
|
-
* "currentConversationId": "uuid",
|
|
14
|
-
* "status": "active"
|
|
15
|
-
* }
|
|
16
|
-
*
|
|
17
|
-
* Requirements:
|
|
18
|
-
* - 6.3 - THE CLI SHALL expose REST API endpoints for Thread operations
|
|
19
|
-
*/
|
|
20
|
-
import { Context } from "hono";
|
|
21
|
-
import type { ThreadManager } from "./threads.manager.js";
|
|
22
|
-
export declare function handleGetThread(c: Context, threadManager: ThreadManager): Promise<(Response & import("hono").TypedResponse<{
|
|
23
|
-
error: {
|
|
24
|
-
code: string;
|
|
25
|
-
message: string;
|
|
26
|
-
details?: import("hono/utils/types").JSONValue | undefined;
|
|
27
|
-
timestamp: string;
|
|
28
|
-
};
|
|
29
|
-
}, any, "json">) | (Response & import("hono").TypedResponse<import("hono/utils/types").JSONValue, any, "json">)>;
|
|
30
|
-
//# sourceMappingURL=threads-get.route.d.ts.map
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* GET /api/threads/:id
|
|
3
|
-
* Get details of a specific thread
|
|
4
|
-
*
|
|
5
|
-
* Response:
|
|
6
|
-
* {
|
|
7
|
-
* "id": "uuid",
|
|
8
|
-
* "projectId": "uuid",
|
|
9
|
-
* "title": "Thread title",
|
|
10
|
-
* "path": "/path/to/thread",
|
|
11
|
-
* "currentBranch": "branch-name",
|
|
12
|
-
* "createdAt": "2024-01-01T00:00:00Z",
|
|
13
|
-
* "currentConversationId": "uuid",
|
|
14
|
-
* "status": "active"
|
|
15
|
-
* }
|
|
16
|
-
*
|
|
17
|
-
* Requirements:
|
|
18
|
-
* - 6.3 - THE CLI SHALL expose REST API endpoints for Thread operations
|
|
19
|
-
*/
|
|
20
|
-
import { errorResponse, successResponse } from "../../core/route-helpers.js";
|
|
21
|
-
import { ErrorCodes } from "../../core/error-responses.js";
|
|
22
|
-
export async function handleGetThread(c, threadManager) {
|
|
23
|
-
try {
|
|
24
|
-
const threadId = c.req.param("id");
|
|
25
|
-
if (!threadId) {
|
|
26
|
-
return errorResponse(c, ErrorCodes.INVALID_REQUEST, "Thread ID is required", 400);
|
|
27
|
-
}
|
|
28
|
-
const thread = await threadManager.getThread(threadId);
|
|
29
|
-
if (!thread) {
|
|
30
|
-
return errorResponse(c, ErrorCodes.THREAD_NOT_FOUND, `Thread not found: ${threadId}`, 404);
|
|
31
|
-
}
|
|
32
|
-
return successResponse(c, thread);
|
|
33
|
-
}
|
|
34
|
-
catch (error) {
|
|
35
|
-
return errorResponse(c, ErrorCodes.THREAD_NOT_FOUND, "Failed to get thread", 500, error instanceof Error ? error.message : String(error));
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
//# sourceMappingURL=threads-get.route.js.map
|