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,555 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Project creation: create projects from a git URL or from a scaffold template.
|
|
3
|
-
* Contains creation flow logic and helpers (naming, paths, setup script detection).
|
|
4
|
-
*/
|
|
5
|
-
import { randomUUID } from "crypto";
|
|
6
|
-
import { basename, join, relative } from "path";
|
|
7
|
-
import { access, stat, readdir } from "fs/promises";
|
|
8
|
-
import { spawnSyncProcess } from "../../core/utils.js";
|
|
9
|
-
import { CommitMethods } from "@tarsk/shared";
|
|
10
|
-
import { getSetupScriptForPackageManager, isValidPackageManager } from "@tarsk/shared";
|
|
11
|
-
import { createScaffoldedProjectStreaming } from "../scaffold/scaffold.runner.js";
|
|
12
|
-
import { generateRandomThreadName } from "../../core/random-words.js";
|
|
13
|
-
let Utils = null;
|
|
14
|
-
let utilsLoaded = false;
|
|
15
|
-
// Lazy load Utils from electrobun (optional - may not be available in pure server mode)
|
|
16
|
-
async function loadUtils() {
|
|
17
|
-
if (utilsLoaded)
|
|
18
|
-
return;
|
|
19
|
-
utilsLoaded = true;
|
|
20
|
-
try {
|
|
21
|
-
const electrobun = await import("electrobun/bun");
|
|
22
|
-
Utils = electrobun.Utils;
|
|
23
|
-
}
|
|
24
|
-
catch {
|
|
25
|
-
// electrobun not available in pure server mode - that's OK
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
export class ProjectCreator {
|
|
29
|
-
rootFolder;
|
|
30
|
-
metadataManager;
|
|
31
|
-
gitManager;
|
|
32
|
-
processingStateManager;
|
|
33
|
-
runCommandCallbacks;
|
|
34
|
-
constructor(rootFolder, metadataManager, gitManager, processingStateManager, runCommandCallbacks) {
|
|
35
|
-
this.rootFolder = rootFolder;
|
|
36
|
-
this.metadataManager = metadataManager;
|
|
37
|
-
this.gitManager = gitManager;
|
|
38
|
-
this.processingStateManager = processingStateManager;
|
|
39
|
-
this.runCommandCallbacks = runCommandCallbacks;
|
|
40
|
-
}
|
|
41
|
-
async *createProject(gitUrl, commitMethod = CommitMethods.PullRequest) {
|
|
42
|
-
if (!this.gitManager.validateGitUrl(gitUrl)) {
|
|
43
|
-
yield {
|
|
44
|
-
type: "error",
|
|
45
|
-
message: `Invalid git URL format: ${gitUrl}`,
|
|
46
|
-
};
|
|
47
|
-
return;
|
|
48
|
-
}
|
|
49
|
-
let initialThreadId;
|
|
50
|
-
try {
|
|
51
|
-
const projectId = randomUUID();
|
|
52
|
-
const existingProjects = await this.metadataManager.loadProjects();
|
|
53
|
-
const existingNames = existingProjects.map((p) => p.name);
|
|
54
|
-
const projectName = this.ensureUniqueProjectName(this.deriveProjectName(gitUrl), existingNames);
|
|
55
|
-
initialThreadId = randomUUID();
|
|
56
|
-
const initialThreadTitle = generateRandomThreadName();
|
|
57
|
-
const firstThreadPath = this.generateThreadPath(projectId, initialThreadId);
|
|
58
|
-
this.processingStateManager?.setProcessing(initialThreadId);
|
|
59
|
-
yield {
|
|
60
|
-
type: "progress",
|
|
61
|
-
message: `Creating project "${projectName}" from ${gitUrl}...`,
|
|
62
|
-
threadId: initialThreadId,
|
|
63
|
-
projectId,
|
|
64
|
-
};
|
|
65
|
-
for await (const gitEvent of this.gitManager.cloneRepository(gitUrl, firstThreadPath)) {
|
|
66
|
-
if (gitEvent.type === "error") {
|
|
67
|
-
this.processingStateManager?.clearProcessing(initialThreadId);
|
|
68
|
-
yield {
|
|
69
|
-
type: "error",
|
|
70
|
-
message: `Git clone failed: ${gitEvent.message}`,
|
|
71
|
-
};
|
|
72
|
-
return;
|
|
73
|
-
}
|
|
74
|
-
else if (gitEvent.type === "stdout" || gitEvent.type === "stderr") {
|
|
75
|
-
yield {
|
|
76
|
-
type: "progress",
|
|
77
|
-
message: gitEvent.data,
|
|
78
|
-
};
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
let branchName = "main";
|
|
82
|
-
if (commitMethod === CommitMethods.PullRequest) {
|
|
83
|
-
const initialThreadTitle = generateRandomThreadName();
|
|
84
|
-
branchName = this.gitManager.sanitizeBranchName(initialThreadTitle);
|
|
85
|
-
yield {
|
|
86
|
-
type: "progress",
|
|
87
|
-
message: `Creating initial branch "${branchName}"...`,
|
|
88
|
-
};
|
|
89
|
-
let branchExists = await this.gitManager.checkBranchExists(firstThreadPath, branchName);
|
|
90
|
-
let counter = 2;
|
|
91
|
-
const baseBranchName = branchName;
|
|
92
|
-
while (branchExists) {
|
|
93
|
-
branchName = `${baseBranchName}-${counter}`;
|
|
94
|
-
branchExists = await this.gitManager.checkBranchExists(firstThreadPath, branchName);
|
|
95
|
-
counter++;
|
|
96
|
-
}
|
|
97
|
-
if (branchName !== baseBranchName) {
|
|
98
|
-
yield {
|
|
99
|
-
type: "progress",
|
|
100
|
-
message: `Branch "${baseBranchName}" exists, using "${branchName}" instead`,
|
|
101
|
-
};
|
|
102
|
-
}
|
|
103
|
-
for await (const gitEvent of this.gitManager.createAndCheckoutBranch(firstThreadPath, branchName)) {
|
|
104
|
-
if (gitEvent.type === "error") {
|
|
105
|
-
this.processingStateManager?.clearProcessing(initialThreadId);
|
|
106
|
-
yield {
|
|
107
|
-
type: "error",
|
|
108
|
-
message: `Failed to create initial branch: ${gitEvent.message}`,
|
|
109
|
-
};
|
|
110
|
-
return;
|
|
111
|
-
}
|
|
112
|
-
else if (gitEvent.type === "stdout" || gitEvent.type === "stderr") {
|
|
113
|
-
yield {
|
|
114
|
-
type: "progress",
|
|
115
|
-
message: gitEvent.data,
|
|
116
|
-
};
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
yield {
|
|
120
|
-
type: "progress",
|
|
121
|
-
message: `Branch "${branchName}" created and checked out`,
|
|
122
|
-
};
|
|
123
|
-
}
|
|
124
|
-
else {
|
|
125
|
-
yield {
|
|
126
|
-
type: "progress",
|
|
127
|
-
message: `Direct commit mode enabled - commits will go to the main branch`,
|
|
128
|
-
};
|
|
129
|
-
}
|
|
130
|
-
const suggestedSetupScript = await this.detectSetupScript(firstThreadPath);
|
|
131
|
-
// Collect all setup scripts for multiple installations
|
|
132
|
-
const allSetupScripts = [];
|
|
133
|
-
await this.findAllPackageJsonFiles(firstThreadPath, firstThreadPath, allSetupScripts);
|
|
134
|
-
const project = {
|
|
135
|
-
id: projectId,
|
|
136
|
-
name: projectName,
|
|
137
|
-
gitUrl,
|
|
138
|
-
path: firstThreadPath,
|
|
139
|
-
createdAt: new Date(),
|
|
140
|
-
threads: [initialThreadId],
|
|
141
|
-
commitMethod,
|
|
142
|
-
setupScript: suggestedSetupScript ?? undefined,
|
|
143
|
-
pendingSetupScripts: allSetupScripts.length > 1 ? allSetupScripts.slice(1) : undefined,
|
|
144
|
-
};
|
|
145
|
-
const initialThread = {
|
|
146
|
-
id: initialThreadId,
|
|
147
|
-
projectId,
|
|
148
|
-
title: initialThreadTitle,
|
|
149
|
-
path: firstThreadPath,
|
|
150
|
-
currentBranch: branchName,
|
|
151
|
-
createdAt: new Date(),
|
|
152
|
-
};
|
|
153
|
-
const projects = await this.metadataManager.loadProjects();
|
|
154
|
-
projects.push(project);
|
|
155
|
-
await this.metadataManager.saveProjects(projects);
|
|
156
|
-
const threads = await this.metadataManager.loadThreads();
|
|
157
|
-
threads.push(initialThread);
|
|
158
|
-
await this.metadataManager.saveThreads(threads);
|
|
159
|
-
try {
|
|
160
|
-
const suggestedRun = await this.runCommandCallbacks?.suggestRunCommand(projectId);
|
|
161
|
-
if (suggestedRun) {
|
|
162
|
-
await this.runCommandCallbacks?.updateRunCommand(projectId, suggestedRun);
|
|
163
|
-
project.runCommand = suggestedRun;
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
catch {
|
|
167
|
-
// Non-fatal
|
|
168
|
-
}
|
|
169
|
-
yield {
|
|
170
|
-
type: "progress",
|
|
171
|
-
message: `Project "${projectName}" created successfully with initial thread`,
|
|
172
|
-
};
|
|
173
|
-
this.processingStateManager?.clearProcessing(initialThreadId);
|
|
174
|
-
yield {
|
|
175
|
-
type: "complete",
|
|
176
|
-
message: "Project creation complete",
|
|
177
|
-
project,
|
|
178
|
-
suggestedSetupScript: suggestedSetupScript ?? undefined,
|
|
179
|
-
};
|
|
180
|
-
}
|
|
181
|
-
catch (error) {
|
|
182
|
-
if (typeof initialThreadId !== "undefined") {
|
|
183
|
-
this.processingStateManager?.clearProcessing(initialThreadId);
|
|
184
|
-
}
|
|
185
|
-
yield {
|
|
186
|
-
type: "error",
|
|
187
|
-
message: `Failed to create project: ${error instanceof Error ? error.message : String(error)}`,
|
|
188
|
-
};
|
|
189
|
-
}
|
|
190
|
-
}
|
|
191
|
-
async *createProjectFromScaffold(projectName, templateId, packageManager) {
|
|
192
|
-
if (!isValidPackageManager(packageManager)) {
|
|
193
|
-
yield {
|
|
194
|
-
type: "error",
|
|
195
|
-
message: `Invalid package manager: ${packageManager}`,
|
|
196
|
-
};
|
|
197
|
-
return;
|
|
198
|
-
}
|
|
199
|
-
const projectId = randomUUID();
|
|
200
|
-
const initialThreadId = randomUUID();
|
|
201
|
-
const initialThreadTitle = generateRandomThreadName();
|
|
202
|
-
this.processingStateManager?.setProcessing(initialThreadId);
|
|
203
|
-
try {
|
|
204
|
-
const existingProjects = await this.metadataManager.loadProjects();
|
|
205
|
-
const existingNames = existingProjects.map((p) => p.name);
|
|
206
|
-
const uniqueProjectName = this.ensureUniqueProjectName(projectName, existingNames);
|
|
207
|
-
yield {
|
|
208
|
-
type: "progress",
|
|
209
|
-
message: `Scaffolding project "${uniqueProjectName}"...`,
|
|
210
|
-
threadId: initialThreadId,
|
|
211
|
-
projectId,
|
|
212
|
-
};
|
|
213
|
-
let result = null;
|
|
214
|
-
for await (const event of createScaffoldedProjectStreaming({
|
|
215
|
-
parentDir: this.rootFolder,
|
|
216
|
-
projectName: uniqueProjectName, // Use the actual project name, not thread ID
|
|
217
|
-
threadId: initialThreadId,
|
|
218
|
-
templateId,
|
|
219
|
-
packageManager: packageManager,
|
|
220
|
-
})) {
|
|
221
|
-
if (event.type === "progress") {
|
|
222
|
-
yield {
|
|
223
|
-
type: "progress",
|
|
224
|
-
message: event.message,
|
|
225
|
-
threadId: initialThreadId,
|
|
226
|
-
projectId,
|
|
227
|
-
};
|
|
228
|
-
}
|
|
229
|
-
else {
|
|
230
|
-
result = event.result;
|
|
231
|
-
break;
|
|
232
|
-
}
|
|
233
|
-
}
|
|
234
|
-
if (!result?.success) {
|
|
235
|
-
this.processingStateManager?.clearProcessing(initialThreadId);
|
|
236
|
-
yield {
|
|
237
|
-
type: "error",
|
|
238
|
-
message: result?.error ?? "Scaffold failed",
|
|
239
|
-
};
|
|
240
|
-
return;
|
|
241
|
-
}
|
|
242
|
-
const firstThreadPath = this.generateThreadPath(projectId, initialThreadId);
|
|
243
|
-
yield {
|
|
244
|
-
type: "progress",
|
|
245
|
-
message: `Scaffolding project in folder: ${firstThreadPath}`,
|
|
246
|
-
};
|
|
247
|
-
yield {
|
|
248
|
-
type: "progress",
|
|
249
|
-
message: "Initializing git repository...",
|
|
250
|
-
};
|
|
251
|
-
await this.gitManager.initRepository(firstThreadPath);
|
|
252
|
-
const project = {
|
|
253
|
-
id: projectId,
|
|
254
|
-
name: uniqueProjectName,
|
|
255
|
-
gitUrl: "",
|
|
256
|
-
path: firstThreadPath,
|
|
257
|
-
createdAt: new Date(),
|
|
258
|
-
threads: [initialThreadId],
|
|
259
|
-
setupScript: getSetupScriptForPackageManager(packageManager),
|
|
260
|
-
};
|
|
261
|
-
const initialThread = {
|
|
262
|
-
id: initialThreadId,
|
|
263
|
-
projectId,
|
|
264
|
-
title: initialThreadTitle,
|
|
265
|
-
path: firstThreadPath,
|
|
266
|
-
currentBranch: "main",
|
|
267
|
-
createdAt: new Date(),
|
|
268
|
-
};
|
|
269
|
-
const projects = await this.metadataManager.loadProjects();
|
|
270
|
-
projects.push(project);
|
|
271
|
-
await this.metadataManager.saveProjects(projects);
|
|
272
|
-
const threads = await this.metadataManager.loadThreads();
|
|
273
|
-
threads.push(initialThread);
|
|
274
|
-
await this.metadataManager.saveThreads(threads);
|
|
275
|
-
try {
|
|
276
|
-
const suggestedRun = await this.runCommandCallbacks?.suggestRunCommand(projectId);
|
|
277
|
-
if (suggestedRun) {
|
|
278
|
-
await this.runCommandCallbacks?.updateRunCommand(projectId, suggestedRun);
|
|
279
|
-
project.runCommand = suggestedRun;
|
|
280
|
-
}
|
|
281
|
-
}
|
|
282
|
-
catch {
|
|
283
|
-
// Non-fatal
|
|
284
|
-
}
|
|
285
|
-
this.processingStateManager?.clearProcessing(initialThreadId);
|
|
286
|
-
yield {
|
|
287
|
-
type: "progress",
|
|
288
|
-
message: `Project "${uniqueProjectName}" created successfully with initial thread`,
|
|
289
|
-
};
|
|
290
|
-
yield {
|
|
291
|
-
type: "complete",
|
|
292
|
-
message: "Project creation complete",
|
|
293
|
-
project,
|
|
294
|
-
};
|
|
295
|
-
}
|
|
296
|
-
catch (error) {
|
|
297
|
-
this.processingStateManager?.clearProcessing(initialThreadId);
|
|
298
|
-
yield {
|
|
299
|
-
type: "error",
|
|
300
|
-
message: `Failed to create project: ${error instanceof Error ? error.message : String(error)}`,
|
|
301
|
-
};
|
|
302
|
-
}
|
|
303
|
-
}
|
|
304
|
-
ensureUniqueProjectName(proposedName, existingNames) {
|
|
305
|
-
const normalized = (s) => s.trim().toLowerCase();
|
|
306
|
-
const taken = new Set(existingNames.map(normalized));
|
|
307
|
-
const name = proposedName.trim();
|
|
308
|
-
if (!taken.has(normalized(name)))
|
|
309
|
-
return name;
|
|
310
|
-
let counter = 2;
|
|
311
|
-
let candidate;
|
|
312
|
-
do {
|
|
313
|
-
candidate = `${name} ${counter}`;
|
|
314
|
-
counter++;
|
|
315
|
-
} while (taken.has(normalized(candidate)));
|
|
316
|
-
return candidate;
|
|
317
|
-
}
|
|
318
|
-
deriveProjectName(gitUrl) {
|
|
319
|
-
let name = gitUrl.replace(/\.git$/, "");
|
|
320
|
-
const parts = name.split(/[/:]/).filter((p) => p.length > 0);
|
|
321
|
-
name = parts[parts.length - 1] || "project";
|
|
322
|
-
name = name.replace(/[^a-zA-Z0-9._-]/g, "-");
|
|
323
|
-
return name;
|
|
324
|
-
}
|
|
325
|
-
generateThreadPath(_projectId, threadId) {
|
|
326
|
-
return join(this.rootFolder, threadId);
|
|
327
|
-
}
|
|
328
|
-
async *createProjectFromFolder() {
|
|
329
|
-
// Load utils (may fail gracefully if electrobun not available)
|
|
330
|
-
await loadUtils();
|
|
331
|
-
if (!Utils) {
|
|
332
|
-
yield { type: "error", message: "File dialog not available in server mode" };
|
|
333
|
-
return;
|
|
334
|
-
}
|
|
335
|
-
const chosenPaths = await Utils.openFileDialog({
|
|
336
|
-
canChooseFiles: false,
|
|
337
|
-
canChooseDirectory: true,
|
|
338
|
-
allowsMultipleSelection: false,
|
|
339
|
-
});
|
|
340
|
-
if (!chosenPaths || chosenPaths.length === 0) {
|
|
341
|
-
yield { type: "error", message: "No folder selected" };
|
|
342
|
-
return;
|
|
343
|
-
}
|
|
344
|
-
const folderPath = chosenPaths[0];
|
|
345
|
-
// Verify the path is a valid directory
|
|
346
|
-
try {
|
|
347
|
-
const stats = await stat(folderPath);
|
|
348
|
-
if (!stats.isDirectory()) {
|
|
349
|
-
yield { type: "error", message: `Selected path is not a directory: ${folderPath}` };
|
|
350
|
-
return;
|
|
351
|
-
}
|
|
352
|
-
}
|
|
353
|
-
catch {
|
|
354
|
-
yield { type: "error", message: `Cannot access folder: ${folderPath}` };
|
|
355
|
-
return;
|
|
356
|
-
}
|
|
357
|
-
const projectId = randomUUID();
|
|
358
|
-
const initialThreadId = randomUUID();
|
|
359
|
-
const initialThreadTitle = generateRandomThreadName();
|
|
360
|
-
this.processingStateManager?.setProcessing(initialThreadId);
|
|
361
|
-
try {
|
|
362
|
-
const existingProjects = await this.metadataManager.loadProjects();
|
|
363
|
-
const existingNames = existingProjects.map((p) => p.name);
|
|
364
|
-
const projectName = this.ensureUniqueProjectName(basename(folderPath) || "project", existingNames);
|
|
365
|
-
yield {
|
|
366
|
-
type: "progress",
|
|
367
|
-
message: `Opening folder "${projectName}"...`,
|
|
368
|
-
threadId: initialThreadId,
|
|
369
|
-
projectId,
|
|
370
|
-
};
|
|
371
|
-
// Check if the folder is already a git repo
|
|
372
|
-
const isGitRepo = this.isGitRepository(folderPath);
|
|
373
|
-
if (!isGitRepo) {
|
|
374
|
-
yield { type: "progress", message: "Initializing git repository..." };
|
|
375
|
-
await this.gitManager.initRepository(folderPath);
|
|
376
|
-
}
|
|
377
|
-
else {
|
|
378
|
-
yield { type: "progress", message: "Git repository detected" };
|
|
379
|
-
}
|
|
380
|
-
// Detect current branch
|
|
381
|
-
let branchName = "main";
|
|
382
|
-
if (isGitRepo) {
|
|
383
|
-
try {
|
|
384
|
-
const result = spawnSyncProcess("git", ["rev-parse", "--abbrev-ref", "HEAD"], {
|
|
385
|
-
cwd: folderPath,
|
|
386
|
-
encoding: "utf-8",
|
|
387
|
-
});
|
|
388
|
-
if (result.status === 0 &&
|
|
389
|
-
(typeof result.stdout === "string"
|
|
390
|
-
? result.stdout
|
|
391
|
-
: result.stdout?.toString() || "").trim()) {
|
|
392
|
-
branchName = (typeof result.stdout === "string" ? result.stdout : result.stdout?.toString() || "").trim();
|
|
393
|
-
}
|
|
394
|
-
}
|
|
395
|
-
catch {
|
|
396
|
-
// Use default
|
|
397
|
-
}
|
|
398
|
-
}
|
|
399
|
-
// Detect if there's a remote git URL
|
|
400
|
-
let gitUrl = "";
|
|
401
|
-
if (isGitRepo) {
|
|
402
|
-
try {
|
|
403
|
-
const result = spawnSyncProcess("git", ["remote", "get-url", "origin"], {
|
|
404
|
-
cwd: folderPath,
|
|
405
|
-
encoding: "utf-8",
|
|
406
|
-
});
|
|
407
|
-
if (result.status === 0 &&
|
|
408
|
-
(typeof result.stdout === "string"
|
|
409
|
-
? result.stdout
|
|
410
|
-
: result.stdout?.toString() || "").trim()) {
|
|
411
|
-
gitUrl = (typeof result.stdout === "string" ? result.stdout : result.stdout?.toString() || "").trim();
|
|
412
|
-
}
|
|
413
|
-
}
|
|
414
|
-
catch {
|
|
415
|
-
// No remote
|
|
416
|
-
}
|
|
417
|
-
}
|
|
418
|
-
const suggestedSetupScript = await this.detectSetupScript(folderPath);
|
|
419
|
-
// Collect all setup scripts for multiple installations
|
|
420
|
-
const allSetupScripts = [];
|
|
421
|
-
await this.findAllPackageJsonFiles(folderPath, folderPath, allSetupScripts);
|
|
422
|
-
const project = {
|
|
423
|
-
id: projectId,
|
|
424
|
-
name: projectName,
|
|
425
|
-
gitUrl,
|
|
426
|
-
path: folderPath,
|
|
427
|
-
createdAt: new Date(),
|
|
428
|
-
threads: [initialThreadId],
|
|
429
|
-
commitMethod: CommitMethods.Direct,
|
|
430
|
-
setupScript: suggestedSetupScript ?? undefined,
|
|
431
|
-
pendingSetupScripts: allSetupScripts.length > 1 ? allSetupScripts.slice(1) : undefined,
|
|
432
|
-
};
|
|
433
|
-
const initialThread = {
|
|
434
|
-
id: initialThreadId,
|
|
435
|
-
projectId,
|
|
436
|
-
title: initialThreadTitle,
|
|
437
|
-
path: folderPath,
|
|
438
|
-
currentBranch: branchName,
|
|
439
|
-
createdAt: new Date(),
|
|
440
|
-
};
|
|
441
|
-
const projects = await this.metadataManager.loadProjects();
|
|
442
|
-
projects.push(project);
|
|
443
|
-
await this.metadataManager.saveProjects(projects);
|
|
444
|
-
const threads = await this.metadataManager.loadThreads();
|
|
445
|
-
threads.push(initialThread);
|
|
446
|
-
await this.metadataManager.saveThreads(threads);
|
|
447
|
-
try {
|
|
448
|
-
const suggestedRun = await this.runCommandCallbacks?.suggestRunCommand(projectId);
|
|
449
|
-
if (suggestedRun) {
|
|
450
|
-
await this.runCommandCallbacks?.updateRunCommand(projectId, suggestedRun);
|
|
451
|
-
project.runCommand = suggestedRun;
|
|
452
|
-
}
|
|
453
|
-
}
|
|
454
|
-
catch {
|
|
455
|
-
// Non-fatal
|
|
456
|
-
}
|
|
457
|
-
yield {
|
|
458
|
-
type: "progress",
|
|
459
|
-
message: `Project "${projectName}" created successfully from folder`,
|
|
460
|
-
};
|
|
461
|
-
this.processingStateManager?.clearProcessing(initialThreadId);
|
|
462
|
-
yield {
|
|
463
|
-
type: "complete",
|
|
464
|
-
message: "Project creation complete",
|
|
465
|
-
project,
|
|
466
|
-
suggestedSetupScript: suggestedSetupScript ?? undefined,
|
|
467
|
-
};
|
|
468
|
-
}
|
|
469
|
-
catch (error) {
|
|
470
|
-
this.processingStateManager?.clearProcessing(initialThreadId);
|
|
471
|
-
yield {
|
|
472
|
-
type: "error",
|
|
473
|
-
message: `Failed to create project from folder: ${error instanceof Error ? error.message : String(error)}`,
|
|
474
|
-
};
|
|
475
|
-
}
|
|
476
|
-
}
|
|
477
|
-
isGitRepository(dirPath) {
|
|
478
|
-
const result = spawnSyncProcess("git", ["rev-parse", "--is-inside-work-tree"], {
|
|
479
|
-
cwd: dirPath,
|
|
480
|
-
encoding: "utf-8",
|
|
481
|
-
});
|
|
482
|
-
return result.status === 0;
|
|
483
|
-
}
|
|
484
|
-
async detectSetupScript(chrootPath) {
|
|
485
|
-
// Find all package.json files recursively
|
|
486
|
-
const allSetupScripts = [];
|
|
487
|
-
await this.findAllPackageJsonFiles(chrootPath, chrootPath, allSetupScripts);
|
|
488
|
-
// Return null if no package.json files found
|
|
489
|
-
if (allSetupScripts.length === 0) {
|
|
490
|
-
return null;
|
|
491
|
-
}
|
|
492
|
-
// Return the first one for immediate use
|
|
493
|
-
return allSetupScripts[0];
|
|
494
|
-
}
|
|
495
|
-
async findAllPackageJsonFiles(rootPath, currentPath, setupScripts) {
|
|
496
|
-
try {
|
|
497
|
-
// Check if package.json exists in current directory
|
|
498
|
-
await access(join(currentPath, "package.json"));
|
|
499
|
-
// Determine relative path from root
|
|
500
|
-
const relativePath = relative(rootPath, currentPath);
|
|
501
|
-
// Detect package manager for this package.json
|
|
502
|
-
let installCommand = "";
|
|
503
|
-
try {
|
|
504
|
-
await access(join(currentPath, "yarn.lock"));
|
|
505
|
-
installCommand = "yarn install";
|
|
506
|
-
}
|
|
507
|
-
catch {
|
|
508
|
-
try {
|
|
509
|
-
await access(join(currentPath, "bun.lock"));
|
|
510
|
-
installCommand = "bun install";
|
|
511
|
-
}
|
|
512
|
-
catch {
|
|
513
|
-
try {
|
|
514
|
-
await access(join(currentPath, "pnpm-lock.yaml"));
|
|
515
|
-
installCommand = "pnpm install";
|
|
516
|
-
}
|
|
517
|
-
catch {
|
|
518
|
-
installCommand = "npm install";
|
|
519
|
-
}
|
|
520
|
-
}
|
|
521
|
-
}
|
|
522
|
-
// Add command with path if not in root
|
|
523
|
-
if (relativePath) {
|
|
524
|
-
setupScripts.push(`cd "${relativePath}" && ${installCommand}`);
|
|
525
|
-
}
|
|
526
|
-
else {
|
|
527
|
-
setupScripts.push(installCommand);
|
|
528
|
-
}
|
|
529
|
-
}
|
|
530
|
-
catch {
|
|
531
|
-
// No package.json in this directory, continue searching subdirectories
|
|
532
|
-
}
|
|
533
|
-
// Recursively search subdirectories
|
|
534
|
-
try {
|
|
535
|
-
const entries = await readdir(currentPath);
|
|
536
|
-
for (const entry of entries) {
|
|
537
|
-
const entryPath = join(currentPath, entry);
|
|
538
|
-
try {
|
|
539
|
-
const stats = await stat(entryPath);
|
|
540
|
-
if (stats.isDirectory() && !entry.startsWith(".") && entry !== "node_modules") {
|
|
541
|
-
await this.findAllPackageJsonFiles(rootPath, entryPath, setupScripts);
|
|
542
|
-
}
|
|
543
|
-
}
|
|
544
|
-
catch {
|
|
545
|
-
// Skip directories that can't be accessed
|
|
546
|
-
continue;
|
|
547
|
-
}
|
|
548
|
-
}
|
|
549
|
-
}
|
|
550
|
-
catch {
|
|
551
|
-
// Skip directories that can't be read
|
|
552
|
-
}
|
|
553
|
-
}
|
|
554
|
-
}
|
|
555
|
-
//# sourceMappingURL=projects.creator.js.map
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* SQLite Database Operations for Projects
|
|
3
|
-
*
|
|
4
|
-
* This module handles all CRUD operations for projects in the SQLite database.
|
|
5
|
-
* Includes transaction support for atomic operations.
|
|
6
|
-
*/
|
|
7
|
-
import { Project } from "@tarsk/shared";
|
|
8
|
-
import { Database } from "../../database/database.types";
|
|
9
|
-
/**
|
|
10
|
-
* Insert a new project into the database
|
|
11
|
-
* @param db SQLite database instance
|
|
12
|
-
* @param project Project to insert
|
|
13
|
-
*/
|
|
14
|
-
export declare function insertProject(db: Database, project: Project): Promise<void>;
|
|
15
|
-
/**
|
|
16
|
-
* Update an existing project in the database
|
|
17
|
-
* @param db SQLite database instance
|
|
18
|
-
* @param id Project ID
|
|
19
|
-
* @param updates Partial project object with fields to update
|
|
20
|
-
*/
|
|
21
|
-
export declare function updateProject(db: Database, id: string, updates: Partial<Project>): Promise<void>;
|
|
22
|
-
/**
|
|
23
|
-
* Delete a project and cascade delete associated threads
|
|
24
|
-
* @param db SQLite database instance
|
|
25
|
-
* @param id Project ID
|
|
26
|
-
*/
|
|
27
|
-
export declare function deleteProject(db: Database, id: string): Promise<void>;
|
|
28
|
-
/**
|
|
29
|
-
* Get a single project by ID
|
|
30
|
-
* @param db SQLite database instance
|
|
31
|
-
* @param id Project ID
|
|
32
|
-
* @returns Project object or null if not found
|
|
33
|
-
*/
|
|
34
|
-
export declare function getProject(db: Database, id: string): Promise<Project | null>;
|
|
35
|
-
/**
|
|
36
|
-
* Get all projects from the database
|
|
37
|
-
* @param db SQLite database instance
|
|
38
|
-
* @returns Array of all projects
|
|
39
|
-
*/
|
|
40
|
-
export declare function getAllProjects(db: Database): Promise<Project[]>;
|
|
41
|
-
/**
|
|
42
|
-
* Get threads for a specific project
|
|
43
|
-
* @param db SQLite database instance
|
|
44
|
-
* @param projectId Project ID
|
|
45
|
-
* @returns Array of thread IDs
|
|
46
|
-
*/
|
|
47
|
-
export declare function getProjectThreadIds(db: Database, projectId: string): Promise<string[]>;
|
|
48
|
-
/**
|
|
49
|
-
* Check if a project exists
|
|
50
|
-
* @param db SQLite database instance
|
|
51
|
-
* @param id Project ID
|
|
52
|
-
* @returns True if project exists
|
|
53
|
-
*/
|
|
54
|
-
export declare function projectExists(db: Database, id: string): Promise<boolean>;
|
|
55
|
-
/**
|
|
56
|
-
* Get project count
|
|
57
|
-
* @param db SQLite database instance
|
|
58
|
-
* @returns Number of projects
|
|
59
|
-
*/
|
|
60
|
-
export declare function getProjectCount(db: Database): Promise<number>;
|
|
61
|
-
//# sourceMappingURL=projects.database.d.ts.map
|