@kb-labs/clickup-entry 2.109.0 → 2.111.0
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/commands/folder-create.d.ts +1 -1
- package/dist/commands/folder-create.js +4 -4
- package/dist/commands/folder-create.js.map +1 -1
- package/dist/commands/folder-delete.d.ts +1 -1
- package/dist/commands/folder-delete.js +4 -4
- package/dist/commands/folder-delete.js.map +1 -1
- package/dist/commands/folder-update.d.ts +1 -1
- package/dist/commands/folder-update.js +4 -4
- package/dist/commands/folder-update.js.map +1 -1
- package/dist/commands/list-create.d.ts +1 -1
- package/dist/commands/list-create.js +4 -4
- package/dist/commands/list-create.js.map +1 -1
- package/dist/commands/list-delete.d.ts +1 -1
- package/dist/commands/list-delete.js +4 -4
- package/dist/commands/list-delete.js.map +1 -1
- package/dist/commands/list-statuses.d.ts +1 -1
- package/dist/commands/list-statuses.js +4 -4
- package/dist/commands/list-statuses.js.map +1 -1
- package/dist/commands/list-tasks.d.ts +1 -1
- package/dist/commands/list-tasks.js +5 -5
- package/dist/commands/list-tasks.js.map +1 -1
- package/dist/commands/list-update.d.ts +1 -1
- package/dist/commands/list-update.js +3 -3
- package/dist/commands/list-update.js.map +1 -1
- package/dist/commands/space-create.d.ts +1 -1
- package/dist/commands/space-create.js +3 -3
- package/dist/commands/space-create.js.map +1 -1
- package/dist/commands/space-delete.d.ts +1 -1
- package/dist/commands/space-delete.js +4 -4
- package/dist/commands/space-delete.js.map +1 -1
- package/dist/commands/space-update.d.ts +1 -1
- package/dist/commands/space-update.js +3 -3
- package/dist/commands/space-update.js.map +1 -1
- package/dist/commands/task-comment-add.d.ts +1 -1
- package/dist/commands/task-comment-add.js +4 -4
- package/dist/commands/task-comment-add.js.map +1 -1
- package/dist/commands/task-comment-list.d.ts +1 -1
- package/dist/commands/task-comment-list.js +5 -5
- package/dist/commands/task-comment-list.js.map +1 -1
- package/dist/commands/task-create.d.ts +1 -1
- package/dist/commands/task-create.js +4 -4
- package/dist/commands/task-create.js.map +1 -1
- package/dist/commands/task-delete.d.ts +1 -1
- package/dist/commands/task-delete.js +4 -4
- package/dist/commands/task-delete.js.map +1 -1
- package/dist/commands/task-get.d.ts +1 -1
- package/dist/commands/task-get.js +4 -4
- package/dist/commands/task-get.js.map +1 -1
- package/dist/commands/task-search.d.ts +1 -1
- package/dist/commands/task-search.js +4 -4
- package/dist/commands/task-search.js.map +1 -1
- package/dist/commands/task-update.d.ts +1 -1
- package/dist/commands/task-update.js +3 -3
- package/dist/commands/task-update.js.map +1 -1
- package/dist/commands/workspace.d.ts +1 -1
- package/dist/commands/workspace.js +3 -3
- package/dist/commands/workspace.js.map +1 -1
- package/dist/rest/handlers/folder-create-handler.js.map +1 -1
- package/dist/rest/handlers/folder-delete-handler.js.map +1 -1
- package/dist/rest/handlers/folder-update-handler.js.map +1 -1
- package/dist/rest/handlers/list-create-handler.js.map +1 -1
- package/dist/rest/handlers/list-delete-handler.js.map +1 -1
- package/dist/rest/handlers/list-statuses-handler.js.map +1 -1
- package/dist/rest/handlers/list-tasks-handler.js.map +1 -1
- package/dist/rest/handlers/list-update-handler.js.map +1 -1
- package/dist/rest/handlers/search-handler.js.map +1 -1
- package/dist/rest/handlers/space-create-handler.js.map +1 -1
- package/dist/rest/handlers/space-delete-handler.js.map +1 -1
- package/dist/rest/handlers/space-update-handler.js.map +1 -1
- package/dist/rest/handlers/task-comment-add-handler.js.map +1 -1
- package/dist/rest/handlers/task-comments-handler.js.map +1 -1
- package/dist/rest/handlers/task-create-handler.js.map +1 -1
- package/dist/rest/handlers/task-delete-handler.js.map +1 -1
- package/dist/rest/handlers/task-get-handler.js.map +1 -1
- package/dist/rest/handlers/task-update-handler.js.map +1 -1
- package/dist/rest/handlers/workspace-handler.js.map +1 -1
- package/package.json +4 -4
|
@@ -67,7 +67,7 @@ var list_update_default = defineCommand({
|
|
|
67
67
|
const listId = input.argv[0];
|
|
68
68
|
if (!listId) {
|
|
69
69
|
validationError(ctx, "listId is required", 'Usage: kb clickup list update <listId> --name "new name"', input.flags.json);
|
|
70
|
-
return {
|
|
70
|
+
return { ok: false, error: "Command failed", result: null };
|
|
71
71
|
}
|
|
72
72
|
try {
|
|
73
73
|
const list = await updateList(requireApiKey(), listId, { name: input.flags.name });
|
|
@@ -78,10 +78,10 @@ var list_update_default = defineCommand({
|
|
|
78
78
|
sections: [{ items: [`id: ${list.id}`, `name: ${list.name}`] }]
|
|
79
79
|
});
|
|
80
80
|
}
|
|
81
|
-
return {
|
|
81
|
+
return { ok: true, result: list };
|
|
82
82
|
} catch (err) {
|
|
83
83
|
handleError(ctx, err, input.flags.json);
|
|
84
|
-
return {
|
|
84
|
+
return { ok: false, error: "Command failed", result: null };
|
|
85
85
|
}
|
|
86
86
|
}
|
|
87
87
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utils/error.ts","../../src/commands/list-update.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"sources":["../../src/utils/error.ts","../../src/commands/list-update.ts"],"names":[],"mappings":"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","file":"list-update.js","sourcesContent":["import type { PluginContextV3 } from '@kb-labs/sdk';\nimport { ClickUpApiError } from '@kb-labs/clickup-core';\n\nexport { validationError } from '@kb-labs/sdk';\n\nfunction apiHint(err: ClickUpApiError): string {\n switch (err.status) {\n case 401: return 'CLICKUP_API_KEY is invalid or expired — check the token in your environment';\n case 403: return 'You don\\'t have permission for this action in ClickUp — check workspace access';\n case 404: return 'Resource not found — verify the ID is correct (use `kb clickup workspace` to browse IDs)';\n case 429: return 'ClickUp rate limit reached — wait a moment and retry';\n default: return 'Unexpected ClickUp API error';\n }\n}\n\n/**\n * Output a structured error and return — call right before `return { ok: false, error: 'Command failed', result: null }`.\n * In JSON mode emits `{ ok: false, error: { code, message, hint?, status? } }`.\n * In CLI mode uses ctx.ui.error() with hint and cause.\n */\nexport function handleError(ctx: PluginContextV3, err: unknown, isJson?: boolean): void {\n if (err instanceof ClickUpApiError) {\n const hint = apiHint(err);\n if (isJson) {\n ctx.ui?.json?.({ ok: false, error: { code: err.code, message: err.message, status: err.status, hint } });\n } else {\n ctx.ui?.error?.(err.message, { hint, cause: `ClickUp API ${err.status} (${err.code})` });\n }\n return;\n }\n\n const message = err instanceof Error ? err.message : String(err);\n const isEnvMissing = /CLICKUP_API_KEY|CLICKUP_TEAM_ID/.test(message);\n\n if (isJson) {\n ctx.ui?.json?.({\n ok: false,\n error: {\n code: isEnvMissing ? 'ENV_MISSING' : 'INTERNAL_ERROR',\n message,\n ...(isEnvMissing && {\n hint: 'Set CLICKUP_API_KEY (and CLICKUP_TEAM_ID for workspace commands) as environment variables',\n }),\n },\n });\n } else {\n ctx.ui?.error?.(message, {\n ...(isEnvMissing && {\n hint: 'Set CLICKUP_API_KEY (and CLICKUP_TEAM_ID for workspace commands) as environment variables',\n command: 'export CLICKUP_API_KEY=pk_xxx CLICKUP_TEAM_ID=yyy',\n }),\n });\n }\n}\n\n/**\n * Re-throws `err` as an HTTP-aware error for REST handlers.\n * `ClickUpApiError` → preserves HTTP status code; env errors → 400; others → 500.\n * The envelope middleware in rest-api reads `err.statusCode` to set the response status.\n */\nexport function rethrowForRest(err: unknown): never {\n if (err instanceof ClickUpApiError) {\n const hint = apiHint(err);\n const restErr = Object.assign(new Error(err.message), {\n statusCode: err.status,\n code: err.code,\n details: { hint },\n });\n throw restErr;\n }\n const message = err instanceof Error ? err.message : String(err);\n const isEnvMissing = /CLICKUP_API_KEY|CLICKUP_TEAM_ID/.test(message);\n if (isEnvMissing) {\n throw Object.assign(new Error(message), {\n statusCode: 400,\n code: 'ENV_MISSING',\n details: { hint: 'Set CLICKUP_API_KEY (and CLICKUP_TEAM_ID for workspace commands) as environment variables' },\n });\n }\n throw err;\n}\n","import { defineCommand, type CLIInput, type PluginContextV3 } from '@kb-labs/sdk';\nimport { requireApiKey, updateList } from '@kb-labs/clickup-core';\nimport { handleError, validationError } from '../utils/error.js';\n\ntype ListUpdateFlags = {\n name?: string;\n json?: boolean;\n full?: boolean;\n 'dry-run'?: boolean;\n};\n\nexport default defineCommand({\n id: 'clickup:list.update',\n description: 'Update a list',\n\n handler: {\n async intent(_ctx: PluginContextV3, input: CLIInput<ListUpdateFlags>) {\n const [listId] = input.argv;\n const skipKeys = new Set(['json', 'full', 'dry-run']);\n const changes = Object.entries(input.flags)\n .filter(([k, v]) => !skipKeys.has(k) && v !== undefined)\n .map(([k, v]) => `${k}=${JSON.stringify(v)}`);\n return {\n summary: `Update list ${listId ?? '(unknown)'}`,\n operations: [{ type: 'update' as const, resource: 'list', details: { listId, changes } }],\n };\n },\n\n async execute(ctx: PluginContextV3, input: CLIInput<ListUpdateFlags>) {\n const listId = input.argv[0] as string | undefined;\n if (!listId) {\n validationError(ctx, 'listId is required', 'Usage: kb clickup list update <listId> --name \"new name\"', input.flags.json);\n return { ok: false, error: 'Command failed', result: null };\n }\n\n try {\n const list = await updateList(requireApiKey(), listId, { name: input.flags.name });\n\n if (input.flags.json) {\n ctx.ui?.json?.(input.flags.full ? list : { id: list.id, name: list.name });\n } else {\n ctx.ui?.success?.('List updated', {\n sections: [{ items: [`id: ${list.id}`, `name: ${list.name}`] }],\n });\n }\n\n return { ok: true, result: list };\n } catch (err) {\n handleError(ctx, err, input.flags.json);\n return { ok: false, error: 'Command failed', result: null };\n }\n },\n },\n});\n"]}
|
|
@@ -10,6 +10,6 @@ type SpaceCreateFlags = {
|
|
|
10
10
|
full?: boolean;
|
|
11
11
|
'dry-run'?: boolean;
|
|
12
12
|
};
|
|
13
|
-
declare const _default: _kb_labs_shared_command_kit.CommandHandlerV3<unknown, CLIInput<SpaceCreateFlags>, _kb_labs_clickup_contracts.ClickUpSpaceDetail
|
|
13
|
+
declare const _default: _kb_labs_shared_command_kit.CommandHandlerV3<unknown, CLIInput<SpaceCreateFlags>, _kb_labs_clickup_contracts.ClickUpSpaceDetail>;
|
|
14
14
|
|
|
15
15
|
export { _default as default };
|
|
@@ -65,7 +65,7 @@ var space_create_default = defineCommand({
|
|
|
65
65
|
const { name, color, json, full } = input.flags;
|
|
66
66
|
if (!name) {
|
|
67
67
|
validationError(ctx, "--name is required", void 0, json);
|
|
68
|
-
return {
|
|
68
|
+
return { ok: false, error: "Command failed", result: null };
|
|
69
69
|
}
|
|
70
70
|
try {
|
|
71
71
|
const space = await createSpace(requireApiKey(), requireTeamId(), {
|
|
@@ -80,10 +80,10 @@ var space_create_default = defineCommand({
|
|
|
80
80
|
sections: [{ items: [`id: ${space.id}`, `name: ${space.name}`] }]
|
|
81
81
|
});
|
|
82
82
|
}
|
|
83
|
-
return {
|
|
83
|
+
return { ok: true, result: space };
|
|
84
84
|
} catch (err) {
|
|
85
85
|
handleError(ctx, err, json);
|
|
86
|
-
return {
|
|
86
|
+
return { ok: false, error: "Command failed", result: null };
|
|
87
87
|
}
|
|
88
88
|
}
|
|
89
89
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utils/error.ts","../../src/commands/space-create.ts"],"names":[],"mappings":";;;;AAKA,SAAS,QAAQ,GAAA,EAA8B;AAC7C,EAAA,QAAQ,IAAI,MAAA;AAAQ,IAClB,KAAK,GAAA;AAAK,MAAA,OAAO,kFAAA;AAAA,IACjB,KAAK,GAAA;AAAK,MAAA,OAAO,oFAAA;AAAA,IACjB,KAAK,GAAA;AAAK,MAAA,OAAO,+FAAA;AAAA,IACjB,KAAK,GAAA;AAAK,MAAA,OAAO,2DAAA;AAAA,IACjB;AAAU,MAAA,OAAO,8BAAA;AAAA;AAErB;AAOO,SAAS,WAAA,CAAY,GAAA,EAAsB,GAAA,EAAc,MAAA,EAAwB;AACtF,EAAA,IAAI,eAAe,eAAA,EAAiB;AAClC,IAAA,MAAM,IAAA,GAAO,QAAQ,GAAG,CAAA;AACxB,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,GAAA,CAAI,IAAI,IAAA,GAAO,EAAE,IAAI,KAAA,EAAO,KAAA,EAAO,EAAE,IAAA,EAAM,GAAA,CAAI,IAAA,EAAM,OAAA,EAAS,IAAI,OAAA,EAAS,MAAA,EAAQ,IAAI,MAAA,EAAQ,IAAA,IAAQ,CAAA;AAAA,IACzG,CAAA,MAAO;AACL,MAAA,GAAA,CAAI,EAAA,EAAI,KAAA,GAAQ,GAAA,CAAI,OAAA,EAAS,EAAE,IAAA,EAAM,KAAA,EAAO,CAAA,YAAA,EAAe,GAAA,CAAI,MAAM,CAAA,EAAA,EAAK,GAAA,CAAI,IAAI,KAAK,CAAA;AAAA,IACzF;AACA,IAAA;AAAA,EACF;AAEA,EAAA,MAAM,UAAU,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,OAAO,GAAG,CAAA;AAC/D,EAAA,MAAM,YAAA,GAAe,iCAAA,CAAkC,IAAA,CAAK,OAAO,CAAA;AAEnE,EAAA,IAAI,MAAA,EAAQ;AACV,IAAA,GAAA,CAAI,IAAI,IAAA,GAAO;AAAA,MACb,EAAA,EAAI,KAAA;AAAA,MACJ,KAAA,EAAO;AAAA,QACL,IAAA,EAAM,eAAe,aAAA,GAAgB,gBAAA;AAAA,QACrC,OAAA;AAAA,QACA,GAAI,YAAA,IAAgB;AAAA,UAClB,IAAA,EAAM;AAAA;AACR;AACF,KACD,CAAA;AAAA,EACH,CAAA,MAAO;AACL,IAAA,GAAA,CAAI,EAAA,EAAI,QAAQ,OAAA,EAAS;AAAA,MACvB,GAAI,YAAA,IAAgB;AAAA,QAClB,IAAA,EAAM,2FAAA;AAAA,QACN,OAAA,EAAS;AAAA;AACX,KACD,CAAA;AAAA,EACH;AACF;;;ACxCA,IAAO,uBAAQ,aAAA,CAAc;AAAA,EAC3B,EAAA,EAAI,sBAAA;AAAA,EACJ,WAAA,EAAa,oBAAA;AAAA,EAEb,OAAA,EAAS;AAAA,IACP,MAAM,MAAA,CAAO,IAAA,EAAuB,KAAA,EAAmC;AACrE,MAAA,MAAM,EAAE,IAAA,EAAK,GAAI,KAAA,CAAM,KAAA;AACvB,MAAA,OAAO;AAAA,QACL,OAAA,EAAS,CAAA,cAAA,EAAiB,IAAA,IAAQ,WAAW,CAAA,CAAA,CAAA;AAAA,QAC7C,UAAA,EAAY,CAAC,EAAE,IAAA,EAAM,QAAA,EAAmB,QAAA,EAAU,OAAA,EAAS,OAAA,EAAS,EAAE,IAAA,EAAK,EAAG;AAAA,OAChF;AAAA,IACF,CAAA;AAAA,IAEA,MAAM,OAAA,CAAQ,GAAA,EAAsB,KAAA,EAAmC;AACrE,MAAA,MAAM,EAAE,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,IAAA,KAAS,KAAA,CAAM,KAAA;AAC1C,MAAA,IAAI,CAAC,IAAA,EAAM;AACT,QAAA,eAAA,CAAgB,GAAA,EAAK,oBAAA,EAAsB,MAAA,EAAW,IAAI,CAAA;AAC1D,QAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"sources":["../../src/utils/error.ts","../../src/commands/space-create.ts"],"names":[],"mappings":"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","file":"space-create.js","sourcesContent":["import type { PluginContextV3 } from '@kb-labs/sdk';\nimport { ClickUpApiError } from '@kb-labs/clickup-core';\n\nexport { validationError } from '@kb-labs/sdk';\n\nfunction apiHint(err: ClickUpApiError): string {\n switch (err.status) {\n case 401: return 'CLICKUP_API_KEY is invalid or expired — check the token in your environment';\n case 403: return 'You don\\'t have permission for this action in ClickUp — check workspace access';\n case 404: return 'Resource not found — verify the ID is correct (use `kb clickup workspace` to browse IDs)';\n case 429: return 'ClickUp rate limit reached — wait a moment and retry';\n default: return 'Unexpected ClickUp API error';\n }\n}\n\n/**\n * Output a structured error and return — call right before `return { ok: false, error: 'Command failed', result: null }`.\n * In JSON mode emits `{ ok: false, error: { code, message, hint?, status? } }`.\n * In CLI mode uses ctx.ui.error() with hint and cause.\n */\nexport function handleError(ctx: PluginContextV3, err: unknown, isJson?: boolean): void {\n if (err instanceof ClickUpApiError) {\n const hint = apiHint(err);\n if (isJson) {\n ctx.ui?.json?.({ ok: false, error: { code: err.code, message: err.message, status: err.status, hint } });\n } else {\n ctx.ui?.error?.(err.message, { hint, cause: `ClickUp API ${err.status} (${err.code})` });\n }\n return;\n }\n\n const message = err instanceof Error ? err.message : String(err);\n const isEnvMissing = /CLICKUP_API_KEY|CLICKUP_TEAM_ID/.test(message);\n\n if (isJson) {\n ctx.ui?.json?.({\n ok: false,\n error: {\n code: isEnvMissing ? 'ENV_MISSING' : 'INTERNAL_ERROR',\n message,\n ...(isEnvMissing && {\n hint: 'Set CLICKUP_API_KEY (and CLICKUP_TEAM_ID for workspace commands) as environment variables',\n }),\n },\n });\n } else {\n ctx.ui?.error?.(message, {\n ...(isEnvMissing && {\n hint: 'Set CLICKUP_API_KEY (and CLICKUP_TEAM_ID for workspace commands) as environment variables',\n command: 'export CLICKUP_API_KEY=pk_xxx CLICKUP_TEAM_ID=yyy',\n }),\n });\n }\n}\n\n/**\n * Re-throws `err` as an HTTP-aware error for REST handlers.\n * `ClickUpApiError` → preserves HTTP status code; env errors → 400; others → 500.\n * The envelope middleware in rest-api reads `err.statusCode` to set the response status.\n */\nexport function rethrowForRest(err: unknown): never {\n if (err instanceof ClickUpApiError) {\n const hint = apiHint(err);\n const restErr = Object.assign(new Error(err.message), {\n statusCode: err.status,\n code: err.code,\n details: { hint },\n });\n throw restErr;\n }\n const message = err instanceof Error ? err.message : String(err);\n const isEnvMissing = /CLICKUP_API_KEY|CLICKUP_TEAM_ID/.test(message);\n if (isEnvMissing) {\n throw Object.assign(new Error(message), {\n statusCode: 400,\n code: 'ENV_MISSING',\n details: { hint: 'Set CLICKUP_API_KEY (and CLICKUP_TEAM_ID for workspace commands) as environment variables' },\n });\n }\n throw err;\n}\n","import { defineCommand, type CLIInput, type PluginContextV3 } from '@kb-labs/sdk';\nimport { requireApiKey, requireTeamId, createSpace } from '@kb-labs/clickup-core';\nimport { handleError, validationError } from '../utils/error.js';\n\ntype SpaceCreateFlags = {\n name: string;\n color?: string;\n private?: boolean;\n json?: boolean;\n full?: boolean;\n 'dry-run'?: boolean;\n};\n\nexport default defineCommand({\n id: 'clickup:space.create',\n description: 'Create a new space',\n\n handler: {\n async intent(_ctx: PluginContextV3, input: CLIInput<SpaceCreateFlags>) {\n const { name } = input.flags;\n return {\n summary: `Create space \"${name ?? '(unnamed)'}\"`,\n operations: [{ type: 'create' as const, resource: 'space', details: { name } }],\n };\n },\n\n async execute(ctx: PluginContextV3, input: CLIInput<SpaceCreateFlags>) {\n const { name, color, json, full } = input.flags;\n if (!name) {\n validationError(ctx, '--name is required', undefined, json);\n return { ok: false, error: 'Command failed', result: null };\n }\n\n try {\n const space = await createSpace(requireApiKey(), requireTeamId(), {\n name,\n color,\n private: input.flags.private ?? false,\n });\n\n if (json) {\n ctx.ui?.json?.(full ? space : { id: space.id, name: space.name });\n } else {\n ctx.ui?.success?.('Space created', {\n sections: [{ items: [`id: ${space.id}`, `name: ${space.name}`] }],\n });\n }\n\n return { ok: true, result: space };\n } catch (err) {\n handleError(ctx, err, json);\n return { ok: false, error: 'Command failed', result: null };\n }\n },\n },\n});\n"]}
|
|
@@ -65,11 +65,11 @@ var space_delete_default = defineCommand({
|
|
|
65
65
|
const spaceId = input.argv[0];
|
|
66
66
|
if (!spaceId) {
|
|
67
67
|
validationError(ctx, "spaceId is required", "Usage: kb clickup space delete <spaceId> --force", input.flags.json);
|
|
68
|
-
return {
|
|
68
|
+
return { ok: false, error: "Command failed", result: null };
|
|
69
69
|
}
|
|
70
70
|
if (!input.flags.force) {
|
|
71
71
|
validationError(ctx, `--force is required to delete space ${spaceId}`, "Add --force to confirm deletion", input.flags.json);
|
|
72
|
-
return {
|
|
72
|
+
return { ok: false, error: "Command failed", result: null };
|
|
73
73
|
}
|
|
74
74
|
try {
|
|
75
75
|
await deleteSpace(requireApiKey(), spaceId);
|
|
@@ -78,10 +78,10 @@ var space_delete_default = defineCommand({
|
|
|
78
78
|
} else {
|
|
79
79
|
ctx.ui?.success?.(`Deleted space ${spaceId}`);
|
|
80
80
|
}
|
|
81
|
-
return {
|
|
81
|
+
return { ok: true, result: { deleted: true, spaceId } };
|
|
82
82
|
} catch (err) {
|
|
83
83
|
handleError(ctx, err, input.flags.json);
|
|
84
|
-
return {
|
|
84
|
+
return { ok: false, error: "Command failed", result: null };
|
|
85
85
|
}
|
|
86
86
|
}
|
|
87
87
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utils/error.ts","../../src/commands/space-delete.ts"],"names":[],"mappings":";;;;AAKA,SAAS,QAAQ,GAAA,EAA8B;AAC7C,EAAA,QAAQ,IAAI,MAAA;AAAQ,IAClB,KAAK,GAAA;AAAK,MAAA,OAAO,kFAAA;AAAA,IACjB,KAAK,GAAA;AAAK,MAAA,OAAO,oFAAA;AAAA,IACjB,KAAK,GAAA;AAAK,MAAA,OAAO,+FAAA;AAAA,IACjB,KAAK,GAAA;AAAK,MAAA,OAAO,2DAAA;AAAA,IACjB;AAAU,MAAA,OAAO,8BAAA;AAAA;AAErB;AAOO,SAAS,WAAA,CAAY,GAAA,EAAsB,GAAA,EAAc,MAAA,EAAwB;AACtF,EAAA,IAAI,eAAe,eAAA,EAAiB;AAClC,IAAA,MAAM,IAAA,GAAO,QAAQ,GAAG,CAAA;AACxB,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,GAAA,CAAI,IAAI,IAAA,GAAO,EAAE,IAAI,KAAA,EAAO,KAAA,EAAO,EAAE,IAAA,EAAM,GAAA,CAAI,IAAA,EAAM,OAAA,EAAS,IAAI,OAAA,EAAS,MAAA,EAAQ,IAAI,MAAA,EAAQ,IAAA,IAAQ,CAAA;AAAA,IACzG,CAAA,MAAO;AACL,MAAA,GAAA,CAAI,EAAA,EAAI,KAAA,GAAQ,GAAA,CAAI,OAAA,EAAS,EAAE,IAAA,EAAM,KAAA,EAAO,CAAA,YAAA,EAAe,GAAA,CAAI,MAAM,CAAA,EAAA,EAAK,GAAA,CAAI,IAAI,KAAK,CAAA;AAAA,IACzF;AACA,IAAA;AAAA,EACF;AAEA,EAAA,MAAM,UAAU,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,OAAO,GAAG,CAAA;AAC/D,EAAA,MAAM,YAAA,GAAe,iCAAA,CAAkC,IAAA,CAAK,OAAO,CAAA;AAEnE,EAAA,IAAI,MAAA,EAAQ;AACV,IAAA,GAAA,CAAI,IAAI,IAAA,GAAO;AAAA,MACb,EAAA,EAAI,KAAA;AAAA,MACJ,KAAA,EAAO;AAAA,QACL,IAAA,EAAM,eAAe,aAAA,GAAgB,gBAAA;AAAA,QACrC,OAAA;AAAA,QACA,GAAI,YAAA,IAAgB;AAAA,UAClB,IAAA,EAAM;AAAA;AACR;AACF,KACD,CAAA;AAAA,EACH,CAAA,MAAO;AACL,IAAA,GAAA,CAAI,EAAA,EAAI,QAAQ,OAAA,EAAS;AAAA,MACvB,GAAI,YAAA,IAAgB;AAAA,QAClB,IAAA,EAAM,2FAAA;AAAA,QACN,OAAA,EAAS;AAAA;AACX,KACD,CAAA;AAAA,EACH;AACF;;;AC3CA,IAAO,uBAAQ,aAAA,CAAc;AAAA,EAC3B,EAAA,EAAI,sBAAA;AAAA,EACJ,WAAA,EAAa,gBAAA;AAAA,EAEb,OAAA,EAAS;AAAA,IACP,MAAM,MAAA,CAAO,IAAA,EAAuB,KAAA,EAAmC;AACrE,MAAA,MAAM,CAAC,OAAO,CAAA,GAAI,KAAA,CAAM,IAAA;AACxB,MAAA,OAAO;AAAA,QACL,OAAA,EAAS,CAAA,aAAA,EAAgB,OAAA,IAAW,WAAW,CAAA,CAAA;AAAA,QAC/C,UAAA,EAAY,CAAC,EAAE,IAAA,EAAM,QAAA,EAAmB,QAAA,EAAU,OAAA,EAAS,OAAA,EAAS,EAAE,OAAA,EAAQ,EAAG;AAAA,OACnF;AAAA,IACF,CAAA;AAAA,IAEA,MAAM,OAAA,CAAQ,GAAA,EAAsB,KAAA,EAAmC;AACrE,MAAA,MAAM,OAAA,GAAU,KAAA,CAAM,IAAA,CAAK,CAAC,CAAA;AAC5B,MAAA,IAAI,CAAC,OAAA,EAAS;AACZ,QAAA,eAAA,CAAgB,GAAA,EAAK,qBAAA,EAAuB,kDAAA,EAAoD,KAAA,CAAM,MAAM,IAAI,CAAA;AAChH,QAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"sources":["../../src/utils/error.ts","../../src/commands/space-delete.ts"],"names":[],"mappings":";;;;AAKA,SAAS,QAAQ,GAAA,EAA8B;AAC7C,EAAA,QAAQ,IAAI,MAAA;AAAQ,IAClB,KAAK,GAAA;AAAK,MAAA,OAAO,kFAAA;AAAA,IACjB,KAAK,GAAA;AAAK,MAAA,OAAO,oFAAA;AAAA,IACjB,KAAK,GAAA;AAAK,MAAA,OAAO,+FAAA;AAAA,IACjB,KAAK,GAAA;AAAK,MAAA,OAAO,2DAAA;AAAA,IACjB;AAAU,MAAA,OAAO,8BAAA;AAAA;AAErB;AAOO,SAAS,WAAA,CAAY,GAAA,EAAsB,GAAA,EAAc,MAAA,EAAwB;AACtF,EAAA,IAAI,eAAe,eAAA,EAAiB;AAClC,IAAA,MAAM,IAAA,GAAO,QAAQ,GAAG,CAAA;AACxB,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,GAAA,CAAI,IAAI,IAAA,GAAO,EAAE,IAAI,KAAA,EAAO,KAAA,EAAO,EAAE,IAAA,EAAM,GAAA,CAAI,IAAA,EAAM,OAAA,EAAS,IAAI,OAAA,EAAS,MAAA,EAAQ,IAAI,MAAA,EAAQ,IAAA,IAAQ,CAAA;AAAA,IACzG,CAAA,MAAO;AACL,MAAA,GAAA,CAAI,EAAA,EAAI,KAAA,GAAQ,GAAA,CAAI,OAAA,EAAS,EAAE,IAAA,EAAM,KAAA,EAAO,CAAA,YAAA,EAAe,GAAA,CAAI,MAAM,CAAA,EAAA,EAAK,GAAA,CAAI,IAAI,KAAK,CAAA;AAAA,IACzF;AACA,IAAA;AAAA,EACF;AAEA,EAAA,MAAM,UAAU,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,OAAO,GAAG,CAAA;AAC/D,EAAA,MAAM,YAAA,GAAe,iCAAA,CAAkC,IAAA,CAAK,OAAO,CAAA;AAEnE,EAAA,IAAI,MAAA,EAAQ;AACV,IAAA,GAAA,CAAI,IAAI,IAAA,GAAO;AAAA,MACb,EAAA,EAAI,KAAA;AAAA,MACJ,KAAA,EAAO;AAAA,QACL,IAAA,EAAM,eAAe,aAAA,GAAgB,gBAAA;AAAA,QACrC,OAAA;AAAA,QACA,GAAI,YAAA,IAAgB;AAAA,UAClB,IAAA,EAAM;AAAA;AACR;AACF,KACD,CAAA;AAAA,EACH,CAAA,MAAO;AACL,IAAA,GAAA,CAAI,EAAA,EAAI,QAAQ,OAAA,EAAS;AAAA,MACvB,GAAI,YAAA,IAAgB;AAAA,QAClB,IAAA,EAAM,2FAAA;AAAA,QACN,OAAA,EAAS;AAAA;AACX,KACD,CAAA;AAAA,EACH;AACF;;;AC3CA,IAAO,uBAAQ,aAAA,CAAc;AAAA,EAC3B,EAAA,EAAI,sBAAA;AAAA,EACJ,WAAA,EAAa,gBAAA;AAAA,EAEb,OAAA,EAAS;AAAA,IACP,MAAM,MAAA,CAAO,IAAA,EAAuB,KAAA,EAAmC;AACrE,MAAA,MAAM,CAAC,OAAO,CAAA,GAAI,KAAA,CAAM,IAAA;AACxB,MAAA,OAAO;AAAA,QACL,OAAA,EAAS,CAAA,aAAA,EAAgB,OAAA,IAAW,WAAW,CAAA,CAAA;AAAA,QAC/C,UAAA,EAAY,CAAC,EAAE,IAAA,EAAM,QAAA,EAAmB,QAAA,EAAU,OAAA,EAAS,OAAA,EAAS,EAAE,OAAA,EAAQ,EAAG;AAAA,OACnF;AAAA,IACF,CAAA;AAAA,IAEA,MAAM,OAAA,CAAQ,GAAA,EAAsB,KAAA,EAAmC;AACrE,MAAA,MAAM,OAAA,GAAU,KAAA,CAAM,IAAA,CAAK,CAAC,CAAA;AAC5B,MAAA,IAAI,CAAC,OAAA,EAAS;AACZ,QAAA,eAAA,CAAgB,GAAA,EAAK,qBAAA,EAAuB,kDAAA,EAAoD,KAAA,CAAM,MAAM,IAAI,CAAA;AAChH,QAAA,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,KAAA,EAAO,gBAAA,EAAkB,QAAQ,IAAA,EAAK;AAAA,MAC5D;AACA,MAAA,IAAI,CAAC,KAAA,CAAM,KAAA,CAAM,KAAA,EAAO;AACtB,QAAA,eAAA,CAAgB,KAAK,CAAA,oCAAA,EAAuC,OAAO,IAAI,iCAAA,EAAmC,KAAA,CAAM,MAAM,IAAI,CAAA;AAC1H,QAAA,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,KAAA,EAAO,gBAAA,EAAkB,QAAQ,IAAA,EAAK;AAAA,MAC5D;AAEA,MAAA,IAAI;AACF,QAAA,MAAM,WAAA,CAAY,aAAA,EAAc,EAAG,OAAO,CAAA;AAE1C,QAAA,IAAI,KAAA,CAAM,MAAM,IAAA,EAAM;AACpB,UAAA,GAAA,CAAI,EAAA,EAAI,OAAO,EAAE,EAAA,EAAI,MAAM,OAAA,EAAS,IAAA,EAAM,SAAS,CAAA;AAAA,QACrD,CAAA,MAAO;AACL,UAAA,GAAA,CAAI,EAAA,EAAI,OAAA,GAAU,CAAA,cAAA,EAAiB,OAAO,CAAA,CAAE,CAAA;AAAA,QAC9C;AAEA,QAAA,OAAO,EAAE,IAAI,IAAA,EAAM,MAAA,EAAQ,EAAE,OAAA,EAAS,IAAA,EAAM,SAAQ,EAAE;AAAA,MACxD,SAAS,GAAA,EAAK;AACZ,QAAA,WAAA,CAAY,GAAA,EAAK,GAAA,EAAK,KAAA,CAAM,KAAA,CAAM,IAAI,CAAA;AACtC,QAAA,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,KAAA,EAAO,gBAAA,EAAkB,QAAQ,IAAA,EAAK;AAAA,MAC5D;AAAA,IACF;AAAA;AAEJ,CAAC","file":"space-delete.js","sourcesContent":["import type { PluginContextV3 } from '@kb-labs/sdk';\nimport { ClickUpApiError } from '@kb-labs/clickup-core';\n\nexport { validationError } from '@kb-labs/sdk';\n\nfunction apiHint(err: ClickUpApiError): string {\n switch (err.status) {\n case 401: return 'CLICKUP_API_KEY is invalid or expired — check the token in your environment';\n case 403: return 'You don\\'t have permission for this action in ClickUp — check workspace access';\n case 404: return 'Resource not found — verify the ID is correct (use `kb clickup workspace` to browse IDs)';\n case 429: return 'ClickUp rate limit reached — wait a moment and retry';\n default: return 'Unexpected ClickUp API error';\n }\n}\n\n/**\n * Output a structured error and return — call right before `return { ok: false, error: 'Command failed', result: null }`.\n * In JSON mode emits `{ ok: false, error: { code, message, hint?, status? } }`.\n * In CLI mode uses ctx.ui.error() with hint and cause.\n */\nexport function handleError(ctx: PluginContextV3, err: unknown, isJson?: boolean): void {\n if (err instanceof ClickUpApiError) {\n const hint = apiHint(err);\n if (isJson) {\n ctx.ui?.json?.({ ok: false, error: { code: err.code, message: err.message, status: err.status, hint } });\n } else {\n ctx.ui?.error?.(err.message, { hint, cause: `ClickUp API ${err.status} (${err.code})` });\n }\n return;\n }\n\n const message = err instanceof Error ? err.message : String(err);\n const isEnvMissing = /CLICKUP_API_KEY|CLICKUP_TEAM_ID/.test(message);\n\n if (isJson) {\n ctx.ui?.json?.({\n ok: false,\n error: {\n code: isEnvMissing ? 'ENV_MISSING' : 'INTERNAL_ERROR',\n message,\n ...(isEnvMissing && {\n hint: 'Set CLICKUP_API_KEY (and CLICKUP_TEAM_ID for workspace commands) as environment variables',\n }),\n },\n });\n } else {\n ctx.ui?.error?.(message, {\n ...(isEnvMissing && {\n hint: 'Set CLICKUP_API_KEY (and CLICKUP_TEAM_ID for workspace commands) as environment variables',\n command: 'export CLICKUP_API_KEY=pk_xxx CLICKUP_TEAM_ID=yyy',\n }),\n });\n }\n}\n\n/**\n * Re-throws `err` as an HTTP-aware error for REST handlers.\n * `ClickUpApiError` → preserves HTTP status code; env errors → 400; others → 500.\n * The envelope middleware in rest-api reads `err.statusCode` to set the response status.\n */\nexport function rethrowForRest(err: unknown): never {\n if (err instanceof ClickUpApiError) {\n const hint = apiHint(err);\n const restErr = Object.assign(new Error(err.message), {\n statusCode: err.status,\n code: err.code,\n details: { hint },\n });\n throw restErr;\n }\n const message = err instanceof Error ? err.message : String(err);\n const isEnvMissing = /CLICKUP_API_KEY|CLICKUP_TEAM_ID/.test(message);\n if (isEnvMissing) {\n throw Object.assign(new Error(message), {\n statusCode: 400,\n code: 'ENV_MISSING',\n details: { hint: 'Set CLICKUP_API_KEY (and CLICKUP_TEAM_ID for workspace commands) as environment variables' },\n });\n }\n throw err;\n}\n","import { defineCommand, type CLIInput, type PluginContextV3 } from '@kb-labs/sdk';\nimport { requireApiKey, deleteSpace } from '@kb-labs/clickup-core';\nimport { handleError, validationError } from '../utils/error.js';\n\ntype SpaceDeleteFlags = {\n force?: boolean;\n json?: boolean;\n 'dry-run'?: boolean;\n};\n\nexport default defineCommand({\n id: 'clickup:space.delete',\n description: 'Delete a space',\n\n handler: {\n async intent(_ctx: PluginContextV3, input: CLIInput<SpaceDeleteFlags>) {\n const [spaceId] = input.argv;\n return {\n summary: `Delete space ${spaceId ?? '(unknown)'}`,\n operations: [{ type: 'delete' as const, resource: 'space', details: { spaceId } }],\n };\n },\n\n async execute(ctx: PluginContextV3, input: CLIInput<SpaceDeleteFlags>) {\n const spaceId = input.argv[0] as string | undefined;\n if (!spaceId) {\n validationError(ctx, 'spaceId is required', 'Usage: kb clickup space delete <spaceId> --force', input.flags.json);\n return { ok: false, error: 'Command failed', result: null };\n }\n if (!input.flags.force) {\n validationError(ctx, `--force is required to delete space ${spaceId}`, 'Add --force to confirm deletion', input.flags.json);\n return { ok: false, error: 'Command failed', result: null };\n }\n\n try {\n await deleteSpace(requireApiKey(), spaceId);\n\n if (input.flags.json) {\n ctx.ui?.json?.({ ok: true, deleted: true, spaceId });\n } else {\n ctx.ui?.success?.(`Deleted space ${spaceId}`);\n }\n\n return { ok: true, result: { deleted: true, spaceId } };\n } catch (err) {\n handleError(ctx, err, input.flags.json);\n return { ok: false, error: 'Command failed', result: null };\n }\n },\n },\n});\n"]}
|
|
@@ -9,6 +9,6 @@ type SpaceUpdateFlags = {
|
|
|
9
9
|
full?: boolean;
|
|
10
10
|
'dry-run'?: boolean;
|
|
11
11
|
};
|
|
12
|
-
declare const _default: _kb_labs_shared_command_kit.CommandHandlerV3<unknown, CLIInput<SpaceUpdateFlags>, _kb_labs_clickup_contracts.ClickUpSpaceDetail
|
|
12
|
+
declare const _default: _kb_labs_shared_command_kit.CommandHandlerV3<unknown, CLIInput<SpaceUpdateFlags>, _kb_labs_clickup_contracts.ClickUpSpaceDetail>;
|
|
13
13
|
|
|
14
14
|
export { _default as default };
|
|
@@ -67,7 +67,7 @@ var space_update_default = defineCommand({
|
|
|
67
67
|
const spaceId = input.argv[0];
|
|
68
68
|
if (!spaceId) {
|
|
69
69
|
validationError(ctx, "spaceId is required", 'Usage: kb clickup space update <spaceId> --name "new name"', input.flags.json);
|
|
70
|
-
return {
|
|
70
|
+
return { ok: false, error: "Command failed", result: null };
|
|
71
71
|
}
|
|
72
72
|
const { name, color, json, full } = input.flags;
|
|
73
73
|
try {
|
|
@@ -79,10 +79,10 @@ var space_update_default = defineCommand({
|
|
|
79
79
|
sections: [{ items: [`id: ${space.id}`, `name: ${space.name}`] }]
|
|
80
80
|
});
|
|
81
81
|
}
|
|
82
|
-
return {
|
|
82
|
+
return { ok: true, result: space };
|
|
83
83
|
} catch (err) {
|
|
84
84
|
handleError(ctx, err, json);
|
|
85
|
-
return {
|
|
85
|
+
return { ok: false, error: "Command failed", result: null };
|
|
86
86
|
}
|
|
87
87
|
}
|
|
88
88
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utils/error.ts","../../src/commands/space-update.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"sources":["../../src/utils/error.ts","../../src/commands/space-update.ts"],"names":[],"mappings":"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","file":"space-update.js","sourcesContent":["import type { PluginContextV3 } from '@kb-labs/sdk';\nimport { ClickUpApiError } from '@kb-labs/clickup-core';\n\nexport { validationError } from '@kb-labs/sdk';\n\nfunction apiHint(err: ClickUpApiError): string {\n switch (err.status) {\n case 401: return 'CLICKUP_API_KEY is invalid or expired — check the token in your environment';\n case 403: return 'You don\\'t have permission for this action in ClickUp — check workspace access';\n case 404: return 'Resource not found — verify the ID is correct (use `kb clickup workspace` to browse IDs)';\n case 429: return 'ClickUp rate limit reached — wait a moment and retry';\n default: return 'Unexpected ClickUp API error';\n }\n}\n\n/**\n * Output a structured error and return — call right before `return { ok: false, error: 'Command failed', result: null }`.\n * In JSON mode emits `{ ok: false, error: { code, message, hint?, status? } }`.\n * In CLI mode uses ctx.ui.error() with hint and cause.\n */\nexport function handleError(ctx: PluginContextV3, err: unknown, isJson?: boolean): void {\n if (err instanceof ClickUpApiError) {\n const hint = apiHint(err);\n if (isJson) {\n ctx.ui?.json?.({ ok: false, error: { code: err.code, message: err.message, status: err.status, hint } });\n } else {\n ctx.ui?.error?.(err.message, { hint, cause: `ClickUp API ${err.status} (${err.code})` });\n }\n return;\n }\n\n const message = err instanceof Error ? err.message : String(err);\n const isEnvMissing = /CLICKUP_API_KEY|CLICKUP_TEAM_ID/.test(message);\n\n if (isJson) {\n ctx.ui?.json?.({\n ok: false,\n error: {\n code: isEnvMissing ? 'ENV_MISSING' : 'INTERNAL_ERROR',\n message,\n ...(isEnvMissing && {\n hint: 'Set CLICKUP_API_KEY (and CLICKUP_TEAM_ID for workspace commands) as environment variables',\n }),\n },\n });\n } else {\n ctx.ui?.error?.(message, {\n ...(isEnvMissing && {\n hint: 'Set CLICKUP_API_KEY (and CLICKUP_TEAM_ID for workspace commands) as environment variables',\n command: 'export CLICKUP_API_KEY=pk_xxx CLICKUP_TEAM_ID=yyy',\n }),\n });\n }\n}\n\n/**\n * Re-throws `err` as an HTTP-aware error for REST handlers.\n * `ClickUpApiError` → preserves HTTP status code; env errors → 400; others → 500.\n * The envelope middleware in rest-api reads `err.statusCode` to set the response status.\n */\nexport function rethrowForRest(err: unknown): never {\n if (err instanceof ClickUpApiError) {\n const hint = apiHint(err);\n const restErr = Object.assign(new Error(err.message), {\n statusCode: err.status,\n code: err.code,\n details: { hint },\n });\n throw restErr;\n }\n const message = err instanceof Error ? err.message : String(err);\n const isEnvMissing = /CLICKUP_API_KEY|CLICKUP_TEAM_ID/.test(message);\n if (isEnvMissing) {\n throw Object.assign(new Error(message), {\n statusCode: 400,\n code: 'ENV_MISSING',\n details: { hint: 'Set CLICKUP_API_KEY (and CLICKUP_TEAM_ID for workspace commands) as environment variables' },\n });\n }\n throw err;\n}\n","import { defineCommand, type CLIInput, type PluginContextV3 } from '@kb-labs/sdk';\nimport { requireApiKey, updateSpace } from '@kb-labs/clickup-core';\nimport { handleError, validationError } from '../utils/error.js';\n\ntype SpaceUpdateFlags = {\n name?: string;\n color?: string;\n json?: boolean;\n full?: boolean;\n 'dry-run'?: boolean;\n};\n\nexport default defineCommand({\n id: 'clickup:space.update',\n description: 'Update a space',\n\n handler: {\n async intent(_ctx: PluginContextV3, input: CLIInput<SpaceUpdateFlags>) {\n const [spaceId] = input.argv;\n const skipKeys = new Set(['json', 'full', 'dry-run']);\n const changes = Object.entries(input.flags)\n .filter(([k, v]) => !skipKeys.has(k) && v !== undefined)\n .map(([k, v]) => `${k}=${JSON.stringify(v)}`);\n return {\n summary: `Update space ${spaceId ?? '(unknown)'}`,\n operations: [{ type: 'update' as const, resource: 'space', details: { spaceId, changes } }],\n };\n },\n\n async execute(ctx: PluginContextV3, input: CLIInput<SpaceUpdateFlags>) {\n const spaceId = input.argv[0] as string | undefined;\n if (!spaceId) {\n validationError(ctx, 'spaceId is required', 'Usage: kb clickup space update <spaceId> --name \"new name\"', input.flags.json);\n return { ok: false, error: 'Command failed', result: null };\n }\n\n const { name, color, json, full } = input.flags;\n\n try {\n const space = await updateSpace(requireApiKey(), spaceId, { name, color });\n\n if (json) {\n ctx.ui?.json?.(full ? space : { id: space.id, name: space.name });\n } else {\n ctx.ui?.success?.('Space updated', {\n sections: [{ items: [`id: ${space.id}`, `name: ${space.name}`] }],\n });\n }\n\n return { ok: true, result: space };\n } catch (err) {\n handleError(ctx, err, json);\n return { ok: false, error: 'Command failed', result: null };\n }\n },\n },\n});\n"]}
|
|
@@ -10,6 +10,6 @@ type TaskCommentAddFlags = {
|
|
|
10
10
|
full?: boolean;
|
|
11
11
|
'dry-run'?: boolean;
|
|
12
12
|
};
|
|
13
|
-
declare const _default: _kb_labs_shared_command_kit.CommandHandlerV3<unknown, CLIInput<TaskCommentAddFlags>, _kb_labs_clickup_contracts.ClickUpCommentCreateResult
|
|
13
|
+
declare const _default: _kb_labs_shared_command_kit.CommandHandlerV3<unknown, CLIInput<TaskCommentAddFlags>, _kb_labs_clickup_contracts.ClickUpCommentCreateResult>;
|
|
14
14
|
|
|
15
15
|
export { _default as default };
|
|
@@ -65,11 +65,11 @@ var task_comment_add_default = defineCommand({
|
|
|
65
65
|
const [taskId] = input.argv;
|
|
66
66
|
if (!taskId) {
|
|
67
67
|
validationError(ctx, "Task ID is required", 'Usage: kb clickup task comment add <taskId> --text "message"', input.flags.json);
|
|
68
|
-
return {
|
|
68
|
+
return { ok: false, error: "Command failed", result: null };
|
|
69
69
|
}
|
|
70
70
|
if (!input.flags.text) {
|
|
71
71
|
validationError(ctx, "--text is required", void 0, input.flags.json);
|
|
72
|
-
return {
|
|
72
|
+
return { ok: false, error: "Command failed", result: null };
|
|
73
73
|
}
|
|
74
74
|
try {
|
|
75
75
|
const comment = await addTaskComment(requireApiKey(), taskId, input.flags.text, {
|
|
@@ -90,10 +90,10 @@ var task_comment_add_default = defineCommand({
|
|
|
90
90
|
} else {
|
|
91
91
|
ctx.ui?.success?.(`Comment added (id: ${comment.id})`);
|
|
92
92
|
}
|
|
93
|
-
return {
|
|
93
|
+
return { ok: true, result: comment };
|
|
94
94
|
} catch (err) {
|
|
95
95
|
handleError(ctx, err, input.flags.json);
|
|
96
|
-
return {
|
|
96
|
+
return { ok: false, error: "Command failed", result: null };
|
|
97
97
|
}
|
|
98
98
|
}
|
|
99
99
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utils/error.ts","../../src/commands/task-comment-add.ts"],"names":[],"mappings":";;;;AAKA,SAAS,QAAQ,GAAA,EAA8B;AAC7C,EAAA,QAAQ,IAAI,MAAA;AAAQ,IAClB,KAAK,GAAA;AAAK,MAAA,OAAO,kFAAA;AAAA,IACjB,KAAK,GAAA;AAAK,MAAA,OAAO,oFAAA;AAAA,IACjB,KAAK,GAAA;AAAK,MAAA,OAAO,+FAAA;AAAA,IACjB,KAAK,GAAA;AAAK,MAAA,OAAO,2DAAA;AAAA,IACjB;AAAU,MAAA,OAAO,8BAAA;AAAA;AAErB;AAOO,SAAS,WAAA,CAAY,GAAA,EAAsB,GAAA,EAAc,MAAA,EAAwB;AACtF,EAAA,IAAI,eAAe,eAAA,EAAiB;AAClC,IAAA,MAAM,IAAA,GAAO,QAAQ,GAAG,CAAA;AACxB,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,GAAA,CAAI,IAAI,IAAA,GAAO,EAAE,IAAI,KAAA,EAAO,KAAA,EAAO,EAAE,IAAA,EAAM,GAAA,CAAI,IAAA,EAAM,OAAA,EAAS,IAAI,OAAA,EAAS,MAAA,EAAQ,IAAI,MAAA,EAAQ,IAAA,IAAQ,CAAA;AAAA,IACzG,CAAA,MAAO;AACL,MAAA,GAAA,CAAI,EAAA,EAAI,KAAA,GAAQ,GAAA,CAAI,OAAA,EAAS,EAAE,IAAA,EAAM,KAAA,EAAO,CAAA,YAAA,EAAe,GAAA,CAAI,MAAM,CAAA,EAAA,EAAK,GAAA,CAAI,IAAI,KAAK,CAAA;AAAA,IACzF;AACA,IAAA;AAAA,EACF;AAEA,EAAA,MAAM,UAAU,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,OAAO,GAAG,CAAA;AAC/D,EAAA,MAAM,YAAA,GAAe,iCAAA,CAAkC,IAAA,CAAK,OAAO,CAAA;AAEnE,EAAA,IAAI,MAAA,EAAQ;AACV,IAAA,GAAA,CAAI,IAAI,IAAA,GAAO;AAAA,MACb,EAAA,EAAI,KAAA;AAAA,MACJ,KAAA,EAAO;AAAA,QACL,IAAA,EAAM,eAAe,aAAA,GAAgB,gBAAA;AAAA,QACrC,OAAA;AAAA,QACA,GAAI,YAAA,IAAgB;AAAA,UAClB,IAAA,EAAM;AAAA;AACR;AACF,KACD,CAAA;AAAA,EACH,CAAA,MAAO;AACL,IAAA,GAAA,CAAI,EAAA,EAAI,QAAQ,OAAA,EAAS;AAAA,MACvB,GAAI,YAAA,IAAgB;AAAA,QAClB,IAAA,EAAM,2FAAA;AAAA,QACN,OAAA,EAAS;AAAA;AACX,KACD,CAAA;AAAA,EACH;AACF;;;ACxCA,IAAO,2BAAQ,aAAA,CAAc;AAAA,EAC3B,EAAA,EAAI,0BAAA;AAAA,EACJ,WAAA,EAAa,yBAAA;AAAA,EAEb,OAAA,EAAS;AAAA,IACP,MAAM,MAAA,CAAO,IAAA,EAAuB,KAAA,EAAsC;AACxE,MAAA,MAAM,CAAC,MAAM,CAAA,GAAI,KAAA,CAAM,IAAA;AACvB,MAAA,OAAO;AAAA,QACL,OAAA,EAAS,CAAA,oBAAA,EAAuB,MAAA,IAAU,WAAW,CAAA,CAAA;AAAA,QACrD,UAAA,EAAY,CAAC,EAAE,IAAA,EAAM,UAAmB,QAAA,EAAU,SAAA,EAAW,OAAA,EAAS,EAAE,QAAQ,IAAA,EAAM,KAAA,CAAM,KAAA,CAAM,IAAA,IAAQ;AAAA,OAC5G;AAAA,IACF,CAAA;AAAA,IAEA,MAAM,OAAA,CAAQ,GAAA,EAAsB,KAAA,EAAsC;AACxE,MAAA,MAAM,CAAC,MAAM,CAAA,GAAI,KAAA,CAAM,IAAA;AACvB,MAAA,IAAI,CAAC,MAAA,EAAQ;AACX,QAAA,eAAA,CAAgB,GAAA,EAAK,qBAAA,EAAuB,8DAAA,EAAgE,KAAA,CAAM,MAAM,IAAI,CAAA;AAC5H,QAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"sources":["../../src/utils/error.ts","../../src/commands/task-comment-add.ts"],"names":[],"mappings":"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","file":"task-comment-add.js","sourcesContent":["import type { PluginContextV3 } from '@kb-labs/sdk';\nimport { ClickUpApiError } from '@kb-labs/clickup-core';\n\nexport { validationError } from '@kb-labs/sdk';\n\nfunction apiHint(err: ClickUpApiError): string {\n switch (err.status) {\n case 401: return 'CLICKUP_API_KEY is invalid or expired — check the token in your environment';\n case 403: return 'You don\\'t have permission for this action in ClickUp — check workspace access';\n case 404: return 'Resource not found — verify the ID is correct (use `kb clickup workspace` to browse IDs)';\n case 429: return 'ClickUp rate limit reached — wait a moment and retry';\n default: return 'Unexpected ClickUp API error';\n }\n}\n\n/**\n * Output a structured error and return — call right before `return { ok: false, error: 'Command failed', result: null }`.\n * In JSON mode emits `{ ok: false, error: { code, message, hint?, status? } }`.\n * In CLI mode uses ctx.ui.error() with hint and cause.\n */\nexport function handleError(ctx: PluginContextV3, err: unknown, isJson?: boolean): void {\n if (err instanceof ClickUpApiError) {\n const hint = apiHint(err);\n if (isJson) {\n ctx.ui?.json?.({ ok: false, error: { code: err.code, message: err.message, status: err.status, hint } });\n } else {\n ctx.ui?.error?.(err.message, { hint, cause: `ClickUp API ${err.status} (${err.code})` });\n }\n return;\n }\n\n const message = err instanceof Error ? err.message : String(err);\n const isEnvMissing = /CLICKUP_API_KEY|CLICKUP_TEAM_ID/.test(message);\n\n if (isJson) {\n ctx.ui?.json?.({\n ok: false,\n error: {\n code: isEnvMissing ? 'ENV_MISSING' : 'INTERNAL_ERROR',\n message,\n ...(isEnvMissing && {\n hint: 'Set CLICKUP_API_KEY (and CLICKUP_TEAM_ID for workspace commands) as environment variables',\n }),\n },\n });\n } else {\n ctx.ui?.error?.(message, {\n ...(isEnvMissing && {\n hint: 'Set CLICKUP_API_KEY (and CLICKUP_TEAM_ID for workspace commands) as environment variables',\n command: 'export CLICKUP_API_KEY=pk_xxx CLICKUP_TEAM_ID=yyy',\n }),\n });\n }\n}\n\n/**\n * Re-throws `err` as an HTTP-aware error for REST handlers.\n * `ClickUpApiError` → preserves HTTP status code; env errors → 400; others → 500.\n * The envelope middleware in rest-api reads `err.statusCode` to set the response status.\n */\nexport function rethrowForRest(err: unknown): never {\n if (err instanceof ClickUpApiError) {\n const hint = apiHint(err);\n const restErr = Object.assign(new Error(err.message), {\n statusCode: err.status,\n code: err.code,\n details: { hint },\n });\n throw restErr;\n }\n const message = err instanceof Error ? err.message : String(err);\n const isEnvMissing = /CLICKUP_API_KEY|CLICKUP_TEAM_ID/.test(message);\n if (isEnvMissing) {\n throw Object.assign(new Error(message), {\n statusCode: 400,\n code: 'ENV_MISSING',\n details: { hint: 'Set CLICKUP_API_KEY (and CLICKUP_TEAM_ID for workspace commands) as environment variables' },\n });\n }\n throw err;\n}\n","import { defineCommand, type CLIInput, type PluginContextV3 } from '@kb-labs/sdk';\nimport { requireApiKey, addTaskComment } from '@kb-labs/clickup-core';\nimport { handleError, validationError } from '../utils/error.js';\n\ntype TaskCommentAddFlags = {\n text: string;\n assignee?: number;\n notify?: boolean;\n json?: boolean;\n full?: boolean;\n 'dry-run'?: boolean;\n};\n\nexport default defineCommand({\n id: 'clickup:task.comment.add',\n description: 'Add a comment to a task',\n\n handler: {\n async intent(_ctx: PluginContextV3, input: CLIInput<TaskCommentAddFlags>) {\n const [taskId] = input.argv;\n return {\n summary: `Add comment to task ${taskId ?? '(unknown)'}`,\n operations: [{ type: 'create' as const, resource: 'comment', details: { taskId, text: input.flags.text } }],\n };\n },\n\n async execute(ctx: PluginContextV3, input: CLIInput<TaskCommentAddFlags>) {\n const [taskId] = input.argv;\n if (!taskId) {\n validationError(ctx, 'Task ID is required', 'Usage: kb clickup task comment add <taskId> --text \"message\"', input.flags.json);\n return { ok: false, error: 'Command failed', result: null };\n }\n if (!input.flags.text) {\n validationError(ctx, '--text is required', undefined, input.flags.json);\n return { ok: false, error: 'Command failed', result: null };\n }\n\n try {\n const comment = await addTaskComment(requireApiKey(), taskId, input.flags.text, {\n assignee: input.flags.assignee,\n notifyAll: input.flags.notify,\n });\n\n if (input.flags.json) {\n if (input.flags.full) {\n ctx.ui?.json?.(comment);\n } else {\n ctx.ui?.json?.({\n id: comment.id,\n date: comment.date,\n ...(comment.comment_text !== undefined ? { comment_text: comment.comment_text } : {}),\n ...(comment.user?.username !== undefined ? { user: comment.user.username } : {}),\n });\n }\n } else {\n ctx.ui?.success?.(`Comment added (id: ${comment.id})`);\n }\n\n return { ok: true, result: comment };\n } catch (err) {\n handleError(ctx, err, input.flags.json);\n return { ok: false, error: 'Command failed', result: null };\n }\n },\n },\n});\n"]}
|
|
@@ -6,6 +6,6 @@ type TaskCommentListFlags = {
|
|
|
6
6
|
json?: boolean;
|
|
7
7
|
full?: boolean;
|
|
8
8
|
};
|
|
9
|
-
declare const _default: _kb_labs_shared_command_kit.CommandHandlerV3<unknown, CLIInput<TaskCommentListFlags>, _kb_labs_clickup_contracts.ClickUpComment[]
|
|
9
|
+
declare const _default: _kb_labs_shared_command_kit.CommandHandlerV3<unknown, CLIInput<TaskCommentListFlags>, _kb_labs_clickup_contracts.ClickUpComment[]>;
|
|
10
10
|
|
|
11
11
|
export { _default as default };
|
|
@@ -58,17 +58,17 @@ var task_comment_list_default = defineCommand({
|
|
|
58
58
|
const [taskId] = input.argv;
|
|
59
59
|
if (!taskId) {
|
|
60
60
|
validationError(ctx, "Task ID is required", "Usage: kb clickup task comment list <taskId>", input.flags.json);
|
|
61
|
-
return {
|
|
61
|
+
return { ok: false, error: "Command failed", result: null };
|
|
62
62
|
}
|
|
63
63
|
try {
|
|
64
64
|
const comments = await getTaskComments(requireApiKey(), taskId);
|
|
65
65
|
if (input.flags.json) {
|
|
66
66
|
ctx.ui?.json?.(input.flags.full ? comments : comments.map((c) => ({ id: c.id, user: c.user.username, comment_text: c.comment_text, date: c.date })));
|
|
67
|
-
return {
|
|
67
|
+
return { ok: true, result: comments };
|
|
68
68
|
}
|
|
69
69
|
if (!comments.length) {
|
|
70
70
|
ctx.ui?.info?.("No comments.");
|
|
71
|
-
return {
|
|
71
|
+
return { ok: true, result: comments };
|
|
72
72
|
}
|
|
73
73
|
ctx.ui?.chain?.(comments.map((c) => {
|
|
74
74
|
const date = new Date(Number(c.date)).toLocaleString();
|
|
@@ -77,10 +77,10 @@ var task_comment_list_default = defineCommand({
|
|
|
77
77
|
sections: [{ items: [c.comment_text] }]
|
|
78
78
|
};
|
|
79
79
|
}));
|
|
80
|
-
return {
|
|
80
|
+
return { ok: true, result: comments };
|
|
81
81
|
} catch (err) {
|
|
82
82
|
handleError(ctx, err, input.flags.json);
|
|
83
|
-
return {
|
|
83
|
+
return { ok: false, error: "Command failed", result: null };
|
|
84
84
|
}
|
|
85
85
|
}
|
|
86
86
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utils/error.ts","../../src/commands/task-comment-list.ts"],"names":[],"mappings":";;;;AAKA,SAAS,QAAQ,GAAA,EAA8B;AAC7C,EAAA,QAAQ,IAAI,MAAA;AAAQ,IAClB,KAAK,GAAA;AAAK,MAAA,OAAO,kFAAA;AAAA,IACjB,KAAK,GAAA;AAAK,MAAA,OAAO,oFAAA;AAAA,IACjB,KAAK,GAAA;AAAK,MAAA,OAAO,+FAAA;AAAA,IACjB,KAAK,GAAA;AAAK,MAAA,OAAO,2DAAA;AAAA,IACjB;AAAU,MAAA,OAAO,8BAAA;AAAA;AAErB;AAOO,SAAS,WAAA,CAAY,GAAA,EAAsB,GAAA,EAAc,MAAA,EAAwB;AACtF,EAAA,IAAI,eAAe,eAAA,EAAiB;AAClC,IAAA,MAAM,IAAA,GAAO,QAAQ,GAAG,CAAA;AACxB,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,GAAA,CAAI,IAAI,IAAA,GAAO,EAAE,IAAI,KAAA,EAAO,KAAA,EAAO,EAAE,IAAA,EAAM,GAAA,CAAI,IAAA,EAAM,OAAA,EAAS,IAAI,OAAA,EAAS,MAAA,EAAQ,IAAI,MAAA,EAAQ,IAAA,IAAQ,CAAA;AAAA,IACzG,CAAA,MAAO;AACL,MAAA,GAAA,CAAI,EAAA,EAAI,KAAA,GAAQ,GAAA,CAAI,OAAA,EAAS,EAAE,IAAA,EAAM,KAAA,EAAO,CAAA,YAAA,EAAe,GAAA,CAAI,MAAM,CAAA,EAAA,EAAK,GAAA,CAAI,IAAI,KAAK,CAAA;AAAA,IACzF;AACA,IAAA;AAAA,EACF;AAEA,EAAA,MAAM,UAAU,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,OAAO,GAAG,CAAA;AAC/D,EAAA,MAAM,YAAA,GAAe,iCAAA,CAAkC,IAAA,CAAK,OAAO,CAAA;AAEnE,EAAA,IAAI,MAAA,EAAQ;AACV,IAAA,GAAA,CAAI,IAAI,IAAA,GAAO;AAAA,MACb,EAAA,EAAI,KAAA;AAAA,MACJ,KAAA,EAAO;AAAA,QACL,IAAA,EAAM,eAAe,aAAA,GAAgB,gBAAA;AAAA,QACrC,OAAA;AAAA,QACA,GAAI,YAAA,IAAgB;AAAA,UAClB,IAAA,EAAM;AAAA;AACR;AACF,KACD,CAAA;AAAA,EACH,CAAA,MAAO;AACL,IAAA,GAAA,CAAI,EAAA,EAAI,QAAQ,OAAA,EAAS;AAAA,MACvB,GAAI,YAAA,IAAgB;AAAA,QAClB,IAAA,EAAM,2FAAA;AAAA,QACN,OAAA,EAAS;AAAA;AACX,KACD,CAAA;AAAA,EACH;AACF;;;AC/CA,IAAO,4BAAQ,aAAA,CAAc;AAAA,EAC3B,EAAA,EAAI,2BAAA;AAAA,EACJ,WAAA,EAAa,yBAAA;AAAA,EAEb,OAAA,EAAS;AAAA,IACP,MAAM,OAAA,CAAQ,GAAA,EAAsB,KAAA,EAAuC;AACzE,MAAA,MAAM,CAAC,MAAM,CAAA,GAAI,KAAA,CAAM,IAAA;AACvB,MAAA,IAAI,CAAC,MAAA,EAAQ;AACX,QAAA,eAAA,CAAgB,GAAA,EAAK,qBAAA,EAAuB,8CAAA,EAAgD,KAAA,CAAM,MAAM,IAAI,CAAA;AAC5G,QAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"sources":["../../src/utils/error.ts","../../src/commands/task-comment-list.ts"],"names":[],"mappings":"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","file":"task-comment-list.js","sourcesContent":["import type { PluginContextV3 } from '@kb-labs/sdk';\nimport { ClickUpApiError } from '@kb-labs/clickup-core';\n\nexport { validationError } from '@kb-labs/sdk';\n\nfunction apiHint(err: ClickUpApiError): string {\n switch (err.status) {\n case 401: return 'CLICKUP_API_KEY is invalid or expired — check the token in your environment';\n case 403: return 'You don\\'t have permission for this action in ClickUp — check workspace access';\n case 404: return 'Resource not found — verify the ID is correct (use `kb clickup workspace` to browse IDs)';\n case 429: return 'ClickUp rate limit reached — wait a moment and retry';\n default: return 'Unexpected ClickUp API error';\n }\n}\n\n/**\n * Output a structured error and return — call right before `return { ok: false, error: 'Command failed', result: null }`.\n * In JSON mode emits `{ ok: false, error: { code, message, hint?, status? } }`.\n * In CLI mode uses ctx.ui.error() with hint and cause.\n */\nexport function handleError(ctx: PluginContextV3, err: unknown, isJson?: boolean): void {\n if (err instanceof ClickUpApiError) {\n const hint = apiHint(err);\n if (isJson) {\n ctx.ui?.json?.({ ok: false, error: { code: err.code, message: err.message, status: err.status, hint } });\n } else {\n ctx.ui?.error?.(err.message, { hint, cause: `ClickUp API ${err.status} (${err.code})` });\n }\n return;\n }\n\n const message = err instanceof Error ? err.message : String(err);\n const isEnvMissing = /CLICKUP_API_KEY|CLICKUP_TEAM_ID/.test(message);\n\n if (isJson) {\n ctx.ui?.json?.({\n ok: false,\n error: {\n code: isEnvMissing ? 'ENV_MISSING' : 'INTERNAL_ERROR',\n message,\n ...(isEnvMissing && {\n hint: 'Set CLICKUP_API_KEY (and CLICKUP_TEAM_ID for workspace commands) as environment variables',\n }),\n },\n });\n } else {\n ctx.ui?.error?.(message, {\n ...(isEnvMissing && {\n hint: 'Set CLICKUP_API_KEY (and CLICKUP_TEAM_ID for workspace commands) as environment variables',\n command: 'export CLICKUP_API_KEY=pk_xxx CLICKUP_TEAM_ID=yyy',\n }),\n });\n }\n}\n\n/**\n * Re-throws `err` as an HTTP-aware error for REST handlers.\n * `ClickUpApiError` → preserves HTTP status code; env errors → 400; others → 500.\n * The envelope middleware in rest-api reads `err.statusCode` to set the response status.\n */\nexport function rethrowForRest(err: unknown): never {\n if (err instanceof ClickUpApiError) {\n const hint = apiHint(err);\n const restErr = Object.assign(new Error(err.message), {\n statusCode: err.status,\n code: err.code,\n details: { hint },\n });\n throw restErr;\n }\n const message = err instanceof Error ? err.message : String(err);\n const isEnvMissing = /CLICKUP_API_KEY|CLICKUP_TEAM_ID/.test(message);\n if (isEnvMissing) {\n throw Object.assign(new Error(message), {\n statusCode: 400,\n code: 'ENV_MISSING',\n details: { hint: 'Set CLICKUP_API_KEY (and CLICKUP_TEAM_ID for workspace commands) as environment variables' },\n });\n }\n throw err;\n}\n","import { defineCommand, type CLIInput, type PluginContextV3 } from '@kb-labs/sdk';\nimport { requireApiKey, getTaskComments } from '@kb-labs/clickup-core';\nimport { handleError, validationError } from '../utils/error.js';\n\ntype TaskCommentListFlags = { json?: boolean; full?: boolean };\n\nexport default defineCommand({\n id: 'clickup:task.comment.list',\n description: 'List comments on a task',\n\n handler: {\n async execute(ctx: PluginContextV3, input: CLIInput<TaskCommentListFlags>) {\n const [taskId] = input.argv;\n if (!taskId) {\n validationError(ctx, 'Task ID is required', 'Usage: kb clickup task comment list <taskId>', input.flags.json);\n return { ok: false, error: 'Command failed', result: null };\n }\n\n try {\n const comments = await getTaskComments(requireApiKey(), taskId);\n\n if (input.flags.json) {\n ctx.ui?.json?.(input.flags.full ? comments : comments.map(c => ({ id: c.id, user: c.user.username, comment_text: c.comment_text, date: c.date })));\n return { ok: true, result: comments };\n }\n\n if (!comments.length) {\n ctx.ui?.info?.('No comments.');\n return { ok: true, result: comments };\n }\n\n ctx.ui?.chain?.(comments.map(c => {\n const date = new Date(Number(c.date)).toLocaleString();\n return {\n title: `${c.user.username} @ ${date}`,\n sections: [{ items: [c.comment_text] }],\n };\n }));\n\n return { ok: true, result: comments };\n } catch (err) {\n handleError(ctx, err, input.flags.json);\n return { ok: false, error: 'Command failed', result: null };\n }\n },\n },\n});\n"]}
|
|
@@ -15,6 +15,6 @@ type TaskCreateFlags = {
|
|
|
15
15
|
full?: boolean;
|
|
16
16
|
'dry-run'?: boolean;
|
|
17
17
|
};
|
|
18
|
-
declare const _default: _kb_labs_shared_command_kit.CommandHandlerV3<unknown, CLIInput<TaskCreateFlags>, _kb_labs_clickup_contracts.ClickUpTask
|
|
18
|
+
declare const _default: _kb_labs_shared_command_kit.CommandHandlerV3<unknown, CLIInput<TaskCreateFlags>, _kb_labs_clickup_contracts.ClickUpTask>;
|
|
19
19
|
|
|
20
20
|
export { _default as default };
|
|
@@ -72,11 +72,11 @@ var task_create_default = defineCommand({
|
|
|
72
72
|
const { list, name, desc, status, priority, assignee, due, parent, json, full } = input.flags;
|
|
73
73
|
if (!list) {
|
|
74
74
|
validationError(ctx, "--list is required", "Use `kb clickup list tasks <listId>` to find the list ID", json);
|
|
75
|
-
return {
|
|
75
|
+
return { ok: false, error: "Command failed", result: null };
|
|
76
76
|
}
|
|
77
77
|
if (!name) {
|
|
78
78
|
validationError(ctx, "--name is required", void 0, json);
|
|
79
|
-
return {
|
|
79
|
+
return { ok: false, error: "Command failed", result: null };
|
|
80
80
|
}
|
|
81
81
|
try {
|
|
82
82
|
const task = await createTask(requireApiKey(), list, {
|
|
@@ -102,10 +102,10 @@ var task_create_default = defineCommand({
|
|
|
102
102
|
}]
|
|
103
103
|
});
|
|
104
104
|
}
|
|
105
|
-
return {
|
|
105
|
+
return { ok: true, result: task };
|
|
106
106
|
} catch (err) {
|
|
107
107
|
handleError(ctx, err, json);
|
|
108
|
-
return {
|
|
108
|
+
return { ok: false, error: "Command failed", result: null };
|
|
109
109
|
}
|
|
110
110
|
}
|
|
111
111
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utils/error.ts","../../src/commands/task-create.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"sources":["../../src/utils/error.ts","../../src/commands/task-create.ts"],"names":[],"mappings":";;;;AAKA,SAAS,QAAQ,GAAA,EAA8B;AAC7C,EAAA,QAAQ,IAAI,MAAA;AAAQ,IAClB,KAAK,GAAA;AAAK,MAAA,OAAO,kFAAA;AAAA,IACjB,KAAK,GAAA;AAAK,MAAA,OAAO,oFAAA;AAAA,IACjB,KAAK,GAAA;AAAK,MAAA,OAAO,+FAAA;AAAA,IACjB,KAAK,GAAA;AAAK,MAAA,OAAO,2DAAA;AAAA,IACjB;AAAU,MAAA,OAAO,8BAAA;AAAA;AAErB;AAOO,SAAS,WAAA,CAAY,GAAA,EAAsB,GAAA,EAAc,MAAA,EAAwB;AACtF,EAAA,IAAI,eAAe,eAAA,EAAiB;AAClC,IAAA,MAAM,IAAA,GAAO,QAAQ,GAAG,CAAA;AACxB,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,GAAA,CAAI,IAAI,IAAA,GAAO,EAAE,IAAI,KAAA,EAAO,KAAA,EAAO,EAAE,IAAA,EAAM,GAAA,CAAI,IAAA,EAAM,OAAA,EAAS,IAAI,OAAA,EAAS,MAAA,EAAQ,IAAI,MAAA,EAAQ,IAAA,IAAQ,CAAA;AAAA,IACzG,CAAA,MAAO;AACL,MAAA,GAAA,CAAI,EAAA,EAAI,KAAA,GAAQ,GAAA,CAAI,OAAA,EAAS,EAAE,IAAA,EAAM,KAAA,EAAO,CAAA,YAAA,EAAe,GAAA,CAAI,MAAM,CAAA,EAAA,EAAK,GAAA,CAAI,IAAI,KAAK,CAAA;AAAA,IACzF;AACA,IAAA;AAAA,EACF;AAEA,EAAA,MAAM,UAAU,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,OAAO,GAAG,CAAA;AAC/D,EAAA,MAAM,YAAA,GAAe,iCAAA,CAAkC,IAAA,CAAK,OAAO,CAAA;AAEnE,EAAA,IAAI,MAAA,EAAQ;AACV,IAAA,GAAA,CAAI,IAAI,IAAA,GAAO;AAAA,MACb,EAAA,EAAI,KAAA;AAAA,MACJ,KAAA,EAAO;AAAA,QACL,IAAA,EAAM,eAAe,aAAA,GAAgB,gBAAA;AAAA,QACrC,OAAA;AAAA,QACA,GAAI,YAAA,IAAgB;AAAA,UAClB,IAAA,EAAM;AAAA;AACR;AACF,KACD,CAAA;AAAA,EACH,CAAA,MAAO;AACL,IAAA,GAAA,CAAI,EAAA,EAAI,QAAQ,OAAA,EAAS;AAAA,MACvB,GAAI,YAAA,IAAgB;AAAA,QAClB,IAAA,EAAM,2FAAA;AAAA,QACN,OAAA,EAAS;AAAA;AACX,KACD,CAAA;AAAA,EACH;AACF;;;ACnCA,SAAS,SAAS,GAAA,EAAiC;AACjD,EAAA,MAAM,CAAA,GAAI,OAAO,GAAG,CAAA;AACpB,EAAA,IAAI,CAAC,KAAA,CAAM,CAAC,CAAA,IAAK,CAAA,GAAI,GAAG,OAAO,CAAA;AAC/B,EAAA,MAAM,CAAA,GAAI,IAAI,IAAA,CAAK,GAAG,CAAA;AACtB,EAAA,IAAI,CAAC,MAAM,CAAA,CAAE,OAAA,EAAS,CAAA,EAAG,OAAO,EAAE,OAAA,EAAQ;AAC1C,EAAA,OAAO,MAAA;AACT;AAEA,IAAO,sBAAQ,aAAA,CAAc;AAAA,EAC3B,EAAA,EAAI,qBAAA;AAAA,EACJ,WAAA,EAAa,mBAAA;AAAA,EAEb,OAAA,EAAS;AAAA,IACP,MAAM,MAAA,CAAO,IAAA,EAAuB,KAAA,EAAkC;AACpE,MAAA,MAAM,EAAE,IAAA,EAAM,IAAA,EAAK,GAAI,KAAA,CAAM,KAAA;AAC7B,MAAA,OAAO;AAAA,QACL,SAAS,CAAA,aAAA,EAAgB,IAAA,IAAQ,WAAW,CAAA,UAAA,EAAa,QAAQ,WAAW,CAAA,CAAA;AAAA,QAC5E,UAAA,EAAY,CAAC,EAAE,IAAA,EAAM,QAAA,EAAmB,QAAA,EAAU,MAAA,EAAQ,OAAA,EAAS,EAAE,IAAA,EAAM,IAAA,EAAK,EAAG;AAAA,OACrF;AAAA,IACF,CAAA;AAAA,IAEA,MAAM,OAAA,CAAQ,GAAA,EAAsB,KAAA,EAAkC;AACpE,MAAA,MAAM,EAAE,IAAA,EAAM,IAAA,EAAM,IAAA,EAAM,MAAA,EAAQ,QAAA,EAAU,QAAA,EAAU,GAAA,EAAK,MAAA,EAAQ,IAAA,EAAM,IAAA,EAAK,GAAI,KAAA,CAAM,KAAA;AAExF,MAAA,IAAI,CAAC,IAAA,EAAM;AACT,QAAA,eAAA,CAAgB,GAAA,EAAK,oBAAA,EAAsB,0DAAA,EAA4D,IAAI,CAAA;AAC3G,QAAA,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,KAAA,EAAO,gBAAA,EAAkB,QAAQ,IAAA,EAAK;AAAA,MAC5D;AACA,MAAA,IAAI,CAAC,IAAA,EAAM;AACT,QAAA,eAAA,CAAgB,GAAA,EAAK,oBAAA,EAAsB,MAAA,EAAW,IAAI,CAAA;AAC1D,QAAA,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,KAAA,EAAO,gBAAA,EAAkB,QAAQ,IAAA,EAAK;AAAA,MAC5D;AAEA,MAAA,IAAI;AACF,QAAA,MAAM,IAAA,GAAO,MAAM,UAAA,CAAW,aAAA,IAAiB,IAAA,EAAM;AAAA,UACnD,IAAA;AAAA,UACA,gBAAA,EAAkB,IAAA,EAAM,OAAA,CAAQ,MAAA,EAAQ,IAAI,CAAA;AAAA,UAC5C,MAAA;AAAA,UACA,QAAA;AAAA,UACA,SAAA,EAAW,WAAW,QAAA,CAAS,KAAA,CAAM,GAAG,CAAA,CAAE,GAAA,CAAI,MAAM,CAAA,GAAI,KAAA,CAAA;AAAA,UACxD,QAAA,EAAU,GAAA,GAAM,QAAA,CAAS,GAAG,CAAA,GAAI,KAAA,CAAA;AAAA,UAChC;AAAA,SACD,CAAA;AAED,QAAA,IAAI,IAAA,EAAM;AACR,UAAA,GAAA,CAAI,IAAI,IAAA,GAAO,IAAA,GAAO,OAAO,EAAE,EAAA,EAAI,KAAK,EAAA,EAAI,IAAA,EAAM,IAAA,CAAK,IAAA,EAAM,QAAQ,IAAA,CAAK,MAAA,CAAO,QAAQ,GAAA,EAAK,IAAA,CAAK,KAAK,CAAA;AAAA,QAC1G,CAAA,MAAO;AACL,UAAA,GAAA,CAAI,EAAA,EAAI,UAAU,cAAA,EAAgB;AAAA,YAChC,UAAU,CAAC;AAAA,cACT,KAAA,EAAO;AAAA,gBACL,CAAA,IAAA,EAAO,KAAK,EAAE,CAAA,CAAA;AAAA,gBACd,CAAA,MAAA,EAAS,KAAK,IAAI,CAAA,CAAA;AAAA,gBAClB,CAAA,QAAA,EAAW,IAAA,CAAK,MAAA,CAAO,MAAM,CAAA,CAAA;AAAA,gBAC7B,CAAA,KAAA,EAAQ,KAAK,GAAG,CAAA;AAAA;AAClB,aACD;AAAA,WACF,CAAA;AAAA,QACH;AAEA,QAAA,OAAO,EAAE,EAAA,EAAI,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAK;AAAA,MAClC,SAAS,GAAA,EAAK;AACZ,QAAA,WAAA,CAAY,GAAA,EAAK,KAAK,IAAI,CAAA;AAC1B,QAAA,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,KAAA,EAAO,gBAAA,EAAkB,QAAQ,IAAA,EAAK;AAAA,MAC5D;AAAA,IACF;AAAA;AAEJ,CAAC","file":"task-create.js","sourcesContent":["import type { PluginContextV3 } from '@kb-labs/sdk';\nimport { ClickUpApiError } from '@kb-labs/clickup-core';\n\nexport { validationError } from '@kb-labs/sdk';\n\nfunction apiHint(err: ClickUpApiError): string {\n switch (err.status) {\n case 401: return 'CLICKUP_API_KEY is invalid or expired — check the token in your environment';\n case 403: return 'You don\\'t have permission for this action in ClickUp — check workspace access';\n case 404: return 'Resource not found — verify the ID is correct (use `kb clickup workspace` to browse IDs)';\n case 429: return 'ClickUp rate limit reached — wait a moment and retry';\n default: return 'Unexpected ClickUp API error';\n }\n}\n\n/**\n * Output a structured error and return — call right before `return { ok: false, error: 'Command failed', result: null }`.\n * In JSON mode emits `{ ok: false, error: { code, message, hint?, status? } }`.\n * In CLI mode uses ctx.ui.error() with hint and cause.\n */\nexport function handleError(ctx: PluginContextV3, err: unknown, isJson?: boolean): void {\n if (err instanceof ClickUpApiError) {\n const hint = apiHint(err);\n if (isJson) {\n ctx.ui?.json?.({ ok: false, error: { code: err.code, message: err.message, status: err.status, hint } });\n } else {\n ctx.ui?.error?.(err.message, { hint, cause: `ClickUp API ${err.status} (${err.code})` });\n }\n return;\n }\n\n const message = err instanceof Error ? err.message : String(err);\n const isEnvMissing = /CLICKUP_API_KEY|CLICKUP_TEAM_ID/.test(message);\n\n if (isJson) {\n ctx.ui?.json?.({\n ok: false,\n error: {\n code: isEnvMissing ? 'ENV_MISSING' : 'INTERNAL_ERROR',\n message,\n ...(isEnvMissing && {\n hint: 'Set CLICKUP_API_KEY (and CLICKUP_TEAM_ID for workspace commands) as environment variables',\n }),\n },\n });\n } else {\n ctx.ui?.error?.(message, {\n ...(isEnvMissing && {\n hint: 'Set CLICKUP_API_KEY (and CLICKUP_TEAM_ID for workspace commands) as environment variables',\n command: 'export CLICKUP_API_KEY=pk_xxx CLICKUP_TEAM_ID=yyy',\n }),\n });\n }\n}\n\n/**\n * Re-throws `err` as an HTTP-aware error for REST handlers.\n * `ClickUpApiError` → preserves HTTP status code; env errors → 400; others → 500.\n * The envelope middleware in rest-api reads `err.statusCode` to set the response status.\n */\nexport function rethrowForRest(err: unknown): never {\n if (err instanceof ClickUpApiError) {\n const hint = apiHint(err);\n const restErr = Object.assign(new Error(err.message), {\n statusCode: err.status,\n code: err.code,\n details: { hint },\n });\n throw restErr;\n }\n const message = err instanceof Error ? err.message : String(err);\n const isEnvMissing = /CLICKUP_API_KEY|CLICKUP_TEAM_ID/.test(message);\n if (isEnvMissing) {\n throw Object.assign(new Error(message), {\n statusCode: 400,\n code: 'ENV_MISSING',\n details: { hint: 'Set CLICKUP_API_KEY (and CLICKUP_TEAM_ID for workspace commands) as environment variables' },\n });\n }\n throw err;\n}\n","import { defineCommand, type CLIInput, type PluginContextV3 } from '@kb-labs/sdk';\nimport { requireApiKey, createTask } from '@kb-labs/clickup-core';\nimport { handleError, validationError } from '../utils/error.js';\n\ntype TaskCreateFlags = {\n list: string;\n name: string;\n desc?: string;\n status?: string;\n priority?: number;\n assignee?: string;\n due?: string;\n parent?: string;\n json?: boolean;\n full?: boolean;\n 'dry-run'?: boolean;\n};\n\nfunction parseDue(due: string): number | undefined {\n const n = Number(due);\n if (!isNaN(n) && n > 0) return n;\n const d = new Date(due);\n if (!isNaN(d.getTime())) return d.getTime();\n return undefined;\n}\n\nexport default defineCommand({\n id: 'clickup:task.create',\n description: 'Create a new task',\n\n handler: {\n async intent(_ctx: PluginContextV3, input: CLIInput<TaskCreateFlags>) {\n const { list, name } = input.flags;\n return {\n summary: `Create task \"${name ?? '(unnamed)'}\" in list ${list ?? '(unknown)'}`,\n operations: [{ type: 'create' as const, resource: 'task', details: { list, name } }],\n };\n },\n\n async execute(ctx: PluginContextV3, input: CLIInput<TaskCreateFlags>) {\n const { list, name, desc, status, priority, assignee, due, parent, json, full } = input.flags;\n\n if (!list) {\n validationError(ctx, '--list is required', 'Use `kb clickup list tasks <listId>` to find the list ID', json);\n return { ok: false, error: 'Command failed', result: null };\n }\n if (!name) {\n validationError(ctx, '--name is required', undefined, json);\n return { ok: false, error: 'Command failed', result: null };\n }\n\n try {\n const task = await createTask(requireApiKey(), list, {\n name,\n markdown_content: desc?.replace(/\\\\n/g, '\\n'),\n status,\n priority,\n assignees: assignee ? assignee.split(',').map(Number) : undefined,\n due_date: due ? parseDue(due) : undefined,\n parent,\n });\n\n if (json) {\n ctx.ui?.json?.(full ? task : { id: task.id, name: task.name, status: task.status.status, url: task.url });\n } else {\n ctx.ui?.success?.('Task created', {\n sections: [{\n items: [\n `id: ${task.id}`,\n `name: ${task.name}`,\n `status: ${task.status.status}`,\n `url: ${task.url}`,\n ],\n }],\n });\n }\n\n return { ok: true, result: task };\n } catch (err) {\n handleError(ctx, err, json);\n return { ok: false, error: 'Command failed', result: null };\n }\n },\n },\n});\n"]}
|
|
@@ -65,11 +65,11 @@ var task_delete_default = defineCommand({
|
|
|
65
65
|
const [taskId] = input.argv;
|
|
66
66
|
if (!taskId) {
|
|
67
67
|
validationError(ctx, "Task ID is required", "Usage: kb clickup task delete <taskId> --yes", input.flags.json);
|
|
68
|
-
return {
|
|
68
|
+
return { ok: false, error: "Command failed", result: null };
|
|
69
69
|
}
|
|
70
70
|
if (!input.flags.yes) {
|
|
71
71
|
validationError(ctx, `--yes is required to delete task ${taskId}`, "Add --yes to confirm deletion", input.flags.json);
|
|
72
|
-
return {
|
|
72
|
+
return { ok: false, error: "Command failed", result: null };
|
|
73
73
|
}
|
|
74
74
|
try {
|
|
75
75
|
await deleteTask(requireApiKey(), taskId);
|
|
@@ -78,10 +78,10 @@ var task_delete_default = defineCommand({
|
|
|
78
78
|
} else {
|
|
79
79
|
ctx.ui?.success?.(`Deleted task ${taskId}`);
|
|
80
80
|
}
|
|
81
|
-
return {
|
|
81
|
+
return { ok: true, result: { deleted: true, taskId } };
|
|
82
82
|
} catch (err) {
|
|
83
83
|
handleError(ctx, err, input.flags.json);
|
|
84
|
-
return {
|
|
84
|
+
return { ok: false, error: "Command failed", result: null };
|
|
85
85
|
}
|
|
86
86
|
}
|
|
87
87
|
}
|