@sharpee/ext-testing 0.9.61-beta

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/LICENSE +21 -0
  2. package/dist/annotations/context.d.ts +16 -0
  3. package/dist/annotations/context.d.ts.map +1 -0
  4. package/dist/annotations/context.js +42 -0
  5. package/dist/annotations/context.js.map +1 -0
  6. package/dist/annotations/index.d.ts +6 -0
  7. package/dist/annotations/index.d.ts.map +1 -0
  8. package/dist/annotations/index.js +12 -0
  9. package/dist/annotations/index.js.map +1 -0
  10. package/dist/annotations/store.d.ts +11 -0
  11. package/dist/annotations/store.d.ts.map +1 -0
  12. package/dist/annotations/store.js +191 -0
  13. package/dist/annotations/store.js.map +1 -0
  14. package/dist/checkpoints/index.d.ts +3 -0
  15. package/dist/checkpoints/index.d.ts.map +1 -0
  16. package/dist/checkpoints/index.js +12 -0
  17. package/dist/checkpoints/index.js.map +1 -0
  18. package/dist/checkpoints/serializer.d.ts +21 -0
  19. package/dist/checkpoints/serializer.d.ts.map +1 -0
  20. package/dist/checkpoints/serializer.js +95 -0
  21. package/dist/checkpoints/serializer.js.map +1 -0
  22. package/dist/checkpoints/store.d.ts +20 -0
  23. package/dist/checkpoints/store.d.ts.map +1 -0
  24. package/dist/checkpoints/store.js +193 -0
  25. package/dist/checkpoints/store.js.map +1 -0
  26. package/dist/commands/index.d.ts +2 -0
  27. package/dist/commands/index.d.ts.map +1 -0
  28. package/dist/commands/index.js +8 -0
  29. package/dist/commands/index.js.map +1 -0
  30. package/dist/commands/registry.d.ts +28 -0
  31. package/dist/commands/registry.d.ts.map +1 -0
  32. package/dist/commands/registry.js +70 -0
  33. package/dist/commands/registry.js.map +1 -0
  34. package/dist/context/debug-context.d.ts +21 -0
  35. package/dist/context/debug-context.d.ts.map +1 -0
  36. package/dist/context/debug-context.js +172 -0
  37. package/dist/context/debug-context.js.map +1 -0
  38. package/dist/context/index.d.ts +2 -0
  39. package/dist/context/index.d.ts.map +1 -0
  40. package/dist/context/index.js +8 -0
  41. package/dist/context/index.js.map +1 -0
  42. package/dist/extension.d.ts +78 -0
  43. package/dist/extension.d.ts.map +1 -0
  44. package/dist/extension.js +938 -0
  45. package/dist/extension.js.map +1 -0
  46. package/dist/index.d.ts +40 -0
  47. package/dist/index.d.ts.map +1 -0
  48. package/dist/index.js +63 -0
  49. package/dist/index.js.map +1 -0
  50. package/dist/types.d.ts +375 -0
  51. package/dist/types.d.ts.map +1 -0
  52. package/dist/types.js +8 -0
  53. package/dist/types.js.map +1 -0
  54. package/dist-npm/annotations/context.d.ts +16 -0
  55. package/dist-npm/annotations/context.d.ts.map +1 -0
  56. package/dist-npm/annotations/context.js +42 -0
  57. package/dist-npm/annotations/context.js.map +1 -0
  58. package/dist-npm/annotations/index.d.ts +6 -0
  59. package/dist-npm/annotations/index.d.ts.map +1 -0
  60. package/dist-npm/annotations/index.js +12 -0
  61. package/dist-npm/annotations/index.js.map +1 -0
  62. package/dist-npm/annotations/store.d.ts +11 -0
  63. package/dist-npm/annotations/store.d.ts.map +1 -0
  64. package/dist-npm/annotations/store.js +191 -0
  65. package/dist-npm/annotations/store.js.map +1 -0
  66. package/dist-npm/checkpoints/index.d.ts +3 -0
  67. package/dist-npm/checkpoints/index.d.ts.map +1 -0
  68. package/dist-npm/checkpoints/index.js +12 -0
  69. package/dist-npm/checkpoints/index.js.map +1 -0
  70. package/dist-npm/checkpoints/serializer.d.ts +21 -0
  71. package/dist-npm/checkpoints/serializer.d.ts.map +1 -0
  72. package/dist-npm/checkpoints/serializer.js +95 -0
  73. package/dist-npm/checkpoints/serializer.js.map +1 -0
  74. package/dist-npm/checkpoints/store.d.ts +20 -0
  75. package/dist-npm/checkpoints/store.d.ts.map +1 -0
  76. package/dist-npm/checkpoints/store.js +193 -0
  77. package/dist-npm/checkpoints/store.js.map +1 -0
  78. package/dist-npm/commands/index.d.ts +2 -0
  79. package/dist-npm/commands/index.d.ts.map +1 -0
  80. package/dist-npm/commands/index.js +8 -0
  81. package/dist-npm/commands/index.js.map +1 -0
  82. package/dist-npm/commands/registry.d.ts +28 -0
  83. package/dist-npm/commands/registry.d.ts.map +1 -0
  84. package/dist-npm/commands/registry.js +70 -0
  85. package/dist-npm/commands/registry.js.map +1 -0
  86. package/dist-npm/context/debug-context.d.ts +21 -0
  87. package/dist-npm/context/debug-context.d.ts.map +1 -0
  88. package/dist-npm/context/debug-context.js +172 -0
  89. package/dist-npm/context/debug-context.js.map +1 -0
  90. package/dist-npm/context/index.d.ts +2 -0
  91. package/dist-npm/context/index.d.ts.map +1 -0
  92. package/dist-npm/context/index.js +8 -0
  93. package/dist-npm/context/index.js.map +1 -0
  94. package/dist-npm/extension.d.ts +78 -0
  95. package/dist-npm/extension.d.ts.map +1 -0
  96. package/dist-npm/extension.js +938 -0
  97. package/dist-npm/extension.js.map +1 -0
  98. package/dist-npm/index.d.ts +40 -0
  99. package/dist-npm/index.d.ts.map +1 -0
  100. package/dist-npm/index.js +63 -0
  101. package/dist-npm/index.js.map +1 -0
  102. package/dist-npm/types.d.ts +375 -0
  103. package/dist-npm/types.d.ts.map +1 -0
  104. package/dist-npm/types.js +8 -0
  105. package/dist-npm/types.js.map +1 -0
  106. package/package.json +42 -0
  107. package/src/annotations/context.ts +47 -0
  108. package/src/annotations/index.ts +6 -0
  109. package/src/annotations/store.ts +219 -0
  110. package/src/checkpoints/index.ts +2 -0
  111. package/src/checkpoints/serializer.ts +121 -0
  112. package/src/checkpoints/store.ts +188 -0
  113. package/src/commands/index.ts +1 -0
  114. package/src/commands/registry.ts +81 -0
  115. package/src/context/debug-context.ts +209 -0
  116. package/src/context/index.ts +1 -0
  117. package/src/extension.ts +1089 -0
  118. package/src/index.ts +69 -0
  119. package/src/types.ts +469 -0
  120. package/tsconfig.json +16 -0
  121. package/tsconfig.tsbuildinfo +1 -0
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Annotations module - Playtester feedback capture (ADR-109)
3
+ */
4
+ export { createAnnotationStore } from './store.js';
5
+ export { captureContext, createEmptyContext } from './context.js';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/annotations/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ /**
3
+ * Annotations module - Playtester feedback capture (ADR-109)
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.createEmptyContext = exports.captureContext = exports.createAnnotationStore = void 0;
7
+ var store_js_1 = require("./store.js");
8
+ Object.defineProperty(exports, "createAnnotationStore", { enumerable: true, get: function () { return store_js_1.createAnnotationStore; } });
9
+ var context_js_1 = require("./context.js");
10
+ Object.defineProperty(exports, "captureContext", { enumerable: true, get: function () { return context_js_1.captureContext; } });
11
+ Object.defineProperty(exports, "createEmptyContext", { enumerable: true, get: function () { return context_js_1.createEmptyContext; } });
12
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/annotations/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,uCAAmD;AAA1C,iHAAA,qBAAqB,OAAA;AAC9B,2CAAkE;AAAzD,4GAAA,cAAc,OAAA;AAAE,gHAAA,kBAAkB,OAAA"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Annotation Store Implementation
3
+ *
4
+ * In-memory storage for playtester annotations with session management.
5
+ */
6
+ import type { AnnotationStore } from '../types.js';
7
+ /**
8
+ * Create an in-memory annotation store
9
+ */
10
+ export declare function createAnnotationStore(): AnnotationStore;
11
+ //# sourceMappingURL=store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/annotations/store.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAoE,eAAe,EAAE,MAAM,aAAa,CAAC;AASrH;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,eAAe,CAwFvD"}
@@ -0,0 +1,191 @@
1
+ "use strict";
2
+ /**
3
+ * Annotation Store Implementation
4
+ *
5
+ * In-memory storage for playtester annotations with session management.
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.createAnnotationStore = createAnnotationStore;
9
+ /**
10
+ * Generate a unique ID
11
+ */
12
+ function generateId() {
13
+ return `${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;
14
+ }
15
+ /**
16
+ * Create an in-memory annotation store
17
+ */
18
+ function createAnnotationStore() {
19
+ let currentSession;
20
+ let allAnnotations = [];
21
+ return {
22
+ // Session management
23
+ startSession(name) {
24
+ // End any existing session first
25
+ if (currentSession) {
26
+ currentSession.endTime = Date.now();
27
+ }
28
+ const id = generateId();
29
+ currentSession = {
30
+ id,
31
+ name,
32
+ startTime: Date.now(),
33
+ annotations: [],
34
+ };
35
+ return id;
36
+ },
37
+ endSession() {
38
+ if (!currentSession) {
39
+ return undefined;
40
+ }
41
+ currentSession.endTime = Date.now();
42
+ const ended = currentSession;
43
+ currentSession = undefined;
44
+ return ended;
45
+ },
46
+ getCurrentSession() {
47
+ return currentSession;
48
+ },
49
+ // Annotation capture
50
+ addAnnotation(type, text, context) {
51
+ const annotation = {
52
+ id: generateId(),
53
+ timestamp: Date.now(),
54
+ type,
55
+ text,
56
+ context,
57
+ sessionId: currentSession?.id,
58
+ };
59
+ allAnnotations.push(annotation);
60
+ if (currentSession) {
61
+ currentSession.annotations.push(annotation);
62
+ }
63
+ return annotation;
64
+ },
65
+ getAnnotations() {
66
+ if (currentSession) {
67
+ return [...currentSession.annotations];
68
+ }
69
+ return [...allAnnotations];
70
+ },
71
+ getAnnotationsByType(type) {
72
+ const source = currentSession ? currentSession.annotations : allAnnotations;
73
+ return source.filter((a) => a.type === type);
74
+ },
75
+ // Export
76
+ exportMarkdown() {
77
+ return formatMarkdownReport(currentSession, allAnnotations);
78
+ },
79
+ exportJson() {
80
+ const data = currentSession
81
+ ? { session: currentSession }
82
+ : { annotations: allAnnotations };
83
+ return JSON.stringify(data, null, 2);
84
+ },
85
+ // Cleanup
86
+ clear() {
87
+ currentSession = undefined;
88
+ allAnnotations = [];
89
+ },
90
+ };
91
+ }
92
+ /**
93
+ * Format annotations as a markdown report (per ADR-109)
94
+ */
95
+ function formatMarkdownReport(session, allAnnotations) {
96
+ const annotations = session ? session.annotations : allAnnotations;
97
+ const lines = [];
98
+ // Header
99
+ if (session) {
100
+ lines.push(`# Play Test Session: ${session.name}`);
101
+ lines.push(`Date: ${new Date(session.startTime).toLocaleString()}`);
102
+ if (session.endTime) {
103
+ const durationMs = session.endTime - session.startTime;
104
+ const durationMins = Math.round(durationMs / 60000);
105
+ lines.push(`Duration: ${durationMins} minutes`);
106
+ }
107
+ }
108
+ else {
109
+ lines.push('# Playtest Annotations');
110
+ lines.push(`Generated: ${new Date().toLocaleString()}`);
111
+ }
112
+ lines.push('');
113
+ // Group by type
114
+ const bugs = annotations.filter((a) => a.type === 'bug');
115
+ const notes = annotations.filter((a) => a.type === 'note');
116
+ const confusing = annotations.filter((a) => a.type === 'confusing');
117
+ const expected = annotations.filter((a) => a.type === 'expected');
118
+ const bookmarks = annotations.filter((a) => a.type === 'bookmark');
119
+ const comments = annotations.filter((a) => a.type === 'comment');
120
+ // Bugs section
121
+ if (bugs.length > 0) {
122
+ lines.push(`## Bugs (${bugs.length})`);
123
+ bugs.forEach((bug, i) => {
124
+ lines.push(`${i + 1}. [Turn ${bug.context.turn}, ${bug.context.roomName}] "${bug.text}"`);
125
+ lines.push(` - Command: ${bug.context.lastCommand}`);
126
+ lines.push(` - Response: ${truncate(bug.context.lastResponse, 100)}`);
127
+ lines.push('');
128
+ });
129
+ }
130
+ // Notes section
131
+ if (notes.length > 0) {
132
+ lines.push(`## Notes (${notes.length})`);
133
+ notes.forEach((note, i) => {
134
+ lines.push(`${i + 1}. [Turn ${note.context.turn}, ${note.context.roomName}] "${note.text}"`);
135
+ });
136
+ lines.push('');
137
+ }
138
+ // Confusion points
139
+ if (confusing.length > 0) {
140
+ lines.push(`## Confusion Points (${confusing.length})`);
141
+ confusing.forEach((c, i) => {
142
+ lines.push(`${i + 1}. [Turn ${c.context.turn}, ${c.context.roomName}]`);
143
+ lines.push(` - After: ${c.context.lastCommand}`);
144
+ lines.push(` - Response: ${truncate(c.context.lastResponse, 100)}`);
145
+ lines.push('');
146
+ });
147
+ }
148
+ // Expected behavior
149
+ if (expected.length > 0) {
150
+ lines.push(`## Expected Behavior (${expected.length})`);
151
+ expected.forEach((e, i) => {
152
+ lines.push(`${i + 1}. [Turn ${e.context.turn}, ${e.context.roomName}]`);
153
+ lines.push(` - Expected: ${e.text}`);
154
+ lines.push(` - Actual: ${truncate(e.context.lastResponse, 100)}`);
155
+ lines.push('');
156
+ });
157
+ }
158
+ // Bookmarks
159
+ if (bookmarks.length > 0) {
160
+ lines.push(`## Bookmarks (${bookmarks.length})`);
161
+ bookmarks.forEach((b, i) => {
162
+ lines.push(`${i + 1}. "${b.text}" at Turn ${b.context.turn}, ${b.context.roomName}`);
163
+ });
164
+ lines.push('');
165
+ }
166
+ // Comments (silent feedback)
167
+ if (comments.length > 0) {
168
+ lines.push(`## Comments (${comments.length})`);
169
+ comments.forEach((c, i) => {
170
+ lines.push(`${i + 1}. [Turn ${c.context.turn}, ${c.context.roomName}] "${c.text}"`);
171
+ });
172
+ lines.push('');
173
+ }
174
+ // Summary stats
175
+ lines.push('## Summary');
176
+ lines.push(`- Total annotations: ${annotations.length}`);
177
+ lines.push(`- Bugs: ${bugs.length}`);
178
+ lines.push(`- Notes: ${notes.length}`);
179
+ lines.push(`- Confusion points: ${confusing.length}`);
180
+ lines.push(`- Bookmarks: ${bookmarks.length}`);
181
+ return lines.join('\n');
182
+ }
183
+ /**
184
+ * Truncate a string to max length
185
+ */
186
+ function truncate(str, maxLen) {
187
+ if (str.length <= maxLen)
188
+ return str;
189
+ return str.substring(0, maxLen - 3) + '...';
190
+ }
191
+ //# sourceMappingURL=store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/annotations/store.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;AAcH,sDAwFC;AAlGD;;GAEG;AACH,SAAS,UAAU;IACjB,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;AACpE,CAAC;AAED;;GAEG;AACH,SAAgB,qBAAqB;IACnC,IAAI,cAA6C,CAAC;IAClD,IAAI,cAAc,GAAiB,EAAE,CAAC;IAEtC,OAAO;QACL,qBAAqB;QACrB,YAAY,CAAC,IAAY;YACvB,iCAAiC;YACjC,IAAI,cAAc,EAAE,CAAC;gBACnB,cAAc,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACtC,CAAC;YAED,MAAM,EAAE,GAAG,UAAU,EAAE,CAAC;YACxB,cAAc,GAAG;gBACf,EAAE;gBACF,IAAI;gBACJ,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;gBACrB,WAAW,EAAE,EAAE;aAChB,CAAC;YAEF,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,UAAU;YACR,IAAI,CAAC,cAAc,EAAE,CAAC;gBACpB,OAAO,SAAS,CAAC;YACnB,CAAC;YAED,cAAc,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACpC,MAAM,KAAK,GAAG,cAAc,CAAC;YAC7B,cAAc,GAAG,SAAS,CAAC;YAC3B,OAAO,KAAK,CAAC;QACf,CAAC;QAED,iBAAiB;YACf,OAAO,cAAc,CAAC;QACxB,CAAC;QAED,qBAAqB;QACrB,aAAa,CAAC,IAAoB,EAAE,IAAY,EAAE,OAA0B;YAC1E,MAAM,UAAU,GAAe;gBAC7B,EAAE,EAAE,UAAU,EAAE;gBAChB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;gBACrB,IAAI;gBACJ,IAAI;gBACJ,OAAO;gBACP,SAAS,EAAE,cAAc,EAAE,EAAE;aAC9B,CAAC;YAEF,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAEhC,IAAI,cAAc,EAAE,CAAC;gBACnB,cAAc,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAC9C,CAAC;YAED,OAAO,UAAU,CAAC;QACpB,CAAC;QAED,cAAc;YACZ,IAAI,cAAc,EAAE,CAAC;gBACnB,OAAO,CAAC,GAAG,cAAc,CAAC,WAAW,CAAC,CAAC;YACzC,CAAC;YACD,OAAO,CAAC,GAAG,cAAc,CAAC,CAAC;QAC7B,CAAC;QAED,oBAAoB,CAAC,IAAoB;YACvC,MAAM,MAAM,GAAG,cAAc,CAAC,CAAC,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,CAAC,cAAc,CAAC;YAC5E,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;QAC/C,CAAC;QAED,SAAS;QACT,cAAc;YACZ,OAAO,oBAAoB,CAAC,cAAc,EAAE,cAAc,CAAC,CAAC;QAC9D,CAAC;QAED,UAAU;YACR,MAAM,IAAI,GAAG,cAAc;gBACzB,CAAC,CAAC,EAAE,OAAO,EAAE,cAAc,EAAE;gBAC7B,CAAC,CAAC,EAAE,WAAW,EAAE,cAAc,EAAE,CAAC;YACpC,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QACvC,CAAC;QAED,UAAU;QACV,KAAK;YACH,cAAc,GAAG,SAAS,CAAC;YAC3B,cAAc,GAAG,EAAE,CAAC;QACtB,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,oBAAoB,CAC3B,OAAsC,EACtC,cAA4B;IAE5B,MAAM,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,cAAc,CAAC;IACnE,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,SAAS;IACT,IAAI,OAAO,EAAE,CAAC;QACZ,KAAK,CAAC,IAAI,CAAC,wBAAwB,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QACnD,KAAK,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;QACpE,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACpB,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC,SAAS,CAAC;YACvD,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC,CAAC;YACpD,KAAK,CAAC,IAAI,CAAC,aAAa,YAAY,UAAU,CAAC,CAAC;QAClD,CAAC;IACH,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;QACrC,KAAK,CAAC,IAAI,CAAC,cAAc,IAAI,IAAI,EAAE,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;IAC1D,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,gBAAgB;IAChB,MAAM,IAAI,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC;IACzD,MAAM,KAAK,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;IAC3D,MAAM,SAAS,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC;IACpE,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC;IAClE,MAAM,SAAS,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC;IACnE,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;IAEjE,eAAe;IACf,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpB,KAAK,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;QACvC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE;YACtB,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,GAAG,CAAC,OAAO,CAAC,IAAI,KAAK,GAAG,CAAC,OAAO,CAAC,QAAQ,MAAM,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC;YAC1F,KAAK,CAAC,IAAI,CAAC,iBAAiB,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;YACvD,KAAK,CAAC,IAAI,CAAC,kBAAkB,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,YAAY,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;YACxE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjB,CAAC,CAAC,CAAC;IACL,CAAC;IAED,gBAAgB;IAChB,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrB,KAAK,CAAC,IAAI,CAAC,aAAa,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;QACzC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;YACxB,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,IAAI,CAAC,OAAO,CAAC,IAAI,KAAK,IAAI,CAAC,OAAO,CAAC,QAAQ,MAAM,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;QAC/F,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,mBAAmB;IACnB,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzB,KAAK,CAAC,IAAI,CAAC,wBAAwB,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;QACxD,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YACzB,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,CAAC,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;YACxE,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;YACnD,KAAK,CAAC,IAAI,CAAC,kBAAkB,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;YACtE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjB,CAAC,CAAC,CAAC;IACL,CAAC;IAED,oBAAoB;IACpB,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,KAAK,CAAC,IAAI,CAAC,yBAAyB,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;QACxD,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YACxB,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,CAAC,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;YACxE,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YACvC,KAAK,CAAC,IAAI,CAAC,gBAAgB,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;YACpE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjB,CAAC,CAAC,CAAC;IACL,CAAC;IAED,YAAY;IACZ,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzB,KAAK,CAAC,IAAI,CAAC,iBAAiB,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;QACjD,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YACzB,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,aAAa,CAAC,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;QACvF,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,6BAA6B;IAC7B,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,KAAK,CAAC,IAAI,CAAC,gBAAgB,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;QAC/C,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YACxB,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,CAAC,OAAO,CAAC,QAAQ,MAAM,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC;QACtF,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,gBAAgB;IAChB,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACzB,KAAK,CAAC,IAAI,CAAC,wBAAwB,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC;IACzD,KAAK,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IACrC,KAAK,CAAC,IAAI,CAAC,YAAY,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;IACvC,KAAK,CAAC,IAAI,CAAC,uBAAuB,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC;IACtD,KAAK,CAAC,IAAI,CAAC,gBAAgB,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC;IAE/C,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,SAAS,QAAQ,CAAC,GAAW,EAAE,MAAc;IAC3C,IAAI,GAAG,CAAC,MAAM,IAAI,MAAM;QAAE,OAAO,GAAG,CAAC;IACrC,OAAO,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC;AAC9C,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { serializeCheckpoint, deserializeCheckpoint, validateCheckpoint } from './serializer.js';
2
+ export { createFileStore, createMemoryStore, createLocalStorageStore } from './store.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/checkpoints/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACjG,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createLocalStorageStore = exports.createMemoryStore = exports.createFileStore = exports.validateCheckpoint = exports.deserializeCheckpoint = exports.serializeCheckpoint = void 0;
4
+ var serializer_js_1 = require("./serializer.js");
5
+ Object.defineProperty(exports, "serializeCheckpoint", { enumerable: true, get: function () { return serializer_js_1.serializeCheckpoint; } });
6
+ Object.defineProperty(exports, "deserializeCheckpoint", { enumerable: true, get: function () { return serializer_js_1.deserializeCheckpoint; } });
7
+ Object.defineProperty(exports, "validateCheckpoint", { enumerable: true, get: function () { return serializer_js_1.validateCheckpoint; } });
8
+ var store_js_1 = require("./store.js");
9
+ Object.defineProperty(exports, "createFileStore", { enumerable: true, get: function () { return store_js_1.createFileStore; } });
10
+ Object.defineProperty(exports, "createMemoryStore", { enumerable: true, get: function () { return store_js_1.createMemoryStore; } });
11
+ Object.defineProperty(exports, "createLocalStorageStore", { enumerable: true, get: function () { return store_js_1.createLocalStorageStore; } });
12
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/checkpoints/index.ts"],"names":[],"mappings":";;;AAAA,iDAAiG;AAAxF,oHAAA,mBAAmB,OAAA;AAAE,sHAAA,qBAAqB,OAAA;AAAE,mHAAA,kBAAkB,OAAA;AACvE,uCAAyF;AAAhF,2GAAA,eAAe,OAAA;AAAE,6GAAA,iBAAiB,OAAA;AAAE,mHAAA,uBAAuB,OAAA"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Checkpoint Serializer
3
+ *
4
+ * Handles serialization and deserialization of game state for checkpoints.
5
+ * Captures world model state and scheduler state (daemons, fuses).
6
+ */
7
+ import type { WorldModel } from '@sharpee/world-model';
8
+ import type { CheckpointData } from '../types.js';
9
+ /**
10
+ * Serialize current game state to checkpoint data
11
+ */
12
+ export declare function serializeCheckpoint(world: WorldModel, name?: string): CheckpointData;
13
+ /**
14
+ * Deserialize checkpoint data and restore game state
15
+ */
16
+ export declare function deserializeCheckpoint(checkpoint: CheckpointData, world: WorldModel): void;
17
+ /**
18
+ * Validate checkpoint data structure
19
+ */
20
+ export declare function validateCheckpoint(data: unknown): data is CheckpointData;
21
+ //# sourceMappingURL=serializer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serializer.d.ts","sourceRoot":"","sources":["../../src/checkpoints/serializer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,KAAK,EAAE,cAAc,EAAoC,MAAM,aAAa,CAAC;AAEpF;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,UAAU,EACjB,IAAI,CAAC,EAAE,MAAM,GACZ,cAAc,CAwBhB;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,UAAU,EAAE,cAAc,EAC1B,KAAK,EAAE,UAAU,GAChB,IAAI,CAaN;AAgCD;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,IAAI,cAAc,CAwBxE"}
@@ -0,0 +1,95 @@
1
+ "use strict";
2
+ /**
3
+ * Checkpoint Serializer
4
+ *
5
+ * Handles serialization and deserialization of game state for checkpoints.
6
+ * Captures world model state and scheduler state (daemons, fuses).
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.serializeCheckpoint = serializeCheckpoint;
10
+ exports.deserializeCheckpoint = deserializeCheckpoint;
11
+ exports.validateCheckpoint = validateCheckpoint;
12
+ /**
13
+ * Serialize current game state to checkpoint data
14
+ */
15
+ function serializeCheckpoint(world, name) {
16
+ const player = world.getPlayer();
17
+ const playerLocation = player ? world.getLocation(player.id) : undefined;
18
+ // Get world state via WorldModel.toJSON()
19
+ const worldState = world.toJSON();
20
+ // TODO: Get scheduler state when scheduler API is available
21
+ // For now, scheduler state is omitted
22
+ const schedulerState = undefined;
23
+ const checkpoint = {
24
+ version: '1.0.0',
25
+ timestamp: Date.now(),
26
+ metadata: {
27
+ name,
28
+ turn: getTurnNumber(world),
29
+ location: playerLocation,
30
+ },
31
+ worldState,
32
+ schedulerState,
33
+ };
34
+ return checkpoint;
35
+ }
36
+ /**
37
+ * Deserialize checkpoint data and restore game state
38
+ */
39
+ function deserializeCheckpoint(checkpoint, world) {
40
+ // Validate version
41
+ if (checkpoint.version !== '1.0.0') {
42
+ throw new Error(`Unsupported checkpoint version: ${checkpoint.version}`);
43
+ }
44
+ // Restore world state via WorldModel.loadJSON()
45
+ world.loadJSON(checkpoint.worldState);
46
+ // TODO: Restore scheduler state when scheduler API is available
47
+ if (checkpoint.schedulerState) {
48
+ restoreSchedulerState(world, checkpoint.schedulerState);
49
+ }
50
+ }
51
+ /**
52
+ * Get current turn number from world
53
+ */
54
+ function getTurnNumber(world) {
55
+ // Try to get turn from world metadata or state
56
+ // This may need adjustment based on actual WorldModel API
57
+ try {
58
+ const state = JSON.parse(world.toJSON());
59
+ return state.turn ?? 0;
60
+ }
61
+ catch {
62
+ return 0;
63
+ }
64
+ }
65
+ /**
66
+ * Restore scheduler state (daemons and fuses)
67
+ */
68
+ function restoreSchedulerState(world, state) {
69
+ // TODO: Implement when scheduler serialization API is available
70
+ // This will need access to the engine's scheduler service
71
+ console.warn('Scheduler state restoration not yet implemented');
72
+ }
73
+ /**
74
+ * Validate checkpoint data structure
75
+ */
76
+ function validateCheckpoint(data) {
77
+ if (!data || typeof data !== 'object') {
78
+ return false;
79
+ }
80
+ const checkpoint = data;
81
+ if (checkpoint.version !== '1.0.0') {
82
+ return false;
83
+ }
84
+ if (typeof checkpoint.timestamp !== 'number') {
85
+ return false;
86
+ }
87
+ if (!checkpoint.metadata || typeof checkpoint.metadata !== 'object') {
88
+ return false;
89
+ }
90
+ if (typeof checkpoint.worldState !== 'string') {
91
+ return false;
92
+ }
93
+ return true;
94
+ }
95
+ //# sourceMappingURL=serializer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serializer.js","sourceRoot":"","sources":["../../src/checkpoints/serializer.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;AAQH,kDA2BC;AAKD,sDAgBC;AAmCD,gDAwBC;AA9GD;;GAEG;AACH,SAAgB,mBAAmB,CACjC,KAAiB,EACjB,IAAa;IAEb,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC;IACjC,MAAM,cAAc,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAEzE,0CAA0C;IAC1C,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;IAElC,4DAA4D;IAC5D,sCAAsC;IACtC,MAAM,cAAc,GAAG,SAAS,CAAC;IAEjC,MAAM,UAAU,GAAmB;QACjC,OAAO,EAAE,OAAO;QAChB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;QACrB,QAAQ,EAAE;YACR,IAAI;YACJ,IAAI,EAAE,aAAa,CAAC,KAAK,CAAC;YAC1B,QAAQ,EAAE,cAAc;SACzB;QACD,UAAU;QACV,cAAc;KACf,CAAC;IAEF,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;GAEG;AACH,SAAgB,qBAAqB,CACnC,UAA0B,EAC1B,KAAiB;IAEjB,mBAAmB;IACnB,IAAI,UAAU,CAAC,OAAO,KAAK,OAAO,EAAE,CAAC;QACnC,MAAM,IAAI,KAAK,CAAC,mCAAmC,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC;IAC3E,CAAC;IAED,gDAAgD;IAChD,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;IAEtC,gEAAgE;IAChE,IAAI,UAAU,CAAC,cAAc,EAAE,CAAC;QAC9B,qBAAqB,CAAC,KAAK,EAAE,UAAU,CAAC,cAAc,CAAC,CAAC;IAC1D,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,aAAa,CAAC,KAAiB;IACtC,+CAA+C;IAC/C,0DAA0D;IAC1D,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;QACzC,OAAO,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC;IACzB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,CAAC;IACX,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,qBAAqB,CAC5B,KAAiB,EACjB,KAIC;IAED,gEAAgE;IAChE,0DAA0D;IAC1D,OAAO,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAC;AAClE,CAAC;AAED;;GAEG;AACH,SAAgB,kBAAkB,CAAC,IAAa;IAC9C,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QACtC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,UAAU,GAAG,IAA+B,CAAC;IAEnD,IAAI,UAAU,CAAC,OAAO,KAAK,OAAO,EAAE,CAAC;QACnC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,OAAO,UAAU,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;QAC7C,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,CAAC,UAAU,CAAC,QAAQ,IAAI,OAAO,UAAU,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QACpE,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,OAAO,UAAU,CAAC,UAAU,KAAK,QAAQ,EAAE,CAAC;QAC9C,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Checkpoint Store
3
+ *
4
+ * File-based storage for checkpoints.
5
+ * Supports both Node.js (filesystem) and browser (localStorage) environments.
6
+ */
7
+ import type { CheckpointStore } from '../types.js';
8
+ /**
9
+ * Create a file-based checkpoint store (Node.js)
10
+ */
11
+ export declare function createFileStore(directory: string): CheckpointStore;
12
+ /**
13
+ * Create a memory-based checkpoint store (for testing or browser)
14
+ */
15
+ export declare function createMemoryStore(): CheckpointStore;
16
+ /**
17
+ * Create a localStorage-based checkpoint store (browser)
18
+ */
19
+ export declare function createLocalStorageStore(prefix?: string): CheckpointStore;
20
+ //# sourceMappingURL=store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/checkpoints/store.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAkB,eAAe,EAAE,MAAM,aAAa,CAAC;AAGnE;;GAEG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,eAAe,CA2FlE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,eAAe,CAwBnD;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,GAAE,MAA8B,GAAG,eAAe,CAiD/F"}
@@ -0,0 +1,193 @@
1
+ "use strict";
2
+ /**
3
+ * Checkpoint Store
4
+ *
5
+ * File-based storage for checkpoints.
6
+ * Supports both Node.js (filesystem) and browser (localStorage) environments.
7
+ */
8
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
9
+ if (k2 === undefined) k2 = k;
10
+ var desc = Object.getOwnPropertyDescriptor(m, k);
11
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
12
+ desc = { enumerable: true, get: function() { return m[k]; } };
13
+ }
14
+ Object.defineProperty(o, k2, desc);
15
+ }) : (function(o, m, k, k2) {
16
+ if (k2 === undefined) k2 = k;
17
+ o[k2] = m[k];
18
+ }));
19
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
20
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
21
+ }) : function(o, v) {
22
+ o["default"] = v;
23
+ });
24
+ var __importStar = (this && this.__importStar) || (function () {
25
+ var ownKeys = function(o) {
26
+ ownKeys = Object.getOwnPropertyNames || function (o) {
27
+ var ar = [];
28
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
29
+ return ar;
30
+ };
31
+ return ownKeys(o);
32
+ };
33
+ return function (mod) {
34
+ if (mod && mod.__esModule) return mod;
35
+ var result = {};
36
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
37
+ __setModuleDefault(result, mod);
38
+ return result;
39
+ };
40
+ })();
41
+ Object.defineProperty(exports, "__esModule", { value: true });
42
+ exports.createFileStore = createFileStore;
43
+ exports.createMemoryStore = createMemoryStore;
44
+ exports.createLocalStorageStore = createLocalStorageStore;
45
+ const serializer_js_1 = require("./serializer.js");
46
+ /**
47
+ * Create a file-based checkpoint store (Node.js)
48
+ */
49
+ function createFileStore(directory) {
50
+ // Dynamic import for Node.js fs module
51
+ let fs;
52
+ let path;
53
+ const ensureFs = async () => {
54
+ if (!fs) {
55
+ fs = await Promise.resolve().then(() => __importStar(require('fs')));
56
+ path = await Promise.resolve().then(() => __importStar(require('path')));
57
+ }
58
+ return { fs, path: path };
59
+ };
60
+ const getFilePath = (pathModule, name) => {
61
+ return pathModule.join(directory, `${name}.json`);
62
+ };
63
+ const store = {
64
+ async save(name, data) {
65
+ const { fs, path } = await ensureFs();
66
+ // Ensure directory exists
67
+ if (!fs.existsSync(directory)) {
68
+ fs.mkdirSync(directory, { recursive: true });
69
+ }
70
+ const filePath = getFilePath(path, name);
71
+ const json = JSON.stringify(data, null, 2);
72
+ fs.writeFileSync(filePath, json, 'utf-8');
73
+ },
74
+ async load(name) {
75
+ const { fs, path } = await ensureFs();
76
+ const filePath = getFilePath(path, name);
77
+ if (!fs.existsSync(filePath)) {
78
+ return undefined;
79
+ }
80
+ try {
81
+ const json = fs.readFileSync(filePath, 'utf-8');
82
+ const data = JSON.parse(json);
83
+ if (!(0, serializer_js_1.validateCheckpoint)(data)) {
84
+ console.warn(`Invalid checkpoint data in ${filePath}`);
85
+ return undefined;
86
+ }
87
+ return data;
88
+ }
89
+ catch (error) {
90
+ console.error(`Failed to load checkpoint ${name}:`, error);
91
+ return undefined;
92
+ }
93
+ },
94
+ async list() {
95
+ const { fs } = await ensureFs();
96
+ if (!fs.existsSync(directory)) {
97
+ return [];
98
+ }
99
+ const files = fs.readdirSync(directory);
100
+ return files
101
+ .filter((f) => f.endsWith('.json'))
102
+ .map((f) => f.replace(/\.json$/, ''));
103
+ },
104
+ async delete(name) {
105
+ const { fs, path } = await ensureFs();
106
+ const filePath = getFilePath(path, name);
107
+ if (!fs.existsSync(filePath)) {
108
+ return false;
109
+ }
110
+ fs.unlinkSync(filePath);
111
+ return true;
112
+ },
113
+ async exists(name) {
114
+ const { fs, path } = await ensureFs();
115
+ const filePath = getFilePath(path, name);
116
+ return fs.existsSync(filePath);
117
+ },
118
+ };
119
+ return store;
120
+ }
121
+ /**
122
+ * Create a memory-based checkpoint store (for testing or browser)
123
+ */
124
+ function createMemoryStore() {
125
+ const checkpoints = new Map();
126
+ return {
127
+ async save(name, data) {
128
+ checkpoints.set(name, data);
129
+ },
130
+ async load(name) {
131
+ return checkpoints.get(name);
132
+ },
133
+ async list() {
134
+ return Array.from(checkpoints.keys());
135
+ },
136
+ async delete(name) {
137
+ return checkpoints.delete(name);
138
+ },
139
+ async exists(name) {
140
+ return checkpoints.has(name);
141
+ },
142
+ };
143
+ }
144
+ /**
145
+ * Create a localStorage-based checkpoint store (browser)
146
+ */
147
+ function createLocalStorageStore(prefix = 'sharpee-checkpoint-') {
148
+ const getKey = (name) => `${prefix}${name}`;
149
+ return {
150
+ async save(name, data) {
151
+ const json = JSON.stringify(data);
152
+ localStorage.setItem(getKey(name), json);
153
+ },
154
+ async load(name) {
155
+ const json = localStorage.getItem(getKey(name));
156
+ if (!json)
157
+ return undefined;
158
+ try {
159
+ const data = JSON.parse(json);
160
+ if (!(0, serializer_js_1.validateCheckpoint)(data)) {
161
+ console.warn(`Invalid checkpoint data for ${name}`);
162
+ return undefined;
163
+ }
164
+ return data;
165
+ }
166
+ catch {
167
+ return undefined;
168
+ }
169
+ },
170
+ async list() {
171
+ const names = [];
172
+ for (let i = 0; i < localStorage.length; i++) {
173
+ const key = localStorage.key(i);
174
+ if (key?.startsWith(prefix)) {
175
+ names.push(key.slice(prefix.length));
176
+ }
177
+ }
178
+ return names;
179
+ },
180
+ async delete(name) {
181
+ const key = getKey(name);
182
+ if (localStorage.getItem(key) === null) {
183
+ return false;
184
+ }
185
+ localStorage.removeItem(key);
186
+ return true;
187
+ },
188
+ async exists(name) {
189
+ return localStorage.getItem(getKey(name)) !== null;
190
+ },
191
+ };
192
+ }
193
+ //# sourceMappingURL=store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/checkpoints/store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export { createCommandRegistry, parseGdtInput, parseTestInput } from './registry.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseTestInput = exports.parseGdtInput = exports.createCommandRegistry = void 0;
4
+ var registry_js_1 = require("./registry.js");
5
+ Object.defineProperty(exports, "createCommandRegistry", { enumerable: true, get: function () { return registry_js_1.createCommandRegistry; } });
6
+ Object.defineProperty(exports, "parseGdtInput", { enumerable: true, get: function () { return registry_js_1.parseGdtInput; } });
7
+ Object.defineProperty(exports, "parseTestInput", { enumerable: true, get: function () { return registry_js_1.parseTestInput; } });
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":";;;AAAA,6CAAqF;AAA5E,oHAAA,qBAAqB,OAAA;AAAE,4GAAA,aAAa,OAAA;AAAE,6GAAA,cAAc,OAAA"}