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,50 +0,0 @@
|
|
|
1
|
-
import { resolveThreadPath, getGitRoot, getCurrentBranch, createPullRequest } from "./git.utils.js";
|
|
2
|
-
export async function gitCreatePrHandler(c, metadataManager) {
|
|
3
|
-
try {
|
|
4
|
-
const threadId = c.req.param("threadId");
|
|
5
|
-
const body = await c.req.json();
|
|
6
|
-
const { title, description } = body;
|
|
7
|
-
console.log(`[git-create-pr] Starting PR creation for thread: ${threadId}`);
|
|
8
|
-
console.log(`[git-create-pr] PR title: "${title}"`);
|
|
9
|
-
console.log(`[git-create-pr] PR description length: ${description?.length ?? 0} chars`);
|
|
10
|
-
const thread = await metadataManager
|
|
11
|
-
.loadThreads()
|
|
12
|
-
.then((threads) => threads.find((t) => t.id === threadId));
|
|
13
|
-
if (!thread) {
|
|
14
|
-
console.log(`[git-create-pr] Thread not found: ${threadId}`);
|
|
15
|
-
return c.json({ error: "Thread not found" }, 404);
|
|
16
|
-
}
|
|
17
|
-
console.log(`[git-create-pr] ✓ Thread found: ${thread.title}`);
|
|
18
|
-
const repoPath = thread.path;
|
|
19
|
-
if (!repoPath) {
|
|
20
|
-
console.log(`[git-create-pr] Thread path not found for threadId: ${threadId}`);
|
|
21
|
-
return c.json({ error: "Thread path not found" }, 404);
|
|
22
|
-
}
|
|
23
|
-
const absolutePath = resolveThreadPath(repoPath);
|
|
24
|
-
console.log(`[git-create-pr] Resolved path: ${absolutePath}`);
|
|
25
|
-
let gitRoot;
|
|
26
|
-
try {
|
|
27
|
-
gitRoot = await getGitRoot(absolutePath);
|
|
28
|
-
console.log(`[git-create-pr] ✓ Git root: ${gitRoot}`);
|
|
29
|
-
}
|
|
30
|
-
catch {
|
|
31
|
-
console.log(`[git-create-pr] ✗ Not a git repository: ${absolutePath}`);
|
|
32
|
-
return c.json({ error: `Path is not a git repository: ${absolutePath}` }, 400);
|
|
33
|
-
}
|
|
34
|
-
// Get current branch
|
|
35
|
-
const currentBranch = await getCurrentBranch(gitRoot);
|
|
36
|
-
console.log(`[git-create-pr] Current branch: ${currentBranch}`);
|
|
37
|
-
// Try to create PR using gh CLI
|
|
38
|
-
console.log(`[git-create-pr] Creating PR with GitHub CLI...`);
|
|
39
|
-
const prUrl = await createPullRequest(gitRoot, title ?? currentBranch, description ?? "");
|
|
40
|
-
console.log(`[git-create-pr] ✓ PR created successfully: ${prUrl}`);
|
|
41
|
-
return c.json({ success: true, prUrl });
|
|
42
|
-
}
|
|
43
|
-
catch (error) {
|
|
44
|
-
const message = error instanceof Error ? error.message : "Failed to create PR";
|
|
45
|
-
console.log(`[git-create-pr] ✗ PR creation failed: ${message}`);
|
|
46
|
-
console.log(`[git-create-pr] Error stack: ${error instanceof Error ? error.stack : "No stack available"}`);
|
|
47
|
-
return c.json({ error: message }, 500);
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
//# sourceMappingURL=git-create-pr.route.js.map
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import type { Context } from "hono";
|
|
2
|
-
import { MetadataManager } from "../metadata/metadata.manager.js";
|
|
3
|
-
export declare function gitCreateRepoHandler(c: Context, metadataManager: MetadataManager): Promise<(Response & import("hono").TypedResponse<{
|
|
4
|
-
error: string;
|
|
5
|
-
}, 404, "json">) | (Response & import("hono").TypedResponse<{
|
|
6
|
-
error: string;
|
|
7
|
-
}, 400, "json">) | (Response & import("hono").TypedResponse<{
|
|
8
|
-
success: true;
|
|
9
|
-
repoUrl: string;
|
|
10
|
-
branchName: string;
|
|
11
|
-
}, import("hono/utils/http-status").ContentfulStatusCode, "json">) | (Response & import("hono").TypedResponse<{
|
|
12
|
-
error: string;
|
|
13
|
-
}, 500, "json">)>;
|
|
14
|
-
//# sourceMappingURL=git-create-repo.route.d.ts.map
|
|
@@ -1,108 +0,0 @@
|
|
|
1
|
-
import { resolveThreadPath, getGitRoot, getRemoteOrigin, createGitHubRepo } from "./git.utils.js";
|
|
2
|
-
import { spawnProcess } from "../../core/utils.js";
|
|
3
|
-
import { generateRandomThreadName } from "../../core/random-words.js";
|
|
4
|
-
function sanitizeBranchName(name) {
|
|
5
|
-
if (!name || typeof name !== "string") {
|
|
6
|
-
return "branch";
|
|
7
|
-
}
|
|
8
|
-
return (name
|
|
9
|
-
.trim()
|
|
10
|
-
.toLowerCase()
|
|
11
|
-
.replace(/\s+/g, "-")
|
|
12
|
-
.replace(/[^a-zA-Z0-9\-_/.]/g, "")
|
|
13
|
-
.replace(/^[/.]+|[/.]+$/g, "")
|
|
14
|
-
.replace(/-+/g, "-") || "branch");
|
|
15
|
-
}
|
|
16
|
-
function checkBranchExists(gitRoot, branchName) {
|
|
17
|
-
return new Promise((resolve) => {
|
|
18
|
-
const proc = spawnProcess("git", ["show-ref", "--verify", "--quiet", `refs/heads/${branchName}`], {
|
|
19
|
-
cwd: gitRoot,
|
|
20
|
-
});
|
|
21
|
-
proc.on("close", (code) => {
|
|
22
|
-
resolve(code === 0);
|
|
23
|
-
});
|
|
24
|
-
proc.on("error", () => {
|
|
25
|
-
resolve(false);
|
|
26
|
-
});
|
|
27
|
-
});
|
|
28
|
-
}
|
|
29
|
-
function createAndCheckoutBranch(gitRoot, branchName) {
|
|
30
|
-
return new Promise((resolve, reject) => {
|
|
31
|
-
const proc = spawnProcess("git", ["checkout", "-b", branchName], {
|
|
32
|
-
cwd: gitRoot,
|
|
33
|
-
});
|
|
34
|
-
let err = "";
|
|
35
|
-
if (proc.stderr) {
|
|
36
|
-
proc.stderr.on("data", (d) => {
|
|
37
|
-
err += d.toString();
|
|
38
|
-
});
|
|
39
|
-
}
|
|
40
|
-
proc.on("close", (code) => {
|
|
41
|
-
if (code === 0) {
|
|
42
|
-
resolve();
|
|
43
|
-
}
|
|
44
|
-
else {
|
|
45
|
-
reject(new Error(err || `Failed to create branch "${branchName}"`));
|
|
46
|
-
}
|
|
47
|
-
});
|
|
48
|
-
proc.on("error", reject);
|
|
49
|
-
});
|
|
50
|
-
}
|
|
51
|
-
export async function gitCreateRepoHandler(c, metadataManager) {
|
|
52
|
-
try {
|
|
53
|
-
const threadId = c.req.param("threadId");
|
|
54
|
-
const body = await c.req.json().catch(() => ({}));
|
|
55
|
-
const { repoName, description, isPrivate } = body;
|
|
56
|
-
const thread = await metadataManager
|
|
57
|
-
.loadThreads()
|
|
58
|
-
.then((threads) => threads.find((t) => t.id === threadId));
|
|
59
|
-
if (!thread) {
|
|
60
|
-
return c.json({ error: "Thread not found" }, 404);
|
|
61
|
-
}
|
|
62
|
-
const repoPath = thread.path;
|
|
63
|
-
if (!repoPath) {
|
|
64
|
-
return c.json({ error: "Thread path not found" }, 404);
|
|
65
|
-
}
|
|
66
|
-
const absolutePath = resolveThreadPath(repoPath);
|
|
67
|
-
let gitRoot;
|
|
68
|
-
try {
|
|
69
|
-
gitRoot = await getGitRoot(absolutePath);
|
|
70
|
-
}
|
|
71
|
-
catch {
|
|
72
|
-
return c.json({ error: `Path is not a git repository: ${absolutePath}` }, 400);
|
|
73
|
-
}
|
|
74
|
-
// Check if origin remote already exists
|
|
75
|
-
const remoteUrl = await getRemoteOrigin(gitRoot);
|
|
76
|
-
if (remoteUrl) {
|
|
77
|
-
return c.json({ error: "Repository already has a remote origin" }, 400);
|
|
78
|
-
}
|
|
79
|
-
// Create GitHub repository using gh CLI
|
|
80
|
-
const repoUrl = await createGitHubRepo(gitRoot, repoName, description, isPrivate);
|
|
81
|
-
// Create a new branch after repo creation
|
|
82
|
-
let branchName = sanitizeBranchName(generateRandomThreadName());
|
|
83
|
-
// Check if branch exists and find a unique name if needed
|
|
84
|
-
let branchExists = await checkBranchExists(gitRoot, branchName);
|
|
85
|
-
let counter = 2;
|
|
86
|
-
const baseBranchName = branchName;
|
|
87
|
-
while (branchExists) {
|
|
88
|
-
branchName = `${baseBranchName}-${counter}`;
|
|
89
|
-
branchExists = await checkBranchExists(gitRoot, branchName);
|
|
90
|
-
counter++;
|
|
91
|
-
}
|
|
92
|
-
// Create and checkout the new branch
|
|
93
|
-
await createAndCheckoutBranch(gitRoot, branchName);
|
|
94
|
-
// Update thread's currentBranch in metadata
|
|
95
|
-
const threads = await metadataManager.loadThreads();
|
|
96
|
-
const threadIndex = threads.findIndex((t) => t.id === threadId);
|
|
97
|
-
if (threadIndex !== -1) {
|
|
98
|
-
threads[threadIndex].currentBranch = branchName;
|
|
99
|
-
await metadataManager.saveThreads(threads);
|
|
100
|
-
}
|
|
101
|
-
return c.json({ success: true, repoUrl, branchName });
|
|
102
|
-
}
|
|
103
|
-
catch (error) {
|
|
104
|
-
const message = error instanceof Error ? error.message : "Failed to create repository";
|
|
105
|
-
return c.json({ error: message }, 500);
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
//# sourceMappingURL=git-create-repo.route.js.map
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import type { Context } from "hono";
|
|
2
|
-
import { MetadataManager } from "../metadata/metadata.manager.js";
|
|
3
|
-
export declare function gitDiffHandler(c: Context, metadataManager: MetadataManager): Promise<(Response & import("hono").TypedResponse<{
|
|
4
|
-
error: string;
|
|
5
|
-
}, 404, "json">) | (Response & import("hono").TypedResponse<{
|
|
6
|
-
error: string;
|
|
7
|
-
}, 400, "json">) | (Response & import("hono").TypedResponse<{
|
|
8
|
-
files: {
|
|
9
|
-
path: string;
|
|
10
|
-
status: "added" | "modified" | "deleted" | "renamed" | "untracked";
|
|
11
|
-
oldPath?: string | undefined;
|
|
12
|
-
oldContent: string;
|
|
13
|
-
newContent: string;
|
|
14
|
-
hunks: {
|
|
15
|
-
oldStart: number;
|
|
16
|
-
oldLines: number;
|
|
17
|
-
newStart: number;
|
|
18
|
-
newLines: number;
|
|
19
|
-
changes: {
|
|
20
|
-
type: "add" | "delete" | "context";
|
|
21
|
-
content: string;
|
|
22
|
-
oldLineNumber?: number | undefined;
|
|
23
|
-
newLineNumber?: number | undefined;
|
|
24
|
-
}[];
|
|
25
|
-
}[];
|
|
26
|
-
}[];
|
|
27
|
-
}, import("hono/utils/http-status").ContentfulStatusCode, "json">) | (Response & import("hono").TypedResponse<{
|
|
28
|
-
error: string;
|
|
29
|
-
}, 500, "json">)>;
|
|
30
|
-
//# sourceMappingURL=git-diff.route.d.ts.map
|
|
@@ -1,189 +0,0 @@
|
|
|
1
|
-
import { spawnProcess } from "../../core/utils.js";
|
|
2
|
-
import { readFileSync } from "fs";
|
|
3
|
-
import { resolve } from "path";
|
|
4
|
-
import { resolveThreadPath, getGitRoot, getGitStatus } from "./git.utils.js";
|
|
5
|
-
export async function gitDiffHandler(c, metadataManager) {
|
|
6
|
-
try {
|
|
7
|
-
const threadId = c.req.param("threadId");
|
|
8
|
-
const thread = await metadataManager
|
|
9
|
-
.loadThreads()
|
|
10
|
-
.then((threads) => threads.find((t) => t.id === threadId));
|
|
11
|
-
if (!thread) {
|
|
12
|
-
return c.json({ error: "Thread not found" }, 404);
|
|
13
|
-
}
|
|
14
|
-
const repoPath = thread.path;
|
|
15
|
-
if (!repoPath) {
|
|
16
|
-
return c.json({ error: "Thread path not found" }, 404);
|
|
17
|
-
}
|
|
18
|
-
const absolutePath = resolveThreadPath(repoPath);
|
|
19
|
-
let gitRoot;
|
|
20
|
-
try {
|
|
21
|
-
gitRoot = await getGitRoot(absolutePath);
|
|
22
|
-
}
|
|
23
|
-
catch {
|
|
24
|
-
return c.json({ error: `Path is not a git repository: ${absolutePath}` }, 400);
|
|
25
|
-
}
|
|
26
|
-
// Get list of changed files with their status
|
|
27
|
-
const statusOutput = await getGitStatus(gitRoot);
|
|
28
|
-
const changedFiles = [];
|
|
29
|
-
const statusLines = statusOutput
|
|
30
|
-
.trim()
|
|
31
|
-
.split("\n")
|
|
32
|
-
.filter((line) => line.length > 0);
|
|
33
|
-
for (const line of statusLines) {
|
|
34
|
-
// Git status --porcelain format: XY PATH
|
|
35
|
-
// Status codes are before the first space
|
|
36
|
-
const trimmedLine = line.trim();
|
|
37
|
-
const spaceIndex = trimmedLine.indexOf(" ");
|
|
38
|
-
if (spaceIndex === -1)
|
|
39
|
-
continue; // No space found
|
|
40
|
-
const statusCode = trimmedLine.substring(0, spaceIndex);
|
|
41
|
-
let filePath = trimmedLine.substring(spaceIndex + 1).trim();
|
|
42
|
-
let oldPath;
|
|
43
|
-
// Handle renamed files
|
|
44
|
-
if (statusCode.startsWith("R") || statusCode.startsWith("C")) {
|
|
45
|
-
const parts = filePath.split(" -> ");
|
|
46
|
-
oldPath = parts[0];
|
|
47
|
-
filePath = parts[1] || parts[0];
|
|
48
|
-
}
|
|
49
|
-
let status = "modified";
|
|
50
|
-
if (statusCode.includes("A") || statusCode.includes("?")) {
|
|
51
|
-
status = "added";
|
|
52
|
-
}
|
|
53
|
-
else if (statusCode.includes("D")) {
|
|
54
|
-
status = "deleted";
|
|
55
|
-
}
|
|
56
|
-
else if (statusCode.includes("R")) {
|
|
57
|
-
status = "renamed";
|
|
58
|
-
}
|
|
59
|
-
changedFiles.push({ path: filePath, status, oldPath });
|
|
60
|
-
}
|
|
61
|
-
// Get diff for each file
|
|
62
|
-
const filesWithDiff = [];
|
|
63
|
-
for (const file of changedFiles) {
|
|
64
|
-
let oldContent = "";
|
|
65
|
-
let newContent = "";
|
|
66
|
-
const hunks = [];
|
|
67
|
-
if (file.status === "deleted") {
|
|
68
|
-
// Get old content for deleted files
|
|
69
|
-
const content = await new Promise((resolve) => {
|
|
70
|
-
const proc = spawnProcess("git", ["show", `HEAD:${file.path}`], { cwd: gitRoot });
|
|
71
|
-
let out = "";
|
|
72
|
-
proc.stdout?.on("data", (d) => {
|
|
73
|
-
out += d.toString();
|
|
74
|
-
});
|
|
75
|
-
proc.on("close", () => resolve(out));
|
|
76
|
-
proc.on("error", () => resolve(""));
|
|
77
|
-
});
|
|
78
|
-
oldContent = content;
|
|
79
|
-
}
|
|
80
|
-
else if (file.status === "added" && file.path.startsWith("(new)")) {
|
|
81
|
-
// Untracked file - get content from filesystem
|
|
82
|
-
try {
|
|
83
|
-
newContent = readFileSync(resolve(gitRoot, file.path.replace("(new) ", "")), "utf-8");
|
|
84
|
-
}
|
|
85
|
-
catch {
|
|
86
|
-
newContent = "";
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
else {
|
|
90
|
-
// Get diff for modified/added files
|
|
91
|
-
const diffOutput = await new Promise((resolve) => {
|
|
92
|
-
const proc = spawnProcess("git", file.status === "added"
|
|
93
|
-
? ["diff", "--cached", "--", file.path]
|
|
94
|
-
: ["diff", "HEAD", "--", file.path], { cwd: gitRoot });
|
|
95
|
-
let out = "";
|
|
96
|
-
proc.stdout?.on("data", (d) => {
|
|
97
|
-
out += d.toString();
|
|
98
|
-
});
|
|
99
|
-
proc.on("close", () => resolve(out));
|
|
100
|
-
proc.on("error", () => resolve(""));
|
|
101
|
-
});
|
|
102
|
-
// Parse the diff output
|
|
103
|
-
const lines = diffOutput.split("\n");
|
|
104
|
-
let currentHunk = null;
|
|
105
|
-
let oldLineNum = 0;
|
|
106
|
-
let newLineNum = 0;
|
|
107
|
-
// Get old content from HEAD
|
|
108
|
-
const oldContentOutput = await new Promise((resolve) => {
|
|
109
|
-
const proc = spawnProcess("git", ["show", `HEAD:${file.path}`], { cwd: gitRoot });
|
|
110
|
-
let out = "";
|
|
111
|
-
proc.stdout?.on("data", (d) => {
|
|
112
|
-
out += d.toString();
|
|
113
|
-
});
|
|
114
|
-
proc.on("close", () => resolve(out));
|
|
115
|
-
proc.on("error", () => resolve(""));
|
|
116
|
-
});
|
|
117
|
-
oldContent = oldContentOutput;
|
|
118
|
-
// Get new content from working directory
|
|
119
|
-
try {
|
|
120
|
-
newContent = readFileSync(resolve(gitRoot, file.path), "utf-8");
|
|
121
|
-
}
|
|
122
|
-
catch {
|
|
123
|
-
newContent = "";
|
|
124
|
-
}
|
|
125
|
-
for (const line of lines) {
|
|
126
|
-
// Parse hunk header
|
|
127
|
-
const hunkMatch = line.match(/^@@ -(\d+)(?:,(\d+))? \+(\d+)(?:,(\d+))? @@/);
|
|
128
|
-
if (hunkMatch) {
|
|
129
|
-
if (currentHunk) {
|
|
130
|
-
hunks.push(currentHunk);
|
|
131
|
-
}
|
|
132
|
-
currentHunk = {
|
|
133
|
-
oldStart: parseInt(hunkMatch[1]),
|
|
134
|
-
oldLines: parseInt(hunkMatch[2] || "1"),
|
|
135
|
-
newStart: parseInt(hunkMatch[3]),
|
|
136
|
-
newLines: parseInt(hunkMatch[4] || "1"),
|
|
137
|
-
changes: [],
|
|
138
|
-
};
|
|
139
|
-
oldLineNum = currentHunk.oldStart;
|
|
140
|
-
newLineNum = currentHunk.newStart;
|
|
141
|
-
continue;
|
|
142
|
-
}
|
|
143
|
-
if (currentHunk) {
|
|
144
|
-
if (line.startsWith("+") && !line.startsWith("+++")) {
|
|
145
|
-
currentHunk.changes.push({
|
|
146
|
-
type: "add",
|
|
147
|
-
content: line.substring(1),
|
|
148
|
-
newLineNumber: newLineNum++,
|
|
149
|
-
});
|
|
150
|
-
}
|
|
151
|
-
else if (line.startsWith("-") && !line.startsWith("---")) {
|
|
152
|
-
currentHunk.changes.push({
|
|
153
|
-
type: "delete",
|
|
154
|
-
content: line.substring(1),
|
|
155
|
-
oldLineNumber: oldLineNum++,
|
|
156
|
-
});
|
|
157
|
-
}
|
|
158
|
-
else if (line.startsWith(" ")) {
|
|
159
|
-
currentHunk.changes.push({
|
|
160
|
-
type: "context",
|
|
161
|
-
content: line.substring(1),
|
|
162
|
-
oldLineNumber: oldLineNum++,
|
|
163
|
-
newLineNumber: newLineNum++,
|
|
164
|
-
});
|
|
165
|
-
}
|
|
166
|
-
else if (line.match(/^\\ No newline/)) {
|
|
167
|
-
// Skip this line
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
}
|
|
171
|
-
if (currentHunk) {
|
|
172
|
-
hunks.push(currentHunk);
|
|
173
|
-
}
|
|
174
|
-
}
|
|
175
|
-
filesWithDiff.push({
|
|
176
|
-
...file,
|
|
177
|
-
oldContent,
|
|
178
|
-
newContent,
|
|
179
|
-
hunks,
|
|
180
|
-
});
|
|
181
|
-
}
|
|
182
|
-
return c.json({ files: filesWithDiff });
|
|
183
|
-
}
|
|
184
|
-
catch (error) {
|
|
185
|
-
const message = error instanceof Error ? error.message : "Failed to get git diff";
|
|
186
|
-
return c.json({ error: message }, 500);
|
|
187
|
-
}
|
|
188
|
-
}
|
|
189
|
-
//# sourceMappingURL=git-diff.route.js.map
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import type { Context } from "hono";
|
|
2
|
-
import { MetadataManager } from "../metadata/metadata.manager.js";
|
|
3
|
-
export declare function gitFetchHandler(c: Context, metadataManager: MetadataManager): Promise<(Response & import("hono").TypedResponse<{
|
|
4
|
-
error: string;
|
|
5
|
-
}, 404, "json">) | (Response & import("hono").TypedResponse<{
|
|
6
|
-
error: string;
|
|
7
|
-
}, 400, "json">) | (Response & import("hono").TypedResponse<{
|
|
8
|
-
success: true;
|
|
9
|
-
}, import("hono/utils/http-status").ContentfulStatusCode, "json">) | (Response & import("hono").TypedResponse<{
|
|
10
|
-
error: string;
|
|
11
|
-
}, 500, "json">)>;
|
|
12
|
-
//# sourceMappingURL=git-fetch.route.d.ts.map
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import { resolveThreadPath, getGitRoot, fetchFromOrigin } from "./git.utils.js";
|
|
2
|
-
export async function gitFetchHandler(c, metadataManager) {
|
|
3
|
-
try {
|
|
4
|
-
const threadId = c.req.param("threadId");
|
|
5
|
-
const thread = await metadataManager
|
|
6
|
-
.loadThreads()
|
|
7
|
-
.then((threads) => threads.find((t) => t.id === threadId));
|
|
8
|
-
if (!thread) {
|
|
9
|
-
return c.json({ error: "Thread not found" }, 404);
|
|
10
|
-
}
|
|
11
|
-
const repoPath = thread.path;
|
|
12
|
-
if (!repoPath) {
|
|
13
|
-
return c.json({ error: "Thread path not found" }, 404);
|
|
14
|
-
}
|
|
15
|
-
const absolutePath = resolveThreadPath(repoPath);
|
|
16
|
-
let gitRoot;
|
|
17
|
-
try {
|
|
18
|
-
gitRoot = await getGitRoot(absolutePath);
|
|
19
|
-
}
|
|
20
|
-
catch {
|
|
21
|
-
return c.json({ error: `Path is not a git repository: ${absolutePath}` }, 400);
|
|
22
|
-
}
|
|
23
|
-
await fetchFromOrigin(gitRoot);
|
|
24
|
-
return c.json({ success: true });
|
|
25
|
-
}
|
|
26
|
-
catch (error) {
|
|
27
|
-
const message = error instanceof Error ? error.message : "Failed to fetch from origin";
|
|
28
|
-
return c.json({ error: message }, 500);
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
//# sourceMappingURL=git-fetch.route.js.map
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import type { Context } from "hono";
|
|
2
|
-
import { MetadataManager } from "../metadata/metadata.manager.js";
|
|
3
|
-
export declare function gitGenerateCommitMessageHandler(c: Context, metadataManager: MetadataManager): Promise<(Response & import("hono").TypedResponse<{
|
|
4
|
-
error: string;
|
|
5
|
-
}, 404, "json">) | (Response & import("hono").TypedResponse<{
|
|
6
|
-
error: string;
|
|
7
|
-
}, 400, "json">) | (Response & import("hono").TypedResponse<{
|
|
8
|
-
message: string;
|
|
9
|
-
}, import("hono/utils/http-status").ContentfulStatusCode, "json">) | (Response & import("hono").TypedResponse<{
|
|
10
|
-
error: string;
|
|
11
|
-
}, 500, "json">)>;
|
|
12
|
-
//# sourceMappingURL=git-generate-commit-message.route.d.ts.map
|
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
import { existsSync } from "fs";
|
|
2
|
-
import { resolveThreadPath, getGitRoot, getGitDiff, getUntrackedFilesDiff } from "./git.utils.js";
|
|
3
|
-
import { generateCommitMessageWithAI } from "./git.utils.js";
|
|
4
|
-
export async function gitGenerateCommitMessageHandler(c, metadataManager) {
|
|
5
|
-
try {
|
|
6
|
-
const threadId = c.req.param("threadId");
|
|
7
|
-
process.stdout.write(`[generate-commit-message] threadId=${threadId}\n`);
|
|
8
|
-
const thread = await metadataManager
|
|
9
|
-
.loadThreads()
|
|
10
|
-
.then((threads) => threads.find((t) => t.id === threadId));
|
|
11
|
-
if (!thread) {
|
|
12
|
-
process.stdout.write("[generate-commit-message] thread not found\n");
|
|
13
|
-
return c.json({ error: "Thread not found" }, 404);
|
|
14
|
-
}
|
|
15
|
-
else {
|
|
16
|
-
console.log(thread);
|
|
17
|
-
}
|
|
18
|
-
// Check path first before provider
|
|
19
|
-
const repoPath = thread.path;
|
|
20
|
-
if (!repoPath) {
|
|
21
|
-
process.stdout.write("[generate-commit-message] thread path missing\n");
|
|
22
|
-
return c.json({ error: "Thread path not found" }, 404);
|
|
23
|
-
}
|
|
24
|
-
// Get provider from thread's modelProvider, with exception handling if missing
|
|
25
|
-
const provider = thread.modelProvider;
|
|
26
|
-
if (!provider) {
|
|
27
|
-
throw new Error("Provider not found in thread metadata and cannot be extracted from model");
|
|
28
|
-
}
|
|
29
|
-
// Get model from thread
|
|
30
|
-
const model = thread.model;
|
|
31
|
-
const absolutePath = resolveThreadPath(repoPath);
|
|
32
|
-
process.stdout.write(`[generate-commit-message] resolved path: ${absolutePath}\n`);
|
|
33
|
-
if (!existsSync(absolutePath)) {
|
|
34
|
-
process.stdout.write(`[generate-commit-message] path does not exist: ${absolutePath}\n`);
|
|
35
|
-
return c.json({
|
|
36
|
-
error: `Thread repo path does not exist: ${absolutePath}. Check that the project folder is present.`,
|
|
37
|
-
}, 400);
|
|
38
|
-
}
|
|
39
|
-
let gitRoot;
|
|
40
|
-
try {
|
|
41
|
-
gitRoot = await getGitRoot(absolutePath);
|
|
42
|
-
process.stdout.write(`[generate-commit-message] git root: ${gitRoot}\n`);
|
|
43
|
-
}
|
|
44
|
-
catch (e) {
|
|
45
|
-
const msg = e instanceof Error ? e.message : String(e);
|
|
46
|
-
process.stdout.write(`[generate-commit-message] not a git repo: ${msg}\n`);
|
|
47
|
-
return c.json({
|
|
48
|
-
error: `Path is not a git repository: ${absolutePath}. ${msg}`,
|
|
49
|
-
}, 400);
|
|
50
|
-
}
|
|
51
|
-
// Get git diff (staged first, then unstaged). If repo has no commits, git diff --cached fails on HEAD; fall back to git diff.
|
|
52
|
-
let diff = await getGitDiff(gitRoot);
|
|
53
|
-
// If diff is empty, include untracked files (git diff does not show them)
|
|
54
|
-
if (!diff.trim()) {
|
|
55
|
-
const untrackedDiff = await getUntrackedFilesDiff(gitRoot);
|
|
56
|
-
if (untrackedDiff) {
|
|
57
|
-
process.stdout.write(`[generate-commit-message] building diff for untracked files\n`);
|
|
58
|
-
diff = untrackedDiff;
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
if (!diff.trim()) {
|
|
62
|
-
process.stdout.write("[generate-commit-message] no changes to generate message for\n");
|
|
63
|
-
return c.json({ error: "No changes to generate commit message for" }, 400);
|
|
64
|
-
}
|
|
65
|
-
process.stdout.write(`[generate-commit-message] diff length=${diff.length} chars, generating message with AI\n`);
|
|
66
|
-
// Use AI to generate commit message
|
|
67
|
-
const commitMessage = await generateCommitMessageWithAI(diff, metadataManager, model, provider);
|
|
68
|
-
process.stdout.write(`[generate-commit-message] generated: ${commitMessage.replace(/\n/g, " ")}\n`);
|
|
69
|
-
return c.json({ message: commitMessage });
|
|
70
|
-
}
|
|
71
|
-
catch (error) {
|
|
72
|
-
const message = error instanceof Error ? error.message : "Failed to generate commit message";
|
|
73
|
-
return c.json({ error: message }, 500);
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
//# sourceMappingURL=git-generate-commit-message.route.js.map
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import type { Context } from "hono";
|
|
2
|
-
import { MetadataManager } from "../metadata/metadata.manager.js";
|
|
3
|
-
export declare function gitGeneratePrInfoHandler(c: Context, metadataManager: MetadataManager): Promise<(Response & import("hono").TypedResponse<{
|
|
4
|
-
error: string;
|
|
5
|
-
}, 404, "json">) | (Response & import("hono").TypedResponse<{
|
|
6
|
-
error: string;
|
|
7
|
-
}, 400, "json">) | (Response & import("hono").TypedResponse<{
|
|
8
|
-
title: string;
|
|
9
|
-
description: string;
|
|
10
|
-
baseBranch: string | null;
|
|
11
|
-
currentBranch: string;
|
|
12
|
-
}, import("hono/utils/http-status").ContentfulStatusCode, "json">)>;
|
|
13
|
-
//# sourceMappingURL=git-generate-pr-info.route.d.ts.map
|