@xihe-lab/tapd-core 2.0.0-rc.1
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/LICENSE +190 -0
- package/dist/advisor/advisor.test.d.ts +2 -0
- package/dist/advisor/advisor.test.d.ts.map +1 -0
- package/dist/advisor/advisor.test.js +102 -0
- package/dist/advisor/advisor.test.js.map +1 -0
- package/dist/advisor/index.d.ts +19 -0
- package/dist/advisor/index.d.ts.map +1 -0
- package/dist/advisor/index.js +240 -0
- package/dist/advisor/index.js.map +1 -0
- package/dist/config/config.d.ts +43 -0
- package/dist/config/config.d.ts.map +1 -0
- package/dist/config/config.js +221 -0
- package/dist/config/config.js.map +1 -0
- package/dist/config/config.test.d.ts +2 -0
- package/dist/config/config.test.d.ts.map +1 -0
- package/dist/config/config.test.js +229 -0
- package/dist/config/config.test.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -0
- package/dist/registry/cli-meta.d.ts +4 -0
- package/dist/registry/cli-meta.d.ts.map +1 -0
- package/dist/registry/cli-meta.js +104 -0
- package/dist/registry/cli-meta.js.map +1 -0
- package/dist/registry/debug-commands.d.ts +2 -0
- package/dist/registry/debug-commands.d.ts.map +1 -0
- package/dist/registry/debug-commands.js +47 -0
- package/dist/registry/debug-commands.js.map +1 -0
- package/dist/registry/derive-command.d.ts +6 -0
- package/dist/registry/derive-command.d.ts.map +1 -0
- package/dist/registry/derive-command.js +69 -0
- package/dist/registry/derive-command.js.map +1 -0
- package/dist/registry/long-id-guard.d.ts +3 -0
- package/dist/registry/long-id-guard.d.ts.map +1 -0
- package/dist/registry/long-id-guard.js +39 -0
- package/dist/registry/long-id-guard.js.map +1 -0
- package/dist/registry/long-id-guard.test.d.ts +2 -0
- package/dist/registry/long-id-guard.test.d.ts.map +1 -0
- package/dist/registry/long-id-guard.test.js +224 -0
- package/dist/registry/long-id-guard.test.js.map +1 -0
- package/dist/registry/registry.d.ts +43 -0
- package/dist/registry/registry.d.ts.map +1 -0
- package/dist/registry/registry.js +131 -0
- package/dist/registry/registry.js.map +1 -0
- package/dist/registry/registry.test.d.ts +2 -0
- package/dist/registry/registry.test.d.ts.map +1 -0
- package/dist/registry/registry.test.js +220 -0
- package/dist/registry/registry.test.js.map +1 -0
- package/dist/registry/richtext-manifests.generated.d.ts +3 -0
- package/dist/registry/richtext-manifests.generated.d.ts.map +1 -0
- package/dist/registry/richtext-manifests.generated.js +98 -0
- package/dist/registry/richtext-manifests.generated.js.map +1 -0
- package/dist/registry/richtext.d.ts +6 -0
- package/dist/registry/richtext.d.ts.map +1 -0
- package/dist/registry/richtext.js +64 -0
- package/dist/registry/richtext.js.map +1 -0
- package/dist/registry/richtext.test.d.ts +2 -0
- package/dist/registry/richtext.test.d.ts.map +1 -0
- package/dist/registry/richtext.test.js +210 -0
- package/dist/registry/richtext.test.js.map +1 -0
- package/dist/registry/write-policy.d.ts +3 -0
- package/dist/registry/write-policy.d.ts.map +1 -0
- package/dist/registry/write-policy.js +5 -0
- package/dist/registry/write-policy.js.map +1 -0
- package/dist/schema/export.d.ts +12 -0
- package/dist/schema/export.d.ts.map +1 -0
- package/dist/schema/export.js +39 -0
- package/dist/schema/export.js.map +1 -0
- package/dist/schema/export.test.d.ts +2 -0
- package/dist/schema/export.test.d.ts.map +1 -0
- package/dist/schema/export.test.js +68 -0
- package/dist/schema/export.test.js.map +1 -0
- package/dist/sdk-routes.d.ts +9 -0
- package/dist/sdk-routes.d.ts.map +1 -0
- package/dist/sdk-routes.js +148 -0
- package/dist/sdk-routes.js.map +1 -0
- package/dist/tapd-client.d.ts +99 -0
- package/dist/tapd-client.d.ts.map +1 -0
- package/dist/tapd-client.js +252 -0
- package/dist/tapd-client.js.map +1 -0
- package/dist/tools/attachment.d.ts +3 -0
- package/dist/tools/attachment.d.ts.map +1 -0
- package/dist/tools/attachment.js +99 -0
- package/dist/tools/attachment.js.map +1 -0
- package/dist/tools/board.d.ts +3 -0
- package/dist/tools/board.d.ts.map +1 -0
- package/dist/tools/board.js +98 -0
- package/dist/tools/board.js.map +1 -0
- package/dist/tools/bug.d.ts +3 -0
- package/dist/tools/bug.d.ts.map +1 -0
- package/dist/tools/bug.js +619 -0
- package/dist/tools/bug.js.map +1 -0
- package/dist/tools/changes.d.ts +3 -0
- package/dist/tools/changes.d.ts.map +1 -0
- package/dist/tools/changes.js +73 -0
- package/dist/tools/changes.js.map +1 -0
- package/dist/tools/comment.d.ts +3 -0
- package/dist/tools/comment.d.ts.map +1 -0
- package/dist/tools/comment.js +93 -0
- package/dist/tools/comment.js.map +1 -0
- package/dist/tools/custom-fields.d.ts +3 -0
- package/dist/tools/custom-fields.d.ts.map +1 -0
- package/dist/tools/custom-fields.js +105 -0
- package/dist/tools/custom-fields.js.map +1 -0
- package/dist/tools/image.d.ts +3 -0
- package/dist/tools/image.d.ts.map +1 -0
- package/dist/tools/image.js +23 -0
- package/dist/tools/image.js.map +1 -0
- package/dist/tools/index.d.ts +3 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +55 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/iteration.d.ts +3 -0
- package/dist/tools/iteration.d.ts.map +1 -0
- package/dist/tools/iteration.js +190 -0
- package/dist/tools/iteration.js.map +1 -0
- package/dist/tools/md-to-html.test.d.ts +2 -0
- package/dist/tools/md-to-html.test.d.ts.map +1 -0
- package/dist/tools/md-to-html.test.js +125 -0
- package/dist/tools/md-to-html.test.js.map +1 -0
- package/dist/tools/mini-comment.d.ts +3 -0
- package/dist/tools/mini-comment.d.ts.map +1 -0
- package/dist/tools/mini-comment.js +74 -0
- package/dist/tools/mini-comment.js.map +1 -0
- package/dist/tools/mini-item.d.ts +3 -0
- package/dist/tools/mini-item.d.ts.map +1 -0
- package/dist/tools/mini-item.js +166 -0
- package/dist/tools/mini-item.js.map +1 -0
- package/dist/tools/mini-workspace.d.ts +3 -0
- package/dist/tools/mini-workspace.d.ts.map +1 -0
- package/dist/tools/mini-workspace.js +43 -0
- package/dist/tools/mini-workspace.js.map +1 -0
- package/dist/tools/program.d.ts +3 -0
- package/dist/tools/program.d.ts.map +1 -0
- package/dist/tools/program.js +27 -0
- package/dist/tools/program.js.map +1 -0
- package/dist/tools/relations.d.ts +3 -0
- package/dist/tools/relations.d.ts.map +1 -0
- package/dist/tools/relations.js +68 -0
- package/dist/tools/relations.js.map +1 -0
- package/dist/tools/release.d.ts +3 -0
- package/dist/tools/release.d.ts.map +1 -0
- package/dist/tools/release.js +250 -0
- package/dist/tools/release.js.map +1 -0
- package/dist/tools/report.d.ts +3 -0
- package/dist/tools/report.d.ts.map +1 -0
- package/dist/tools/report.js +38 -0
- package/dist/tools/report.js.map +1 -0
- package/dist/tools/settings.d.ts +3 -0
- package/dist/tools/settings.d.ts.map +1 -0
- package/dist/tools/settings.js +409 -0
- package/dist/tools/settings.js.map +1 -0
- package/dist/tools/source.d.ts +3 -0
- package/dist/tools/source.d.ts.map +1 -0
- package/dist/tools/source.js +69 -0
- package/dist/tools/source.js.map +1 -0
- package/dist/tools/story.d.ts +3 -0
- package/dist/tools/story.d.ts.map +1 -0
- package/dist/tools/story.js +680 -0
- package/dist/tools/story.js.map +1 -0
- package/dist/tools/task.d.ts +3 -0
- package/dist/tools/task.d.ts.map +1 -0
- package/dist/tools/task.js +267 -0
- package/dist/tools/task.js.map +1 -0
- package/dist/tools/test.d.ts +3 -0
- package/dist/tools/test.d.ts.map +1 -0
- package/dist/tools/test.js +564 -0
- package/dist/tools/test.js.map +1 -0
- package/dist/tools/timesheet.d.ts +3 -0
- package/dist/tools/timesheet.d.ts.map +1 -0
- package/dist/tools/timesheet.js +118 -0
- package/dist/tools/timesheet.js.map +1 -0
- package/dist/tools/user.d.ts +3 -0
- package/dist/tools/user.d.ts.map +1 -0
- package/dist/tools/user.js +57 -0
- package/dist/tools/user.js.map +1 -0
- package/dist/tools/utility.d.ts +3 -0
- package/dist/tools/utility.d.ts.map +1 -0
- package/dist/tools/utility.js +165 -0
- package/dist/tools/utility.js.map +1 -0
- package/dist/tools/wiki.d.ts +3 -0
- package/dist/tools/wiki.d.ts.map +1 -0
- package/dist/tools/wiki.js +227 -0
- package/dist/tools/wiki.js.map +1 -0
- package/dist/tools/workflow.d.ts +3 -0
- package/dist/tools/workflow.d.ts.map +1 -0
- package/dist/tools/workflow.js +116 -0
- package/dist/tools/workflow.js.map +1 -0
- package/dist/tools/workspace.d.ts +3 -0
- package/dist/tools/workspace.d.ts.map +1 -0
- package/dist/tools/workspace.js +137 -0
- package/dist/tools/workspace.js.map +1 -0
- package/dist/tools/zz-acceptance-echo.d.ts +3 -0
- package/dist/tools/zz-acceptance-echo.d.ts.map +1 -0
- package/dist/tools/zz-acceptance-echo.js +9 -0
- package/dist/tools/zz-acceptance-echo.js.map +1 -0
- package/dist/types.d.ts +34 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +49 -0
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
const STORY_COLUMNS = ['id', 'name', 'priority_label', 'owner', 'status'];
|
|
2
|
+
const BUG_COLUMNS = ['id', 'title', 'severity', 'current_owner', 'status'];
|
|
3
|
+
const TASK_COLUMNS = ['id', 'name', 'owner', 'status'];
|
|
4
|
+
const ITERATION_COLUMNS = ['id', 'name', 'startdate', 'enddate', 'status'];
|
|
5
|
+
const WIKI_COLUMNS = ['id', 'title', 'owner', 'created'];
|
|
6
|
+
export const MANUAL_CLI_META = {
|
|
7
|
+
// story
|
|
8
|
+
tapd_get_stories: { resource: 'story', action: 'list', outputFormat: 'table', columns: STORY_COLUMNS },
|
|
9
|
+
tapd_create_story: { resource: 'story', action: 'create' },
|
|
10
|
+
tapd_update_story: { resource: 'story', action: 'update', positional: 'id' },
|
|
11
|
+
tapd_get_story_count: { resource: 'story', action: 'count' },
|
|
12
|
+
tapd_copy_story: { resource: 'story', action: 'copy', positional: 'id' },
|
|
13
|
+
tapd_batch_update_stories: { resource: 'story', action: 'batch-update' },
|
|
14
|
+
tapd_get_story_categories: { resource: 'story-category', action: 'list', outputFormat: 'table' },
|
|
15
|
+
tapd_get_story_categories_count: { resource: 'story-category', action: 'count' },
|
|
16
|
+
tapd_add_story_category: { resource: 'story-category', action: 'create' },
|
|
17
|
+
tapd_update_story_category: { resource: 'story-category', action: 'update', positional: 'id' },
|
|
18
|
+
tapd_get_workitem_types: { resource: 'workitem-type', action: 'list', outputFormat: 'table' },
|
|
19
|
+
tapd_change_workitem_type: { resource: 'story', action: 'set-type', positional: 'id' },
|
|
20
|
+
tapd_get_story_fields_info: { resource: 'story', action: 'fields-info' },
|
|
21
|
+
tapd_get_story_fields_lable: { resource: 'story', action: 'fields-lable' },
|
|
22
|
+
tapd_get_story_template_list: { resource: 'story', action: 'template-list', outputFormat: 'table' },
|
|
23
|
+
tapd_get_default_story_template: { resource: 'story', action: 'default-template' },
|
|
24
|
+
tapd_get_story_related_bugs: { resource: 'story', action: 'related-bugs', outputFormat: 'table', columns: BUG_COLUMNS },
|
|
25
|
+
tapd_create_story_bug: { resource: 'story-bug-relation', action: 'create' },
|
|
26
|
+
tapd_remove_story_bug_relations: { resource: 'story-bug-relation', action: 'delete' },
|
|
27
|
+
tapd_get_story_tcase: { resource: 'story-tcase-relation', action: 'list', outputFormat: 'table' },
|
|
28
|
+
tapd_create_story_tcase: { resource: 'story-tcase-relation', action: 'create' },
|
|
29
|
+
tapd_get_time_relative_stories: { resource: 'story-relation', action: 'list', outputFormat: 'table' },
|
|
30
|
+
tapd_save_time_relations: { resource: 'story-relation', action: 'save' },
|
|
31
|
+
tapd_delete_time_relations: { resource: 'story-relation', action: 'delete' },
|
|
32
|
+
tapd_get_removed_stories: { resource: 'story', action: 'list-removed', outputFormat: 'table', columns: STORY_COLUMNS },
|
|
33
|
+
tapd_update_story_parent: { resource: 'story', action: 'set-parent', positional: 'id' },
|
|
34
|
+
tapd_get_stories_by_view_conf_id: { resource: 'story', action: 'list-by-view', outputFormat: 'table', columns: STORY_COLUMNS },
|
|
35
|
+
tapd_get_story_steps: { resource: 'story', action: 'steps' },
|
|
36
|
+
// bug
|
|
37
|
+
tapd_get_bugs: { resource: 'bug', action: 'list', outputFormat: 'table', columns: BUG_COLUMNS },
|
|
38
|
+
tapd_create_bug: { resource: 'bug', action: 'create' },
|
|
39
|
+
tapd_update_bug: { resource: 'bug', action: 'update', positional: 'id' },
|
|
40
|
+
tapd_get_bug_count: { resource: 'bug', action: 'count' },
|
|
41
|
+
tapd_get_bug_changes: { resource: 'bug', action: 'changes', outputFormat: 'table' },
|
|
42
|
+
tapd_get_bug_changes_count: { resource: 'bug', action: 'changes-count' },
|
|
43
|
+
tapd_get_bug_custom_fields_settings: { resource: 'bug', action: 'custom-fields-settings' },
|
|
44
|
+
tapd_get_bug_fields_info: { resource: 'bug', action: 'fields-info' },
|
|
45
|
+
tapd_get_bug_fields_lable: { resource: 'bug', action: 'fields-lable' },
|
|
46
|
+
tapd_get_bug_template_list: { resource: 'bug', action: 'template-list', outputFormat: 'table' },
|
|
47
|
+
tapd_get_default_bug_template: { resource: 'bug', action: 'default-template' },
|
|
48
|
+
tapd_batch_update_bugs: { resource: 'bug', action: 'batch-update' },
|
|
49
|
+
tapd_copy_bug: { resource: 'bug', action: 'copy', positional: 'id' },
|
|
50
|
+
tapd_get_link_bugs: { resource: 'bug', action: 'list-links', outputFormat: 'table' },
|
|
51
|
+
tapd_link_bugs: { resource: 'bug', action: 'link' },
|
|
52
|
+
tapd_delete_link_bugs: { resource: 'bug', action: 'delete-link' },
|
|
53
|
+
tapd_get_related_stories: { resource: 'bug', action: 'related-stories', outputFormat: 'table', columns: STORY_COLUMNS },
|
|
54
|
+
tapd_get_bugs_by_view_conf_id: { resource: 'bug', action: 'list-by-view', outputFormat: 'table', columns: BUG_COLUMNS },
|
|
55
|
+
tapd_get_removed_bugs: { resource: 'bug', action: 'list-removed', outputFormat: 'table', columns: BUG_COLUMNS },
|
|
56
|
+
tapd_bug_ids_to_query_token: { resource: 'bug', action: 'ids-to-query-token' },
|
|
57
|
+
// task
|
|
58
|
+
tapd_get_tasks: { resource: 'task', action: 'list', outputFormat: 'table', columns: TASK_COLUMNS },
|
|
59
|
+
tapd_create_task: { resource: 'task', action: 'create' },
|
|
60
|
+
tapd_update_task: { resource: 'task', action: 'update', positional: 'id' },
|
|
61
|
+
tapd_get_task_count: { resource: 'task', action: 'count' },
|
|
62
|
+
tapd_batch_update_tasks: { resource: 'task', action: 'batch-update' },
|
|
63
|
+
tapd_get_removed_tasks: { resource: 'task', action: 'list-removed', outputFormat: 'table', columns: TASK_COLUMNS },
|
|
64
|
+
tapd_get_tasks_by_view_conf_id: { resource: 'task', action: 'list-by-view', outputFormat: 'table', columns: TASK_COLUMNS },
|
|
65
|
+
// iteration
|
|
66
|
+
tapd_get_iterations: { resource: 'iteration', action: 'list', outputFormat: 'table', columns: ITERATION_COLUMNS },
|
|
67
|
+
tapd_create_iteration: { resource: 'iteration', action: 'create' },
|
|
68
|
+
tapd_update_iteration: { resource: 'iteration', action: 'update', positional: 'id' },
|
|
69
|
+
tapd_get_iteration_count: { resource: 'iteration', action: 'count' },
|
|
70
|
+
tapd_get_iteration_changes: { resource: 'iteration', action: 'changes', outputFormat: 'table' },
|
|
71
|
+
tapd_lock_iteration: { resource: 'iteration', action: 'lock', positional: 'id' },
|
|
72
|
+
tapd_unlock_iteration: { resource: 'iteration', action: 'unlock', positional: 'id' },
|
|
73
|
+
// wiki
|
|
74
|
+
tapd_get_wikis: { resource: 'wiki', action: 'list', outputFormat: 'table', columns: WIKI_COLUMNS },
|
|
75
|
+
tapd_create_wiki: { resource: 'wiki', action: 'create' },
|
|
76
|
+
tapd_update_wiki: { resource: 'wiki', action: 'update', positional: 'id' },
|
|
77
|
+
tapd_get_wiki_count: { resource: 'wiki', action: 'count' },
|
|
78
|
+
tapd_get_wiki_attachments_count: { resource: 'wiki', action: 'attachments-count' },
|
|
79
|
+
tapd_get_wiki_drawios: { resource: 'wiki', action: 'drawios' },
|
|
80
|
+
tapd_get_wiki_entity_permissions: { resource: 'wiki', action: 'entity-permissions' },
|
|
81
|
+
tapd_get_wiki_followers: { resource: 'wiki', action: 'followers', outputFormat: 'table' },
|
|
82
|
+
tapd_get_wiki_followers_count: { resource: 'wiki', action: 'followers-count' },
|
|
83
|
+
tapd_get_wiki_tags: { resource: 'wiki', action: 'tags', outputFormat: 'table' },
|
|
84
|
+
tapd_get_wiki_tags_count: { resource: 'wiki', action: 'tags-count' },
|
|
85
|
+
// exceptions (FSD 4.1.3)
|
|
86
|
+
tapd_short_to_long_id: { resource: 'id', action: 'to-long' },
|
|
87
|
+
tapd_get_current_user: { resource: 'auth', action: 'whoami' },
|
|
88
|
+
tapd_get_image_url: { resource: 'image', action: 'get-url' },
|
|
89
|
+
tapd_md_to_html: { resource: 'md', action: 'to-html' },
|
|
90
|
+
tapd_html_to_md: { resource: 'md', action: 'to-md' },
|
|
91
|
+
tapd_create_comment: { resource: 'story', action: 'comment', defaults: { entry_type: 'story' } },
|
|
92
|
+
tapd_get_comments: { resource: 'comment', action: 'list' },
|
|
93
|
+
tapd_update_comment: { resource: 'comment', action: 'update', positional: 'id' },
|
|
94
|
+
tapd_get_comments_count: { resource: 'comment', action: 'count' },
|
|
95
|
+
tapd_execute_tcase_instance: { resource: 'test', action: 'execute-instance' },
|
|
96
|
+
// extra exceptions: auto-derivation produces broken resource names (review finding)
|
|
97
|
+
tapd_add_custom_field_config: { resource: 'custom-field-config', action: 'create' },
|
|
98
|
+
tapd_update_cascade_field_options: { resource: 'custom-field-config', action: 'update-cascade-options' },
|
|
99
|
+
tapd_program_relate_workspace: { resource: 'program', action: 'relate-workspace' },
|
|
100
|
+
tapd_program_bind_entities: { resource: 'program', action: 'bind-entities' },
|
|
101
|
+
tapd_get_attachment: { resource: 'attachment', action: 'get', positional: 'id' },
|
|
102
|
+
};
|
|
103
|
+
export const EXPLICIT_WRITE = new Set(['tapd_change_workitem_type']);
|
|
104
|
+
//# sourceMappingURL=cli-meta.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli-meta.js","sourceRoot":"","sources":["../../src/registry/cli-meta.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"debug-commands.d.ts","sourceRoot":"","sources":["../../src/registry/debug-commands.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { allTools } from '../tools/index.js';
|
|
2
|
+
import { ToolRegistry } from './registry.js';
|
|
3
|
+
const outPath = process.argv[2];
|
|
4
|
+
const registry = new ToolRegistry();
|
|
5
|
+
registry.register(allTools);
|
|
6
|
+
const commands = registry.commands();
|
|
7
|
+
const writeCount = commands.filter(c => c.write).length;
|
|
8
|
+
const rows = commands.map(c => ({
|
|
9
|
+
tool: c.tool,
|
|
10
|
+
command: `tapd ${c.resource} ${c.action}`,
|
|
11
|
+
write: c.write ? 'Y' : '',
|
|
12
|
+
hidden: c.hidden ? 'Y' : '',
|
|
13
|
+
}));
|
|
14
|
+
const width = (header, get) => Math.max(header.length, ...rows.map(r => get(r).length));
|
|
15
|
+
const pad = (s, w) => s + ' '.repeat(Math.max(0, w - s.length));
|
|
16
|
+
const tw = width('TOOL', r => r.tool);
|
|
17
|
+
const cw = width('COMMAND', r => r.command);
|
|
18
|
+
const lines = [
|
|
19
|
+
`total: ${commands.length} tools, write: ${writeCount}, read: ${commands.length - writeCount}`,
|
|
20
|
+
'',
|
|
21
|
+
pad('TOOL', tw) + ' ' + pad('COMMAND', cw) + ' WRITE HIDDEN',
|
|
22
|
+
...rows.map(r => pad(r.tool, tw) + ' ' + pad(r.command, cw) + ' ' + pad(r.write, 5) + ' ' + r.hidden),
|
|
23
|
+
];
|
|
24
|
+
const seen = new Map();
|
|
25
|
+
for (const c of commands) {
|
|
26
|
+
const key = `${c.resource} ${c.action}`;
|
|
27
|
+
const list = seen.get(key) ?? [];
|
|
28
|
+
list.push(c.tool);
|
|
29
|
+
seen.set(key, list);
|
|
30
|
+
}
|
|
31
|
+
const collisions = [...seen.entries()].filter(([, tools]) => tools.length > 1);
|
|
32
|
+
if (collisions.length > 0) {
|
|
33
|
+
lines.push('', 'COLLISIONS (same command, multiple tools):');
|
|
34
|
+
for (const [key, tools] of collisions) {
|
|
35
|
+
lines.push(` tapd ${key} <- ${tools.join(', ')}`);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
const output = lines.join('\n');
|
|
39
|
+
if (outPath) {
|
|
40
|
+
const { writeFileSync } = await import('node:fs');
|
|
41
|
+
writeFileSync(outPath, output + '\n');
|
|
42
|
+
console.error(`written to ${outPath}`);
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
console.log(output);
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=debug-commands.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"debug-commands.js","sourceRoot":"","sources":["../../src/registry/debug-commands.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"derive-command.d.ts","sourceRoot":"","sources":["../../src/registry/derive-command.ts"],"names":[],"mappings":"AA8BA,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB;AAUD,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,mBAAmB,CAsC/D"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
const PLURAL_TO_SINGULAR = {
|
|
2
|
+
stories: 'story',
|
|
3
|
+
bugs: 'bug',
|
|
4
|
+
tasks: 'task',
|
|
5
|
+
iterations: 'iteration',
|
|
6
|
+
wikis: 'wiki',
|
|
7
|
+
comments: 'comment',
|
|
8
|
+
timesheets: 'timesheet',
|
|
9
|
+
workspaces: 'workspace',
|
|
10
|
+
items: 'item',
|
|
11
|
+
categories: 'category',
|
|
12
|
+
plans: 'plan',
|
|
13
|
+
cards: 'card',
|
|
14
|
+
projects: 'project',
|
|
15
|
+
modules: 'module',
|
|
16
|
+
versions: 'version',
|
|
17
|
+
features: 'feature',
|
|
18
|
+
baselines: 'baseline',
|
|
19
|
+
workflows: 'workflow',
|
|
20
|
+
roles: 'role',
|
|
21
|
+
releases: 'release',
|
|
22
|
+
attachments: 'attachment',
|
|
23
|
+
};
|
|
24
|
+
const VERB_MAP = {
|
|
25
|
+
get: 'list',
|
|
26
|
+
add: 'create',
|
|
27
|
+
remove: 'delete',
|
|
28
|
+
};
|
|
29
|
+
function singularize(word) {
|
|
30
|
+
return PLURAL_TO_SINGULAR[word] ?? word;
|
|
31
|
+
}
|
|
32
|
+
function kebab(words) {
|
|
33
|
+
return words.filter(Boolean).map(w => w.replace(/_/g, '-')).join('-');
|
|
34
|
+
}
|
|
35
|
+
export function deriveCommand(name) {
|
|
36
|
+
let segments = name.replace(/^tapd_/, '').split('_');
|
|
37
|
+
let prefix = '';
|
|
38
|
+
if (segments[0] === 'mini') {
|
|
39
|
+
prefix = 'mini';
|
|
40
|
+
segments = segments.slice(1);
|
|
41
|
+
}
|
|
42
|
+
let verb = segments[0] ?? '';
|
|
43
|
+
let rest = segments.slice(1);
|
|
44
|
+
if (verb === 'batch' && rest.length > 0) {
|
|
45
|
+
verb = `batch_${rest[0]}`;
|
|
46
|
+
rest = rest.slice(1);
|
|
47
|
+
}
|
|
48
|
+
if (rest.length === 0) {
|
|
49
|
+
return { resource: kebab([prefix, verb]), action: 'run' };
|
|
50
|
+
}
|
|
51
|
+
if (rest.length === 1) {
|
|
52
|
+
return {
|
|
53
|
+
resource: kebab([prefix, singularize(rest[0])]),
|
|
54
|
+
action: VERB_MAP[verb] ?? verb.replace(/_/g, '-'),
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
const lastWord = rest[rest.length - 1];
|
|
58
|
+
if (PLURAL_TO_SINGULAR[lastWord]) {
|
|
59
|
+
return {
|
|
60
|
+
resource: kebab([prefix, ...rest.map(singularize)]),
|
|
61
|
+
action: VERB_MAP[verb] ?? verb.replace(/_/g, '-'),
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
const resource = kebab([prefix, singularize(rest[0])]);
|
|
65
|
+
const tail = kebab(rest.slice(1));
|
|
66
|
+
const headVerb = verb === 'get' ? '' : (VERB_MAP[verb] ?? verb.replace(/_/g, '-'));
|
|
67
|
+
return { resource, action: kebab([headVerb, tail]) };
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=derive-command.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"derive-command.js","sourceRoot":"","sources":["../../src/registry/derive-command.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"long-id-guard.d.ts","sourceRoot":"","sources":["../../src/registry/long-id-guard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AA0BxB,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU,CAWpE"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
const LONG_ID_PARAM = /^(id|ids)$|^([a-z_]+_ids?)$/;
|
|
3
|
+
function wrapLongIdField(field, key) {
|
|
4
|
+
const wrap = (inner) => z.preprocess(v => {
|
|
5
|
+
if (typeof v !== 'number')
|
|
6
|
+
return v;
|
|
7
|
+
if (Number.isSafeInteger(v))
|
|
8
|
+
return String(v);
|
|
9
|
+
throw new Error(`参数 ${key} 的值超出 JS 安全整数范围(精度丢失),请以字符串(带引号)重传`);
|
|
10
|
+
}, inner);
|
|
11
|
+
if (field instanceof z.ZodString) {
|
|
12
|
+
const core = wrap(field);
|
|
13
|
+
return field.description ? core.describe(field.description) : core;
|
|
14
|
+
}
|
|
15
|
+
if (field instanceof z.ZodOptional || field instanceof z.ZodNullable) {
|
|
16
|
+
const inner = field._def.innerType;
|
|
17
|
+
if (!(inner instanceof z.ZodString))
|
|
18
|
+
return null;
|
|
19
|
+
const core = wrap(inner);
|
|
20
|
+
const rebuilt = field instanceof z.ZodOptional ? core.optional() : core.nullable();
|
|
21
|
+
return field.description ? rebuilt.describe(field.description) : rebuilt;
|
|
22
|
+
}
|
|
23
|
+
return null;
|
|
24
|
+
}
|
|
25
|
+
export function guardLongIdSchema(schema) {
|
|
26
|
+
if (!(schema instanceof z.ZodObject))
|
|
27
|
+
return schema;
|
|
28
|
+
const shape = schema.shape;
|
|
29
|
+
const next = {};
|
|
30
|
+
let touched = false;
|
|
31
|
+
for (const [key, field] of Object.entries(shape)) {
|
|
32
|
+
const wrapped = LONG_ID_PARAM.test(key) ? wrapLongIdField(field, key) : null;
|
|
33
|
+
next[key] = wrapped ?? field;
|
|
34
|
+
if (wrapped)
|
|
35
|
+
touched = true;
|
|
36
|
+
}
|
|
37
|
+
return touched ? z.object(next) : schema;
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=long-id-guard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"long-id-guard.js","sourceRoot":"","sources":["../../src/registry/long-id-guard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,aAAa,GAAG,6BAA6B,CAAC;AAEpD,SAAS,eAAe,CAAC,KAAmB,EAAE,GAAW;IACvD,MAAM,IAAI,GAAG,CAAC,KAAkB,EAAE,EAAE,CAClC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE;QACf,IAAI,OAAO,CAAC,KAAK,QAAQ;YAAE,OAAO,CAAC,CAAC;QACpC,IAAI,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC;YAAE,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;QAC9C,MAAM,IAAI,KAAK,CAAC,MAAM,GAAG,oCAAoC,CAAC,CAAC;IACjE,CAAC,EAAE,KAAK,CAAC,CAAC;IAEZ,IAAI,KAAK,YAAY,CAAC,CAAC,SAAS,EAAE,CAAC;QACjC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QACzB,OAAO,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACrE,CAAC;IACD,IAAI,KAAK,YAAY,CAAC,CAAC,WAAW,IAAI,KAAK,YAAY,CAAC,CAAC,WAAW,EAAE,CAAC;QACrE,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC;QACnC,IAAI,CAAC,CAAC,KAAK,YAAY,CAAC,CAAC,SAAS,CAAC;YAAE,OAAO,IAAI,CAAC;QACjD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QACzB,MAAM,OAAO,GAAG,KAAK,YAAY,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACnF,OAAO,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;IAC3E,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,MAAoB;IACpD,IAAI,CAAC,CAAC,MAAM,YAAY,CAAC,CAAC,SAAS,CAAC;QAAE,OAAO,MAAM,CAAC;IACpD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAqC,CAAC;IAC3D,MAAM,IAAI,GAAiC,EAAE,CAAC;IAC9C,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACjD,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAC7E,IAAI,CAAC,GAAG,CAAC,GAAG,OAAO,IAAI,KAAK,CAAC;QAC7B,IAAI,OAAO;YAAE,OAAO,GAAG,IAAI,CAAC;IAC9B,CAAC;IACD,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;AAC3C,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"long-id-guard.test.d.ts","sourceRoot":"","sources":["../../src/registry/long-id-guard.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
import assert from 'node:assert/strict';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { workflowTools } from '../tools/workflow.js';
|
|
4
|
+
import { ToolRegistry } from './registry.js';
|
|
5
|
+
function makeTool(overrides) {
|
|
6
|
+
return {
|
|
7
|
+
description: 'test tool',
|
|
8
|
+
inputSchema: z.object({}),
|
|
9
|
+
handler: () => Promise.resolve({ done: true }),
|
|
10
|
+
...overrides,
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
const fakeFactory = () => ({});
|
|
14
|
+
const checks = [
|
|
15
|
+
['safe integer number id is coerced to string', async () => {
|
|
16
|
+
const registry = new ToolRegistry();
|
|
17
|
+
let received;
|
|
18
|
+
registry.register([
|
|
19
|
+
makeTool({
|
|
20
|
+
name: 'tapd_get_story',
|
|
21
|
+
inputSchema: z.object({ id: z.string(), workspace_id: z.number().optional() }),
|
|
22
|
+
handler: (_c, params) => {
|
|
23
|
+
received = params;
|
|
24
|
+
return Promise.resolve(params);
|
|
25
|
+
},
|
|
26
|
+
}),
|
|
27
|
+
]);
|
|
28
|
+
const result = await registry.exec('tapd_get_story', { id: 39814312 }, { entry: 'mcp' }, fakeFactory);
|
|
29
|
+
assert.equal(result.ok, true);
|
|
30
|
+
assert.deepEqual(received, { id: '39814312' });
|
|
31
|
+
}],
|
|
32
|
+
['unsafe integer number id throws precise error via exec INVALID_ARGS', async () => {
|
|
33
|
+
const registry = new ToolRegistry();
|
|
34
|
+
const codes = [];
|
|
35
|
+
const audit = (e) => codes.push(e.errorCode);
|
|
36
|
+
registry.register([
|
|
37
|
+
makeTool({ name: 'tapd_get_story', inputSchema: z.object({ id: z.string() }) }),
|
|
38
|
+
]);
|
|
39
|
+
const result = await registry.exec('tapd_get_story', { id: Number('1139814312001001410') }, { entry: 'cli', onAudit: audit }, fakeFactory);
|
|
40
|
+
assert.equal(result.ok, false);
|
|
41
|
+
assert.equal(result.error?.code, 'INVALID_ARGS');
|
|
42
|
+
assert.match(result.error?.message ?? '', /超出 JS 安全整数范围/);
|
|
43
|
+
assert.match(result.error?.message ?? '', /字符串(带引号)重传/);
|
|
44
|
+
assert.equal(codes.at(-1), 'INVALID_ARGS');
|
|
45
|
+
}],
|
|
46
|
+
['optional id field wrapped: safe number rescued, missing stays optional', async () => {
|
|
47
|
+
const registry = new ToolRegistry();
|
|
48
|
+
let received;
|
|
49
|
+
registry.register([
|
|
50
|
+
makeTool({
|
|
51
|
+
name: 'tapd_get_stories',
|
|
52
|
+
inputSchema: z.object({
|
|
53
|
+
ids: z.string().optional(),
|
|
54
|
+
workspace_id: z.number().optional(),
|
|
55
|
+
}),
|
|
56
|
+
handler: (_c, params) => {
|
|
57
|
+
received = params;
|
|
58
|
+
return Promise.resolve(params);
|
|
59
|
+
},
|
|
60
|
+
}),
|
|
61
|
+
]);
|
|
62
|
+
const rescued = await registry.exec('tapd_get_stories', { ids: 123 }, { entry: 'mcp' }, fakeFactory);
|
|
63
|
+
assert.equal(rescued.ok, true);
|
|
64
|
+
assert.deepEqual(received, { ids: '123' });
|
|
65
|
+
const omitted = await registry.exec('tapd_get_stories', {}, { entry: 'mcp' }, fakeFactory);
|
|
66
|
+
assert.equal(omitted.ok, true);
|
|
67
|
+
}],
|
|
68
|
+
['nullable id field wrapped', async () => {
|
|
69
|
+
const registry = new ToolRegistry();
|
|
70
|
+
let received;
|
|
71
|
+
registry.register([
|
|
72
|
+
makeTool({
|
|
73
|
+
name: 'tapd_nullable_id',
|
|
74
|
+
inputSchema: z.object({ id: z.string().nullable() }),
|
|
75
|
+
handler: (_c, params) => {
|
|
76
|
+
received = params;
|
|
77
|
+
return Promise.resolve(params);
|
|
78
|
+
},
|
|
79
|
+
}),
|
|
80
|
+
]);
|
|
81
|
+
const rescued = await registry.exec('tapd_nullable_id', { id: 456 }, { entry: 'mcp' }, fakeFactory);
|
|
82
|
+
assert.equal(rescued.ok, true);
|
|
83
|
+
assert.deepEqual(received, { id: '456' });
|
|
84
|
+
const nulled = await registry.exec('tapd_nullable_id', { id: null }, { entry: 'mcp' }, fakeFactory);
|
|
85
|
+
assert.equal(nulled.ok, true);
|
|
86
|
+
assert.deepEqual(received, { id: null });
|
|
87
|
+
}],
|
|
88
|
+
['wrapped ids preserve describe guide for CLI help and MCP JSONSchema', () => {
|
|
89
|
+
const guide = '必须以字符串(带引号)传递,禁止传数值';
|
|
90
|
+
const registry = new ToolRegistry();
|
|
91
|
+
registry.register([
|
|
92
|
+
makeTool({
|
|
93
|
+
name: 'tapd_get_story',
|
|
94
|
+
inputSchema: z.object({
|
|
95
|
+
id: z.string().describe(`需求ID;${guide}`),
|
|
96
|
+
ids: z.string().optional().describe(`需求IDs;${guide}`),
|
|
97
|
+
}),
|
|
98
|
+
}),
|
|
99
|
+
]);
|
|
100
|
+
const shape = registry.get('tapd_get_story').inputSchema.shape;
|
|
101
|
+
assert.equal(shape.id?.description, `需求ID;${guide}`);
|
|
102
|
+
assert.equal(shape.ids?.description, `需求IDs;${guide}`);
|
|
103
|
+
}],
|
|
104
|
+
['non-id fields untouched: workspace_id stays number, name stays string', async () => {
|
|
105
|
+
const registry = new ToolRegistry();
|
|
106
|
+
let received;
|
|
107
|
+
registry.register([
|
|
108
|
+
makeTool({
|
|
109
|
+
name: 'tapd_get_stories',
|
|
110
|
+
inputSchema: z.object({
|
|
111
|
+
workspace_id: z.number().optional(),
|
|
112
|
+
name: z.string().optional(),
|
|
113
|
+
status: z.string().optional(),
|
|
114
|
+
}),
|
|
115
|
+
handler: (_c, params) => {
|
|
116
|
+
received = params;
|
|
117
|
+
return Promise.resolve(params);
|
|
118
|
+
},
|
|
119
|
+
}),
|
|
120
|
+
]);
|
|
121
|
+
const result = await registry.exec('tapd_get_stories', { workspace_id: 39814312, name: 'test' }, { entry: 'mcp' }, fakeFactory);
|
|
122
|
+
assert.equal(result.ok, true);
|
|
123
|
+
assert.deepEqual(received, { workspace_id: 39814312, name: 'test' });
|
|
124
|
+
const schema = registry.get('tapd_get_stories').inputSchema;
|
|
125
|
+
const inner = schema.shape.workspace_id._def.innerType;
|
|
126
|
+
assert.ok(inner instanceof z.ZodNumber);
|
|
127
|
+
}],
|
|
128
|
+
['string id passes through unchanged', async () => {
|
|
129
|
+
const registry = new ToolRegistry();
|
|
130
|
+
let received;
|
|
131
|
+
registry.register([
|
|
132
|
+
makeTool({
|
|
133
|
+
name: 'tapd_get_story',
|
|
134
|
+
inputSchema: z.object({ id: z.string() }),
|
|
135
|
+
handler: (_c, params) => {
|
|
136
|
+
received = params;
|
|
137
|
+
return Promise.resolve(params);
|
|
138
|
+
},
|
|
139
|
+
}),
|
|
140
|
+
]);
|
|
141
|
+
const result = await registry.exec('tapd_get_story', { id: '1139814312001001410' }, { entry: 'mcp' }, fakeFactory);
|
|
142
|
+
assert.equal(result.ok, true);
|
|
143
|
+
assert.deepEqual(received, { id: '1139814312001001410' });
|
|
144
|
+
}],
|
|
145
|
+
['list() exposes guarded schema so MCP SDK registration gets the guard', () => {
|
|
146
|
+
const registry = new ToolRegistry();
|
|
147
|
+
registry.register([
|
|
148
|
+
makeTool({
|
|
149
|
+
name: 'tapd_get_story',
|
|
150
|
+
inputSchema: z.object({ id: z.string().optional() }),
|
|
151
|
+
}),
|
|
152
|
+
]);
|
|
153
|
+
const tool = registry.list()[0];
|
|
154
|
+
const shape = tool.inputSchema.shape;
|
|
155
|
+
assert.equal(shape.id.constructor.name, 'ZodOptional');
|
|
156
|
+
const inner = shape.id._def.innerType;
|
|
157
|
+
assert.equal(inner.constructor.name, 'ZodEffects');
|
|
158
|
+
}],
|
|
159
|
+
['real workflow status_map: unsafe number workitem_type_id rejected with INVALID_ARGS', async () => {
|
|
160
|
+
const registry = new ToolRegistry();
|
|
161
|
+
registry.register(workflowTools);
|
|
162
|
+
const result = await registry.exec('tapd_get_workflow_status_map', { workspace_id: 39814312, system: 'story', workitem_type_id: Number('1139814312001001410') }, { entry: 'mcp' }, fakeFactory);
|
|
163
|
+
assert.equal(result.ok, false);
|
|
164
|
+
assert.equal(result.error?.code, 'INVALID_ARGS');
|
|
165
|
+
assert.match(result.error?.message ?? '', /workitem_type_id/);
|
|
166
|
+
assert.match(result.error?.message ?? '', /超出 JS 安全整数范围/);
|
|
167
|
+
assert.match(result.error?.message ?? '', /字符串(带引号)重传/);
|
|
168
|
+
}],
|
|
169
|
+
['real workflow status_map: string workitem_type_id reaches handler as string', async () => {
|
|
170
|
+
const registry = new ToolRegistry();
|
|
171
|
+
let receivedPath = '';
|
|
172
|
+
let receivedParams = {};
|
|
173
|
+
const stub = {
|
|
174
|
+
get: (path, params) => {
|
|
175
|
+
receivedPath = path;
|
|
176
|
+
receivedParams = params;
|
|
177
|
+
return Promise.resolve({ data: [] });
|
|
178
|
+
},
|
|
179
|
+
};
|
|
180
|
+
registry.register(workflowTools);
|
|
181
|
+
const result = await registry.exec('tapd_get_workflow_status_map', { workspace_id: 39814312, system: 'story', workitem_type_id: '1139814312001001410' }, { entry: 'mcp' }, () => stub);
|
|
182
|
+
assert.equal(result.ok, true);
|
|
183
|
+
assert.equal(receivedPath, '/workflows/status_map');
|
|
184
|
+
assert.equal(receivedParams.workitem_type_id, '1139814312001001410');
|
|
185
|
+
}],
|
|
186
|
+
['real workflow step_map: unsafe number rejected, safe number rescued to string', async () => {
|
|
187
|
+
const registry = new ToolRegistry();
|
|
188
|
+
let receivedParams = {};
|
|
189
|
+
const stub = {
|
|
190
|
+
get: (_path, params) => {
|
|
191
|
+
receivedParams = params;
|
|
192
|
+
return Promise.resolve({ data: [] });
|
|
193
|
+
},
|
|
194
|
+
};
|
|
195
|
+
registry.register(workflowTools);
|
|
196
|
+
const rejected = await registry.exec('tapd_get_workflow_step_map', { workspace_id: 39814312, system: 'story', workitem_type_id: Number('12345678901234567890') }, { entry: 'mcp' }, fakeFactory);
|
|
197
|
+
assert.equal(rejected.ok, false);
|
|
198
|
+
assert.equal(rejected.error?.code, 'INVALID_ARGS');
|
|
199
|
+
assert.match(rejected.error?.message ?? '', /超出 JS 安全整数范围/);
|
|
200
|
+
const rescued = await registry.exec('tapd_get_workflow_step_map', { workspace_id: 39814312, system: 'story', workitem_type_id: 12345678901 }, { entry: 'mcp' }, () => stub);
|
|
201
|
+
assert.equal(rescued.ok, true);
|
|
202
|
+
assert.equal(receivedParams.workitem_type_id, '12345678901');
|
|
203
|
+
}],
|
|
204
|
+
];
|
|
205
|
+
let failed = 0;
|
|
206
|
+
for (const [name, check] of checks) {
|
|
207
|
+
try {
|
|
208
|
+
await check();
|
|
209
|
+
console.log(`PASS ${name}`);
|
|
210
|
+
}
|
|
211
|
+
catch (error) {
|
|
212
|
+
failed++;
|
|
213
|
+
console.error(`FAIL ${name}`);
|
|
214
|
+
console.error(` ${error instanceof Error ? error.message : String(error)}`);
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
if (failed > 0) {
|
|
218
|
+
console.error(`\n${failed}/${checks.length} failed`);
|
|
219
|
+
process.exitCode = 1;
|
|
220
|
+
}
|
|
221
|
+
else {
|
|
222
|
+
console.log(`\n${checks.length}/${checks.length} passed`);
|
|
223
|
+
}
|
|
224
|
+
//# sourceMappingURL=long-id-guard.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"long-id-guard.test.js","sourceRoot":"","sources":["../../src/registry/long-id-guard.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import type { ToolDef } from '../types.js';
|
|
2
|
+
import type { TapdClient } from '../tapd-client.js';
|
|
3
|
+
export type Entry = 'cli' | 'mcp';
|
|
4
|
+
export interface ExecContext {
|
|
5
|
+
entry: Entry;
|
|
6
|
+
readOnly?: boolean;
|
|
7
|
+
timeoutMs?: number;
|
|
8
|
+
onAudit?: (event: AuditEvent) => void;
|
|
9
|
+
}
|
|
10
|
+
export interface AuditEvent {
|
|
11
|
+
ts: string;
|
|
12
|
+
entry: Entry;
|
|
13
|
+
tool: string;
|
|
14
|
+
args: Record<string, unknown>;
|
|
15
|
+
ok: boolean;
|
|
16
|
+
errorCode?: CliErrorCode;
|
|
17
|
+
durationMs: number;
|
|
18
|
+
}
|
|
19
|
+
export type CliErrorCode = 'TOOL_NOT_FOUND' | 'INVALID_ARGS' | 'READ_ONLY_BLOCKED' | 'AUTH_MISSING' | 'API_ERROR' | 'TIMEOUT';
|
|
20
|
+
export interface ExecResult<T = unknown> {
|
|
21
|
+
ok: boolean;
|
|
22
|
+
data?: T;
|
|
23
|
+
error?: {
|
|
24
|
+
code: CliErrorCode;
|
|
25
|
+
message: string;
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
export interface DerivedCommand {
|
|
29
|
+
tool: string;
|
|
30
|
+
resource: string;
|
|
31
|
+
action: string;
|
|
32
|
+
write: boolean;
|
|
33
|
+
hidden: boolean;
|
|
34
|
+
}
|
|
35
|
+
export declare class ToolRegistry {
|
|
36
|
+
private tools;
|
|
37
|
+
register(tools: ToolDef[]): void;
|
|
38
|
+
get(name: string): ToolDef | undefined;
|
|
39
|
+
list(): ToolDef[];
|
|
40
|
+
commands(): DerivedCommand[];
|
|
41
|
+
exec<T = unknown>(name: string, args: unknown, ctx: ExecContext, clientFactory?: () => TapdClient): Promise<ExecResult<T>>;
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/registry/registry.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAOpD,MAAM,MAAM,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC;AAElC,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,KAAK,CAAC;IACb,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;CACvC;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,KAAK,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,EAAE,EAAE,OAAO,CAAC;IACZ,SAAS,CAAC,EAAE,YAAY,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,MAAM,YAAY,GACpB,gBAAgB,GAChB,cAAc,GACd,mBAAmB,GACnB,cAAc,GACd,WAAW,GACX,SAAS,CAAC;AAEd,MAAM,WAAW,UAAU,CAAC,CAAC,GAAG,OAAO;IACrC,EAAE,EAAE,OAAO,CAAC;IACZ,IAAI,CAAC,EAAE,CAAC,CAAC;IACT,KAAK,CAAC,EAAE;QAAE,IAAI,EAAE,YAAY,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;CACjD;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;CACjB;AAiCD,qBAAa,YAAY;IACvB,OAAO,CAAC,KAAK,CAA8B;IAE3C,QAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,IAAI;IAchC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS;IAItC,IAAI,IAAI,OAAO,EAAE;IAIjB,QAAQ,IAAI,cAAc,EAAE;IAatB,IAAI,CAAC,CAAC,GAAG,OAAO,EACpB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,OAAO,EACb,GAAG,EAAE,WAAW,EAChB,aAAa,CAAC,EAAE,MAAM,UAAU,GAC/B,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;CAmE1B"}
|