gencode-ai 0.1.2 → 0.2.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 (180) hide show
  1. package/README.md +15 -17
  2. package/dist/agent/agent.d.ts +43 -0
  3. package/dist/agent/agent.d.ts.map +1 -1
  4. package/dist/agent/agent.js +107 -4
  5. package/dist/agent/agent.js.map +1 -1
  6. package/dist/agent/index.d.ts +1 -0
  7. package/dist/agent/index.d.ts.map +1 -1
  8. package/dist/agent/types.d.ts +20 -1
  9. package/dist/agent/types.d.ts.map +1 -1
  10. package/dist/checkpointing/checkpoint-manager.d.ts +87 -0
  11. package/dist/checkpointing/checkpoint-manager.d.ts.map +1 -0
  12. package/dist/checkpointing/checkpoint-manager.js +281 -0
  13. package/dist/checkpointing/checkpoint-manager.js.map +1 -0
  14. package/dist/checkpointing/index.d.ts +29 -0
  15. package/dist/checkpointing/index.d.ts.map +1 -0
  16. package/dist/checkpointing/index.js +29 -0
  17. package/dist/checkpointing/index.js.map +1 -0
  18. package/dist/checkpointing/types.d.ts +98 -0
  19. package/dist/checkpointing/types.d.ts.map +1 -0
  20. package/dist/checkpointing/types.js +7 -0
  21. package/dist/checkpointing/types.js.map +1 -0
  22. package/dist/cli/components/App.d.ts.map +1 -1
  23. package/dist/cli/components/App.js +193 -7
  24. package/dist/cli/components/App.js.map +1 -1
  25. package/dist/cli/components/CommandSuggestions.d.ts.map +1 -1
  26. package/dist/cli/components/CommandSuggestions.js +5 -0
  27. package/dist/cli/components/CommandSuggestions.js.map +1 -1
  28. package/dist/cli/components/Messages.d.ts +7 -1
  29. package/dist/cli/components/Messages.d.ts.map +1 -1
  30. package/dist/cli/components/Messages.js +28 -2
  31. package/dist/cli/components/Messages.js.map +1 -1
  32. package/dist/cli/components/ModeIndicator.d.ts +42 -0
  33. package/dist/cli/components/ModeIndicator.d.ts.map +1 -0
  34. package/dist/cli/components/ModeIndicator.js +52 -0
  35. package/dist/cli/components/ModeIndicator.js.map +1 -0
  36. package/dist/cli/components/PlanApproval.d.ts +36 -0
  37. package/dist/cli/components/PlanApproval.d.ts.map +1 -0
  38. package/dist/cli/components/PlanApproval.js +154 -0
  39. package/dist/cli/components/PlanApproval.js.map +1 -0
  40. package/dist/cli/components/QuestionPrompt.d.ts +23 -0
  41. package/dist/cli/components/QuestionPrompt.d.ts.map +1 -0
  42. package/dist/cli/components/QuestionPrompt.js +231 -0
  43. package/dist/cli/components/QuestionPrompt.js.map +1 -0
  44. package/dist/cli/components/index.d.ts +1 -0
  45. package/dist/cli/components/index.d.ts.map +1 -1
  46. package/dist/cli/components/index.js +1 -0
  47. package/dist/cli/components/index.js.map +1 -1
  48. package/dist/cli/components/theme.d.ts +9 -0
  49. package/dist/cli/components/theme.d.ts.map +1 -1
  50. package/dist/cli/components/theme.js +14 -1
  51. package/dist/cli/components/theme.js.map +1 -1
  52. package/dist/index.d.ts +1 -0
  53. package/dist/index.d.ts.map +1 -1
  54. package/dist/index.js +2 -0
  55. package/dist/index.js.map +1 -1
  56. package/dist/permissions/types.d.ts.map +1 -1
  57. package/dist/permissions/types.js +2 -0
  58. package/dist/permissions/types.js.map +1 -1
  59. package/dist/planning/index.d.ts +13 -0
  60. package/dist/planning/index.d.ts.map +1 -0
  61. package/dist/planning/index.js +15 -0
  62. package/dist/planning/index.js.map +1 -0
  63. package/dist/planning/plan-file.d.ts +59 -0
  64. package/dist/planning/plan-file.d.ts.map +1 -0
  65. package/dist/planning/plan-file.js +278 -0
  66. package/dist/planning/plan-file.js.map +1 -0
  67. package/dist/planning/state.d.ts +127 -0
  68. package/dist/planning/state.d.ts.map +1 -0
  69. package/dist/planning/state.js +261 -0
  70. package/dist/planning/state.js.map +1 -0
  71. package/dist/planning/tools/enter-plan-mode.d.ts +25 -0
  72. package/dist/planning/tools/enter-plan-mode.d.ts.map +1 -0
  73. package/dist/planning/tools/enter-plan-mode.js +98 -0
  74. package/dist/planning/tools/enter-plan-mode.js.map +1 -0
  75. package/dist/planning/tools/exit-plan-mode.d.ts +24 -0
  76. package/dist/planning/tools/exit-plan-mode.d.ts.map +1 -0
  77. package/dist/planning/tools/exit-plan-mode.js +149 -0
  78. package/dist/planning/tools/exit-plan-mode.js.map +1 -0
  79. package/dist/planning/types.d.ts +100 -0
  80. package/dist/planning/types.d.ts.map +1 -0
  81. package/dist/planning/types.js +28 -0
  82. package/dist/planning/types.js.map +1 -0
  83. package/dist/pricing/calculator.d.ts +21 -0
  84. package/dist/pricing/calculator.d.ts.map +1 -0
  85. package/dist/pricing/calculator.js +59 -0
  86. package/dist/pricing/calculator.js.map +1 -0
  87. package/dist/pricing/index.d.ts +7 -0
  88. package/dist/pricing/index.d.ts.map +1 -0
  89. package/dist/pricing/index.js +7 -0
  90. package/dist/pricing/index.js.map +1 -0
  91. package/dist/pricing/models.d.ts +20 -0
  92. package/dist/pricing/models.d.ts.map +1 -0
  93. package/dist/pricing/models.js +322 -0
  94. package/dist/pricing/models.js.map +1 -0
  95. package/dist/pricing/types.d.ts +30 -0
  96. package/dist/pricing/types.d.ts.map +1 -0
  97. package/dist/pricing/types.js +5 -0
  98. package/dist/pricing/types.js.map +1 -0
  99. package/dist/providers/anthropic.d.ts.map +1 -1
  100. package/dist/providers/anthropic.js +17 -10
  101. package/dist/providers/anthropic.js.map +1 -1
  102. package/dist/providers/gemini.d.ts.map +1 -1
  103. package/dist/providers/gemini.js +21 -14
  104. package/dist/providers/gemini.js.map +1 -1
  105. package/dist/providers/openai.d.ts.map +1 -1
  106. package/dist/providers/openai.js +12 -8
  107. package/dist/providers/openai.js.map +1 -1
  108. package/dist/providers/types.d.ts +2 -0
  109. package/dist/providers/types.d.ts.map +1 -1
  110. package/dist/providers/vertex-ai.d.ts.map +1 -1
  111. package/dist/providers/vertex-ai.js +17 -10
  112. package/dist/providers/vertex-ai.js.map +1 -1
  113. package/dist/session/manager.d.ts +4 -0
  114. package/dist/session/manager.d.ts.map +1 -1
  115. package/dist/session/manager.js +8 -0
  116. package/dist/session/manager.js.map +1 -1
  117. package/dist/tools/builtin/ask-user.d.ts +64 -0
  118. package/dist/tools/builtin/ask-user.d.ts.map +1 -0
  119. package/dist/tools/builtin/ask-user.js +148 -0
  120. package/dist/tools/builtin/ask-user.js.map +1 -0
  121. package/dist/tools/index.d.ts +19 -1
  122. package/dist/tools/index.d.ts.map +1 -1
  123. package/dist/tools/index.js +11 -0
  124. package/dist/tools/index.js.map +1 -1
  125. package/dist/tools/registry.d.ts +13 -0
  126. package/dist/tools/registry.d.ts.map +1 -1
  127. package/dist/tools/registry.js +79 -2
  128. package/dist/tools/registry.js.map +1 -1
  129. package/dist/tools/types.d.ts +17 -0
  130. package/dist/tools/types.d.ts.map +1 -1
  131. package/dist/tools/types.js.map +1 -1
  132. package/docs/cost-tracking-comparison.md +904 -0
  133. package/docs/operating-modes.md +96 -0
  134. package/docs/proposals/0012-ask-user-question.md +66 -1
  135. package/docs/proposals/0025-cost-tracking.md +60 -2
  136. package/docs/proposals/README.md +2 -2
  137. package/examples/test-ask-user.ts +167 -0
  138. package/examples/test-checkpointing.ts +121 -0
  139. package/examples/test-cost-tracking.ts +77 -0
  140. package/examples/test-interrupt-cleanup.ts +94 -0
  141. package/package.json +1 -1
  142. package/src/agent/agent.ts +130 -4
  143. package/src/agent/index.ts +1 -0
  144. package/src/agent/types.ts +19 -1
  145. package/src/checkpointing/checkpoint-manager.ts +327 -0
  146. package/src/checkpointing/index.ts +45 -0
  147. package/src/checkpointing/types.ts +104 -0
  148. package/src/cli/components/App.tsx +259 -8
  149. package/src/cli/components/CommandSuggestions.tsx +5 -0
  150. package/src/cli/components/Messages.tsx +66 -4
  151. package/src/cli/components/ModeIndicator.tsx +174 -0
  152. package/src/cli/components/PlanApproval.tsx +327 -0
  153. package/src/cli/components/QuestionPrompt.tsx +462 -0
  154. package/src/cli/components/index.ts +1 -0
  155. package/src/cli/components/theme.ts +14 -1
  156. package/src/index.ts +15 -0
  157. package/src/permissions/types.ts +2 -0
  158. package/src/planning/index.ts +53 -0
  159. package/src/planning/plan-file.ts +326 -0
  160. package/src/planning/state.ts +305 -0
  161. package/src/planning/tools/enter-plan-mode.ts +111 -0
  162. package/src/planning/tools/exit-plan-mode.ts +170 -0
  163. package/src/planning/types.ts +150 -0
  164. package/src/pricing/calculator.ts +71 -0
  165. package/src/pricing/index.ts +7 -0
  166. package/src/pricing/models.ts +334 -0
  167. package/src/pricing/types.ts +32 -0
  168. package/src/prompts/system/base.txt +42 -0
  169. package/src/prompts/tools/ask-user.txt +110 -0
  170. package/src/providers/anthropic.ts +21 -10
  171. package/src/providers/gemini.ts +25 -14
  172. package/src/providers/openai.ts +17 -8
  173. package/src/providers/types.ts +3 -0
  174. package/src/providers/vertex-ai.ts +21 -10
  175. package/src/session/manager.ts +9 -0
  176. package/src/tools/builtin/ask-user.ts +185 -0
  177. package/src/tools/index.ts +23 -0
  178. package/src/tools/registry.ts +95 -2
  179. package/src/tools/types.ts +18 -0
  180. package/.gencode/settings.local.json +0 -7
@@ -0,0 +1,281 @@
1
+ /**
2
+ * Checkpoint Manager - Core checkpointing logic
3
+ *
4
+ * Tracks file changes and provides rewind capabilities.
5
+ */
6
+ import * as fs from 'fs/promises';
7
+ import * as path from 'path';
8
+ /**
9
+ * Generates a unique ID for checkpoints
10
+ */
11
+ function generateId() {
12
+ return `${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
13
+ }
14
+ /**
15
+ * CheckpointManager manages file change tracking and rewind operations.
16
+ *
17
+ * Usage:
18
+ * const manager = new CheckpointManager('session-123');
19
+ * manager.recordChange({ path: '/path/to/file', changeType: 'modify', ... });
20
+ * await manager.rewind({ all: true });
21
+ */
22
+ export class CheckpointManager {
23
+ session;
24
+ constructor(sessionId = 'default') {
25
+ this.session = {
26
+ sessionId,
27
+ checkpoints: [],
28
+ createdAt: new Date(),
29
+ };
30
+ }
31
+ /**
32
+ * Get the session ID
33
+ */
34
+ getSessionId() {
35
+ return this.session.sessionId;
36
+ }
37
+ /**
38
+ * Record a file change as a checkpoint
39
+ */
40
+ recordChange(input) {
41
+ const checkpoint = {
42
+ id: generateId(),
43
+ path: input.path,
44
+ changeType: input.changeType,
45
+ timestamp: new Date(),
46
+ previousContent: input.previousContent,
47
+ newContent: input.newContent,
48
+ toolName: input.toolName,
49
+ };
50
+ this.session.checkpoints.push(checkpoint);
51
+ return checkpoint;
52
+ }
53
+ /**
54
+ * Get all checkpoints
55
+ */
56
+ getCheckpoints() {
57
+ return [...this.session.checkpoints];
58
+ }
59
+ /**
60
+ * Get checkpoints for a specific file
61
+ */
62
+ getFileHistory(filePath) {
63
+ return this.session.checkpoints.filter((cp) => cp.path === filePath);
64
+ }
65
+ /**
66
+ * Get a summary of all changes
67
+ */
68
+ getSummary() {
69
+ const summary = {
70
+ created: 0,
71
+ modified: 0,
72
+ deleted: 0,
73
+ total: this.session.checkpoints.length,
74
+ };
75
+ for (const cp of this.session.checkpoints) {
76
+ switch (cp.changeType) {
77
+ case 'create':
78
+ summary.created++;
79
+ break;
80
+ case 'modify':
81
+ summary.modified++;
82
+ break;
83
+ case 'delete':
84
+ summary.deleted++;
85
+ break;
86
+ }
87
+ }
88
+ return summary;
89
+ }
90
+ /**
91
+ * Check if there are any checkpoints
92
+ */
93
+ hasCheckpoints() {
94
+ return this.session.checkpoints.length > 0;
95
+ }
96
+ /**
97
+ * Get the number of checkpoints
98
+ */
99
+ getCheckpointCount() {
100
+ return this.session.checkpoints.length;
101
+ }
102
+ /**
103
+ * Rewind changes based on options
104
+ */
105
+ async rewind(options) {
106
+ const result = {
107
+ success: true,
108
+ revertedFiles: [],
109
+ errors: [],
110
+ };
111
+ // Determine which checkpoints to rewind
112
+ let checkpointsToRewind = [];
113
+ if (options.checkpointId) {
114
+ // Rewind specific checkpoint
115
+ const cp = this.session.checkpoints.find((c) => c.id === options.checkpointId);
116
+ if (cp) {
117
+ checkpointsToRewind = [cp];
118
+ }
119
+ }
120
+ else if (options.path) {
121
+ // Rewind all changes to a specific file (in reverse order)
122
+ checkpointsToRewind = this.session.checkpoints
123
+ .filter((c) => c.path === options.path)
124
+ .reverse();
125
+ }
126
+ else if (options.count) {
127
+ // Rewind last N changes (in reverse order)
128
+ checkpointsToRewind = this.session.checkpoints.slice(-options.count).reverse();
129
+ }
130
+ else if (options.all) {
131
+ // Rewind all changes (in reverse order)
132
+ checkpointsToRewind = [...this.session.checkpoints].reverse();
133
+ }
134
+ // Apply reverts
135
+ for (const checkpoint of checkpointsToRewind) {
136
+ try {
137
+ await this.revertCheckpoint(checkpoint);
138
+ result.revertedFiles.push({
139
+ path: checkpoint.path,
140
+ action: this.getRevertAction(checkpoint),
141
+ });
142
+ // Remove the checkpoint from session
143
+ const index = this.session.checkpoints.findIndex((c) => c.id === checkpoint.id);
144
+ if (index !== -1) {
145
+ this.session.checkpoints.splice(index, 1);
146
+ }
147
+ }
148
+ catch (error) {
149
+ result.success = false;
150
+ result.errors.push({
151
+ path: checkpoint.path,
152
+ error: error instanceof Error ? error.message : String(error),
153
+ });
154
+ }
155
+ }
156
+ return result;
157
+ }
158
+ /**
159
+ * Revert a single checkpoint
160
+ */
161
+ async revertCheckpoint(checkpoint) {
162
+ switch (checkpoint.changeType) {
163
+ case 'create':
164
+ // File was created, delete it to revert
165
+ await fs.unlink(checkpoint.path);
166
+ break;
167
+ case 'modify':
168
+ // File was modified, restore previous content
169
+ if (checkpoint.previousContent !== null) {
170
+ await fs.writeFile(checkpoint.path, checkpoint.previousContent, 'utf-8');
171
+ }
172
+ break;
173
+ case 'delete':
174
+ // File was deleted, recreate it with previous content
175
+ if (checkpoint.previousContent !== null) {
176
+ await fs.mkdir(path.dirname(checkpoint.path), { recursive: true });
177
+ await fs.writeFile(checkpoint.path, checkpoint.previousContent, 'utf-8');
178
+ }
179
+ break;
180
+ }
181
+ }
182
+ /**
183
+ * Get the action that will be taken to revert a checkpoint
184
+ */
185
+ getRevertAction(checkpoint) {
186
+ switch (checkpoint.changeType) {
187
+ case 'create':
188
+ return 'deleted';
189
+ case 'modify':
190
+ return 'restored';
191
+ case 'delete':
192
+ return 'recreated';
193
+ }
194
+ }
195
+ /**
196
+ * Clear all checkpoints
197
+ */
198
+ clearCheckpoints() {
199
+ this.session.checkpoints = [];
200
+ }
201
+ /**
202
+ * Format checkpoints for display
203
+ */
204
+ formatCheckpointList(includeUsage = false) {
205
+ if (this.session.checkpoints.length === 0) {
206
+ return 'No file changes in this session.';
207
+ }
208
+ const lines = [];
209
+ this.session.checkpoints.forEach((cp, index) => {
210
+ const timeAgo = this.formatTimeAgo(cp.timestamp);
211
+ const action = this.formatChangeType(cp.changeType);
212
+ const fileName = cp.path.split('/').pop() || cp.path;
213
+ lines.push(` [${index + 1}] ${timeAgo.padEnd(8)} ${fileName.padEnd(30)} (${action})`);
214
+ });
215
+ const summary = this.getSummary();
216
+ lines.push('');
217
+ lines.push(`Total: ${summary.created} created, ${summary.modified} modified, ${summary.deleted} deleted`);
218
+ if (includeUsage) {
219
+ lines.push('');
220
+ lines.push('Usage: /rewind [n] to revert change #n, /rewind all to revert all');
221
+ }
222
+ return lines.join('\n');
223
+ }
224
+ /**
225
+ * Format a change type for display
226
+ */
227
+ formatChangeType(changeType) {
228
+ switch (changeType) {
229
+ case 'create':
230
+ return 'created';
231
+ case 'modify':
232
+ return 'modified';
233
+ case 'delete':
234
+ return 'deleted';
235
+ default:
236
+ return changeType;
237
+ }
238
+ }
239
+ /**
240
+ * Format a timestamp as relative time
241
+ */
242
+ formatTimeAgo(date) {
243
+ const seconds = Math.floor((Date.now() - date.getTime()) / 1000);
244
+ if (seconds < 60) {
245
+ return `${seconds}s ago`;
246
+ }
247
+ const minutes = Math.floor(seconds / 60);
248
+ if (minutes < 60) {
249
+ return `${minutes}m ago`;
250
+ }
251
+ const hours = Math.floor(minutes / 60);
252
+ return `${hours}h ago`;
253
+ }
254
+ }
255
+ // ============================================================================
256
+ // Singleton Instance
257
+ // ============================================================================
258
+ let globalCheckpointManager = null;
259
+ /**
260
+ * Get the global checkpoint manager instance
261
+ */
262
+ export function getCheckpointManager() {
263
+ if (!globalCheckpointManager) {
264
+ globalCheckpointManager = new CheckpointManager();
265
+ }
266
+ return globalCheckpointManager;
267
+ }
268
+ /**
269
+ * Initialize checkpoint manager with a session ID
270
+ */
271
+ export function initCheckpointManager(sessionId) {
272
+ globalCheckpointManager = new CheckpointManager(sessionId);
273
+ return globalCheckpointManager;
274
+ }
275
+ /**
276
+ * Reset the global checkpoint manager (for testing)
277
+ */
278
+ export function resetCheckpointManager() {
279
+ globalCheckpointManager = null;
280
+ }
281
+ //# sourceMappingURL=checkpoint-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkpoint-manager.js","sourceRoot":"","sources":["../../src/checkpointing/checkpoint-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Checkpointing Module
3
+ *
4
+ * Provides automatic tracking of file changes with undo/rewind capabilities.
5
+ *
6
+ * Usage:
7
+ * import { getCheckpointManager, initCheckpointManager } from './checkpointing';
8
+ *
9
+ * // Initialize at session start
10
+ * const manager = initCheckpointManager('session-123');
11
+ *
12
+ * // Record changes (done automatically by ToolRegistry)
13
+ * manager.recordChange({
14
+ * path: '/path/to/file.ts',
15
+ * changeType: 'modify',
16
+ * previousContent: 'old content',
17
+ * newContent: 'new content',
18
+ * toolName: 'Edit'
19
+ * });
20
+ *
21
+ * // List changes
22
+ * console.log(manager.formatCheckpointList());
23
+ *
24
+ * // Rewind changes
25
+ * await manager.rewind({ all: true });
26
+ */
27
+ export type { ChangeType, FileCheckpoint, CheckpointSession, RewindOptions, RewindResult, CheckpointSummary, RecordChangeInput, } from './types.js';
28
+ export { CheckpointManager, getCheckpointManager, initCheckpointManager, resetCheckpointManager, } from './checkpoint-manager.js';
29
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/checkpointing/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAGH,YAAY,EACV,UAAU,EACV,cAAc,EACd,iBAAiB,EACjB,aAAa,EACb,YAAY,EACZ,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,iBAAiB,EACjB,oBAAoB,EACpB,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,yBAAyB,CAAC"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Checkpointing Module
3
+ *
4
+ * Provides automatic tracking of file changes with undo/rewind capabilities.
5
+ *
6
+ * Usage:
7
+ * import { getCheckpointManager, initCheckpointManager } from './checkpointing';
8
+ *
9
+ * // Initialize at session start
10
+ * const manager = initCheckpointManager('session-123');
11
+ *
12
+ * // Record changes (done automatically by ToolRegistry)
13
+ * manager.recordChange({
14
+ * path: '/path/to/file.ts',
15
+ * changeType: 'modify',
16
+ * previousContent: 'old content',
17
+ * newContent: 'new content',
18
+ * toolName: 'Edit'
19
+ * });
20
+ *
21
+ * // List changes
22
+ * console.log(manager.formatCheckpointList());
23
+ *
24
+ * // Rewind changes
25
+ * await manager.rewind({ all: true });
26
+ */
27
+ // Manager exports
28
+ export { CheckpointManager, getCheckpointManager, initCheckpointManager, resetCheckpointManager, } from './checkpoint-manager.js';
29
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/checkpointing/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAaH,kBAAkB;AAClB,OAAO,EACL,iBAAiB,EACjB,oBAAoB,EACpB,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,yBAAyB,CAAC"}
@@ -0,0 +1,98 @@
1
+ /**
2
+ * Checkpointing System Type Definitions
3
+ *
4
+ * Provides automatic tracking of file changes with undo/rewind capabilities.
5
+ */
6
+ /**
7
+ * Type of file change
8
+ */
9
+ export type ChangeType = 'create' | 'modify' | 'delete';
10
+ /**
11
+ * A single file checkpoint recording a change
12
+ */
13
+ export interface FileCheckpoint {
14
+ /** Unique identifier for this checkpoint */
15
+ id: string;
16
+ /** Path to the file that was changed */
17
+ path: string;
18
+ /** Type of change made */
19
+ changeType: ChangeType;
20
+ /** When the change was made */
21
+ timestamp: Date;
22
+ /** File content before the change (null for create) */
23
+ previousContent: string | null;
24
+ /** File content after the change (null for delete) */
25
+ newContent: string | null;
26
+ /** Which tool made the change */
27
+ toolName: string;
28
+ }
29
+ /**
30
+ * A checkpoint session containing all checkpoints for a session
31
+ */
32
+ export interface CheckpointSession {
33
+ /** Session ID this checkpoint session belongs to */
34
+ sessionId: string;
35
+ /** All checkpoints in order */
36
+ checkpoints: FileCheckpoint[];
37
+ /** When this checkpoint session was created */
38
+ createdAt: Date;
39
+ }
40
+ /**
41
+ * Options for rewinding changes
42
+ */
43
+ export interface RewindOptions {
44
+ /** Rewind a specific checkpoint by ID */
45
+ checkpointId?: string;
46
+ /** Rewind changes to a specific file path */
47
+ path?: string;
48
+ /** Rewind all changes */
49
+ all?: boolean;
50
+ /** Rewind the last N changes */
51
+ count?: number;
52
+ }
53
+ /**
54
+ * Result of a rewind operation
55
+ */
56
+ export interface RewindResult {
57
+ /** Whether the rewind was successful */
58
+ success: boolean;
59
+ /** Files that were successfully reverted */
60
+ revertedFiles: Array<{
61
+ path: string;
62
+ action: 'restored' | 'deleted' | 'recreated';
63
+ }>;
64
+ /** Any errors that occurred during rewind */
65
+ errors: Array<{
66
+ path: string;
67
+ error: string;
68
+ }>;
69
+ }
70
+ /**
71
+ * Summary of changes in a checkpoint session
72
+ */
73
+ export interface CheckpointSummary {
74
+ /** Number of files created */
75
+ created: number;
76
+ /** Number of files modified */
77
+ modified: number;
78
+ /** Number of files deleted */
79
+ deleted: number;
80
+ /** Total number of checkpoints */
81
+ total: number;
82
+ }
83
+ /**
84
+ * Input for recording a file change
85
+ */
86
+ export interface RecordChangeInput {
87
+ /** Path to the file */
88
+ path: string;
89
+ /** Type of change */
90
+ changeType: ChangeType;
91
+ /** Content before change (null for create) */
92
+ previousContent: string | null;
93
+ /** Content after change (null for delete) */
94
+ newContent: string | null;
95
+ /** Tool that made the change */
96
+ toolName: string;
97
+ }
98
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/checkpointing/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAExD;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,4CAA4C;IAC5C,EAAE,EAAE,MAAM,CAAC;IACX,wCAAwC;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,0BAA0B;IAC1B,UAAU,EAAE,UAAU,CAAC;IACvB,+BAA+B;IAC/B,SAAS,EAAE,IAAI,CAAC;IAChB,uDAAuD;IACvD,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,sDAAsD;IACtD,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,iCAAiC;IACjC,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,oDAAoD;IACpD,SAAS,EAAE,MAAM,CAAC;IAClB,+BAA+B;IAC/B,WAAW,EAAE,cAAc,EAAE,CAAC;IAC9B,+CAA+C;IAC/C,SAAS,EAAE,IAAI,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,yCAAyC;IACzC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,6CAA6C;IAC7C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,yBAAyB;IACzB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,gCAAgC;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,wCAAwC;IACxC,OAAO,EAAE,OAAO,CAAC;IACjB,4CAA4C;IAC5C,aAAa,EAAE,KAAK,CAAC;QACnB,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,UAAU,GAAG,SAAS,GAAG,WAAW,CAAC;KAC9C,CAAC,CAAC;IACH,6CAA6C;IAC7C,MAAM,EAAE,KAAK,CAAC;QACZ,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;KACf,CAAC,CAAC;CACJ;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,8BAA8B;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,+BAA+B;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,8BAA8B;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,kCAAkC;IAClC,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,uBAAuB;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,qBAAqB;IACrB,UAAU,EAAE,UAAU,CAAC;IACvB,8CAA8C;IAC9C,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,6CAA6C;IAC7C,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,gCAAgC;IAChC,QAAQ,EAAE,MAAM,CAAC;CAClB"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Checkpointing System Type Definitions
3
+ *
4
+ * Provides automatic tracking of file changes with undo/rewind capabilities.
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/checkpointing/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
@@ -1 +1 @@
1
- {"version":3,"file":"App.d.ts","sourceRoot":"","sources":["../../../src/cli/components/App.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AA4CxD,UAAU,eAAe;IACvB,IAAI,EAAE,CAAC,QAAQ,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACtD,MAAM,CAAC,EAAE,MAAM,MAAM,CAAC;IACtB,iBAAiB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,MAAM,EAAE,KAAK,CAAC,EAAE,QAAQ,GAAG,SAAS,GAAG,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACxH;AAQD,UAAU,kBAAkB;IAC1B,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,UAAU,QAAQ;IAChB,MAAM,EAAE,WAAW,CAAC;IACpB,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;CACzC;AAiID,wBAAgB,GAAG,CAAC,EAAE,MAAM,EAAE,eAAe,EAAE,YAAY,EAAE,kBAAkB,EAAE,EAAE,QAAQ,2CA4qB1F"}
1
+ {"version":3,"file":"App.d.ts","sourceRoot":"","sources":["../../../src/cli/components/App.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAkExD,UAAU,eAAe;IACvB,IAAI,EAAE,CAAC,QAAQ,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACtD,MAAM,CAAC,EAAE,MAAM,MAAM,CAAC;IACtB,iBAAiB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,MAAM,EAAE,KAAK,CAAC,EAAE,QAAQ,GAAG,SAAS,GAAG,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACxH;AAQD,UAAU,kBAAkB;IAC1B,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,UAAU,QAAQ;IAChB,MAAM,EAAE,WAAW,CAAC;IACpB,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;CACzC;AAsID,wBAAgB,GAAG,CAAC,EAAE,MAAM,EAAE,eAAe,EAAE,YAAY,EAAE,kBAAkB,EAAE,EAAE,QAAQ,2CA44B1F"}