@neurcode-ai/cli 0.4.0 → 0.4.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.
Files changed (111) hide show
  1. package/dist/api-client.d.ts +105 -17
  2. package/dist/api-client.d.ts.map +1 -1
  3. package/dist/api-client.js +388 -85
  4. package/dist/api-client.js.map +1 -1
  5. package/dist/commands/allow.d.ts.map +1 -1
  6. package/dist/commands/allow.js +6 -33
  7. package/dist/commands/allow.js.map +1 -1
  8. package/dist/commands/check.d.ts.map +1 -1
  9. package/dist/commands/check.js +56 -13
  10. package/dist/commands/check.js.map +1 -1
  11. package/dist/commands/doctor.d.ts +7 -0
  12. package/dist/commands/doctor.d.ts.map +1 -0
  13. package/dist/commands/doctor.js +134 -0
  14. package/dist/commands/doctor.js.map +1 -0
  15. package/dist/commands/init.d.ts +13 -0
  16. package/dist/commands/init.d.ts.map +1 -0
  17. package/dist/commands/init.js +365 -0
  18. package/dist/commands/init.js.map +1 -0
  19. package/dist/commands/login.d.ts +8 -0
  20. package/dist/commands/login.d.ts.map +1 -0
  21. package/dist/commands/login.js +209 -0
  22. package/dist/commands/login.js.map +1 -0
  23. package/dist/commands/logout.d.ts +7 -0
  24. package/dist/commands/logout.d.ts.map +1 -0
  25. package/dist/commands/logout.js +70 -0
  26. package/dist/commands/logout.js.map +1 -0
  27. package/dist/commands/plan.d.ts +2 -0
  28. package/dist/commands/plan.d.ts.map +1 -1
  29. package/dist/commands/plan.js +210 -57
  30. package/dist/commands/plan.js.map +1 -1
  31. package/dist/commands/prompt.d.ts +6 -0
  32. package/dist/commands/prompt.d.ts.map +1 -0
  33. package/dist/commands/prompt.js +254 -0
  34. package/dist/commands/prompt.js.map +1 -0
  35. package/dist/commands/revert.d.ts.map +1 -1
  36. package/dist/commands/revert.js +10 -0
  37. package/dist/commands/revert.js.map +1 -1
  38. package/dist/commands/session.d.ts +29 -0
  39. package/dist/commands/session.d.ts.map +1 -0
  40. package/dist/commands/session.js +382 -0
  41. package/dist/commands/session.js.map +1 -0
  42. package/dist/commands/verify.d.ts.map +1 -1
  43. package/dist/commands/verify.js +127 -13
  44. package/dist/commands/verify.js.map +1 -1
  45. package/dist/commands/watch.d.ts +8 -0
  46. package/dist/commands/watch.d.ts.map +1 -0
  47. package/dist/commands/watch.js +78 -0
  48. package/dist/commands/watch.js.map +1 -0
  49. package/dist/config.d.ts +29 -4
  50. package/dist/config.d.ts.map +1 -1
  51. package/dist/config.js +186 -21
  52. package/dist/config.js.map +1 -1
  53. package/dist/index.js +120 -3
  54. package/dist/index.js.map +1 -1
  55. package/dist/services/integrations/TicketService.d.ts +68 -0
  56. package/dist/services/integrations/TicketService.d.ts.map +1 -0
  57. package/dist/services/integrations/TicketService.js +151 -0
  58. package/dist/services/integrations/TicketService.js.map +1 -0
  59. package/dist/services/security/SecurityGuard.d.ts +80 -0
  60. package/dist/services/security/SecurityGuard.d.ts.map +1 -0
  61. package/dist/services/security/SecurityGuard.js +410 -0
  62. package/dist/services/security/SecurityGuard.js.map +1 -0
  63. package/dist/services/watch/BlobStore.d.ts +33 -0
  64. package/dist/services/watch/BlobStore.d.ts.map +1 -0
  65. package/dist/services/watch/BlobStore.js +108 -0
  66. package/dist/services/watch/BlobStore.js.map +1 -0
  67. package/dist/services/watch/CommandPoller.d.ts +76 -0
  68. package/dist/services/watch/CommandPoller.d.ts.map +1 -0
  69. package/dist/services/watch/CommandPoller.js +298 -0
  70. package/dist/services/watch/CommandPoller.js.map +1 -0
  71. package/dist/services/watch/Journal.d.ts +58 -0
  72. package/dist/services/watch/Journal.d.ts.map +1 -0
  73. package/dist/services/watch/Journal.js +144 -0
  74. package/dist/services/watch/Journal.js.map +1 -0
  75. package/dist/services/watch/Sentinel.d.ts +49 -0
  76. package/dist/services/watch/Sentinel.d.ts.map +1 -0
  77. package/dist/services/watch/Sentinel.js +205 -0
  78. package/dist/services/watch/Sentinel.js.map +1 -0
  79. package/dist/services/watch/Syncer.d.ts +55 -0
  80. package/dist/services/watch/Syncer.d.ts.map +1 -0
  81. package/dist/services/watch/Syncer.js +231 -0
  82. package/dist/services/watch/Syncer.js.map +1 -0
  83. package/dist/utils/ROILogger.d.ts +16 -0
  84. package/dist/utils/ROILogger.d.ts.map +1 -0
  85. package/dist/utils/ROILogger.js +45 -0
  86. package/dist/utils/ROILogger.js.map +1 -0
  87. package/dist/utils/box.d.ts +16 -0
  88. package/dist/utils/box.d.ts.map +1 -0
  89. package/dist/utils/box.js +85 -0
  90. package/dist/utils/box.js.map +1 -0
  91. package/dist/utils/gitignore.d.ts +10 -0
  92. package/dist/utils/gitignore.d.ts.map +1 -0
  93. package/dist/utils/gitignore.js +34 -0
  94. package/dist/utils/gitignore.js.map +1 -0
  95. package/dist/utils/messages.d.ts +81 -0
  96. package/dist/utils/messages.d.ts.map +1 -0
  97. package/dist/utils/messages.js +306 -0
  98. package/dist/utils/messages.js.map +1 -0
  99. package/dist/utils/restore.d.ts +14 -0
  100. package/dist/utils/restore.d.ts.map +1 -0
  101. package/dist/utils/restore.js +89 -0
  102. package/dist/utils/restore.js.map +1 -0
  103. package/dist/utils/state.d.ts +69 -0
  104. package/dist/utils/state.d.ts.map +1 -0
  105. package/dist/utils/state.js +151 -0
  106. package/dist/utils/state.js.map +1 -0
  107. package/dist/utils/user-context.d.ts +28 -0
  108. package/dist/utils/user-context.d.ts.map +1 -0
  109. package/dist/utils/user-context.js +68 -0
  110. package/dist/utils/user-context.js.map +1 -0
  111. package/package.json +11 -4
package/dist/index.js CHANGED
@@ -4,6 +4,16 @@ Object.defineProperty(exports, "__esModule", { value: true });
4
4
  const commander_1 = require("commander");
5
5
  const fs_1 = require("fs");
6
6
  const path_1 = require("path");
7
+ // Import chalk with fallback
8
+ let chalk;
9
+ try {
10
+ chalk = require('chalk');
11
+ }
12
+ catch {
13
+ chalk = {
14
+ yellow: (str) => str,
15
+ };
16
+ }
7
17
  const check_1 = require("./commands/check");
8
18
  const revert_1 = require("./commands/revert");
9
19
  const refactor_1 = require("./commands/refactor");
@@ -11,9 +21,18 @@ const security_1 = require("./commands/security");
11
21
  const plan_1 = require("./commands/plan");
12
22
  const apply_1 = require("./commands/apply");
13
23
  const verify_1 = require("./commands/verify");
24
+ const prompt_1 = require("./commands/prompt");
14
25
  const config_1 = require("./commands/config");
15
26
  const map_1 = require("./commands/map");
16
27
  const allow_1 = require("./commands/allow");
28
+ const watch_1 = require("./commands/watch");
29
+ const login_1 = require("./commands/login");
30
+ const logout_1 = require("./commands/logout");
31
+ const init_1 = require("./commands/init");
32
+ const doctor_1 = require("./commands/doctor");
33
+ const session_1 = require("./commands/session");
34
+ const messages_1 = require("./utils/messages");
35
+ const config_2 = require("./config");
17
36
  // Read version from package.json
18
37
  let version = '0.1.2'; // fallback
19
38
  try {
@@ -29,6 +48,21 @@ program
29
48
  .name('neurcode')
30
49
  .description('AI-powered code governance and diff analysis')
31
50
  .version(version);
51
+ // Show welcome banner before parsing (for help or unauthenticated users)
52
+ async function showWelcomeIfNeeded() {
53
+ if (!process.env.CI && process.stdout.isTTY) {
54
+ const args = process.argv.slice(2);
55
+ const isHelp = args.length === 0 || args.includes('--help') || args.includes('-h');
56
+ // Show welcome for help or if no API key is set (first-time users)
57
+ if (isHelp || !(0, config_2.getApiKey)()) {
58
+ await (0, messages_1.printWelcomeBanner)();
59
+ }
60
+ }
61
+ }
62
+ // Call before parsing
63
+ showWelcomeIfNeeded().catch(() => {
64
+ // Ignore errors in welcome banner (non-critical)
65
+ });
32
66
  program
33
67
  .command('check')
34
68
  .description('Analyze git diff for risky changes')
@@ -42,6 +76,30 @@ program
42
76
  .action(check_1.checkCommand);
43
77
  (0, refactor_1.refactorCommand)(program);
44
78
  (0, security_1.securityCommand)(program);
79
+ program
80
+ .command('login')
81
+ .description('Authenticate CLI with Neurcode (opens browser for approval)')
82
+ .action(() => {
83
+ (0, login_1.loginCommand)();
84
+ });
85
+ program
86
+ .command('logout')
87
+ .description('Log out from Neurcode CLI (removes API key)')
88
+ .action(() => {
89
+ (0, logout_1.logoutCommand)();
90
+ });
91
+ program
92
+ .command('init')
93
+ .description('Initialize project configuration (select a project)')
94
+ .action(() => {
95
+ (0, init_1.initCommand)();
96
+ });
97
+ program
98
+ .command('doctor')
99
+ .description('Health check & connectivity diagnostics - verify API connectivity')
100
+ .action(() => {
101
+ (0, doctor_1.doctorCommand)();
102
+ });
45
103
  program
46
104
  .command('config')
47
105
  .description('Configure Neurcode CLI settings')
@@ -69,11 +127,21 @@ program
69
127
  program
70
128
  .command('plan')
71
129
  .description('Generate an execution plan for a user intent')
72
- .argument('<intent>', 'Description of what you want to accomplish')
130
+ .argument('<intent...>', 'Description of what you want to accomplish')
73
131
  .option('--project-id <id>', 'Project ID')
132
+ .option('--ticket <id>', 'Ticket ID from Linear or Jira (e.g., PROJ-123, ABC-123)')
133
+ .option('--mask', 'Mask detected secrets automatically (default: true)', true)
134
+ .option('--no-mask', 'Abort if secrets detected instead of masking')
74
135
  .action((intent, options) => {
75
- (0, plan_1.planCommand)(intent, {
76
- projectId: options.projectId,
136
+ // Handle multiple arguments (when user doesn't quote)
137
+ const intentString = Array.isArray(intent) ? intent.join(' ') : intent;
138
+ if (Array.isArray(intent) && intent.length > 1) {
139
+ console.log(chalk.yellow('Tip: Wrap your intent in quotes for better shell compatibility.'));
140
+ }
141
+ (0, plan_1.planCommand)(intentString, {
142
+ projectId: options['project-id'] || options.projectId,
143
+ ticket: options.ticket,
144
+ mask: options.mask !== false, // Default to true unless --no-mask is used
77
145
  });
78
146
  });
79
147
  program
@@ -93,6 +161,49 @@ program
93
161
  .action((filePath) => {
94
162
  (0, allow_1.allowCommand)(filePath);
95
163
  });
164
+ program
165
+ .command('watch')
166
+ .description('Start Neurcode Watch - A local background service that records file changes for Time Machine feature')
167
+ .action(() => {
168
+ (0, watch_1.watchCommand)();
169
+ });
170
+ // Session management commands
171
+ const sessionCmd = program
172
+ .command('session')
173
+ .description('Manage AI coding sessions');
174
+ sessionCmd
175
+ .command('list')
176
+ .description('List all sessions for the current project')
177
+ .option('--project-id <id>', 'Project ID')
178
+ .option('--all', 'Show all sessions (including completed)')
179
+ .action((options) => {
180
+ (0, session_1.listSessionsCommand)({
181
+ projectId: options.projectId,
182
+ all: options.all || false,
183
+ });
184
+ });
185
+ sessionCmd
186
+ .command('end')
187
+ .description('End the current session or a specific session')
188
+ .option('--session-id <id>', 'Session ID to end (defaults to current session)')
189
+ .option('--project-id <id>', 'Project ID')
190
+ .action((options) => {
191
+ (0, session_1.endSessionCommand)({
192
+ sessionId: options.sessionId,
193
+ projectId: options.projectId,
194
+ });
195
+ });
196
+ sessionCmd
197
+ .command('status')
198
+ .description('Show status of the current session or a specific session')
199
+ .option('--session-id <id>', 'Session ID to check (defaults to current session)')
200
+ .option('--project-id <id>', 'Project ID')
201
+ .action((options) => {
202
+ (0, session_1.sessionStatusCommand)({
203
+ sessionId: options.sessionId,
204
+ projectId: options.projectId,
205
+ });
206
+ });
96
207
  program
97
208
  .command('verify')
98
209
  .description('Verify plan adherence - Compare current changes against an Architect Plan')
@@ -118,6 +229,12 @@ program
118
229
  apiUrl: options.apiUrl,
119
230
  });
120
231
  });
232
+ program
233
+ .command('prompt [plan-id]')
234
+ .description('Generate a Cursor/Claude prompt from an Architect Plan (uses last plan if ID not provided)')
235
+ .action((planId) => {
236
+ (0, prompt_1.promptCommand)(planId);
237
+ });
121
238
  const revertCmd = program
122
239
  .command('revert')
123
240
  .description('Revert files to previous versions from Neurcode history');
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,68 @@
1
+ /**
2
+ * Ticket Service - Contextual Intent Mapping
3
+ *
4
+ * Fetches business requirements from issue trackers (Linear, Jira) to enrich user intents.
5
+ */
6
+ export interface TicketMetadata {
7
+ id: string;
8
+ title: string;
9
+ description: string;
10
+ acceptanceCriteria?: string;
11
+ labels?: string[];
12
+ status?: string;
13
+ priority?: string;
14
+ }
15
+ export interface TicketContext {
16
+ ticket: TicketMetadata;
17
+ enrichedIntent: string;
18
+ }
19
+ /**
20
+ * Ticket Service for fetching issue tracker data
21
+ */
22
+ export declare class TicketService {
23
+ private integrationKey;
24
+ constructor();
25
+ /**
26
+ * Detect ticket format (Jira: PROJ-123, Linear: ABC-123)
27
+ */
28
+ private detectTicketType;
29
+ /**
30
+ * Fetch ticket from Jira
31
+ *
32
+ * @param ticketId - Jira ticket ID (e.g., PROJ-123)
33
+ * @returns Ticket metadata or null if fetch fails
34
+ */
35
+ private fetchFromJira;
36
+ /**
37
+ * Fetch ticket from Linear
38
+ *
39
+ * @param ticketId - Linear issue ID (e.g., ABC-123)
40
+ * @returns Ticket metadata or null if fetch fails
41
+ */
42
+ private fetchFromLinear;
43
+ /**
44
+ * Fetch ticket from issue tracker
45
+ *
46
+ * @param ticketId - Ticket ID (e.g., PROJ-123 for Jira, ABC-123 for Linear)
47
+ * @returns Ticket metadata
48
+ * @throws Error if ticket cannot be fetched or format is unknown
49
+ */
50
+ fetchTicket(ticketId: string): Promise<TicketMetadata>;
51
+ /**
52
+ * Enrich user intent with ticket context
53
+ *
54
+ * @param intent - User's original intent
55
+ * @param ticket - Ticket metadata
56
+ * @returns Enriched intent string
57
+ */
58
+ enrichIntent(intent: string, ticket: TicketMetadata): string;
59
+ /**
60
+ * Fetch ticket and enrich intent in one call
61
+ *
62
+ * @param ticketId - Ticket ID
63
+ * @param intent - User's original intent
64
+ * @returns Ticket context with enriched intent
65
+ */
66
+ fetchTicketAndEnrich(ticketId: string, intent: string): Promise<TicketContext>;
67
+ }
68
+ //# sourceMappingURL=TicketService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TicketService.d.ts","sourceRoot":"","sources":["../../../src/services/integrations/TicketService.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,cAAc,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,cAAc,CAAgB;;IAMtC;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAcxB;;;;;OAKG;YACW,aAAa;IAsB3B;;;;;OAKG;YACW,eAAe;IAsB7B;;;;;;OAMG;IACG,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IA6B5D;;;;;;OAMG;IACH,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,GAAG,MAAM;IAsB5D;;;;;;OAMG;IACG,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;CASrF"}
@@ -0,0 +1,151 @@
1
+ "use strict";
2
+ /**
3
+ * Ticket Service - Contextual Intent Mapping
4
+ *
5
+ * Fetches business requirements from issue trackers (Linear, Jira) to enrich user intents.
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.TicketService = void 0;
9
+ /**
10
+ * Ticket Service for fetching issue tracker data
11
+ */
12
+ class TicketService {
13
+ integrationKey;
14
+ constructor() {
15
+ this.integrationKey = process.env.NEURCODE_INTEGRATION_KEY || null;
16
+ }
17
+ /**
18
+ * Detect ticket format (Jira: PROJ-123, Linear: ABC-123)
19
+ */
20
+ detectTicketType(ticketId) {
21
+ // Jira format: PROJECT-123 (uppercase letters, dash, numbers)
22
+ if (/^[A-Z]+-\d+$/.test(ticketId)) {
23
+ return 'jira';
24
+ }
25
+ // Linear format: ABC-123 (3-4 letters, dash, numbers)
26
+ if (/^[A-Z]{3,4}-\d+$/.test(ticketId)) {
27
+ return 'linear';
28
+ }
29
+ return 'unknown';
30
+ }
31
+ /**
32
+ * Fetch ticket from Jira
33
+ *
34
+ * @param ticketId - Jira ticket ID (e.g., PROJ-123)
35
+ * @returns Ticket metadata or null if fetch fails
36
+ */
37
+ async fetchFromJira(ticketId) {
38
+ // TODO: Implement Jira API integration
39
+ // For now, return stub data
40
+ if (!this.integrationKey) {
41
+ throw new Error('Jira integration requires NEURCODE_INTEGRATION_KEY environment variable');
42
+ }
43
+ // Stub implementation - replace with actual Jira API call
44
+ // Example API endpoint: https://<domain>.atlassian.net/rest/api/3/issue/{ticketId}
45
+ // Requires: Jira API token or OAuth token in NEURCODE_INTEGRATION_KEY
46
+ return {
47
+ id: ticketId,
48
+ title: `[Jira Stub] Ticket ${ticketId}`,
49
+ description: 'Jira integration not yet implemented. Set NEURCODE_INTEGRATION_KEY to enable.',
50
+ acceptanceCriteria: 'This is a stub response. Actual Jira integration coming soon.',
51
+ labels: [],
52
+ status: 'TODO',
53
+ };
54
+ }
55
+ /**
56
+ * Fetch ticket from Linear
57
+ *
58
+ * @param ticketId - Linear issue ID (e.g., ABC-123)
59
+ * @returns Ticket metadata or null if fetch fails
60
+ */
61
+ async fetchFromLinear(ticketId) {
62
+ // TODO: Implement Linear API integration
63
+ // For now, return stub data
64
+ if (!this.integrationKey) {
65
+ throw new Error('Linear integration requires NEURCODE_INTEGRATION_KEY environment variable');
66
+ }
67
+ // Stub implementation - replace with actual Linear API call
68
+ // Example GraphQL endpoint: https://api.linear.app/graphql
69
+ // Requires: Linear API key in NEURCODE_INTEGRATION_KEY
70
+ return {
71
+ id: ticketId,
72
+ title: `[Linear Stub] Issue ${ticketId}`,
73
+ description: 'Linear integration not yet implemented. Set NEURCODE_INTEGRATION_KEY to enable.',
74
+ acceptanceCriteria: 'This is a stub response. Actual Linear integration coming soon.',
75
+ labels: [],
76
+ status: 'Todo',
77
+ };
78
+ }
79
+ /**
80
+ * Fetch ticket from issue tracker
81
+ *
82
+ * @param ticketId - Ticket ID (e.g., PROJ-123 for Jira, ABC-123 for Linear)
83
+ * @returns Ticket metadata
84
+ * @throws Error if ticket cannot be fetched or format is unknown
85
+ */
86
+ async fetchTicket(ticketId) {
87
+ const ticketType = this.detectTicketType(ticketId);
88
+ if (ticketType === 'unknown') {
89
+ throw new Error(`Unknown ticket format: ${ticketId}. Expected Jira format (PROJ-123) or Linear format (ABC-123)`);
90
+ }
91
+ let ticket;
92
+ try {
93
+ if (ticketType === 'jira') {
94
+ ticket = await this.fetchFromJira(ticketId);
95
+ }
96
+ else {
97
+ ticket = await this.fetchFromLinear(ticketId);
98
+ }
99
+ if (!ticket) {
100
+ throw new Error(`Failed to fetch ticket ${ticketId} from ${ticketType}`);
101
+ }
102
+ return ticket;
103
+ }
104
+ catch (error) {
105
+ if (error instanceof Error) {
106
+ throw error;
107
+ }
108
+ throw new Error(`Error fetching ticket ${ticketId}: ${String(error)}`);
109
+ }
110
+ }
111
+ /**
112
+ * Enrich user intent with ticket context
113
+ *
114
+ * @param intent - User's original intent
115
+ * @param ticket - Ticket metadata
116
+ * @returns Enriched intent string
117
+ */
118
+ enrichIntent(intent, ticket) {
119
+ const parts = [];
120
+ // Add ticket title
121
+ parts.push(`Ticket: ${ticket.id} - ${ticket.title}`);
122
+ // Add ticket description
123
+ if (ticket.description) {
124
+ parts.push(`\nDescription: ${ticket.description}`);
125
+ }
126
+ // Add acceptance criteria if available
127
+ if (ticket.acceptanceCriteria) {
128
+ parts.push(`\nAcceptance Criteria:\n${ticket.acceptanceCriteria}`);
129
+ }
130
+ // Add user's original intent
131
+ parts.push(`\nUser Intent: ${intent}`);
132
+ return parts.join('\n');
133
+ }
134
+ /**
135
+ * Fetch ticket and enrich intent in one call
136
+ *
137
+ * @param ticketId - Ticket ID
138
+ * @param intent - User's original intent
139
+ * @returns Ticket context with enriched intent
140
+ */
141
+ async fetchTicketAndEnrich(ticketId, intent) {
142
+ const ticket = await this.fetchTicket(ticketId);
143
+ const enrichedIntent = this.enrichIntent(intent, ticket);
144
+ return {
145
+ ticket,
146
+ enrichedIntent,
147
+ };
148
+ }
149
+ }
150
+ exports.TicketService = TicketService;
151
+ //# sourceMappingURL=TicketService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TicketService.js","sourceRoot":"","sources":["../../../src/services/integrations/TicketService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,80 @@
1
+ /**
2
+ * Security Guard - Shadow AI Shield
3
+ *
4
+ * Local privacy scanner that runs before any API call to detect and mask secrets.
5
+ * Uses regex patterns and AST analysis (via ts-morph) to identify sensitive data.
6
+ * Also includes hallucination detection for phantom packages.
7
+ */
8
+ export interface SecretDetection {
9
+ type: 'aws_key' | 'bearer_token' | 'github_token' | 'generic_secret' | 'ast_literal';
10
+ severity: 'high' | 'medium' | 'low';
11
+ location: string;
12
+ pattern: string;
13
+ masked?: boolean;
14
+ }
15
+ export interface HallucinationDetection {
16
+ packageName: string;
17
+ location: string;
18
+ importStatement: string;
19
+ }
20
+ export interface ScanResult {
21
+ secrets: SecretDetection[];
22
+ hasSecrets: boolean;
23
+ maskedText?: string;
24
+ }
25
+ export interface HallucinationScanResult {
26
+ hallucinations: HallucinationDetection[];
27
+ hasHallucinations: boolean;
28
+ blocked: boolean;
29
+ }
30
+ /**
31
+ * Security Guard for local secret detection and hallucination detection
32
+ */
33
+ export declare class SecurityGuard {
34
+ private readonly REDACTION_PLACEHOLDER;
35
+ private readonly patterns;
36
+ private readonly sensitiveVarNames;
37
+ private readonly safePackageList;
38
+ /**
39
+ * Scan text content for secrets using regex patterns
40
+ */
41
+ scanText(text: string, location?: string): SecretDetection[];
42
+ /**
43
+ * Extract package names from import/require statements
44
+ * Returns array of { packageName, importStatement }
45
+ */
46
+ private extractPackageImports;
47
+ /**
48
+ * Load package.json dependencies from project root
49
+ */
50
+ private loadProjectDependencies;
51
+ /**
52
+ * Scan code for hallucinated packages (phantom packages)
53
+ * Checks against safe list and project's package.json
54
+ */
55
+ scanForHallucinations(code: string, location?: string, rootDir?: string): Promise<HallucinationScanResult>;
56
+ /**
57
+ * Scan TypeScript/JavaScript files using AST analysis
58
+ */
59
+ scanFile(filePath: string, rootDir?: string): Promise<SecretDetection[]>;
60
+ /**
61
+ * Scan multiple files
62
+ */
63
+ scanFiles(filePaths: string[], rootDir?: string): Promise<ScanResult>;
64
+ /**
65
+ * Scan intent string for secrets
66
+ */
67
+ scanIntent(intent: string): ScanResult;
68
+ /**
69
+ * Mask secrets in text
70
+ */
71
+ maskSecrets(text: string, detections: SecretDetection[]): string;
72
+ /**
73
+ * Complete scan with masking
74
+ */
75
+ scanAndMask(intent: string, filePaths: string[], rootDir?: string): Promise<ScanResult & {
76
+ maskedIntent?: string;
77
+ maskedFiles?: Map<string, string>;
78
+ }>;
79
+ }
80
+ //# sourceMappingURL=SecurityGuard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SecurityGuard.d.ts","sourceRoot":"","sources":["../../../src/services/security/SecurityGuard.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,SAAS,GAAG,cAAc,GAAG,cAAc,GAAG,gBAAgB,GAAG,aAAa,CAAC;IACrF,QAAQ,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IACpC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,sBAAsB;IACrC,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,uBAAuB;IACtC,cAAc,EAAE,sBAAsB,EAAE,CAAC;IACzC,iBAAiB,EAAE,OAAO,CAAC;IAC3B,OAAO,EAAE,OAAO,CAAC;CAClB;AAED;;GAEG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAA4B;IAGlE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAYvB;IAGF,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAQhC;IAIF,OAAO,CAAC,QAAQ,CAAC,eAAe,CAwB7B;IAEH;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAe,GAAG,eAAe,EAAE;IAyDpE;;;OAGG;IACH,OAAO,CAAC,qBAAqB;IAiD7B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAiC/B;;;OAGG;IACG,qBAAqB,CACzB,IAAI,EAAE,MAAM,EACZ,QAAQ,GAAE,MAAe,EACzB,OAAO,GAAE,MAAsB,GAC9B,OAAO,CAAC,uBAAuB,CAAC;IA8DnC;;OAEG;IACG,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE,MAAsB,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IAyE7F;;OAEG;IACG,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,OAAO,GAAE,MAAsB,GAAG,OAAO,CAAC,UAAU,CAAC;IAc1F;;OAEG;IACH,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU;IAQtC;;OAEG;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,eAAe,EAAE,GAAG,MAAM;IAgBhE;;OAEG;IACG,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,OAAO,GAAE,MAAsB,GAAG,OAAO,CAAC,UAAU,GAAG;QAAE,YAAY,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,CAAC;CAkD5K"}