@braingrid/cli 0.1.3 → 0.2.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/CHANGELOG.md +56 -0
- package/README.md +54 -39
- package/dist/chunk-KNVWIF3L.js +401 -0
- package/dist/chunk-KNVWIF3L.js.map +1 -0
- package/dist/cli.js +6229 -290
- package/dist/cli.js.map +1 -1
- package/dist/gh-installer-B65ZOOC4.js +13 -0
- package/dist/gh-installer-B65ZOOC4.js.map +1 -0
- package/package.json +40 -13
- package/dist/build-config.d.ts +0 -26
- package/dist/build-config.d.ts.map +0 -1
- package/dist/build-config.js +0 -45
- package/dist/build-config.js.map +0 -1
- package/dist/cli.d.ts +0 -3
- package/dist/cli.d.ts.map +0 -1
- package/dist/handlers/agent.handlers.d.ts +0 -12
- package/dist/handlers/agent.handlers.d.ts.map +0 -1
- package/dist/handlers/agent.handlers.js +0 -130
- package/dist/handlers/agent.handlers.js.map +0 -1
- package/dist/handlers/auth.handlers.d.ts +0 -19
- package/dist/handlers/auth.handlers.d.ts.map +0 -1
- package/dist/handlers/auth.handlers.js +0 -177
- package/dist/handlers/auth.handlers.js.map +0 -1
- package/dist/handlers/index.d.ts +0 -14
- package/dist/handlers/index.d.ts.map +0 -1
- package/dist/handlers/index.js +0 -14
- package/dist/handlers/index.js.map +0 -1
- package/dist/handlers/init.handlers.d.ts +0 -10
- package/dist/handlers/init.handlers.d.ts.map +0 -1
- package/dist/handlers/init.handlers.js +0 -638
- package/dist/handlers/init.handlers.js.map +0 -1
- package/dist/handlers/project.handlers.d.ts +0 -36
- package/dist/handlers/project.handlers.d.ts.map +0 -1
- package/dist/handlers/project.handlers.js +0 -309
- package/dist/handlers/project.handlers.js.map +0 -1
- package/dist/handlers/requirement.handlers.d.ts +0 -32
- package/dist/handlers/requirement.handlers.d.ts.map +0 -1
- package/dist/handlers/requirement.handlers.js +0 -264
- package/dist/handlers/requirement.handlers.js.map +0 -1
- package/dist/handlers/status.handlers.d.ts +0 -12
- package/dist/handlers/status.handlers.d.ts.map +0 -1
- package/dist/handlers/status.handlers.js +0 -212
- package/dist/handlers/status.handlers.js.map +0 -1
- package/dist/handlers/task.handlers.d.ts +0 -29
- package/dist/handlers/task.handlers.d.ts.map +0 -1
- package/dist/handlers/task.handlers.js +0 -326
- package/dist/handlers/task.handlers.js.map +0 -1
- package/dist/handlers/types.d.ts +0 -10
- package/dist/handlers/types.d.ts.map +0 -1
- package/dist/handlers/types.js +0 -5
- package/dist/handlers/types.js.map +0 -1
- package/dist/handlers/update.handlers.d.ts +0 -16
- package/dist/handlers/update.handlers.d.ts.map +0 -1
- package/dist/handlers/update.handlers.js +0 -119
- package/dist/handlers/update.handlers.js.map +0 -1
- package/dist/rpc/registry.d.ts +0 -97
- package/dist/rpc/registry.d.ts.map +0 -1
- package/dist/rpc/registry.js +0 -119
- package/dist/rpc/registry.js.map +0 -1
- package/dist/rpc/server.d.ts +0 -78
- package/dist/rpc/server.d.ts.map +0 -1
- package/dist/rpc/server.js +0 -437
- package/dist/rpc/server.js.map +0 -1
- package/dist/rpc/transport.d.ts +0 -84
- package/dist/rpc/transport.d.ts.map +0 -1
- package/dist/rpc/transport.js +0 -296
- package/dist/rpc/transport.js.map +0 -1
- package/dist/services/__mocks__/utils.d.ts +0 -16
- package/dist/services/__mocks__/utils.d.ts.map +0 -1
- package/dist/services/__mocks__/utils.js +0 -21
- package/dist/services/__mocks__/utils.js.map +0 -1
- package/dist/services/agent-service.d.ts +0 -29
- package/dist/services/agent-service.d.ts.map +0 -1
- package/dist/services/agent-service.js +0 -273
- package/dist/services/agent-service.js.map +0 -1
- package/dist/services/auth.d.ts +0 -59
- package/dist/services/auth.d.ts.map +0 -1
- package/dist/services/auth.js +0 -549
- package/dist/services/auth.js.map +0 -1
- package/dist/services/claude.d.ts +0 -18
- package/dist/services/claude.d.ts.map +0 -1
- package/dist/services/claude.js +0 -164
- package/dist/services/claude.js.map +0 -1
- package/dist/services/credential-store.d.ts +0 -47
- package/dist/services/credential-store.d.ts.map +0 -1
- package/dist/services/credential-store.js +0 -89
- package/dist/services/credential-store.js.map +0 -1
- package/dist/services/internal/github-service.d.ts +0 -67
- package/dist/services/internal/github-service.d.ts.map +0 -1
- package/dist/services/internal/github-service.js +0 -81
- package/dist/services/internal/github-service.js.map +0 -1
- package/dist/services/internal/repository-service.d.ts +0 -79
- package/dist/services/internal/repository-service.d.ts.map +0 -1
- package/dist/services/internal/repository-service.js +0 -88
- package/dist/services/internal/repository-service.js.map +0 -1
- package/dist/services/oauth2-auth.d.ts +0 -76
- package/dist/services/oauth2-auth.d.ts.map +0 -1
- package/dist/services/oauth2-auth.js +0 -451
- package/dist/services/oauth2-auth.js.map +0 -1
- package/dist/services/project-service.d.ts +0 -24
- package/dist/services/project-service.d.ts.map +0 -1
- package/dist/services/project-service.js +0 -60
- package/dist/services/project-service.js.map +0 -1
- package/dist/services/requirement-service.d.ts +0 -32
- package/dist/services/requirement-service.d.ts.map +0 -1
- package/dist/services/requirement-service.js +0 -91
- package/dist/services/requirement-service.js.map +0 -1
- package/dist/services/task-service.d.ts +0 -22
- package/dist/services/task-service.d.ts.map +0 -1
- package/dist/services/task-service.js +0 -52
- package/dist/services/task-service.js.map +0 -1
- package/dist/types/api.d.ts +0 -16
- package/dist/types/api.d.ts.map +0 -1
- package/dist/types/api.js +0 -5
- package/dist/types/api.js.map +0 -1
- package/dist/types/auth.d.ts +0 -73
- package/dist/types/auth.d.ts.map +0 -1
- package/dist/types/auth.js +0 -2
- package/dist/types/auth.js.map +0 -1
- package/dist/types/claude.d.ts +0 -22
- package/dist/types/claude.d.ts.map +0 -1
- package/dist/types/claude.js +0 -2
- package/dist/types/claude.js.map +0 -1
- package/dist/types/github.d.ts +0 -105
- package/dist/types/github.d.ts.map +0 -1
- package/dist/types/github.js +0 -6
- package/dist/types/github.js.map +0 -1
- package/dist/types/local-project.d.ts +0 -30
- package/dist/types/local-project.d.ts.map +0 -1
- package/dist/types/local-project.js +0 -24
- package/dist/types/local-project.js.map +0 -1
- package/dist/types/project.d.ts +0 -56
- package/dist/types/project.d.ts.map +0 -1
- package/dist/types/project.js +0 -5
- package/dist/types/project.js.map +0 -1
- package/dist/types/requirement.d.ts +0 -69
- package/dist/types/requirement.d.ts.map +0 -1
- package/dist/types/requirement.js +0 -5
- package/dist/types/requirement.js.map +0 -1
- package/dist/types/task.d.ts +0 -44
- package/dist/types/task.d.ts.map +0 -1
- package/dist/types/task.js +0 -5
- package/dist/types/task.js.map +0 -1
- package/dist/utils/axios-retry.d.ts +0 -25
- package/dist/utils/axios-retry.d.ts.map +0 -1
- package/dist/utils/axios-retry.js +0 -174
- package/dist/utils/axios-retry.js.map +0 -1
- package/dist/utils/axios-with-auth.d.ts +0 -10
- package/dist/utils/axios-with-auth.d.ts.map +0 -1
- package/dist/utils/axios-with-auth.js +0 -118
- package/dist/utils/axios-with-auth.js.map +0 -1
- package/dist/utils/cli-tools.d.ts +0 -30
- package/dist/utils/cli-tools.d.ts.map +0 -1
- package/dist/utils/cli-tools.js +0 -199
- package/dist/utils/cli-tools.js.map +0 -1
- package/dist/utils/command-execution.d.ts +0 -30
- package/dist/utils/command-execution.d.ts.map +0 -1
- package/dist/utils/command-execution.js +0 -264
- package/dist/utils/command-execution.js.map +0 -1
- package/dist/utils/command-parser.d.ts +0 -85
- package/dist/utils/command-parser.d.ts.map +0 -1
- package/dist/utils/command-parser.js +0 -287
- package/dist/utils/command-parser.js.map +0 -1
- package/dist/utils/config.d.ts +0 -10
- package/dist/utils/config.d.ts.map +0 -1
- package/dist/utils/config.js +0 -77
- package/dist/utils/config.js.map +0 -1
- package/dist/utils/error-formatter.d.ts +0 -17
- package/dist/utils/error-formatter.d.ts.map +0 -1
- package/dist/utils/error-formatter.js +0 -115
- package/dist/utils/error-formatter.js.map +0 -1
- package/dist/utils/formatting.d.ts +0 -10
- package/dist/utils/formatting.d.ts.map +0 -1
- package/dist/utils/formatting.js +0 -122
- package/dist/utils/formatting.js.map +0 -1
- package/dist/utils/gh-installer.d.ts +0 -31
- package/dist/utils/gh-installer.d.ts.map +0 -1
- package/dist/utils/gh-installer.js +0 -296
- package/dist/utils/gh-installer.js.map +0 -1
- package/dist/utils/git-installer.d.ts +0 -31
- package/dist/utils/git-installer.d.ts.map +0 -1
- package/dist/utils/git-installer.js +0 -290
- package/dist/utils/git-installer.js.map +0 -1
- package/dist/utils/git.d.ts +0 -60
- package/dist/utils/git.d.ts.map +0 -1
- package/dist/utils/git.js +0 -144
- package/dist/utils/git.js.map +0 -1
- package/dist/utils/github-repo.d.ts +0 -43
- package/dist/utils/github-repo.d.ts.map +0 -1
- package/dist/utils/github-repo.js +0 -113
- package/dist/utils/github-repo.js.map +0 -1
- package/dist/utils/id-normalization.d.ts +0 -26
- package/dist/utils/id-normalization.d.ts.map +0 -1
- package/dist/utils/id-normalization.js +0 -45
- package/dist/utils/id-normalization.js.map +0 -1
- package/dist/utils/jwt.d.ts +0 -45
- package/dist/utils/jwt.d.ts.map +0 -1
- package/dist/utils/jwt.js +0 -64
- package/dist/utils/jwt.js.map +0 -1
- package/dist/utils/local-store.d.ts +0 -36
- package/dist/utils/local-store.d.ts.map +0 -1
- package/dist/utils/local-store.js +0 -94
- package/dist/utils/local-store.js.map +0 -1
- package/dist/utils/logger.d.ts +0 -36
- package/dist/utils/logger.d.ts.map +0 -1
- package/dist/utils/logger.js +0 -176
- package/dist/utils/logger.js.map +0 -1
- package/dist/utils/package-manager-installer.d.ts +0 -36
- package/dist/utils/package-manager-installer.d.ts.map +0 -1
- package/dist/utils/package-manager-installer.js +0 -106
- package/dist/utils/package-manager-installer.js.map +0 -1
- package/dist/utils/package-manager.d.ts +0 -31
- package/dist/utils/package-manager.d.ts.map +0 -1
- package/dist/utils/package-manager.js +0 -133
- package/dist/utils/package-manager.js.map +0 -1
- package/dist/utils/projects.d.ts +0 -23
- package/dist/utils/projects.d.ts.map +0 -1
- package/dist/utils/projects.js +0 -36
- package/dist/utils/projects.js.map +0 -1
- package/dist/utils/repository-access.d.ts +0 -89
- package/dist/utils/repository-access.d.ts.map +0 -1
- package/dist/utils/repository-access.js +0 -132
- package/dist/utils/repository-access.js.map +0 -1
- package/dist/utils/requirements.d.ts +0 -43
- package/dist/utils/requirements.d.ts.map +0 -1
- package/dist/utils/requirements.js +0 -79
- package/dist/utils/requirements.js.map +0 -1
- package/dist/utils/spinner.d.ts +0 -47
- package/dist/utils/spinner.d.ts.map +0 -1
- package/dist/utils/spinner.js +0 -101
- package/dist/utils/spinner.js.map +0 -1
- package/dist/utils/status-parser.d.ts +0 -95
- package/dist/utils/status-parser.d.ts.map +0 -1
- package/dist/utils/status-parser.js +0 -205
- package/dist/utils/status-parser.js.map +0 -1
- package/dist/utils/tasks.d.ts +0 -21
- package/dist/utils/tasks.d.ts.map +0 -1
- package/dist/utils/tasks.js +0 -63
- package/dist/utils/tasks.js.map +0 -1
- package/dist/utils/workspace-manager.d.ts +0 -65
- package/dist/utils/workspace-manager.d.ts.map +0 -1
- package/dist/utils/workspace-manager.js +0 -98
- package/dist/utils/workspace-manager.js.map +0 -1
|
@@ -1,79 +0,0 @@
|
|
|
1
|
-
import { normalizeId } from './id-normalization.js';
|
|
2
|
-
/**
|
|
3
|
-
* Format a requirement with friendly REQ-<number> format
|
|
4
|
-
* Note: short_id already contains "REQ-123" format
|
|
5
|
-
*/
|
|
6
|
-
export function formatRequirementId(requirement) {
|
|
7
|
-
return requirement.short_id || `REQ-${requirement.req_id || 0}`;
|
|
8
|
-
}
|
|
9
|
-
/**
|
|
10
|
-
* Normalize requirement ID from various formats to API-compatible format:
|
|
11
|
-
* - "REQ-123" -> "REQ-123" (already normalized)
|
|
12
|
-
* - "req-123" -> "REQ-123" (uppercase)
|
|
13
|
-
* - "REQ 123" -> "REQ-123" (add dash, uppercase)
|
|
14
|
-
* - "req 123" -> "REQ-123" (add dash, uppercase)
|
|
15
|
-
* - "123" -> "REQ-123" (add prefix)
|
|
16
|
-
* - "uuid-string" -> "uuid-string" (UUID, return as-is)
|
|
17
|
-
*
|
|
18
|
-
* This function takes user input and returns the ID that should be used in API calls
|
|
19
|
-
*/
|
|
20
|
-
export function normalizeRequirementId(input) {
|
|
21
|
-
return normalizeId('REQ', input);
|
|
22
|
-
}
|
|
23
|
-
/**
|
|
24
|
-
* Parse a requirement ID from various formats:
|
|
25
|
-
* - "REQ-123" -> { type: 'req_id', value: 123 }
|
|
26
|
-
* - "req-123" -> { type: 'req_id', value: 123 }
|
|
27
|
-
* - "REQ 123" -> { type: 'req_id', value: 123 }
|
|
28
|
-
* - "req 123" -> { type: 'req_id', value: 123 }
|
|
29
|
-
* - "123" -> { type: 'req_id', value: 123 }
|
|
30
|
-
* - "uuid-string" -> { type: 'uuid', value: 'uuid-string' }
|
|
31
|
-
*/
|
|
32
|
-
export function parseRequirementId(input) {
|
|
33
|
-
// Trim whitespace
|
|
34
|
-
const trimmed = input.trim();
|
|
35
|
-
// Handle "REQ-123" or "req-123" format (with dash)
|
|
36
|
-
const reqDashMatch = trimmed.match(/^REQ-(\d+)$/i);
|
|
37
|
-
if (reqDashMatch) {
|
|
38
|
-
return { type: 'req_id', value: parseInt(reqDashMatch[1], 10) };
|
|
39
|
-
}
|
|
40
|
-
// Handle "REQ 123" or "req 123" format (with space)
|
|
41
|
-
const reqSpaceMatch = trimmed.match(/^REQ\s+(\d+)$/i);
|
|
42
|
-
if (reqSpaceMatch) {
|
|
43
|
-
return { type: 'req_id', value: parseInt(reqSpaceMatch[1], 10) };
|
|
44
|
-
}
|
|
45
|
-
// Handle plain number format
|
|
46
|
-
const numberMatch = trimmed.match(/^\d+$/);
|
|
47
|
-
if (numberMatch) {
|
|
48
|
-
return { type: 'req_id', value: parseInt(trimmed, 10) };
|
|
49
|
-
}
|
|
50
|
-
// Assume it's a UUID
|
|
51
|
-
return { type: 'uuid', value: trimmed };
|
|
52
|
-
}
|
|
53
|
-
/**
|
|
54
|
-
* Find a requirement by either req_id or UUID
|
|
55
|
-
*/
|
|
56
|
-
export function findRequirementById(requirements, identifier) {
|
|
57
|
-
const parsed = parseRequirementId(identifier);
|
|
58
|
-
if (parsed.type === 'req_id') {
|
|
59
|
-
return requirements.find(req => req.short_id === `REQ-${parsed.value}`);
|
|
60
|
-
}
|
|
61
|
-
else {
|
|
62
|
-
return requirements.find(req => req.id === parsed.value);
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
/**
|
|
66
|
-
* Get query parameters for API calls based on identifier type
|
|
67
|
-
* Note: API doesn't support req_id parameter, so we only return id for UUIDs
|
|
68
|
-
*/
|
|
69
|
-
export function getRequirementQueryParams(identifier) {
|
|
70
|
-
const parsed = parseRequirementId(identifier);
|
|
71
|
-
if (parsed.type === 'uuid') {
|
|
72
|
-
return { id: parsed.value };
|
|
73
|
-
}
|
|
74
|
-
else {
|
|
75
|
-
// For req_id, we'll need to search differently
|
|
76
|
-
return {};
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
//# sourceMappingURL=requirements.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"requirements.js","sourceRoot":"","sources":["../../src/utils/requirements.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEpD;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,WAAwB;IAC3D,OAAO,WAAW,CAAC,QAAQ,IAAI,OAAO,WAAW,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;AACjE,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,sBAAsB,CAAC,KAAa;IACnD,OAAO,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AAClC,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAAa;IAI/C,kBAAkB;IAClB,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAE7B,mDAAmD;IACnD,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;IACnD,IAAI,YAAY,EAAE,CAAC;QAClB,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;IACjE,CAAC;IAED,oDAAoD;IACpD,MAAM,aAAa,GAAG,OAAO,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;IACtD,IAAI,aAAa,EAAE,CAAC;QACnB,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;IAClE,CAAC;IAED,6BAA6B;IAC7B,MAAM,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC3C,IAAI,WAAW,EAAE,CAAC;QACjB,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC;IACzD,CAAC;IAED,qBAAqB;IACrB,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;AACzC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAClC,YAA2B,EAC3B,UAAkB;IAElB,MAAM,MAAM,GAAG,kBAAkB,CAAC,UAAU,CAAC,CAAC;IAE9C,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,KAAK,OAAO,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;IACzE,CAAC;SAAM,CAAC;QACP,OAAO,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,MAAM,CAAC,KAAK,CAAC,CAAC;IAC1D,CAAC;AACF,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,yBAAyB,CAAC,UAAkB;IAC3D,MAAM,MAAM,GAAG,kBAAkB,CAAC,UAAU,CAAC,CAAC;IAE9C,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QAC5B,OAAO,EAAE,EAAE,EAAE,MAAM,CAAC,KAAe,EAAE,CAAC;IACvC,CAAC;SAAM,CAAC;QACP,+CAA+C;QAC/C,OAAO,EAAE,CAAC;IACX,CAAC;AACF,CAAC"}
|
package/dist/utils/spinner.d.ts
DELETED
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Spinner Utility
|
|
3
|
-
*
|
|
4
|
-
* Provides a simple polling spinner for async operations with user feedback.
|
|
5
|
-
* Shows an animated spinner while waiting for a condition to become true.
|
|
6
|
-
*/
|
|
7
|
-
/**
|
|
8
|
-
* Wait for a condition with animated spinner
|
|
9
|
-
*
|
|
10
|
-
* Polls an async check function and displays a spinner while waiting.
|
|
11
|
-
* Clears the spinner on completion or timeout.
|
|
12
|
-
*
|
|
13
|
-
* @param message - Message to display next to spinner
|
|
14
|
-
* @param checkFn - Async function that returns true when condition is met
|
|
15
|
-
* @param intervalMs - Polling interval in milliseconds (default: 3000)
|
|
16
|
-
* @param maxAttempts - Maximum number of attempts (default: 60 = 3 minutes at 3s interval)
|
|
17
|
-
* @returns Promise that resolves to true if condition met, false if timeout
|
|
18
|
-
*
|
|
19
|
-
* @example
|
|
20
|
-
* ```typescript
|
|
21
|
-
* const success = await waitWithSpinner(
|
|
22
|
-
* 'Waiting for repository access',
|
|
23
|
-
* async () => await checkAccess(),
|
|
24
|
-
* 3000,
|
|
25
|
-
* 60
|
|
26
|
-
* );
|
|
27
|
-
* ```
|
|
28
|
-
*/
|
|
29
|
-
export declare function waitWithSpinner(message: string, checkFn: () => Promise<boolean>, intervalMs?: number, maxAttempts?: number): Promise<boolean>;
|
|
30
|
-
/**
|
|
31
|
-
* Simple one-time spinner display
|
|
32
|
-
*
|
|
33
|
-
* Shows a spinner without polling. Useful for operations that manage their own timing.
|
|
34
|
-
* Returns a cleanup function to clear the spinner.
|
|
35
|
-
*
|
|
36
|
-
* @param message - Message to display
|
|
37
|
-
* @returns Cleanup function to stop and clear the spinner
|
|
38
|
-
*
|
|
39
|
-
* @example
|
|
40
|
-
* ```typescript
|
|
41
|
-
* const stop = showSpinner('Loading');
|
|
42
|
-
* await doWork();
|
|
43
|
-
* stop();
|
|
44
|
-
* ```
|
|
45
|
-
*/
|
|
46
|
-
export declare function showSpinner(message: string): () => void;
|
|
47
|
-
//# sourceMappingURL=spinner.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"spinner.d.ts","sourceRoot":"","sources":["../../src/utils/spinner.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAsB,eAAe,CACpC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,EAC/B,UAAU,GAAE,MAAa,EACzB,WAAW,GAAE,MAAW,GACtB,OAAO,CAAC,OAAO,CAAC,CA4ClB;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,IAAI,CAYvD"}
|
package/dist/utils/spinner.js
DELETED
|
@@ -1,101 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Spinner Utility
|
|
3
|
-
*
|
|
4
|
-
* Provides a simple polling spinner for async operations with user feedback.
|
|
5
|
-
* Shows an animated spinner while waiting for a condition to become true.
|
|
6
|
-
*/
|
|
7
|
-
import chalk from 'chalk';
|
|
8
|
-
const SPINNER_FRAMES = ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏'];
|
|
9
|
-
/**
|
|
10
|
-
* Wait for a condition with animated spinner
|
|
11
|
-
*
|
|
12
|
-
* Polls an async check function and displays a spinner while waiting.
|
|
13
|
-
* Clears the spinner on completion or timeout.
|
|
14
|
-
*
|
|
15
|
-
* @param message - Message to display next to spinner
|
|
16
|
-
* @param checkFn - Async function that returns true when condition is met
|
|
17
|
-
* @param intervalMs - Polling interval in milliseconds (default: 3000)
|
|
18
|
-
* @param maxAttempts - Maximum number of attempts (default: 60 = 3 minutes at 3s interval)
|
|
19
|
-
* @returns Promise that resolves to true if condition met, false if timeout
|
|
20
|
-
*
|
|
21
|
-
* @example
|
|
22
|
-
* ```typescript
|
|
23
|
-
* const success = await waitWithSpinner(
|
|
24
|
-
* 'Waiting for repository access',
|
|
25
|
-
* async () => await checkAccess(),
|
|
26
|
-
* 3000,
|
|
27
|
-
* 60
|
|
28
|
-
* );
|
|
29
|
-
* ```
|
|
30
|
-
*/
|
|
31
|
-
export async function waitWithSpinner(message, checkFn, intervalMs = 3000, maxAttempts = 60) {
|
|
32
|
-
let frameIndex = 0;
|
|
33
|
-
let spinnerInterval = null;
|
|
34
|
-
// Function to update spinner
|
|
35
|
-
const updateSpinner = () => {
|
|
36
|
-
const frame = SPINNER_FRAMES[frameIndex];
|
|
37
|
-
frameIndex = (frameIndex + 1) % SPINNER_FRAMES.length;
|
|
38
|
-
// Clear current line and write new spinner
|
|
39
|
-
process.stdout.write(`\r${chalk.cyan(frame)} ${message}...`);
|
|
40
|
-
};
|
|
41
|
-
// Start spinner animation (update every 100ms for smooth animation)
|
|
42
|
-
spinnerInterval = setInterval(updateSpinner, 100);
|
|
43
|
-
try {
|
|
44
|
-
// Poll with the specified interval
|
|
45
|
-
for (let attempt = 0; attempt < maxAttempts; attempt++) {
|
|
46
|
-
const result = await checkFn();
|
|
47
|
-
if (result) {
|
|
48
|
-
// Success! Clear spinner and return
|
|
49
|
-
if (spinnerInterval)
|
|
50
|
-
clearInterval(spinnerInterval);
|
|
51
|
-
process.stdout.write('\r' + ' '.repeat(message.length + 10) + '\r'); // Clear line
|
|
52
|
-
return true;
|
|
53
|
-
}
|
|
54
|
-
// Wait before next attempt (unless this was the last attempt)
|
|
55
|
-
if (attempt < maxAttempts - 1) {
|
|
56
|
-
await new Promise(resolve => setTimeout(resolve, intervalMs));
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
// Timeout - clear spinner and return false
|
|
60
|
-
if (spinnerInterval)
|
|
61
|
-
clearInterval(spinnerInterval);
|
|
62
|
-
process.stdout.write('\r' + ' '.repeat(message.length + 10) + '\r'); // Clear line
|
|
63
|
-
return false;
|
|
64
|
-
}
|
|
65
|
-
catch (error) {
|
|
66
|
-
// Error during polling - clean up and rethrow
|
|
67
|
-
if (spinnerInterval)
|
|
68
|
-
clearInterval(spinnerInterval);
|
|
69
|
-
process.stdout.write('\r' + ' '.repeat(message.length + 10) + '\r'); // Clear line
|
|
70
|
-
throw error;
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
/**
|
|
74
|
-
* Simple one-time spinner display
|
|
75
|
-
*
|
|
76
|
-
* Shows a spinner without polling. Useful for operations that manage their own timing.
|
|
77
|
-
* Returns a cleanup function to clear the spinner.
|
|
78
|
-
*
|
|
79
|
-
* @param message - Message to display
|
|
80
|
-
* @returns Cleanup function to stop and clear the spinner
|
|
81
|
-
*
|
|
82
|
-
* @example
|
|
83
|
-
* ```typescript
|
|
84
|
-
* const stop = showSpinner('Loading');
|
|
85
|
-
* await doWork();
|
|
86
|
-
* stop();
|
|
87
|
-
* ```
|
|
88
|
-
*/
|
|
89
|
-
export function showSpinner(message) {
|
|
90
|
-
let frameIndex = 0;
|
|
91
|
-
const interval = setInterval(() => {
|
|
92
|
-
const frame = SPINNER_FRAMES[frameIndex];
|
|
93
|
-
frameIndex = (frameIndex + 1) % SPINNER_FRAMES.length;
|
|
94
|
-
process.stdout.write(`\r${chalk.cyan(frame)} ${message}...`);
|
|
95
|
-
}, 100);
|
|
96
|
-
return () => {
|
|
97
|
-
clearInterval(interval);
|
|
98
|
-
process.stdout.write('\r' + ' '.repeat(message.length + 10) + '\r');
|
|
99
|
-
};
|
|
100
|
-
}
|
|
101
|
-
//# sourceMappingURL=spinner.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"spinner.js","sourceRoot":"","sources":["../../src/utils/spinner.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,95 +0,0 @@
|
|
|
1
|
-
import type { RequirementStatus } from '../types/requirement.js';
|
|
2
|
-
import type { TaskStatus } from '../types/task.js';
|
|
3
|
-
export type Status = RequirementStatus | TaskStatus;
|
|
4
|
-
/**
|
|
5
|
-
* Maps natural language keywords to Status enum values
|
|
6
|
-
*/
|
|
7
|
-
export declare const StatusKeywordMap: Record<string, Status>;
|
|
8
|
-
/**
|
|
9
|
-
* Result of status parsing operation
|
|
10
|
-
*/
|
|
11
|
-
export interface StatusParsingResult {
|
|
12
|
-
/**
|
|
13
|
-
* Successfully parsed status values
|
|
14
|
-
*/
|
|
15
|
-
statuses: Status[];
|
|
16
|
-
/**
|
|
17
|
-
* Invalid keywords that couldn't be parsed
|
|
18
|
-
*/
|
|
19
|
-
invalid: string[];
|
|
20
|
-
/**
|
|
21
|
-
* Whether parsing encountered any errors
|
|
22
|
-
*/
|
|
23
|
-
hasErrors: boolean;
|
|
24
|
-
/**
|
|
25
|
-
* Error message if any invalid keywords were found
|
|
26
|
-
*/
|
|
27
|
-
errorMessage?: string;
|
|
28
|
-
}
|
|
29
|
-
/**
|
|
30
|
-
* Parses a comma-separated string of status keywords into Status values
|
|
31
|
-
*
|
|
32
|
-
* @param input - Comma-separated status keywords (e.g., "todo,doing" or "done")
|
|
33
|
-
* @returns Array of Status values
|
|
34
|
-
*
|
|
35
|
-
* @example
|
|
36
|
-
* parseStatusKeywords("todo,doing") // Returns ["PLANNED", "IN_PROGRESS"]
|
|
37
|
-
* parseStatusKeywords("done") // Returns ["COMPLETED"]
|
|
38
|
-
* parseStatusKeywords("") // Returns [] (all statuses)
|
|
39
|
-
*/
|
|
40
|
-
export declare function parseStatusKeywords(input: string): Status[];
|
|
41
|
-
/**
|
|
42
|
-
* Validates status keywords and returns both valid and invalid ones
|
|
43
|
-
*
|
|
44
|
-
* @param keywords - Array of status keywords to validate
|
|
45
|
-
* @returns Object containing valid statuses and invalid keywords
|
|
46
|
-
*
|
|
47
|
-
* @example
|
|
48
|
-
* validateStatusKeywords(["todo", "invalid"])
|
|
49
|
-
* // Returns { valid: ["PLANNED"], invalid: ["invalid"] }
|
|
50
|
-
*/
|
|
51
|
-
export declare function validateStatusKeywords(keywords: string[]): {
|
|
52
|
-
valid: Status[];
|
|
53
|
-
invalid: string[];
|
|
54
|
-
};
|
|
55
|
-
/**
|
|
56
|
-
* Formats an error message for invalid status keywords
|
|
57
|
-
*
|
|
58
|
-
* @param invalidKeywords - Array of invalid keywords
|
|
59
|
-
* @returns Formatted error message with suggestions
|
|
60
|
-
*
|
|
61
|
-
* @example
|
|
62
|
-
* formatStatusError(["invalid", "unknown"])
|
|
63
|
-
* // Returns detailed error message with valid keyword suggestions
|
|
64
|
-
*/
|
|
65
|
-
export declare function formatStatusError(invalidKeywords: string[]): string;
|
|
66
|
-
/**
|
|
67
|
-
* Parses and validates status keywords, returning a complete result
|
|
68
|
-
*
|
|
69
|
-
* @param input - Comma-separated status keywords
|
|
70
|
-
* @returns StatusParsingResult with parsed statuses and any errors
|
|
71
|
-
*
|
|
72
|
-
* @example
|
|
73
|
-
* parseAndValidateStatus("todo,invalid")
|
|
74
|
-
* // Returns {
|
|
75
|
-
* // statuses: ["PLANNED"],
|
|
76
|
-
* // invalid: ["invalid"],
|
|
77
|
-
* // hasErrors: true,
|
|
78
|
-
* // errorMessage: "Invalid status keyword: \"invalid\"..."
|
|
79
|
-
* // }
|
|
80
|
-
*/
|
|
81
|
-
export declare function parseAndValidateStatus(input: string): StatusParsingResult;
|
|
82
|
-
/**
|
|
83
|
-
* Gets all valid status keywords grouped by their Status value
|
|
84
|
-
*
|
|
85
|
-
* @returns Object mapping Status to array of keywords
|
|
86
|
-
*/
|
|
87
|
-
export declare function getStatusKeywordsByValue(): Record<Status, string[]>;
|
|
88
|
-
/**
|
|
89
|
-
* Checks if a given string is a valid status keyword
|
|
90
|
-
*
|
|
91
|
-
* @param keyword - The keyword to check
|
|
92
|
-
* @returns true if the keyword is valid, false otherwise
|
|
93
|
-
*/
|
|
94
|
-
export declare function isValidStatusKeyword(keyword: string): boolean;
|
|
95
|
-
//# sourceMappingURL=status-parser.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"status-parser.d.ts","sourceRoot":"","sources":["../../src/utils/status-parser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAGnD,MAAM,MAAM,MAAM,GAAG,iBAAiB,GAAG,UAAU,CAAC;AAEpD;;GAEG;AACH,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CA+CnD,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,mBAAmB;IACnC;;OAEG;IACH,QAAQ,EAAE,MAAM,EAAE,CAAC;IAEnB;;OAEG;IACH,OAAO,EAAE,MAAM,EAAE,CAAC;IAElB;;OAEG;IACH,SAAS,EAAE,OAAO,CAAC;IAEnB;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CA4B3D;AAED;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG;IAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,CAoBjG;AAED;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAAC,eAAe,EAAE,MAAM,EAAE,GAAG,MAAM,CAoBnE;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,mBAAmB,CAgCzE;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAWnE;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAE7D"}
|
|
@@ -1,205 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Maps natural language keywords to Status enum values
|
|
3
|
-
*/
|
|
4
|
-
export const StatusKeywordMap = {
|
|
5
|
-
// IDEA status keywords
|
|
6
|
-
idea: 'IDEA',
|
|
7
|
-
ideas: 'IDEA',
|
|
8
|
-
ideation: 'IDEA',
|
|
9
|
-
brainstorm: 'IDEA',
|
|
10
|
-
concept: 'IDEA',
|
|
11
|
-
// PLANNED status keywords
|
|
12
|
-
todo: 'PLANNED',
|
|
13
|
-
planned: 'PLANNED',
|
|
14
|
-
plan: 'PLANNED',
|
|
15
|
-
pending: 'PLANNED',
|
|
16
|
-
backlog: 'PLANNED',
|
|
17
|
-
// IN_PROGRESS status keywords
|
|
18
|
-
doing: 'IN_PROGRESS',
|
|
19
|
-
active: 'IN_PROGRESS',
|
|
20
|
-
wip: 'IN_PROGRESS',
|
|
21
|
-
'in-progress': 'IN_PROGRESS',
|
|
22
|
-
inprogress: 'IN_PROGRESS',
|
|
23
|
-
in_progress: 'IN_PROGRESS',
|
|
24
|
-
working: 'IN_PROGRESS',
|
|
25
|
-
started: 'IN_PROGRESS',
|
|
26
|
-
// REVIEW status keywords
|
|
27
|
-
review: 'REVIEW',
|
|
28
|
-
reviewing: 'REVIEW',
|
|
29
|
-
'in-review': 'REVIEW',
|
|
30
|
-
inreview: 'REVIEW',
|
|
31
|
-
in_review: 'REVIEW',
|
|
32
|
-
pending_review: 'REVIEW',
|
|
33
|
-
'pending-review': 'REVIEW',
|
|
34
|
-
// COMPLETED status keywords
|
|
35
|
-
done: 'COMPLETED',
|
|
36
|
-
complete: 'COMPLETED',
|
|
37
|
-
completed: 'COMPLETED',
|
|
38
|
-
finished: 'COMPLETED',
|
|
39
|
-
closed: 'COMPLETED',
|
|
40
|
-
// CANCELLED status keywords
|
|
41
|
-
cancelled: 'CANCELLED',
|
|
42
|
-
canceled: 'CANCELLED',
|
|
43
|
-
cancel: 'CANCELLED',
|
|
44
|
-
abandoned: 'CANCELLED',
|
|
45
|
-
dropped: 'CANCELLED',
|
|
46
|
-
};
|
|
47
|
-
/**
|
|
48
|
-
* Parses a comma-separated string of status keywords into Status values
|
|
49
|
-
*
|
|
50
|
-
* @param input - Comma-separated status keywords (e.g., "todo,doing" or "done")
|
|
51
|
-
* @returns Array of Status values
|
|
52
|
-
*
|
|
53
|
-
* @example
|
|
54
|
-
* parseStatusKeywords("todo,doing") // Returns ["PLANNED", "IN_PROGRESS"]
|
|
55
|
-
* parseStatusKeywords("done") // Returns ["COMPLETED"]
|
|
56
|
-
* parseStatusKeywords("") // Returns [] (all statuses)
|
|
57
|
-
*/
|
|
58
|
-
export function parseStatusKeywords(input) {
|
|
59
|
-
// If no input or empty string, return empty array (show all statuses)
|
|
60
|
-
if (!input || input.trim() === '') {
|
|
61
|
-
return [];
|
|
62
|
-
}
|
|
63
|
-
// Split by comma and clean up whitespace
|
|
64
|
-
const keywords = input
|
|
65
|
-
.split(',')
|
|
66
|
-
.map(k => k.trim().toLowerCase())
|
|
67
|
-
.filter(k => k.length > 0);
|
|
68
|
-
// Remove duplicates while preserving order
|
|
69
|
-
const uniqueKeywords = [...new Set(keywords)];
|
|
70
|
-
// Map keywords to statuses
|
|
71
|
-
const statuses = [];
|
|
72
|
-
const seenStatuses = new Set();
|
|
73
|
-
for (const keyword of uniqueKeywords) {
|
|
74
|
-
const status = StatusKeywordMap[keyword];
|
|
75
|
-
if (status && !seenStatuses.has(status)) {
|
|
76
|
-
statuses.push(status);
|
|
77
|
-
seenStatuses.add(status);
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
return statuses;
|
|
81
|
-
}
|
|
82
|
-
/**
|
|
83
|
-
* Validates status keywords and returns both valid and invalid ones
|
|
84
|
-
*
|
|
85
|
-
* @param keywords - Array of status keywords to validate
|
|
86
|
-
* @returns Object containing valid statuses and invalid keywords
|
|
87
|
-
*
|
|
88
|
-
* @example
|
|
89
|
-
* validateStatusKeywords(["todo", "invalid"])
|
|
90
|
-
* // Returns { valid: ["PLANNED"], invalid: ["invalid"] }
|
|
91
|
-
*/
|
|
92
|
-
export function validateStatusKeywords(keywords) {
|
|
93
|
-
const valid = [];
|
|
94
|
-
const invalid = [];
|
|
95
|
-
const seenStatuses = new Set();
|
|
96
|
-
for (const keyword of keywords) {
|
|
97
|
-
const normalizedKeyword = keyword.trim().toLowerCase();
|
|
98
|
-
const status = StatusKeywordMap[normalizedKeyword];
|
|
99
|
-
if (status) {
|
|
100
|
-
if (!seenStatuses.has(status)) {
|
|
101
|
-
valid.push(status);
|
|
102
|
-
seenStatuses.add(status);
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
else if (normalizedKeyword) {
|
|
106
|
-
invalid.push(keyword);
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
return { valid, invalid };
|
|
110
|
-
}
|
|
111
|
-
/**
|
|
112
|
-
* Formats an error message for invalid status keywords
|
|
113
|
-
*
|
|
114
|
-
* @param invalidKeywords - Array of invalid keywords
|
|
115
|
-
* @returns Formatted error message with suggestions
|
|
116
|
-
*
|
|
117
|
-
* @example
|
|
118
|
-
* formatStatusError(["invalid", "unknown"])
|
|
119
|
-
* // Returns detailed error message with valid keyword suggestions
|
|
120
|
-
*/
|
|
121
|
-
export function formatStatusError(invalidKeywords) {
|
|
122
|
-
const categorizedKeywords = {
|
|
123
|
-
IDEA: ['idea', 'ideas', 'ideation', 'brainstorm', 'concept'],
|
|
124
|
-
PLANNED: ['todo', 'planned', 'plan', 'pending', 'backlog'],
|
|
125
|
-
IN_PROGRESS: ['doing', 'active', 'wip', 'in-progress', 'working'],
|
|
126
|
-
REVIEW: ['review', 'reviewing', 'in-review', 'pending-review'],
|
|
127
|
-
COMPLETED: ['done', 'complete', 'completed', 'finished'],
|
|
128
|
-
CANCELLED: ['cancelled', 'canceled', 'cancel', 'abandoned'],
|
|
129
|
-
};
|
|
130
|
-
let errorMsg = `Invalid status keyword${invalidKeywords.length > 1 ? 's' : ''}: ${invalidKeywords.map(k => `"${k}"`).join(', ')}\n\n`;
|
|
131
|
-
errorMsg += 'Valid status keywords:\n';
|
|
132
|
-
for (const [status, keywords] of Object.entries(categorizedKeywords)) {
|
|
133
|
-
errorMsg += ` ${status}: ${keywords.join(', ')}\n`;
|
|
134
|
-
}
|
|
135
|
-
errorMsg += '\nExample: braingrid list --status idea,todo,doing';
|
|
136
|
-
return errorMsg;
|
|
137
|
-
}
|
|
138
|
-
/**
|
|
139
|
-
* Parses and validates status keywords, returning a complete result
|
|
140
|
-
*
|
|
141
|
-
* @param input - Comma-separated status keywords
|
|
142
|
-
* @returns StatusParsingResult with parsed statuses and any errors
|
|
143
|
-
*
|
|
144
|
-
* @example
|
|
145
|
-
* parseAndValidateStatus("todo,invalid")
|
|
146
|
-
* // Returns {
|
|
147
|
-
* // statuses: ["PLANNED"],
|
|
148
|
-
* // invalid: ["invalid"],
|
|
149
|
-
* // hasErrors: true,
|
|
150
|
-
* // errorMessage: "Invalid status keyword: \"invalid\"..."
|
|
151
|
-
* // }
|
|
152
|
-
*/
|
|
153
|
-
export function parseAndValidateStatus(input) {
|
|
154
|
-
// Handle empty input
|
|
155
|
-
if (!input || input.trim() === '') {
|
|
156
|
-
return {
|
|
157
|
-
statuses: [],
|
|
158
|
-
invalid: [],
|
|
159
|
-
hasErrors: false,
|
|
160
|
-
};
|
|
161
|
-
}
|
|
162
|
-
// Split and normalize keywords
|
|
163
|
-
const keywords = input
|
|
164
|
-
.split(',')
|
|
165
|
-
.map(k => k.trim())
|
|
166
|
-
.filter(k => k.length > 0);
|
|
167
|
-
// Validate keywords
|
|
168
|
-
const { valid, invalid } = validateStatusKeywords(keywords);
|
|
169
|
-
// Build result
|
|
170
|
-
const result = {
|
|
171
|
-
statuses: valid,
|
|
172
|
-
invalid,
|
|
173
|
-
hasErrors: invalid.length > 0,
|
|
174
|
-
};
|
|
175
|
-
// Add error message if there are invalid keywords
|
|
176
|
-
if (result.hasErrors) {
|
|
177
|
-
result.errorMessage = formatStatusError(invalid);
|
|
178
|
-
}
|
|
179
|
-
return result;
|
|
180
|
-
}
|
|
181
|
-
/**
|
|
182
|
-
* Gets all valid status keywords grouped by their Status value
|
|
183
|
-
*
|
|
184
|
-
* @returns Object mapping Status to array of keywords
|
|
185
|
-
*/
|
|
186
|
-
export function getStatusKeywordsByValue() {
|
|
187
|
-
const grouped = {};
|
|
188
|
-
for (const [keyword, status] of Object.entries(StatusKeywordMap)) {
|
|
189
|
-
if (!grouped[status]) {
|
|
190
|
-
grouped[status] = [];
|
|
191
|
-
}
|
|
192
|
-
grouped[status].push(keyword);
|
|
193
|
-
}
|
|
194
|
-
return grouped;
|
|
195
|
-
}
|
|
196
|
-
/**
|
|
197
|
-
* Checks if a given string is a valid status keyword
|
|
198
|
-
*
|
|
199
|
-
* @param keyword - The keyword to check
|
|
200
|
-
* @returns true if the keyword is valid, false otherwise
|
|
201
|
-
*/
|
|
202
|
-
export function isValidStatusKeyword(keyword) {
|
|
203
|
-
return keyword.toLowerCase() in StatusKeywordMap;
|
|
204
|
-
}
|
|
205
|
-
//# sourceMappingURL=status-parser.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"status-parser.js","sourceRoot":"","sources":["../../src/utils/status-parser.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/tasks.d.ts
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import { RequirementTask as Task } from '../types/requirement.js';
|
|
2
|
-
export declare function formatTaskId(task: Task): string;
|
|
3
|
-
/**
|
|
4
|
-
* Normalize task ID from various formats to API-compatible format:
|
|
5
|
-
* - "TASK-123" -> "TASK-123" (already normalized)
|
|
6
|
-
* - "task-123" -> "TASK-123" (uppercase)
|
|
7
|
-
* - "TASK 123" -> "TASK-123" (add dash, uppercase)
|
|
8
|
-
* - "task 123" -> "TASK-123" (add dash, uppercase)
|
|
9
|
-
* - "123" -> "TASK-123" (add prefix)
|
|
10
|
-
* - "uuid-string" -> "uuid-string" (UUID, return as-is)
|
|
11
|
-
*
|
|
12
|
-
* This function takes user input and returns the ID that should be used in API calls
|
|
13
|
-
*/
|
|
14
|
-
export declare function normalizeTaskId(input: string): string;
|
|
15
|
-
export declare function parseTaskId(input: string): {
|
|
16
|
-
type: 'number' | 'uuid';
|
|
17
|
-
value: string | number;
|
|
18
|
-
};
|
|
19
|
-
export declare function findTaskById(tasks: Task[], identifier: string): Task | null;
|
|
20
|
-
export declare function getTaskStatusIcon(status: string): string;
|
|
21
|
-
//# sourceMappingURL=tasks.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tasks.d.ts","sourceRoot":"","sources":["../../src/utils/tasks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,IAAI,IAAI,EAAE,MAAM,yBAAyB,CAAC;AAGlE,wBAAgB,YAAY,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,CAE/C;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAErD;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,QAAQ,GAAG,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAA;CAAE,CAwB9F;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAQ3E;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAaxD"}
|
package/dist/utils/tasks.js
DELETED
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
import { normalizeId } from './id-normalization.js';
|
|
2
|
-
export function formatTaskId(task) {
|
|
3
|
-
return `TASK-${task.number}`;
|
|
4
|
-
}
|
|
5
|
-
/**
|
|
6
|
-
* Normalize task ID from various formats to API-compatible format:
|
|
7
|
-
* - "TASK-123" -> "TASK-123" (already normalized)
|
|
8
|
-
* - "task-123" -> "TASK-123" (uppercase)
|
|
9
|
-
* - "TASK 123" -> "TASK-123" (add dash, uppercase)
|
|
10
|
-
* - "task 123" -> "TASK-123" (add dash, uppercase)
|
|
11
|
-
* - "123" -> "TASK-123" (add prefix)
|
|
12
|
-
* - "uuid-string" -> "uuid-string" (UUID, return as-is)
|
|
13
|
-
*
|
|
14
|
-
* This function takes user input and returns the ID that should be used in API calls
|
|
15
|
-
*/
|
|
16
|
-
export function normalizeTaskId(input) {
|
|
17
|
-
return normalizeId('TASK', input);
|
|
18
|
-
}
|
|
19
|
-
export function parseTaskId(input) {
|
|
20
|
-
// Trim whitespace
|
|
21
|
-
const trimmed = input.trim();
|
|
22
|
-
// Handle "TASK-123" or "task-123" format (with dash)
|
|
23
|
-
const taskDashMatch = trimmed.match(/^TASK-(\d+)$/i);
|
|
24
|
-
if (taskDashMatch) {
|
|
25
|
-
return { type: 'number', value: parseInt(taskDashMatch[1], 10) };
|
|
26
|
-
}
|
|
27
|
-
// Handle "TASK 123" or "task 123" format (with space)
|
|
28
|
-
const taskSpaceMatch = trimmed.match(/^TASK\s+(\d+)$/i);
|
|
29
|
-
if (taskSpaceMatch) {
|
|
30
|
-
return { type: 'number', value: parseInt(taskSpaceMatch[1], 10) };
|
|
31
|
-
}
|
|
32
|
-
// Handle plain number format
|
|
33
|
-
const numberMatch = trimmed.match(/^\d+$/);
|
|
34
|
-
if (numberMatch) {
|
|
35
|
-
return { type: 'number', value: parseInt(trimmed, 10) };
|
|
36
|
-
}
|
|
37
|
-
// Assume it's a UUID
|
|
38
|
-
return { type: 'uuid', value: trimmed };
|
|
39
|
-
}
|
|
40
|
-
export function findTaskById(tasks, identifier) {
|
|
41
|
-
const parsed = parseTaskId(identifier);
|
|
42
|
-
if (parsed.type === 'number') {
|
|
43
|
-
return tasks.find(task => task.number === parsed.value) || null;
|
|
44
|
-
}
|
|
45
|
-
else {
|
|
46
|
-
return tasks.find(task => task.id === parsed.value) || null;
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
export function getTaskStatusIcon(status) {
|
|
50
|
-
switch (status) {
|
|
51
|
-
case 'PLANNED':
|
|
52
|
-
return '📋';
|
|
53
|
-
case 'IN_PROGRESS':
|
|
54
|
-
return '🔄';
|
|
55
|
-
case 'COMPLETED':
|
|
56
|
-
return '✅';
|
|
57
|
-
case 'CANCELLED':
|
|
58
|
-
return '❌';
|
|
59
|
-
default:
|
|
60
|
-
return '📋';
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
//# sourceMappingURL=tasks.js.map
|
package/dist/utils/tasks.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tasks.js","sourceRoot":"","sources":["../../src/utils/tasks.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEpD,MAAM,UAAU,YAAY,CAAC,IAAU;IACtC,OAAO,QAAQ,IAAI,CAAC,MAAM,EAAE,CAAC;AAC9B,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,eAAe,CAAC,KAAa;IAC5C,OAAO,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AACnC,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,KAAa;IACxC,kBAAkB;IAClB,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAE7B,qDAAqD;IACrD,MAAM,aAAa,GAAG,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;IACrD,IAAI,aAAa,EAAE,CAAC;QACnB,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;IAClE,CAAC;IAED,sDAAsD;IACtD,MAAM,cAAc,GAAG,OAAO,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;IACxD,IAAI,cAAc,EAAE,CAAC;QACpB,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;IACnE,CAAC;IAED,6BAA6B;IAC7B,MAAM,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC3C,IAAI,WAAW,EAAE,CAAC;QACjB,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC;IACzD,CAAC;IAED,qBAAqB;IACrB,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,KAAa,EAAE,UAAkB;IAC7D,MAAM,MAAM,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC;IAEvC,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,MAAM,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC;IACjE,CAAC;SAAM,CAAC;QACP,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,MAAM,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC;IAC7D,CAAC;AACF,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,MAAc;IAC/C,QAAQ,MAAM,EAAE,CAAC;QAChB,KAAK,SAAS;YACb,OAAO,IAAI,CAAC;QACb,KAAK,aAAa;YACjB,OAAO,IAAI,CAAC;QACb,KAAK,WAAW;YACf,OAAO,GAAG,CAAC;QACZ,KAAK,WAAW;YACf,OAAO,GAAG,CAAC;QACZ;YACC,OAAO,IAAI,CAAC;IACd,CAAC;AACF,CAAC"}
|