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,35 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Skill Manager
|
|
3
|
-
*
|
|
4
|
-
* Loads and manages agent skills from SKILL.md files with frontmatter.
|
|
5
|
-
* Skills can be stored in:
|
|
6
|
-
* - Project-specific: ./.agents/skills/ (relative to thread path)
|
|
7
|
-
* - Global: ~/.agents/skills/
|
|
8
|
-
*
|
|
9
|
-
* Skills follow the Agent Skills format specification:
|
|
10
|
-
* https://agentskills.io/
|
|
11
|
-
*/
|
|
12
|
-
import type { Skill } from "@tarsk/shared";
|
|
13
|
-
/**
|
|
14
|
-
* SkillManager handles loading and validating agent skills
|
|
15
|
-
*/
|
|
16
|
-
export declare class SkillManager {
|
|
17
|
-
/**
|
|
18
|
-
* Load all available skills for a given thread
|
|
19
|
-
* Project skills override global ones with the same name
|
|
20
|
-
*/
|
|
21
|
-
loadSkills(threadPath: string): Promise<Skill[]>;
|
|
22
|
-
/**
|
|
23
|
-
* Load skills from a specific directory
|
|
24
|
-
*/
|
|
25
|
-
private loadSkillsFromDir;
|
|
26
|
-
/**
|
|
27
|
-
* Get a specific skill by name
|
|
28
|
-
*/
|
|
29
|
-
getSkill(name: string, threadPath: string): Promise<Skill | null>;
|
|
30
|
-
/**
|
|
31
|
-
* Validate skill name format (public utility method)
|
|
32
|
-
*/
|
|
33
|
-
validateSkillName(name: string): boolean;
|
|
34
|
-
}
|
|
35
|
-
//# sourceMappingURL=skills.manager.d.ts.map
|
|
@@ -1,251 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Skill Manager
|
|
3
|
-
*
|
|
4
|
-
* Loads and manages agent skills from SKILL.md files with frontmatter.
|
|
5
|
-
* Skills can be stored in:
|
|
6
|
-
* - Project-specific: ./.agents/skills/ (relative to thread path)
|
|
7
|
-
* - Global: ~/.agents/skills/
|
|
8
|
-
*
|
|
9
|
-
* Skills follow the Agent Skills format specification:
|
|
10
|
-
* https://agentskills.io/
|
|
11
|
-
*/
|
|
12
|
-
import { readdir, readFile } from "fs/promises";
|
|
13
|
-
import { join } from "path";
|
|
14
|
-
import { existsSync } from "fs";
|
|
15
|
-
import { homedir } from "os";
|
|
16
|
-
/**
|
|
17
|
-
* Parse frontmatter from SKILL.md content
|
|
18
|
-
* Returns { metadata, content } where content is the body after frontmatter
|
|
19
|
-
*/
|
|
20
|
-
function parseFrontmatter(markdown) {
|
|
21
|
-
const lines = markdown.split("\n");
|
|
22
|
-
// Check if file starts with ---
|
|
23
|
-
if (lines[0]?.trim() !== "---") {
|
|
24
|
-
return {
|
|
25
|
-
metadata: {},
|
|
26
|
-
content: markdown.trim(),
|
|
27
|
-
};
|
|
28
|
-
}
|
|
29
|
-
// Find the closing ---
|
|
30
|
-
let endIndex = -1;
|
|
31
|
-
for (let i = 1; i < lines.length; i++) {
|
|
32
|
-
if (lines[i]?.trim() === "---") {
|
|
33
|
-
endIndex = i;
|
|
34
|
-
break;
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
// No closing --- found
|
|
38
|
-
if (endIndex === -1) {
|
|
39
|
-
return {
|
|
40
|
-
metadata: {},
|
|
41
|
-
content: markdown.trim(),
|
|
42
|
-
};
|
|
43
|
-
}
|
|
44
|
-
// Parse frontmatter
|
|
45
|
-
const frontmatterLines = lines.slice(1, endIndex);
|
|
46
|
-
const metadata = {};
|
|
47
|
-
for (const line of frontmatterLines) {
|
|
48
|
-
const colonIndex = line.indexOf(":");
|
|
49
|
-
if (colonIndex === -1)
|
|
50
|
-
continue;
|
|
51
|
-
const key = line.slice(0, colonIndex).trim();
|
|
52
|
-
const value = line.slice(colonIndex + 1).trim();
|
|
53
|
-
// Map YAML keys to TypeScript property names
|
|
54
|
-
if (key === "name") {
|
|
55
|
-
metadata.name = value;
|
|
56
|
-
}
|
|
57
|
-
else if (key === "description") {
|
|
58
|
-
metadata.description = value;
|
|
59
|
-
}
|
|
60
|
-
else if (key === "license") {
|
|
61
|
-
metadata.license = value;
|
|
62
|
-
}
|
|
63
|
-
else if (key === "compatibility") {
|
|
64
|
-
metadata.compatibility = value;
|
|
65
|
-
}
|
|
66
|
-
else if (key === "allowed-tools") {
|
|
67
|
-
metadata.allowedTools = value;
|
|
68
|
-
}
|
|
69
|
-
else if (key === "metadata") {
|
|
70
|
-
// Parse metadata object (simple key:value pairs)
|
|
71
|
-
// For now, we'll skip nested metadata parsing
|
|
72
|
-
// This would require a proper YAML parser for full support
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
// Content is everything after the closing ---
|
|
76
|
-
const content = lines
|
|
77
|
-
.slice(endIndex + 1)
|
|
78
|
-
.join("\n")
|
|
79
|
-
.trim();
|
|
80
|
-
return { metadata, content };
|
|
81
|
-
}
|
|
82
|
-
/**
|
|
83
|
-
* Get the global skills directory path
|
|
84
|
-
*/
|
|
85
|
-
function getGlobalSkillsDir() {
|
|
86
|
-
return join(homedir(), ".agents", "skills");
|
|
87
|
-
}
|
|
88
|
-
/**
|
|
89
|
-
* Get the project-specific skills directory path
|
|
90
|
-
*/
|
|
91
|
-
function getProjectSkillsDir(threadPath) {
|
|
92
|
-
return join(threadPath, ".agents", "skills");
|
|
93
|
-
}
|
|
94
|
-
/**
|
|
95
|
-
* Validate skill name format
|
|
96
|
-
* - Must be 1-64 characters
|
|
97
|
-
* - Lowercase alphanumeric and hyphens only
|
|
98
|
-
* - Must not start or end with hyphen
|
|
99
|
-
* - Must not contain consecutive hyphens
|
|
100
|
-
*/
|
|
101
|
-
function validateSkillName(name) {
|
|
102
|
-
if (!name || name.length === 0 || name.length > 64) {
|
|
103
|
-
return false;
|
|
104
|
-
}
|
|
105
|
-
// Check for valid characters (lowercase alphanumeric + hyphens)
|
|
106
|
-
if (!/^[a-z0-9-]+$/.test(name)) {
|
|
107
|
-
return false;
|
|
108
|
-
}
|
|
109
|
-
// Must not start or end with hyphen
|
|
110
|
-
if (name.startsWith("-") || name.endsWith("-")) {
|
|
111
|
-
return false;
|
|
112
|
-
}
|
|
113
|
-
// Must not contain consecutive hyphens
|
|
114
|
-
if (name.includes("--")) {
|
|
115
|
-
return false;
|
|
116
|
-
}
|
|
117
|
-
return true;
|
|
118
|
-
}
|
|
119
|
-
/**
|
|
120
|
-
* Validate skill description
|
|
121
|
-
* - Must be 1-1024 characters
|
|
122
|
-
* - Must be non-empty
|
|
123
|
-
*/
|
|
124
|
-
function validateDescription(description) {
|
|
125
|
-
return !!description && description.length > 0 && description.length <= 1024;
|
|
126
|
-
}
|
|
127
|
-
/**
|
|
128
|
-
* SkillManager handles loading and validating agent skills
|
|
129
|
-
*/
|
|
130
|
-
export class SkillManager {
|
|
131
|
-
/**
|
|
132
|
-
* Load all available skills for a given thread
|
|
133
|
-
* Project skills override global ones with the same name
|
|
134
|
-
*/
|
|
135
|
-
async loadSkills(threadPath) {
|
|
136
|
-
const skills = new Map();
|
|
137
|
-
// Load global skills first
|
|
138
|
-
const globalDir = getGlobalSkillsDir();
|
|
139
|
-
if (existsSync(globalDir)) {
|
|
140
|
-
const globalSkills = await this.loadSkillsFromDir(globalDir, "global");
|
|
141
|
-
for (const skill of globalSkills) {
|
|
142
|
-
skills.set(skill.name, skill);
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
// Load project skills (override global)
|
|
146
|
-
const projectDir = getProjectSkillsDir(threadPath);
|
|
147
|
-
if (existsSync(projectDir)) {
|
|
148
|
-
const projectSkills = await this.loadSkillsFromDir(projectDir, "project");
|
|
149
|
-
for (const skill of projectSkills) {
|
|
150
|
-
skills.set(skill.name, skill);
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
return Array.from(skills.values());
|
|
154
|
-
}
|
|
155
|
-
/**
|
|
156
|
-
* Load skills from a specific directory
|
|
157
|
-
*/
|
|
158
|
-
async loadSkillsFromDir(dir, scope) {
|
|
159
|
-
const skills = [];
|
|
160
|
-
try {
|
|
161
|
-
const entries = await readdir(dir, { withFileTypes: true });
|
|
162
|
-
for (const entry of entries) {
|
|
163
|
-
// Skills must be directories
|
|
164
|
-
if (!entry.isDirectory())
|
|
165
|
-
continue;
|
|
166
|
-
const skillDirName = entry.name;
|
|
167
|
-
const skillPath = join(dir, skillDirName);
|
|
168
|
-
const skillFilePath = join(skillPath, "SKILL.md");
|
|
169
|
-
// Skip if SKILL.md doesn't exist
|
|
170
|
-
if (!existsSync(skillFilePath)) {
|
|
171
|
-
console.warn(`Skipping skill directory ${skillDirName}: SKILL.md not found`);
|
|
172
|
-
continue;
|
|
173
|
-
}
|
|
174
|
-
try {
|
|
175
|
-
// Read and parse SKILL.md
|
|
176
|
-
const fileContent = await readFile(skillFilePath, "utf-8");
|
|
177
|
-
const { metadata, content } = parseFrontmatter(fileContent);
|
|
178
|
-
// Validate required fields
|
|
179
|
-
if (!metadata.name) {
|
|
180
|
-
console.warn(`Skipping skill in ${skillDirName}: missing 'name' in frontmatter`);
|
|
181
|
-
continue;
|
|
182
|
-
}
|
|
183
|
-
if (!metadata.description) {
|
|
184
|
-
console.warn(`Skipping skill in ${skillDirName}: missing 'description' in frontmatter`);
|
|
185
|
-
continue;
|
|
186
|
-
}
|
|
187
|
-
// Validate name format
|
|
188
|
-
if (!validateSkillName(metadata.name)) {
|
|
189
|
-
console.warn(`Skipping skill in ${skillDirName}: invalid name format '${metadata.name}'. ` +
|
|
190
|
-
`Name must be 1-64 chars, lowercase alphanumeric + hyphens, no leading/trailing/consecutive hyphens.`);
|
|
191
|
-
continue;
|
|
192
|
-
}
|
|
193
|
-
// Validate description length
|
|
194
|
-
if (!validateDescription(metadata.description)) {
|
|
195
|
-
console.warn(`Skipping skill in ${skillDirName}: description must be 1-1024 characters`);
|
|
196
|
-
continue;
|
|
197
|
-
}
|
|
198
|
-
// Validate that directory name matches frontmatter name
|
|
199
|
-
if (metadata.name !== skillDirName) {
|
|
200
|
-
console.warn(`Skipping skill in ${skillDirName}: directory name must match frontmatter name '${metadata.name}'`);
|
|
201
|
-
continue;
|
|
202
|
-
}
|
|
203
|
-
// Create skill object
|
|
204
|
-
const skill = {
|
|
205
|
-
name: metadata.name,
|
|
206
|
-
description: metadata.description,
|
|
207
|
-
scope,
|
|
208
|
-
skillPath,
|
|
209
|
-
instructions: content,
|
|
210
|
-
};
|
|
211
|
-
// Add optional fields if present
|
|
212
|
-
if (metadata.license) {
|
|
213
|
-
skill.license = metadata.license;
|
|
214
|
-
}
|
|
215
|
-
if (metadata.compatibility) {
|
|
216
|
-
skill.compatibility = metadata.compatibility;
|
|
217
|
-
}
|
|
218
|
-
if (metadata.metadata) {
|
|
219
|
-
skill.metadata = metadata.metadata;
|
|
220
|
-
}
|
|
221
|
-
if (metadata.allowedTools) {
|
|
222
|
-
skill.allowedTools = metadata.allowedTools;
|
|
223
|
-
}
|
|
224
|
-
skills.push(skill);
|
|
225
|
-
}
|
|
226
|
-
catch (error) {
|
|
227
|
-
console.error(`Failed to load skill from ${skillDirName}:`, error);
|
|
228
|
-
}
|
|
229
|
-
}
|
|
230
|
-
}
|
|
231
|
-
catch (error) {
|
|
232
|
-
// Directory doesn't exist or can't be read - that's okay
|
|
233
|
-
console.error(`Failed to load skills from ${dir}:`, error);
|
|
234
|
-
}
|
|
235
|
-
return skills;
|
|
236
|
-
}
|
|
237
|
-
/**
|
|
238
|
-
* Get a specific skill by name
|
|
239
|
-
*/
|
|
240
|
-
async getSkill(name, threadPath) {
|
|
241
|
-
const skills = await this.loadSkills(threadPath);
|
|
242
|
-
return skills.find((skill) => skill.name === name) ?? null;
|
|
243
|
-
}
|
|
244
|
-
/**
|
|
245
|
-
* Validate skill name format (public utility method)
|
|
246
|
-
*/
|
|
247
|
-
validateSkillName(name) {
|
|
248
|
-
return validateSkillName(name);
|
|
249
|
-
}
|
|
250
|
-
}
|
|
251
|
-
//# sourceMappingURL=skills.manager.js.map
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* DELETE /api/slash-commands
|
|
3
|
-
* Delete a slash command
|
|
4
|
-
* Body: { filePath }
|
|
5
|
-
*/
|
|
6
|
-
import type { Context } from "hono";
|
|
7
|
-
export declare function deleteSlashCommand(c: Context): Promise<(Response & import("hono").TypedResponse<{
|
|
8
|
-
error: {
|
|
9
|
-
code: string;
|
|
10
|
-
message: string;
|
|
11
|
-
timestamp: string;
|
|
12
|
-
};
|
|
13
|
-
}, 400, "json">) | (Response & import("hono").TypedResponse<{
|
|
14
|
-
success: true;
|
|
15
|
-
}, import("hono/utils/http-status").ContentfulStatusCode, "json">) | (Response & import("hono").TypedResponse<{
|
|
16
|
-
error: {
|
|
17
|
-
code: string;
|
|
18
|
-
message: string;
|
|
19
|
-
details: import("hono/utils/types").JSONValue;
|
|
20
|
-
timestamp: string;
|
|
21
|
-
};
|
|
22
|
-
}, 500, "json">)>;
|
|
23
|
-
//# sourceMappingURL=slash-commands-delete.route.d.ts.map
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* DELETE /api/slash-commands
|
|
3
|
-
* Delete a slash command
|
|
4
|
-
* Body: { filePath }
|
|
5
|
-
*/
|
|
6
|
-
import { SlashCommandManager } from "../slash-commands/slash-commands.manager.js";
|
|
7
|
-
const slashCommandManager = new SlashCommandManager();
|
|
8
|
-
export async function deleteSlashCommand(c) {
|
|
9
|
-
try {
|
|
10
|
-
const body = await c.req.json();
|
|
11
|
-
const { filePath } = body;
|
|
12
|
-
if (!filePath) {
|
|
13
|
-
return c.json({
|
|
14
|
-
error: {
|
|
15
|
-
code: "MISSING_FILE_PATH",
|
|
16
|
-
message: "filePath is required",
|
|
17
|
-
timestamp: new Date().toISOString(),
|
|
18
|
-
},
|
|
19
|
-
}, 400);
|
|
20
|
-
}
|
|
21
|
-
await slashCommandManager.deleteCommand(filePath);
|
|
22
|
-
return c.json({ success: true });
|
|
23
|
-
}
|
|
24
|
-
catch (error) {
|
|
25
|
-
console.error("Failed to delete slash command:", error);
|
|
26
|
-
return c.json({
|
|
27
|
-
error: {
|
|
28
|
-
code: "DELETE_FAILED",
|
|
29
|
-
message: error instanceof Error ? error.message : "Failed to delete slash command",
|
|
30
|
-
details: error,
|
|
31
|
-
timestamp: new Date().toISOString(),
|
|
32
|
-
},
|
|
33
|
-
}, 500);
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
//# sourceMappingURL=slash-commands-delete.route.js.map
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* GET /api/slash-commands?threadId=xxx
|
|
3
|
-
* List all available slash commands for a thread
|
|
4
|
-
*/
|
|
5
|
-
import type { Context } from "hono";
|
|
6
|
-
import type { ThreadManager } from "../threads/threads.manager.js";
|
|
7
|
-
export declare function getSlashCommands(c: Context, threadManager: ThreadManager): Promise<(Response & import("hono").TypedResponse<{
|
|
8
|
-
error: {
|
|
9
|
-
code: string;
|
|
10
|
-
message: string;
|
|
11
|
-
timestamp: string;
|
|
12
|
-
};
|
|
13
|
-
}, 400, "json">) | (Response & import("hono").TypedResponse<{
|
|
14
|
-
error: {
|
|
15
|
-
code: string;
|
|
16
|
-
message: string;
|
|
17
|
-
timestamp: string;
|
|
18
|
-
};
|
|
19
|
-
}, 404, "json">) | (Response & import("hono").TypedResponse<{
|
|
20
|
-
commands: {
|
|
21
|
-
name: string;
|
|
22
|
-
content: string;
|
|
23
|
-
metadata: {
|
|
24
|
-
description?: string | undefined;
|
|
25
|
-
argumentHint?: string | undefined;
|
|
26
|
-
mode?: string | undefined;
|
|
27
|
-
};
|
|
28
|
-
scope: "project" | "global";
|
|
29
|
-
filePath: string;
|
|
30
|
-
isBuiltIn?: boolean | undefined;
|
|
31
|
-
}[];
|
|
32
|
-
skills?: {
|
|
33
|
-
name: string;
|
|
34
|
-
description: string;
|
|
35
|
-
scope: "project" | "global";
|
|
36
|
-
skillPath: string;
|
|
37
|
-
license?: string | undefined;
|
|
38
|
-
compatibility?: string | undefined;
|
|
39
|
-
metadata?: {
|
|
40
|
-
[x: string]: string;
|
|
41
|
-
} | undefined;
|
|
42
|
-
allowedTools?: string | undefined;
|
|
43
|
-
instructions: string;
|
|
44
|
-
}[] | undefined;
|
|
45
|
-
}, import("hono/utils/http-status").ContentfulStatusCode, "json">) | (Response & import("hono").TypedResponse<{
|
|
46
|
-
error: {
|
|
47
|
-
code: string;
|
|
48
|
-
message: string;
|
|
49
|
-
details: import("hono/utils/types").JSONValue;
|
|
50
|
-
timestamp: string;
|
|
51
|
-
};
|
|
52
|
-
}, 500, "json">)>;
|
|
53
|
-
//# sourceMappingURL=slash-commands-get.route.d.ts.map
|
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* GET /api/slash-commands?threadId=xxx
|
|
3
|
-
* List all available slash commands for a thread
|
|
4
|
-
*/
|
|
5
|
-
import { SlashCommandManager } from "../slash-commands/slash-commands.manager.js";
|
|
6
|
-
import { SkillManager } from "../skills/skills.manager.js";
|
|
7
|
-
const slashCommandManager = new SlashCommandManager();
|
|
8
|
-
const skillManager = new SkillManager();
|
|
9
|
-
export async function getSlashCommands(c, threadManager) {
|
|
10
|
-
const threadId = c.req.query("threadId");
|
|
11
|
-
if (!threadId) {
|
|
12
|
-
return c.json({
|
|
13
|
-
error: {
|
|
14
|
-
code: "MISSING_THREAD_ID",
|
|
15
|
-
message: "threadId query parameter is required",
|
|
16
|
-
timestamp: new Date().toISOString(),
|
|
17
|
-
},
|
|
18
|
-
}, 400);
|
|
19
|
-
}
|
|
20
|
-
try {
|
|
21
|
-
// Get thread path from thread manager
|
|
22
|
-
const thread = await threadManager.getThread(threadId);
|
|
23
|
-
if (!thread) {
|
|
24
|
-
return c.json({
|
|
25
|
-
error: {
|
|
26
|
-
code: "THREAD_NOT_FOUND",
|
|
27
|
-
message: `Thread not found: ${threadId}`,
|
|
28
|
-
timestamp: new Date().toISOString(),
|
|
29
|
-
},
|
|
30
|
-
}, 404);
|
|
31
|
-
}
|
|
32
|
-
// Load commands for this thread
|
|
33
|
-
const commands = await slashCommandManager.loadCommands(thread.path);
|
|
34
|
-
// Load skills for this thread (for quick reference in command menu)
|
|
35
|
-
const skills = await skillManager.loadSkills(thread.path);
|
|
36
|
-
const response = {
|
|
37
|
-
commands,
|
|
38
|
-
skills,
|
|
39
|
-
};
|
|
40
|
-
return c.json(response);
|
|
41
|
-
}
|
|
42
|
-
catch (error) {
|
|
43
|
-
console.error("Failed to load slash commands:", error);
|
|
44
|
-
return c.json({
|
|
45
|
-
error: {
|
|
46
|
-
code: "LOAD_FAILED",
|
|
47
|
-
message: error instanceof Error ? error.message : "Failed to load slash commands",
|
|
48
|
-
details: error,
|
|
49
|
-
timestamp: new Date().toISOString(),
|
|
50
|
-
},
|
|
51
|
-
}, 500);
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
//# sourceMappingURL=slash-commands-get.route.js.map
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* POST /api/slash-commands
|
|
3
|
-
* Create a new slash command
|
|
4
|
-
* Body: { name, content?, metadata, scope, threadId? }
|
|
5
|
-
*/
|
|
6
|
-
import type { Context } from "hono";
|
|
7
|
-
import type { ThreadManager } from "../threads/threads.manager.js";
|
|
8
|
-
export declare function createSlashCommand(c: Context, threadManager: ThreadManager): Promise<(Response & import("hono").TypedResponse<{
|
|
9
|
-
error: {
|
|
10
|
-
code: string;
|
|
11
|
-
message: string;
|
|
12
|
-
timestamp: string;
|
|
13
|
-
};
|
|
14
|
-
}, 400, "json">) | (Response & import("hono").TypedResponse<{
|
|
15
|
-
error: {
|
|
16
|
-
code: string;
|
|
17
|
-
message: string;
|
|
18
|
-
timestamp: string;
|
|
19
|
-
};
|
|
20
|
-
}, 404, "json">) | (Response & import("hono").TypedResponse<{
|
|
21
|
-
name: string;
|
|
22
|
-
content: string;
|
|
23
|
-
metadata: {
|
|
24
|
-
description?: string | undefined;
|
|
25
|
-
argumentHint?: string | undefined;
|
|
26
|
-
mode?: string | undefined;
|
|
27
|
-
};
|
|
28
|
-
scope: "project" | "global";
|
|
29
|
-
filePath: string;
|
|
30
|
-
isBuiltIn?: boolean | undefined;
|
|
31
|
-
}, 201, "json">) | (Response & import("hono").TypedResponse<{
|
|
32
|
-
error: {
|
|
33
|
-
code: string;
|
|
34
|
-
message: string;
|
|
35
|
-
details: import("hono/utils/types").JSONValue;
|
|
36
|
-
timestamp: string;
|
|
37
|
-
};
|
|
38
|
-
}, 500, "json">)>;
|
|
39
|
-
//# sourceMappingURL=slash-commands-post.route.d.ts.map
|
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* POST /api/slash-commands
|
|
3
|
-
* Create a new slash command
|
|
4
|
-
* Body: { name, content?, metadata, scope, threadId? }
|
|
5
|
-
*/
|
|
6
|
-
import { SlashCommandManager } from "../slash-commands/slash-commands.manager.js";
|
|
7
|
-
const slashCommandManager = new SlashCommandManager();
|
|
8
|
-
export async function createSlashCommand(c, threadManager) {
|
|
9
|
-
try {
|
|
10
|
-
const body = await c.req.json();
|
|
11
|
-
const { name, content, metadata, scope, threadId } = body;
|
|
12
|
-
if (!name) {
|
|
13
|
-
return c.json({
|
|
14
|
-
error: {
|
|
15
|
-
code: "MISSING_FIELDS",
|
|
16
|
-
message: "name is required",
|
|
17
|
-
timestamp: new Date().toISOString(),
|
|
18
|
-
},
|
|
19
|
-
}, 400);
|
|
20
|
-
}
|
|
21
|
-
if (scope !== "global" && scope !== "project") {
|
|
22
|
-
return c.json({
|
|
23
|
-
error: {
|
|
24
|
-
code: "INVALID_SCOPE",
|
|
25
|
-
message: 'scope must be either "global" or "project"',
|
|
26
|
-
timestamp: new Date().toISOString(),
|
|
27
|
-
},
|
|
28
|
-
}, 400);
|
|
29
|
-
}
|
|
30
|
-
// Get thread path if project scope
|
|
31
|
-
let threadPath;
|
|
32
|
-
if (scope === "project") {
|
|
33
|
-
if (!threadId) {
|
|
34
|
-
return c.json({
|
|
35
|
-
error: {
|
|
36
|
-
code: "MISSING_THREAD_ID",
|
|
37
|
-
message: "threadId is required for project-scoped commands",
|
|
38
|
-
timestamp: new Date().toISOString(),
|
|
39
|
-
},
|
|
40
|
-
}, 400);
|
|
41
|
-
}
|
|
42
|
-
const thread = await threadManager.getThread(threadId);
|
|
43
|
-
if (!thread) {
|
|
44
|
-
return c.json({
|
|
45
|
-
error: {
|
|
46
|
-
code: "THREAD_NOT_FOUND",
|
|
47
|
-
message: `Thread not found: ${threadId}`,
|
|
48
|
-
timestamp: new Date().toISOString(),
|
|
49
|
-
},
|
|
50
|
-
}, 404);
|
|
51
|
-
}
|
|
52
|
-
threadPath = thread.path;
|
|
53
|
-
}
|
|
54
|
-
// Create command
|
|
55
|
-
const command = await slashCommandManager.createCommand(name, content, metadata ?? {}, scope, threadPath);
|
|
56
|
-
return c.json(command, 201);
|
|
57
|
-
}
|
|
58
|
-
catch (error) {
|
|
59
|
-
console.error("Failed to create slash command:", error);
|
|
60
|
-
return c.json({
|
|
61
|
-
error: {
|
|
62
|
-
code: "CREATE_FAILED",
|
|
63
|
-
message: error instanceof Error ? error.message : "Failed to create slash command",
|
|
64
|
-
details: error,
|
|
65
|
-
timestamp: new Date().toISOString(),
|
|
66
|
-
},
|
|
67
|
-
}, 500);
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
//# sourceMappingURL=slash-commands-post.route.js.map
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* PUT /api/slash-commands
|
|
3
|
-
* Update an existing slash command
|
|
4
|
-
* Body: { filePath, content, metadata }
|
|
5
|
-
*/
|
|
6
|
-
import type { Context } from "hono";
|
|
7
|
-
export declare function updateSlashCommand(c: Context): Promise<(Response & import("hono").TypedResponse<{
|
|
8
|
-
error: {
|
|
9
|
-
code: string;
|
|
10
|
-
message: string;
|
|
11
|
-
timestamp: string;
|
|
12
|
-
};
|
|
13
|
-
}, 400, "json">) | (Response & import("hono").TypedResponse<{
|
|
14
|
-
success: true;
|
|
15
|
-
}, import("hono/utils/http-status").ContentfulStatusCode, "json">) | (Response & import("hono").TypedResponse<{
|
|
16
|
-
error: {
|
|
17
|
-
code: string;
|
|
18
|
-
message: string;
|
|
19
|
-
details: import("hono/utils/types").JSONValue;
|
|
20
|
-
timestamp: string;
|
|
21
|
-
};
|
|
22
|
-
}, 500, "json">)>;
|
|
23
|
-
//# sourceMappingURL=slash-commands-put.route.d.ts.map
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* PUT /api/slash-commands
|
|
3
|
-
* Update an existing slash command
|
|
4
|
-
* Body: { filePath, content, metadata }
|
|
5
|
-
*/
|
|
6
|
-
import { SlashCommandManager } from "../slash-commands/slash-commands.manager.js";
|
|
7
|
-
const slashCommandManager = new SlashCommandManager();
|
|
8
|
-
export async function updateSlashCommand(c) {
|
|
9
|
-
try {
|
|
10
|
-
const body = await c.req.json();
|
|
11
|
-
const { filePath, content, metadata } = body;
|
|
12
|
-
if (!filePath || !content) {
|
|
13
|
-
return c.json({
|
|
14
|
-
error: {
|
|
15
|
-
code: "MISSING_FIELDS",
|
|
16
|
-
message: "filePath and content are required",
|
|
17
|
-
timestamp: new Date().toISOString(),
|
|
18
|
-
},
|
|
19
|
-
}, 400);
|
|
20
|
-
}
|
|
21
|
-
await slashCommandManager.updateCommand(filePath, content, metadata ?? {});
|
|
22
|
-
return c.json({ success: true });
|
|
23
|
-
}
|
|
24
|
-
catch (error) {
|
|
25
|
-
console.error("Failed to update slash command:", error);
|
|
26
|
-
return c.json({
|
|
27
|
-
error: {
|
|
28
|
-
code: "UPDATE_FAILED",
|
|
29
|
-
message: error instanceof Error ? error.message : "Failed to update slash command",
|
|
30
|
-
details: error,
|
|
31
|
-
timestamp: new Date().toISOString(),
|
|
32
|
-
},
|
|
33
|
-
}, 500);
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
//# sourceMappingURL=slash-commands-put.route.js.map
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Slash Command Manager
|
|
3
|
-
*
|
|
4
|
-
* Loads and manages slash commands from markdown files with frontmatter.
|
|
5
|
-
* Commands can be stored in:
|
|
6
|
-
* - Project-specific: ./.agents/commands/ (relative to thread path)
|
|
7
|
-
* - Global: ~/.agents/commands/
|
|
8
|
-
*/
|
|
9
|
-
import type { SlashCommand, SlashCommandMetadata } from "@tarsk/shared";
|
|
10
|
-
/**
|
|
11
|
-
* SlashCommandManager handles loading, creating, and managing slash commands
|
|
12
|
-
*/
|
|
13
|
-
export declare class SlashCommandManager {
|
|
14
|
-
/**
|
|
15
|
-
* Built-in commands that cannot be overridden
|
|
16
|
-
*/
|
|
17
|
-
private static BUILT_IN_COMMANDS;
|
|
18
|
-
/**
|
|
19
|
-
* Load all available commands for a given thread
|
|
20
|
-
* Project commands override global ones with the same name
|
|
21
|
-
* Built-in commands cannot be overridden
|
|
22
|
-
*/
|
|
23
|
-
loadCommands(threadPath: string): Promise<SlashCommand[]>;
|
|
24
|
-
/**
|
|
25
|
-
* Load commands from a specific directory
|
|
26
|
-
*/
|
|
27
|
-
private loadCommandsFromDir;
|
|
28
|
-
/**
|
|
29
|
-
* Create a new command
|
|
30
|
-
* Creates the directory if it doesn't exist
|
|
31
|
-
*/
|
|
32
|
-
createCommand(name: string, content: string, metadata: SlashCommandMetadata, scope: "global" | "project", threadPath?: string): Promise<SlashCommand>;
|
|
33
|
-
/**
|
|
34
|
-
* Update an existing command
|
|
35
|
-
*/
|
|
36
|
-
updateCommand(filePath: string, content: string, metadata: SlashCommandMetadata): Promise<void>;
|
|
37
|
-
/**
|
|
38
|
-
* Delete a command
|
|
39
|
-
*/
|
|
40
|
-
deleteCommand(filePath: string): Promise<void>;
|
|
41
|
-
/**
|
|
42
|
-
* Get a specific command by name
|
|
43
|
-
*/
|
|
44
|
-
getCommand(name: string, threadPath: string): Promise<SlashCommand | null>;
|
|
45
|
-
}
|
|
46
|
-
//# sourceMappingURL=slash-commands.manager.d.ts.map
|