@radkode/neo 1.4.0 → 1.7.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.
Files changed (121) hide show
  1. package/dist/cli.d.ts.map +1 -1
  2. package/dist/cli.js +15 -112
  3. package/dist/cli.js.map +1 -1
  4. package/dist/commands/ai/index.d.ts +3 -0
  5. package/dist/commands/ai/index.d.ts.map +1 -0
  6. package/dist/commands/ai/index.js +21 -0
  7. package/dist/commands/ai/index.js.map +1 -0
  8. package/dist/commands/ai/pr/index.d.ts +19 -0
  9. package/dist/commands/ai/pr/index.d.ts.map +1 -0
  10. package/dist/commands/ai/pr/index.js +225 -0
  11. package/dist/commands/ai/pr/index.js.map +1 -0
  12. package/dist/commands/doctor/index.d.ts +16 -0
  13. package/dist/commands/doctor/index.d.ts.map +1 -0
  14. package/dist/commands/doctor/index.js +313 -0
  15. package/dist/commands/doctor/index.js.map +1 -0
  16. package/dist/commands/git/push/index.d.ts.map +1 -1
  17. package/dist/commands/git/push/index.js +3 -0
  18. package/dist/commands/git/push/index.js.map +1 -1
  19. package/dist/commands/index.d.ts +3 -0
  20. package/dist/commands/index.d.ts.map +1 -1
  21. package/dist/commands/index.js +9 -0
  22. package/dist/commands/index.js.map +1 -1
  23. package/dist/commands/init/index.d.ts.map +1 -1
  24. package/dist/commands/init/index.js +29 -0
  25. package/dist/commands/init/index.js.map +1 -1
  26. package/dist/commands/work/finish/index.d.ts +22 -0
  27. package/dist/commands/work/finish/index.d.ts.map +1 -0
  28. package/dist/commands/work/finish/index.js +306 -0
  29. package/dist/commands/work/finish/index.js.map +1 -0
  30. package/dist/commands/work/index.d.ts +3 -0
  31. package/dist/commands/work/index.d.ts.map +1 -0
  32. package/dist/commands/work/index.js +33 -0
  33. package/dist/commands/work/index.js.map +1 -0
  34. package/dist/commands/work/ship/index.d.ts +27 -0
  35. package/dist/commands/work/ship/index.d.ts.map +1 -0
  36. package/dist/commands/work/ship/index.js +361 -0
  37. package/dist/commands/work/ship/index.js.map +1 -0
  38. package/dist/commands/work/start/index.d.ts +17 -0
  39. package/dist/commands/work/start/index.d.ts.map +1 -0
  40. package/dist/commands/work/start/index.js +250 -0
  41. package/dist/commands/work/start/index.js.map +1 -0
  42. package/dist/core/errors/index.d.ts +7 -129
  43. package/dist/core/errors/index.d.ts.map +1 -1
  44. package/dist/core/errors/index.js +0 -233
  45. package/dist/core/errors/index.js.map +1 -1
  46. package/dist/services/ai/index.d.ts +9 -1
  47. package/dist/services/ai/index.d.ts.map +1 -1
  48. package/dist/services/ai/index.js +23 -3
  49. package/dist/services/ai/index.js.map +1 -1
  50. package/dist/services/ai/pr-prompts.d.ts +17 -0
  51. package/dist/services/ai/pr-prompts.d.ts.map +1 -0
  52. package/dist/services/ai/pr-prompts.js +68 -0
  53. package/dist/services/ai/pr-prompts.js.map +1 -0
  54. package/dist/services/ai/prompts.d.ts +3 -2
  55. package/dist/services/ai/prompts.d.ts.map +1 -1
  56. package/dist/services/ai/prompts.js.map +1 -1
  57. package/dist/storage/db.d.ts +5 -3
  58. package/dist/storage/db.d.ts.map +1 -1
  59. package/dist/storage/db.js +87 -120
  60. package/dist/storage/db.js.map +1 -1
  61. package/dist/types/agent.d.ts +0 -8
  62. package/dist/types/agent.d.ts.map +1 -1
  63. package/dist/types/schemas.d.ts +1 -0
  64. package/dist/types/schemas.d.ts.map +1 -1
  65. package/dist/types/schemas.js +1 -0
  66. package/dist/types/schemas.js.map +1 -1
  67. package/dist/utils/agent.js +1 -1
  68. package/dist/utils/agent.js.map +1 -1
  69. package/dist/utils/config.d.ts +0 -6
  70. package/dist/utils/config.d.ts.map +1 -1
  71. package/dist/utils/config.js +0 -8
  72. package/dist/utils/config.js.map +1 -1
  73. package/dist/utils/logger.d.ts +8 -2
  74. package/dist/utils/logger.d.ts.map +1 -1
  75. package/dist/utils/logger.js +8 -1
  76. package/dist/utils/logger.js.map +1 -1
  77. package/dist/utils/prompt.d.ts.map +1 -1
  78. package/dist/utils/prompt.js +15 -11
  79. package/dist/utils/prompt.js.map +1 -1
  80. package/dist/utils/skill-installer.d.ts +10 -0
  81. package/dist/utils/skill-installer.d.ts.map +1 -0
  82. package/dist/utils/skill-installer.js +56 -0
  83. package/dist/utils/skill-installer.js.map +1 -0
  84. package/package.json +6 -13
  85. package/templates/skills/neo/SKILL.md +66 -0
  86. package/dist/core/container/index.d.ts +0 -27
  87. package/dist/core/container/index.d.ts.map +0 -1
  88. package/dist/core/container/index.js +0 -90
  89. package/dist/core/container/index.js.map +0 -1
  90. package/dist/core/interfaces/index.d.ts +0 -324
  91. package/dist/core/interfaces/index.d.ts.map +0 -1
  92. package/dist/core/interfaces/index.js +0 -19
  93. package/dist/core/interfaces/index.js.map +0 -1
  94. package/dist/core/plugins/command-registry.d.ts +0 -16
  95. package/dist/core/plugins/command-registry.d.ts.map +0 -1
  96. package/dist/core/plugins/command-registry.js +0 -40
  97. package/dist/core/plugins/command-registry.js.map +0 -1
  98. package/dist/core/plugins/event-bus.d.ts +0 -12
  99. package/dist/core/plugins/event-bus.d.ts.map +0 -1
  100. package/dist/core/plugins/event-bus.js +0 -56
  101. package/dist/core/plugins/event-bus.js.map +0 -1
  102. package/dist/core/plugins/index.d.ts +0 -6
  103. package/dist/core/plugins/index.d.ts.map +0 -1
  104. package/dist/core/plugins/index.js +0 -6
  105. package/dist/core/plugins/index.js.map +0 -1
  106. package/dist/core/plugins/plugin-context.d.ts +0 -3
  107. package/dist/core/plugins/plugin-context.d.ts.map +0 -1
  108. package/dist/core/plugins/plugin-context.js +0 -116
  109. package/dist/core/plugins/plugin-context.js.map +0 -1
  110. package/dist/core/plugins/plugin-loader.d.ts +0 -30
  111. package/dist/core/plugins/plugin-loader.d.ts.map +0 -1
  112. package/dist/core/plugins/plugin-loader.js +0 -149
  113. package/dist/core/plugins/plugin-loader.js.map +0 -1
  114. package/dist/core/plugins/plugin-registry.d.ts +0 -21
  115. package/dist/core/plugins/plugin-registry.d.ts.map +0 -1
  116. package/dist/core/plugins/plugin-registry.js +0 -150
  117. package/dist/core/plugins/plugin-registry.js.map +0 -1
  118. package/dist/utils/ui-examples.d.ts +0 -3
  119. package/dist/utils/ui-examples.d.ts.map +0 -1
  120. package/dist/utils/ui-examples.js +0 -188
  121. package/dist/utils/ui-examples.js.map +0 -1
@@ -10,22 +10,16 @@ export declare enum ErrorCategory {
10
10
  FILESYSTEM = "FILESYSTEM",
11
11
  NETWORK = "NETWORK",
12
12
  COMMAND = "COMMAND",
13
- PLUGIN = "PLUGIN",
14
13
  AUTHENTICATION = "AUTHENTICATION",
15
14
  PERMISSION = "PERMISSION",
16
15
  UNKNOWN = "UNKNOWN"
17
16
  }
18
- export interface IError {
19
- readonly code: string;
20
- readonly message: string;
21
- readonly severity: ErrorSeverity;
22
- readonly category: ErrorCategory;
23
- readonly timestamp: Date;
24
- readonly context?: Record<string, unknown> | undefined;
25
- readonly suggestions?: string[] | undefined;
26
- readonly originalError?: Error | undefined;
17
+ export interface AppErrorOptions {
18
+ context?: Record<string, unknown>;
19
+ suggestions?: string[];
20
+ originalError?: Error;
27
21
  }
28
- export declare abstract class AppError extends Error implements IError {
22
+ export declare abstract class AppError extends Error {
29
23
  abstract readonly code: string;
30
24
  abstract readonly severity: ErrorSeverity;
31
25
  abstract readonly category: ErrorCategory;
@@ -33,101 +27,14 @@ export declare abstract class AppError extends Error implements IError {
33
27
  readonly context?: Record<string, unknown> | undefined;
34
28
  readonly suggestions?: string[] | undefined;
35
29
  readonly originalError?: Error | undefined;
36
- constructor(message: string, options?: {
37
- context?: Record<string, unknown>;
38
- suggestions?: string[];
39
- originalError?: Error;
40
- });
41
- getUserMessage(): string;
42
- getDetailedReport(): string;
43
- toJSON(): Record<string, unknown>;
30
+ constructor(message: string, options?: AppErrorOptions);
44
31
  }
45
32
  export declare class CommandError extends AppError {
46
33
  readonly commandName: string;
47
34
  readonly code = "COMMAND_ERROR";
48
35
  readonly severity = ErrorSeverity.MEDIUM;
49
36
  readonly category = ErrorCategory.COMMAND;
50
- constructor(message: string, commandName: string, options?: {
51
- context?: Record<string, unknown>;
52
- suggestions?: string[];
53
- originalError?: Error;
54
- });
55
- }
56
- export declare class ValidationError extends AppError {
57
- readonly field?: string | undefined;
58
- readonly value?: unknown | undefined;
59
- readonly code = "VALIDATION_ERROR";
60
- readonly severity = ErrorSeverity.LOW;
61
- readonly category = ErrorCategory.VALIDATION;
62
- constructor(message: string, field?: string | undefined, value?: unknown | undefined, options?: {
63
- context?: Record<string, unknown>;
64
- suggestions?: string[];
65
- });
66
- }
67
- export declare class ConfigurationError extends AppError {
68
- readonly configKey?: string | undefined;
69
- readonly code = "CONFIGURATION_ERROR";
70
- readonly severity = ErrorSeverity.HIGH;
71
- readonly category = ErrorCategory.CONFIGURATION;
72
- constructor(message: string, configKey?: string | undefined, options?: {
73
- context?: Record<string, unknown>;
74
- suggestions?: string[];
75
- });
76
- }
77
- export declare class FileSystemError extends AppError {
78
- readonly path: string;
79
- readonly operation: 'read' | 'write' | 'delete' | 'create' | 'access';
80
- readonly code = "FILESYSTEM_ERROR";
81
- readonly severity = ErrorSeverity.MEDIUM;
82
- readonly category = ErrorCategory.FILESYSTEM;
83
- constructor(message: string, path: string, operation: 'read' | 'write' | 'delete' | 'create' | 'access', options?: {
84
- context?: Record<string, unknown>;
85
- suggestions?: string[];
86
- originalError?: Error;
87
- });
88
- }
89
- export declare class NetworkError extends AppError {
90
- readonly url?: string | undefined;
91
- readonly statusCode?: number | undefined;
92
- readonly code = "NETWORK_ERROR";
93
- readonly severity = ErrorSeverity.MEDIUM;
94
- readonly category = ErrorCategory.NETWORK;
95
- constructor(message: string, url?: string | undefined, statusCode?: number | undefined, options?: {
96
- context?: Record<string, unknown>;
97
- suggestions?: string[];
98
- originalError?: Error;
99
- });
100
- }
101
- export declare class PluginError extends AppError {
102
- readonly pluginName: string;
103
- readonly code = "PLUGIN_ERROR";
104
- readonly severity = ErrorSeverity.MEDIUM;
105
- readonly category = ErrorCategory.PLUGIN;
106
- constructor(message: string, pluginName: string, options?: {
107
- context?: Record<string, unknown>;
108
- suggestions?: string[];
109
- originalError?: Error;
110
- });
111
- }
112
- export declare class AuthenticationError extends AppError {
113
- readonly code = "AUTHENTICATION_ERROR";
114
- readonly severity = ErrorSeverity.HIGH;
115
- readonly category = ErrorCategory.AUTHENTICATION;
116
- constructor(message?: string, options?: {
117
- context?: Record<string, unknown>;
118
- suggestions?: string[];
119
- });
120
- }
121
- export declare class PermissionError extends AppError {
122
- readonly resource: string;
123
- readonly requiredPermission?: string | undefined;
124
- readonly code = "PERMISSION_ERROR";
125
- readonly severity = ErrorSeverity.HIGH;
126
- readonly category = ErrorCategory.PERMISSION;
127
- constructor(message: string, resource: string, requiredPermission?: string | undefined, options?: {
128
- context?: Record<string, unknown>;
129
- suggestions?: string[];
130
- });
37
+ constructor(message: string, commandName: string, options?: AppErrorOptions);
131
38
  }
132
39
  export type Result<T, E extends AppError = AppError> = {
133
40
  success: true;
@@ -138,37 +45,8 @@ export type Result<T, E extends AppError = AppError> = {
138
45
  };
139
46
  export declare function success<T>(data: T): Result<T>;
140
47
  export declare function failure<E extends AppError>(error: E): Result<never, E>;
141
- export declare function isSuccess<T, E extends AppError>(result: Result<T, E>): result is {
142
- success: true;
143
- data: T;
144
- };
145
48
  export declare function isFailure<T, E extends AppError>(result: Result<T, E>): result is {
146
49
  success: false;
147
50
  error: E;
148
51
  };
149
- export interface ErrorRecoveryStrategy<E extends AppError = AppError> {
150
- canRecover(error: E): boolean;
151
- recover(error: E): Promise<void>;
152
- }
153
- export declare class RetryStrategy implements ErrorRecoveryStrategy {
154
- private maxRetries;
155
- private delayMs;
156
- private backoff;
157
- constructor(maxRetries?: number, delayMs?: number, backoff?: boolean);
158
- canRecover(error: AppError): boolean;
159
- recover(_error: AppError): Promise<void>;
160
- }
161
- export declare class ErrorHandler {
162
- private strategies;
163
- registerStrategy(strategy: ErrorRecoveryStrategy): void;
164
- handle(error: unknown): Promise<void>;
165
- private normalizeError;
166
- }
167
- export declare const errorHandler: ErrorHandler;
168
- export declare function handleCommandResult(result: Result<void>): void;
169
- export declare function handleCommandResultSync(result: Result<void>, ui: {
170
- error: (msg: string) => void;
171
- warn: (msg: string) => void;
172
- list: (items: string[]) => void;
173
- }): void;
174
52
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/errors/index.ts"],"names":[],"mappings":"AAQA,oBAAY,aAAa;IACvB,GAAG,QAAQ;IACX,MAAM,WAAW;IACjB,IAAI,SAAS;IACb,QAAQ,aAAa;CACtB;AAKD,oBAAY,aAAa;IACvB,UAAU,eAAe;IACzB,aAAa,kBAAkB;IAC/B,UAAU,eAAe;IACzB,OAAO,YAAY;IACnB,OAAO,YAAY;IACnB,MAAM,WAAW;IACjB,cAAc,mBAAmB;IACjC,UAAU,eAAe;IACzB,OAAO,YAAY;CACpB;AAKD,MAAM,WAAW,MAAM;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC;IACjC,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC;IACjC,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC;IACzB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;IACvD,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IAC5C,QAAQ,CAAC,aAAa,CAAC,EAAE,KAAK,GAAG,SAAS,CAAC;CAC5C;AAKD,8BAAsB,QAAS,SAAQ,KAAM,YAAW,MAAM;IAC5D,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC;IAC1C,QAAQ,CAAC,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC;IAC1C,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC;IACzB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;IACvD,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IAC5C,QAAQ,CAAC,aAAa,CAAC,EAAE,KAAK,GAAG,SAAS,CAAC;gBAGzC,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE;QACR,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAClC,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;QACvB,aAAa,CAAC,EAAE,KAAK,CAAC;KACvB;IAgBH,cAAc,IAAI,MAAM;IAgBxB,iBAAiB,IAAI,MAAM;IA4B3B,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAalC;AAKD,qBAAa,YAAa,SAAQ,QAAQ;aAOtB,WAAW,EAAE,MAAM;IANrC,QAAQ,CAAC,IAAI,mBAAmB;IAChC,QAAQ,CAAC,QAAQ,wBAAwB;IACzC,QAAQ,CAAC,QAAQ,yBAAyB;gBAGxC,OAAO,EAAE,MAAM,EACC,WAAW,EAAE,MAAM,EACnC,OAAO,CAAC,EAAE;QACR,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAClC,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;QACvB,aAAa,CAAC,EAAE,KAAK,CAAC;KACvB;CAIJ;AAKD,qBAAa,eAAgB,SAAQ,QAAQ;aAOzB,KAAK,CAAC,EAAE,MAAM;aACd,KAAK,CAAC,EAAE,OAAO;IAPjC,QAAQ,CAAC,IAAI,sBAAsB;IACnC,QAAQ,CAAC,QAAQ,qBAAqB;IACtC,QAAQ,CAAC,QAAQ,4BAA4B;gBAG3C,OAAO,EAAE,MAAM,EACC,KAAK,CAAC,EAAE,MAAM,YAAA,EACd,KAAK,CAAC,EAAE,OAAO,YAAA,EAC/B,OAAO,CAAC,EAAE;QACR,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAClC,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;KACxB;CAIJ;AAKD,qBAAa,kBAAmB,SAAQ,QAAQ;aAO5B,SAAS,CAAC,EAAE,MAAM;IANpC,QAAQ,CAAC,IAAI,yBAAyB;IACtC,QAAQ,CAAC,QAAQ,sBAAsB;IACvC,QAAQ,CAAC,QAAQ,+BAA+B;gBAG9C,OAAO,EAAE,MAAM,EACC,SAAS,CAAC,EAAE,MAAM,YAAA,EAClC,OAAO,CAAC,EAAE;QACR,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAClC,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;KACxB;CAaJ;AAKD,qBAAa,eAAgB,SAAQ,QAAQ;aAOzB,IAAI,EAAE,MAAM;aACZ,SAAS,EAAE,MAAM,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ;IAP9E,QAAQ,CAAC,IAAI,sBAAsB;IACnC,QAAQ,CAAC,QAAQ,wBAAwB;IACzC,QAAQ,CAAC,QAAQ,4BAA4B;gBAG3C,OAAO,EAAE,MAAM,EACC,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,EAC5E,OAAO,CAAC,EAAE;QACR,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAClC,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;QACvB,aAAa,CAAC,EAAE,KAAK,CAAC;KACvB;CAIJ;AAKD,qBAAa,YAAa,SAAQ,QAAQ;aAOtB,GAAG,CAAC,EAAE,MAAM;aACZ,UAAU,CAAC,EAAE,MAAM;IAPrC,QAAQ,CAAC,IAAI,mBAAmB;IAChC,QAAQ,CAAC,QAAQ,wBAAwB;IACzC,QAAQ,CAAC,QAAQ,yBAAyB;gBAGxC,OAAO,EAAE,MAAM,EACC,GAAG,CAAC,EAAE,MAAM,YAAA,EACZ,UAAU,CAAC,EAAE,MAAM,YAAA,EACnC,OAAO,CAAC,EAAE;QACR,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAClC,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;QACvB,aAAa,CAAC,EAAE,KAAK,CAAC;KACvB;CAaJ;AAKD,qBAAa,WAAY,SAAQ,QAAQ;aAOrB,UAAU,EAAE,MAAM;IANpC,QAAQ,CAAC,IAAI,kBAAkB;IAC/B,QAAQ,CAAC,QAAQ,wBAAwB;IACzC,QAAQ,CAAC,QAAQ,wBAAwB;gBAGvC,OAAO,EAAE,MAAM,EACC,UAAU,EAAE,MAAM,EAClC,OAAO,CAAC,EAAE;QACR,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAClC,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;QACvB,aAAa,CAAC,EAAE,KAAK,CAAC;KACvB;CAIJ;AAKD,qBAAa,mBAAoB,SAAQ,QAAQ;IAC/C,QAAQ,CAAC,IAAI,0BAA0B;IACvC,QAAQ,CAAC,QAAQ,sBAAsB;IACvC,QAAQ,CAAC,QAAQ,gCAAgC;gBAG/C,OAAO,SAA0B,EACjC,OAAO,CAAC,EAAE;QACR,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAClC,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;KACxB;CAaJ;AAKD,qBAAa,eAAgB,SAAQ,QAAQ;aAOzB,QAAQ,EAAE,MAAM;aAChB,kBAAkB,CAAC,EAAE,MAAM;IAP7C,QAAQ,CAAC,IAAI,sBAAsB;IACnC,QAAQ,CAAC,QAAQ,sBAAsB;IACvC,QAAQ,CAAC,QAAQ,4BAA4B;gBAG3C,OAAO,EAAE,MAAM,EACC,QAAQ,EAAE,MAAM,EAChB,kBAAkB,CAAC,EAAE,MAAM,YAAA,EAC3C,OAAO,CAAC,EAAE;QACR,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAClC,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;KACxB;CAIJ;AAKD,MAAM,MAAM,MAAM,CAAC,CAAC,EAAE,CAAC,SAAS,QAAQ,GAAG,QAAQ,IAC/C;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,CAAC,CAAA;CAAE,GAC1B;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,CAAC,CAAA;CAAE,CAAC;AAKjC,wBAAgB,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAE7C;AAKD,wBAAgB,OAAO,CAAC,CAAC,SAAS,QAAQ,EAAE,KAAK,EAAE,CAAC,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAEtE;AAKD,wBAAgB,SAAS,CAAC,CAAC,EAAE,CAAC,SAAS,QAAQ,EAC7C,MAAM,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GACnB,MAAM,IAAI;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,CAAC,CAAA;CAAE,CAEtC;AAKD,wBAAgB,SAAS,CAAC,CAAC,EAAE,CAAC,SAAS,QAAQ,EAC7C,MAAM,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GACnB,MAAM,IAAI;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,CAAC,CAAA;CAAE,CAExC;AAKD,MAAM,WAAW,qBAAqB,CAAC,CAAC,SAAS,QAAQ,GAAG,QAAQ;IAClE,UAAU,CAAC,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC;IAC9B,OAAO,CAAC,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAClC;AAKD,qBAAa,aAAc,YAAW,qBAAqB;IAEvD,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,OAAO;gBAFP,UAAU,GAAE,MAAU,EACtB,OAAO,GAAE,MAAa,EACtB,OAAO,GAAE,OAAc;IAGjC,UAAU,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO;IAK9B,OAAO,CAAC,MAAM,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;CAU/C;AAKD,qBAAa,YAAY;IACvB,OAAO,CAAC,UAAU,CAA+B;IAKjD,gBAAgB,CAAC,QAAQ,EAAE,qBAAqB,GAAG,IAAI;IAOjD,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAwB3C,OAAO,CAAC,cAAc;CAmBvB;AAGD,eAAO,MAAM,YAAY,cAAqB,CAAC;AAM/C,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAiB9D;AAMD,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,EACpB,EAAE,EAAE;IAAE,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAAC,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAAC,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,IAAI,CAAA;CAAE,GACjG,IAAI,CAcN"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/errors/index.ts"],"names":[],"mappings":"AAUA,oBAAY,aAAa;IACvB,GAAG,QAAQ;IACX,MAAM,WAAW;IACjB,IAAI,SAAS;IACb,QAAQ,aAAa;CACtB;AAED,oBAAY,aAAa;IACvB,UAAU,eAAe;IACzB,aAAa,kBAAkB;IAC/B,UAAU,eAAe;IACzB,OAAO,YAAY;IACnB,OAAO,YAAY;IACnB,cAAc,mBAAmB;IACjC,UAAU,eAAe;IACzB,OAAO,YAAY;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,aAAa,CAAC,EAAE,KAAK,CAAC;CACvB;AAED,8BAAsB,QAAS,SAAQ,KAAK;IAC1C,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC;IAC1C,QAAQ,CAAC,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC;IAC1C,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC;IACzB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;IACvD,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IAC5C,QAAQ,CAAC,aAAa,CAAC,EAAE,KAAK,GAAG,SAAS,CAAC;gBAE/B,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,eAAe;CASvD;AAED,qBAAa,YAAa,SAAQ,QAAQ;aAOtB,WAAW,EAAE,MAAM;IANrC,QAAQ,CAAC,IAAI,mBAAmB;IAChC,QAAQ,CAAC,QAAQ,wBAAwB;IACzC,QAAQ,CAAC,QAAQ,yBAAyB;gBAGxC,OAAO,EAAE,MAAM,EACC,WAAW,EAAE,MAAM,EACnC,OAAO,CAAC,EAAE,eAAe;CAI5B;AAED,MAAM,MAAM,MAAM,CAAC,CAAC,EAAE,CAAC,SAAS,QAAQ,GAAG,QAAQ,IAC/C;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,CAAC,CAAA;CAAE,GAC1B;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,CAAC,CAAA;CAAE,CAAC;AAEjC,wBAAgB,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAE7C;AAED,wBAAgB,OAAO,CAAC,CAAC,SAAS,QAAQ,EAAE,KAAK,EAAE,CAAC,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAEtE;AAED,wBAAgB,SAAS,CAAC,CAAC,EAAE,CAAC,SAAS,QAAQ,EAC7C,MAAM,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GACnB,MAAM,IAAI;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,CAAC,CAAA;CAAE,CAExC"}
@@ -12,7 +12,6 @@ export var ErrorCategory;
12
12
  ErrorCategory["FILESYSTEM"] = "FILESYSTEM";
13
13
  ErrorCategory["NETWORK"] = "NETWORK";
14
14
  ErrorCategory["COMMAND"] = "COMMAND";
15
- ErrorCategory["PLUGIN"] = "PLUGIN";
16
15
  ErrorCategory["AUTHENTICATION"] = "AUTHENTICATION";
17
16
  ErrorCategory["PERMISSION"] = "PERMISSION";
18
17
  ErrorCategory["UNKNOWN"] = "UNKNOWN";
@@ -31,49 +30,6 @@ export class AppError extends Error {
31
30
  this.originalError = options?.originalError;
32
31
  Error.captureStackTrace(this, this.constructor);
33
32
  }
34
- getUserMessage() {
35
- let message = this.message;
36
- if (this.suggestions && this.suggestions.length > 0) {
37
- message += '\n\nSuggestions:';
38
- this.suggestions.forEach((suggestion) => {
39
- message += `\n • ${suggestion}`;
40
- });
41
- }
42
- return message;
43
- }
44
- getDetailedReport() {
45
- const report = [
46
- `Error: ${this.name}`,
47
- `Code: ${this.code}`,
48
- `Message: ${this.message}`,
49
- `Severity: ${this.severity}`,
50
- `Category: ${this.category}`,
51
- `Timestamp: ${this.timestamp.toISOString()}`,
52
- ];
53
- if (this.context) {
54
- report.push(`Context: ${JSON.stringify(this.context, null, 2)}`);
55
- }
56
- if (this.suggestions && this.suggestions.length > 0) {
57
- report.push(`Suggestions: ${this.suggestions.join(', ')}`);
58
- }
59
- if (this.stack) {
60
- report.push(`Stack Trace:\n${this.stack}`);
61
- }
62
- return report.join('\n');
63
- }
64
- toJSON() {
65
- return {
66
- name: this.name,
67
- code: this.code,
68
- message: this.message,
69
- severity: this.severity,
70
- category: this.category,
71
- timestamp: this.timestamp.toISOString(),
72
- context: this.context,
73
- suggestions: this.suggestions,
74
- stack: this.stack,
75
- };
76
- }
77
33
  }
78
34
  export class CommandError extends AppError {
79
35
  commandName;
@@ -85,202 +41,13 @@ export class CommandError extends AppError {
85
41
  this.commandName = commandName;
86
42
  }
87
43
  }
88
- export class ValidationError extends AppError {
89
- field;
90
- value;
91
- code = 'VALIDATION_ERROR';
92
- severity = ErrorSeverity.LOW;
93
- category = ErrorCategory.VALIDATION;
94
- constructor(message, field, value, options) {
95
- super(message, options);
96
- this.field = field;
97
- this.value = value;
98
- }
99
- }
100
- export class ConfigurationError extends AppError {
101
- configKey;
102
- code = 'CONFIGURATION_ERROR';
103
- severity = ErrorSeverity.HIGH;
104
- category = ErrorCategory.CONFIGURATION;
105
- constructor(message, configKey, options) {
106
- const defaultSuggestions = [
107
- 'Check your configuration file for syntax errors',
108
- 'Ensure all required configuration values are set',
109
- 'Run "neo config validate" to check your configuration',
110
- ];
111
- super(message, {
112
- ...options,
113
- suggestions: options?.suggestions || defaultSuggestions,
114
- });
115
- this.configKey = configKey;
116
- }
117
- }
118
- export class FileSystemError extends AppError {
119
- path;
120
- operation;
121
- code = 'FILESYSTEM_ERROR';
122
- severity = ErrorSeverity.MEDIUM;
123
- category = ErrorCategory.FILESYSTEM;
124
- constructor(message, path, operation, options) {
125
- super(message, options);
126
- this.path = path;
127
- this.operation = operation;
128
- }
129
- }
130
- export class NetworkError extends AppError {
131
- url;
132
- statusCode;
133
- code = 'NETWORK_ERROR';
134
- severity = ErrorSeverity.MEDIUM;
135
- category = ErrorCategory.NETWORK;
136
- constructor(message, url, statusCode, options) {
137
- const defaultSuggestions = [
138
- 'Check your internet connection',
139
- 'Verify the API endpoint is correct',
140
- 'Check if you need to configure a proxy',
141
- ];
142
- super(message, {
143
- ...options,
144
- suggestions: options?.suggestions || defaultSuggestions,
145
- });
146
- this.url = url;
147
- this.statusCode = statusCode;
148
- }
149
- }
150
- export class PluginError extends AppError {
151
- pluginName;
152
- code = 'PLUGIN_ERROR';
153
- severity = ErrorSeverity.MEDIUM;
154
- category = ErrorCategory.PLUGIN;
155
- constructor(message, pluginName, options) {
156
- super(message, options);
157
- this.pluginName = pluginName;
158
- }
159
- }
160
- export class AuthenticationError extends AppError {
161
- code = 'AUTHENTICATION_ERROR';
162
- severity = ErrorSeverity.HIGH;
163
- category = ErrorCategory.AUTHENTICATION;
164
- constructor(message = 'Authentication failed', options) {
165
- const defaultSuggestions = [
166
- 'Check your credentials',
167
- 'Run "neo auth login" to authenticate',
168
- 'Verify your API token is still valid',
169
- ];
170
- super(message, {
171
- ...options,
172
- suggestions: options?.suggestions || defaultSuggestions,
173
- });
174
- }
175
- }
176
- export class PermissionError extends AppError {
177
- resource;
178
- requiredPermission;
179
- code = 'PERMISSION_ERROR';
180
- severity = ErrorSeverity.HIGH;
181
- category = ErrorCategory.PERMISSION;
182
- constructor(message, resource, requiredPermission, options) {
183
- super(message, options);
184
- this.resource = resource;
185
- this.requiredPermission = requiredPermission;
186
- }
187
- }
188
44
  export function success(data) {
189
45
  return { success: true, data };
190
46
  }
191
47
  export function failure(error) {
192
48
  return { success: false, error };
193
49
  }
194
- export function isSuccess(result) {
195
- return result.success === true;
196
- }
197
50
  export function isFailure(result) {
198
51
  return result.success === false;
199
52
  }
200
- export class RetryStrategy {
201
- maxRetries;
202
- delayMs;
203
- backoff;
204
- constructor(maxRetries = 3, delayMs = 1000, backoff = true) {
205
- this.maxRetries = maxRetries;
206
- this.delayMs = delayMs;
207
- this.backoff = backoff;
208
- }
209
- canRecover(error) {
210
- return error.category === ErrorCategory.NETWORK || error.category === ErrorCategory.FILESYSTEM;
211
- }
212
- async recover(_error) {
213
- for (let attempt = 1; attempt <= this.maxRetries; attempt++) {
214
- const delay = this.backoff ? this.delayMs * attempt : this.delayMs;
215
- await new Promise((resolve) => setTimeout(resolve, delay));
216
- console.log(`Retry attempt ${attempt} after ${delay}ms`);
217
- }
218
- }
219
- }
220
- export class ErrorHandler {
221
- strategies = [];
222
- registerStrategy(strategy) {
223
- this.strategies.push(strategy);
224
- }
225
- async handle(error) {
226
- const appError = this.normalizeError(error);
227
- for (const strategy of this.strategies) {
228
- if (strategy.canRecover(appError)) {
229
- try {
230
- await strategy.recover(appError);
231
- return;
232
- }
233
- catch {
234
- continue;
235
- }
236
- }
237
- }
238
- console.error(appError.getDetailedReport());
239
- process.exit(1);
240
- }
241
- normalizeError(error) {
242
- if (error instanceof AppError) {
243
- return error;
244
- }
245
- if (error instanceof Error) {
246
- return new (class extends AppError {
247
- code = 'UNKNOWN_ERROR';
248
- severity = ErrorSeverity.HIGH;
249
- category = ErrorCategory.UNKNOWN;
250
- })(error.message, { originalError: error });
251
- }
252
- return new (class extends AppError {
253
- code = 'UNKNOWN_ERROR';
254
- severity = ErrorSeverity.CRITICAL;
255
- category = ErrorCategory.UNKNOWN;
256
- })(String(error));
257
- }
258
- }
259
- export const errorHandler = new ErrorHandler();
260
- export function handleCommandResult(result) {
261
- if (isSuccess(result)) {
262
- return;
263
- }
264
- import('../../utils/ui.js').then(({ ui }) => {
265
- const error = result.error;
266
- ui.error(error.message);
267
- if (error.suggestions && error.suggestions.length > 0) {
268
- ui.warn('Suggestions:');
269
- ui.list(error.suggestions);
270
- }
271
- process.exit(1);
272
- });
273
- }
274
- export function handleCommandResultSync(result, ui) {
275
- if (isSuccess(result)) {
276
- return;
277
- }
278
- const error = result.error;
279
- ui.error(error.message);
280
- if (error.suggestions && error.suggestions.length > 0) {
281
- ui.warn('Suggestions:');
282
- ui.list(error.suggestions);
283
- }
284
- process.exit(1);
285
- }
286
53
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/errors/index.ts"],"names":[],"mappings":"AAQA,MAAM,CAAN,IAAY,aAKX;AALD,WAAY,aAAa;IACvB,4BAAW,CAAA;IACX,kCAAiB,CAAA;IACjB,8BAAa,CAAA;IACb,sCAAqB,CAAA;AACvB,CAAC,EALW,aAAa,KAAb,aAAa,QAKxB;AAKD,MAAM,CAAN,IAAY,aAUX;AAVD,WAAY,aAAa;IACvB,0CAAyB,CAAA;IACzB,gDAA+B,CAAA;IAC/B,0CAAyB,CAAA;IACzB,oCAAmB,CAAA;IACnB,oCAAmB,CAAA;IACnB,kCAAiB,CAAA;IACjB,kDAAiC,CAAA;IACjC,0CAAyB,CAAA;IACzB,oCAAmB,CAAA;AACrB,CAAC,EAVW,aAAa,KAAb,aAAa,QAUxB;AAmBD,MAAM,OAAgB,QAAS,SAAQ,KAAK;IAIjC,SAAS,CAAO;IAChB,OAAO,CAAuC;IAC9C,WAAW,CAAwB;IACnC,aAAa,CAAqB;IAE3C,YACE,OAAe,EACf,OAIC;QAED,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;QAClC,IAAI,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC;QAC5B,IAAI,CAAC,OAAO,GAAG,OAAO,EAAE,OAAO,CAAC;QAChC,IAAI,CAAC,WAAW,GAAG,OAAO,EAAE,WAAW,CAAC;QACxC,IAAI,CAAC,aAAa,GAAG,OAAO,EAAE,aAAa,CAAC;QAG5C,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IAClD,CAAC;IAKD,cAAc;QACZ,IAAI,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAE3B,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpD,OAAO,IAAI,kBAAkB,CAAC;YAC9B,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,EAAE;gBACtC,OAAO,IAAI,SAAS,UAAU,EAAE,CAAC;YACnC,CAAC,CAAC,CAAC;QACL,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAKD,iBAAiB;QACf,MAAM,MAAM,GAAG;YACb,UAAU,IAAI,CAAC,IAAI,EAAE;YACrB,SAAS,IAAI,CAAC,IAAI,EAAE;YACpB,YAAY,IAAI,CAAC,OAAO,EAAE;YAC1B,aAAa,IAAI,CAAC,QAAQ,EAAE;YAC5B,aAAa,IAAI,CAAC,QAAQ,EAAE;YAC5B,cAAc,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE;SAC7C,CAAC;QAEF,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,MAAM,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;QACnE,CAAC;QAED,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpD,MAAM,CAAC,IAAI,CAAC,gBAAgB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC7D,CAAC;QAED,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,IAAI,CAAC,iBAAiB,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;QAC7C,CAAC;QAED,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC;IAKD,MAAM;QACJ,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE;YACvC,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,KAAK,EAAE,IAAI,CAAC,KAAK;SAClB,CAAC;IACJ,CAAC;CACF;AAKD,MAAM,OAAO,YAAa,SAAQ,QAAQ;IAOtB;IANT,IAAI,GAAG,eAAe,CAAC;IACvB,QAAQ,GAAG,aAAa,CAAC,MAAM,CAAC;IAChC,QAAQ,GAAG,aAAa,CAAC,OAAO,CAAC;IAE1C,YACE,OAAe,EACC,WAAmB,EACnC,OAIC;QAED,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAPR,gBAAW,GAAX,WAAW,CAAQ;IAQrC,CAAC;CACF;AAKD,MAAM,OAAO,eAAgB,SAAQ,QAAQ;IAOzB;IACA;IAPT,IAAI,GAAG,kBAAkB,CAAC;IAC1B,QAAQ,GAAG,aAAa,CAAC,GAAG,CAAC;IAC7B,QAAQ,GAAG,aAAa,CAAC,UAAU,CAAC;IAE7C,YACE,OAAe,EACC,KAAc,EACd,KAAe,EAC/B,OAGC;QAED,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAPR,UAAK,GAAL,KAAK,CAAS;QACd,UAAK,GAAL,KAAK,CAAU;IAOjC,CAAC;CACF;AAKD,MAAM,OAAO,kBAAmB,SAAQ,QAAQ;IAO5B;IANT,IAAI,GAAG,qBAAqB,CAAC;IAC7B,QAAQ,GAAG,aAAa,CAAC,IAAI,CAAC;IAC9B,QAAQ,GAAG,aAAa,CAAC,aAAa,CAAC;IAEhD,YACE,OAAe,EACC,SAAkB,EAClC,OAGC;QAED,MAAM,kBAAkB,GAAG;YACzB,iDAAiD;YACjD,kDAAkD;YAClD,uDAAuD;SACxD,CAAC;QAEF,KAAK,CAAC,OAAO,EAAE;YACb,GAAG,OAAO;YACV,WAAW,EAAE,OAAO,EAAE,WAAW,IAAI,kBAAkB;SACxD,CAAC,CAAC;QAfa,cAAS,GAAT,SAAS,CAAS;IAgBpC,CAAC;CACF;AAKD,MAAM,OAAO,eAAgB,SAAQ,QAAQ;IAOzB;IACA;IAPT,IAAI,GAAG,kBAAkB,CAAC;IAC1B,QAAQ,GAAG,aAAa,CAAC,MAAM,CAAC;IAChC,QAAQ,GAAG,aAAa,CAAC,UAAU,CAAC;IAE7C,YACE,OAAe,EACC,IAAY,EACZ,SAA4D,EAC5E,OAIC;QAED,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QARR,SAAI,GAAJ,IAAI,CAAQ;QACZ,cAAS,GAAT,SAAS,CAAmD;IAQ9E,CAAC;CACF;AAKD,MAAM,OAAO,YAAa,SAAQ,QAAQ;IAOtB;IACA;IAPT,IAAI,GAAG,eAAe,CAAC;IACvB,QAAQ,GAAG,aAAa,CAAC,MAAM,CAAC;IAChC,QAAQ,GAAG,aAAa,CAAC,OAAO,CAAC;IAE1C,YACE,OAAe,EACC,GAAY,EACZ,UAAmB,EACnC,OAIC;QAED,MAAM,kBAAkB,GAAG;YACzB,gCAAgC;YAChC,oCAAoC;YACpC,wCAAwC;SACzC,CAAC;QAEF,KAAK,CAAC,OAAO,EAAE;YACb,GAAG,OAAO;YACV,WAAW,EAAE,OAAO,EAAE,WAAW,IAAI,kBAAkB;SACxD,CAAC,CAAC;QAjBa,QAAG,GAAH,GAAG,CAAS;QACZ,eAAU,GAAV,UAAU,CAAS;IAiBrC,CAAC;CACF;AAKD,MAAM,OAAO,WAAY,SAAQ,QAAQ;IAOrB;IANT,IAAI,GAAG,cAAc,CAAC;IACtB,QAAQ,GAAG,aAAa,CAAC,MAAM,CAAC;IAChC,QAAQ,GAAG,aAAa,CAAC,MAAM,CAAC;IAEzC,YACE,OAAe,EACC,UAAkB,EAClC,OAIC;QAED,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAPR,eAAU,GAAV,UAAU,CAAQ;IAQpC,CAAC;CACF;AAKD,MAAM,OAAO,mBAAoB,SAAQ,QAAQ;IACtC,IAAI,GAAG,sBAAsB,CAAC;IAC9B,QAAQ,GAAG,aAAa,CAAC,IAAI,CAAC;IAC9B,QAAQ,GAAG,aAAa,CAAC,cAAc,CAAC;IAEjD,YACE,OAAO,GAAG,uBAAuB,EACjC,OAGC;QAED,MAAM,kBAAkB,GAAG;YACzB,wBAAwB;YACxB,sCAAsC;YACtC,sCAAsC;SACvC,CAAC;QAEF,KAAK,CAAC,OAAO,EAAE;YACb,GAAG,OAAO;YACV,WAAW,EAAE,OAAO,EAAE,WAAW,IAAI,kBAAkB;SACxD,CAAC,CAAC;IACL,CAAC;CACF;AAKD,MAAM,OAAO,eAAgB,SAAQ,QAAQ;IAOzB;IACA;IAPT,IAAI,GAAG,kBAAkB,CAAC;IAC1B,QAAQ,GAAG,aAAa,CAAC,IAAI,CAAC;IAC9B,QAAQ,GAAG,aAAa,CAAC,UAAU,CAAC;IAE7C,YACE,OAAe,EACC,QAAgB,EAChB,kBAA2B,EAC3C,OAGC;QAED,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAPR,aAAQ,GAAR,QAAQ,CAAQ;QAChB,uBAAkB,GAAlB,kBAAkB,CAAS;IAO7C,CAAC;CACF;AAYD,MAAM,UAAU,OAAO,CAAI,IAAO;IAChC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AACjC,CAAC;AAKD,MAAM,UAAU,OAAO,CAAqB,KAAQ;IAClD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;AACnC,CAAC;AAKD,MAAM,UAAU,SAAS,CACvB,MAAoB;IAEpB,OAAO,MAAM,CAAC,OAAO,KAAK,IAAI,CAAC;AACjC,CAAC;AAKD,MAAM,UAAU,SAAS,CACvB,MAAoB;IAEpB,OAAO,MAAM,CAAC,OAAO,KAAK,KAAK,CAAC;AAClC,CAAC;AAaD,MAAM,OAAO,aAAa;IAEd;IACA;IACA;IAHV,YACU,aAAqB,CAAC,EACtB,UAAkB,IAAI,EACtB,UAAmB,IAAI;QAFvB,eAAU,GAAV,UAAU,CAAY;QACtB,YAAO,GAAP,OAAO,CAAe;QACtB,YAAO,GAAP,OAAO,CAAgB;IAC9B,CAAC;IAEJ,UAAU,CAAC,KAAe;QAExB,OAAO,KAAK,CAAC,QAAQ,KAAK,aAAa,CAAC,OAAO,IAAI,KAAK,CAAC,QAAQ,KAAK,aAAa,CAAC,UAAU,CAAC;IACjG,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,MAAgB;QAC5B,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,IAAI,CAAC,UAAU,EAAE,OAAO,EAAE,EAAE,CAAC;YAC5D,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC;YACnE,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;YAI3D,OAAO,CAAC,GAAG,CAAC,iBAAiB,OAAO,UAAU,KAAK,IAAI,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC;CACF;AAKD,MAAM,OAAO,YAAY;IACf,UAAU,GAA4B,EAAE,CAAC;IAKjD,gBAAgB,CAAC,QAA+B;QAC9C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACjC,CAAC;IAKD,KAAK,CAAC,MAAM,CAAC,KAAc;QACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QAG5C,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACvC,IAAI,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAClC,IAAI,CAAC;oBACH,MAAM,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;oBACjC,OAAO;gBACT,CAAC;gBAAC,MAAM,CAAC;oBAEP,SAAS;gBACX,CAAC;YACH,CAAC;QACH,CAAC;QAGD,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,iBAAiB,EAAE,CAAC,CAAC;QAC5C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAKO,cAAc,CAAC,KAAc;QACnC,IAAI,KAAK,YAAY,QAAQ,EAAE,CAAC;YAC9B,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YAC3B,OAAO,IAAI,CAAC,KAAM,SAAQ,QAAQ;gBACvB,IAAI,GAAG,eAAe,CAAC;gBACvB,QAAQ,GAAG,aAAa,CAAC,IAAI,CAAC;gBAC9B,QAAQ,GAAG,aAAa,CAAC,OAAO,CAAC;aAC3C,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC,CAAC;QAC9C,CAAC;QAED,OAAO,IAAI,CAAC,KAAM,SAAQ,QAAQ;YACvB,IAAI,GAAG,eAAe,CAAC;YACvB,QAAQ,GAAG,aAAa,CAAC,QAAQ,CAAC;YAClC,QAAQ,GAAG,aAAa,CAAC,OAAO,CAAC;SAC3C,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IACpB,CAAC;CACF;AAGD,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,YAAY,EAAE,CAAC;AAM/C,MAAM,UAAU,mBAAmB,CAAC,MAAoB;IACtD,IAAI,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;QACtB,OAAO;IACT,CAAC;IAGD,MAAM,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE;QACtC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;QAC3B,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAExB,IAAI,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtD,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YACxB,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAC7B,CAAC;QAED,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC;AAMD,MAAM,UAAU,uBAAuB,CACrC,MAAoB,EACpB,EAAkG;IAElG,IAAI,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;QACtB,OAAO;IACT,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;IAC3B,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAExB,IAAI,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtD,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACxB,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IAC7B,CAAC;IAED,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/errors/index.ts"],"names":[],"mappings":"AAUA,MAAM,CAAN,IAAY,aAKX;AALD,WAAY,aAAa;IACvB,4BAAW,CAAA;IACX,kCAAiB,CAAA;IACjB,8BAAa,CAAA;IACb,sCAAqB,CAAA;AACvB,CAAC,EALW,aAAa,KAAb,aAAa,QAKxB;AAED,MAAM,CAAN,IAAY,aASX;AATD,WAAY,aAAa;IACvB,0CAAyB,CAAA;IACzB,gDAA+B,CAAA;IAC/B,0CAAyB,CAAA;IACzB,oCAAmB,CAAA;IACnB,oCAAmB,CAAA;IACnB,kDAAiC,CAAA;IACjC,0CAAyB,CAAA;IACzB,oCAAmB,CAAA;AACrB,CAAC,EATW,aAAa,KAAb,aAAa,QASxB;AAQD,MAAM,OAAgB,QAAS,SAAQ,KAAK;IAIjC,SAAS,CAAO;IAChB,OAAO,CAAuC;IAC9C,WAAW,CAAwB;IACnC,aAAa,CAAqB;IAE3C,YAAY,OAAe,EAAE,OAAyB;QACpD,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;QAClC,IAAI,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC;QAC5B,IAAI,CAAC,OAAO,GAAG,OAAO,EAAE,OAAO,CAAC;QAChC,IAAI,CAAC,WAAW,GAAG,OAAO,EAAE,WAAW,CAAC;QACxC,IAAI,CAAC,aAAa,GAAG,OAAO,EAAE,aAAa,CAAC;QAC5C,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IAClD,CAAC;CACF;AAED,MAAM,OAAO,YAAa,SAAQ,QAAQ;IAOtB;IANT,IAAI,GAAG,eAAe,CAAC;IACvB,QAAQ,GAAG,aAAa,CAAC,MAAM,CAAC;IAChC,QAAQ,GAAG,aAAa,CAAC,OAAO,CAAC;IAE1C,YACE,OAAe,EACC,WAAmB,EACnC,OAAyB;QAEzB,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAHR,gBAAW,GAAX,WAAW,CAAQ;IAIrC,CAAC;CACF;AAMD,MAAM,UAAU,OAAO,CAAI,IAAO;IAChC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,OAAO,CAAqB,KAAQ;IAClD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;AACnC,CAAC;AAED,MAAM,UAAU,SAAS,CACvB,MAAoB;IAEpB,OAAO,MAAM,CAAC,OAAO,KAAK,KAAK,CAAC;AAClC,CAAC"}
@@ -1,7 +1,15 @@
1
1
  import { type Result } from '../../core/errors/index.js';
2
- import { type AICommitRequest, type AICommitResponse } from './prompts.js';
2
+ import { type AICommitRequest, type AICommitResponse, type StructuredPrompt } from './prompts.js';
3
+ import { type AIPrRequest, type AIPrResponse } from './pr-prompts.js';
3
4
  export type { AICommitRequest, AICommitResponse } from './prompts.js';
5
+ export type { StructuredPrompt } from './prompts.js';
6
+ export type { AIPrRequest, AIPrResponse } from './pr-prompts.js';
4
7
  export { AIError, AIErrors } from './errors.js';
8
+ export declare function callAnthropicAPI(prompt: StructuredPrompt, options?: {
9
+ maxTokens?: number;
10
+ retries?: number;
11
+ }): Promise<Result<string>>;
5
12
  export declare function generateCommitMessage(request: AICommitRequest): Promise<Result<AICommitResponse>>;
6
13
  export declare function isAICommitAvailable(): Promise<boolean>;
14
+ export declare function generatePrDescription(request: AIPrRequest): Promise<Result<AIPrResponse>>;
7
15
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/ai/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,MAAM,EAAoB,MAAM,wBAAwB,CAAC;AAIvE,OAAO,EAKL,KAAK,eAAe,EACpB,KAAK,gBAAgB,EAEtB,MAAM,cAAc,CAAC;AAGtB,YAAY,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACtE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAsLhD,wBAAsB,qBAAqB,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAsBvG;AAKD,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,OAAO,CAAC,CAG5D"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/ai/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,MAAM,EAAoB,MAAM,wBAAwB,CAAC;AAIvE,OAAO,EAKL,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACtB,MAAM,cAAc,CAAC;AACtB,OAAO,EAIL,KAAK,WAAW,EAChB,KAAK,YAAY,EAClB,MAAM,iBAAiB,CAAC;AAGzB,YAAY,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACtE,YAAY,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACrD,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACjE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAqEhD,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,gBAAgB,EACxB,OAAO,GAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAO,GACrD,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAoFzB;AA4BD,wBAAsB,qBAAqB,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAsBvG;AAKD,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,OAAO,CAAC,CAG5D;AASD,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAgB/B"}
@@ -3,10 +3,11 @@ import { secretsManager } from '../../utils/secrets.js';
3
3
  import { configManager } from '../../utils/config.js';
4
4
  import { AIErrors } from './errors.js';
5
5
  import { buildCommitPrompt, parseCommitResponse, isDiffTooLarge, getDiffSize, } from './prompts.js';
6
+ import { buildPrPrompt, parsePrResponse, isCommitListTooLarge, } from './pr-prompts.js';
6
7
  export { AIError, AIErrors } from './errors.js';
7
8
  const ANTHROPIC_API_URL = 'https://api.anthropic.com/v1/messages';
8
9
  const ANTHROPIC_VERSION = '2023-06-01';
9
- const MAX_TOKENS = 500;
10
+ const DEFAULT_MAX_TOKENS = 500;
10
11
  async function getApiKey() {
11
12
  const secretKey = await secretsManager.getSecret('ai.apiKey');
12
13
  if (secretKey) {
@@ -18,7 +19,9 @@ async function getModel() {
18
19
  const config = await configManager.read();
19
20
  return config.ai.model || 'claude-haiku-4-5-20251001';
20
21
  }
21
- async function callAnthropicAPI(prompt, retries = 3) {
22
+ export async function callAnthropicAPI(prompt, options = {}) {
23
+ const retries = options.retries ?? 3;
24
+ const maxTokens = options.maxTokens ?? DEFAULT_MAX_TOKENS;
22
25
  const apiKey = await getApiKey();
23
26
  if (!apiKey) {
24
27
  return failure(AIErrors.missingApiKey());
@@ -36,7 +39,7 @@ async function callAnthropicAPI(prompt, retries = 3) {
36
39
  },
37
40
  body: JSON.stringify({
38
41
  model,
39
- max_tokens: MAX_TOKENS,
42
+ max_tokens: maxTokens,
40
43
  system: [
41
44
  {
42
45
  type: 'text',
@@ -120,4 +123,21 @@ export async function isAICommitAvailable() {
120
123
  const apiKey = await getApiKey();
121
124
  return Boolean(apiKey);
122
125
  }
126
+ const PR_MAX_TOKENS = 2000;
127
+ export async function generatePrDescription(request) {
128
+ if (isCommitListTooLarge(request.commits, request.diff)) {
129
+ return failure(AIErrors.tokenLimitExceeded(request.diff.length));
130
+ }
131
+ const prompt = buildPrPrompt(request);
132
+ const apiResult = await callAnthropicAPI(prompt, { maxTokens: PR_MAX_TOKENS });
133
+ if (!apiResult.success) {
134
+ return apiResult;
135
+ }
136
+ try {
137
+ return success(parsePrResponse(apiResult.data));
138
+ }
139
+ catch {
140
+ return failure(AIErrors.invalidResponse(apiResult.data));
141
+ }
142
+ }
123
143
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/services/ai/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/services/ai/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import type { StructuredPrompt } from './prompts.js';
2
+ export interface AIPrRequest {
3
+ branchName: string;
4
+ baseBranch: string;
5
+ commits: string[];
6
+ diffStat: string;
7
+ diff: string;
8
+ }
9
+ export interface AIPrResponse {
10
+ title: string;
11
+ body: string;
12
+ }
13
+ export declare function getPrSystemPrompt(): string;
14
+ export declare function buildPrPrompt(request: AIPrRequest): StructuredPrompt;
15
+ export declare function parsePrResponse(raw: string): AIPrResponse;
16
+ export declare function isCommitListTooLarge(commits: string[], diff: string): boolean;
17
+ //# sourceMappingURL=pr-prompts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pr-prompts.d.ts","sourceRoot":"","sources":["../../../src/services/ai/pr-prompts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAErD,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd;AA2BD,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,WAAW,GAAG,gBAAgB,CAsBpE;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY,CAmBzD;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAE7E"}
@@ -0,0 +1,68 @@
1
+ const MAX_DIFF_SIZE = 40000;
2
+ function truncateDiff(diff) {
3
+ if (diff.length <= MAX_DIFF_SIZE)
4
+ return diff;
5
+ return `${diff.slice(0, MAX_DIFF_SIZE)}\n\n... (diff truncated for length — ${diff.length - MAX_DIFF_SIZE} chars omitted)`;
6
+ }
7
+ const PR_SYSTEM_PROMPT = `You are a pull request description generator. Read the branch's commits and diff, then produce a PR title and body.
8
+
9
+ Rules for the title:
10
+ - Under 70 characters
11
+ - Imperative mood ("add X", "fix Y", not "adds X" or "fixed Y")
12
+ - No trailing period, no emojis, no issue numbers, no attribution
13
+ - If the repo uses conventional-commit prefixes in its history, mirror that style (e.g. "feat(cli): ..."); otherwise write a plain sentence
14
+
15
+ Rules for the body:
16
+ - Two sections: "## Summary" (1-3 bullets covering WHAT changed and WHY) and "## Test plan" (markdown checklist of concrete verification steps a reviewer could run)
17
+ - Focus on "why" — the diff already shows "what"
18
+ - Do not invent context that the commits don't support
19
+ - NEVER include attribution, co-authors, emojis, "Generated with" footers, or links back to any tool
20
+ - Use fenced backticks for inline code (commands, file names, symbols)
21
+
22
+ Respond with ONLY a JSON object in this exact format (no markdown fence, no prose):
23
+ {"title":"...","body":"## Summary\\n- ...\\n\\n## Test plan\\n- [ ] ..."}`;
24
+ export function getPrSystemPrompt() {
25
+ return PR_SYSTEM_PROMPT;
26
+ }
27
+ export function buildPrPrompt(request) {
28
+ const parts = [];
29
+ parts.push(`Branch: ${request.branchName}`);
30
+ parts.push(`Base: ${request.baseBranch}`);
31
+ if (request.commits.length > 0) {
32
+ parts.push(`\nCommits (${request.commits.length}):\n${request.commits.join('\n')}`);
33
+ }
34
+ if (request.diffStat) {
35
+ parts.push(`\nFiles changed:\n${request.diffStat}`);
36
+ }
37
+ if (request.diff) {
38
+ parts.push(`\nDiff:\n\`\`\`\n${truncateDiff(request.diff)}\n\`\`\``);
39
+ }
40
+ return {
41
+ system: PR_SYSTEM_PROMPT,
42
+ user: parts.join('\n'),
43
+ };
44
+ }
45
+ export function parsePrResponse(raw) {
46
+ let jsonStr = raw.trim();
47
+ const fence = jsonStr.match(/```(?:json)?\s*([\s\S]*?)```/);
48
+ if (fence?.[1])
49
+ jsonStr = fence[1].trim();
50
+ const object = jsonStr.match(/\{[\s\S]*\}/);
51
+ if (object)
52
+ jsonStr = object[0];
53
+ const parsed = JSON.parse(jsonStr);
54
+ if (!parsed.title || typeof parsed.title !== 'string') {
55
+ throw new Error('AI response missing "title"');
56
+ }
57
+ if (!parsed.body || typeof parsed.body !== 'string') {
58
+ throw new Error('AI response missing "body"');
59
+ }
60
+ return {
61
+ title: parsed.title.trim(),
62
+ body: parsed.body.trim(),
63
+ };
64
+ }
65
+ export function isCommitListTooLarge(commits, diff) {
66
+ return diff.length > MAX_DIFF_SIZE * 2 || commits.length > 200;
67
+ }
68
+ //# sourceMappingURL=pr-prompts.js.map