@playcraft/common 0.0.4 → 0.0.7

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 (63) hide show
  1. package/dist/auth/jwt.test.d.ts +2 -0
  2. package/dist/auth/jwt.test.d.ts.map +1 -0
  3. package/dist/auth/jwt.test.js +13 -0
  4. package/dist/auth/jwt.test.js.map +1 -0
  5. package/dist/auth/signature.spec.d.ts +2 -0
  6. package/dist/auth/signature.spec.d.ts.map +1 -0
  7. package/dist/auth/signature.spec.js +195 -0
  8. package/dist/auth/signature.spec.js.map +1 -0
  9. package/dist/database/schema.d.ts +19 -0
  10. package/dist/database/schema.d.ts.map +1 -1
  11. package/dist/database/schema.js +1 -0
  12. package/dist/database/schema.js.map +1 -1
  13. package/dist/mcp/tools.d.ts +2 -2
  14. package/dist/mcp/tools.d.ts.map +1 -1
  15. package/dist/mcp/tools.js +573 -61
  16. package/dist/mcp/tools.js.map +1 -1
  17. package/dist/messenger/server.test.d.ts +2 -0
  18. package/dist/messenger/server.test.d.ts.map +1 -0
  19. package/dist/messenger/server.test.js +66 -0
  20. package/dist/messenger/server.test.js.map +1 -0
  21. package/dist/models/converters.d.ts +11 -0
  22. package/dist/models/converters.d.ts.map +1 -0
  23. package/dist/models/converters.js +25 -0
  24. package/dist/models/converters.js.map +1 -0
  25. package/dist/models/converters.test.d.ts +2 -0
  26. package/dist/models/converters.test.d.ts.map +1 -0
  27. package/dist/models/converters.test.js +18 -0
  28. package/dist/models/converters.test.js.map +1 -0
  29. package/dist/models/playcanvas-compat.d.ts +1 -0
  30. package/dist/models/playcanvas-compat.d.ts.map +1 -1
  31. package/dist/models/playcanvas-compat.js +1 -0
  32. package/dist/models/playcanvas-compat.js.map +1 -1
  33. package/dist/models/scene.d.ts +10 -1
  34. package/dist/models/scene.d.ts.map +1 -1
  35. package/dist/models/scene.js +10 -1
  36. package/dist/models/scene.js.map +1 -1
  37. package/dist/models/scene.test.d.ts +2 -0
  38. package/dist/models/scene.test.d.ts.map +1 -0
  39. package/dist/models/scene.test.js +12 -0
  40. package/dist/models/scene.test.js.map +1 -0
  41. package/dist/sharedb/server.d.ts +21 -3
  42. package/dist/sharedb/server.d.ts.map +1 -1
  43. package/dist/sharedb/server.js +273 -91
  44. package/dist/sharedb/server.js.map +1 -1
  45. package/dist/sharedb/server.test.d.ts +2 -0
  46. package/dist/sharedb/server.test.d.ts.map +1 -0
  47. package/dist/sharedb/server.test.js +59 -0
  48. package/dist/sharedb/server.test.js.map +1 -0
  49. package/dist/storage/cos.d.ts +6 -6
  50. package/dist/storage/cos.d.ts.map +1 -1
  51. package/dist/storage/cos.js +70 -80
  52. package/dist/storage/cos.js.map +1 -1
  53. package/dist/storage/index.d.ts +1 -0
  54. package/dist/storage/index.d.ts.map +1 -1
  55. package/dist/storage/index.js +2 -0
  56. package/dist/storage/index.js.map +1 -1
  57. package/dist/storage/interface.d.ts +1 -0
  58. package/dist/storage/interface.d.ts.map +1 -1
  59. package/dist/storage/upload-build-artifacts.d.ts +38 -0
  60. package/dist/storage/upload-build-artifacts.d.ts.map +1 -0
  61. package/dist/storage/upload-build-artifacts.js +60 -0
  62. package/dist/storage/upload-build-artifacts.js.map +1 -0
  63. package/package.json +3 -2
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=jwt.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jwt.test.d.ts","sourceRoot":"","sources":["../../src/auth/jwt.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,13 @@
1
+ import { describe, expect, it } from 'vitest';
2
+ import { JwtService } from './jwt.js';
3
+ describe('JwtService', () => {
4
+ it('sign + verify roundtrip', async () => {
5
+ const jwt = new JwtService({ secret: 'test-secret' });
6
+ const token = await jwt.sign({ sub: 'u1', role: 'admin' }, { subject: 'u1', expiresIn: '1h' });
7
+ const payload = await jwt.verify(token);
8
+ expect(payload).not.toBeNull();
9
+ expect(payload?.sub).toBe('u1');
10
+ expect(payload?.role).toBe('admin');
11
+ });
12
+ });
13
+ //# sourceMappingURL=jwt.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jwt.test.js","sourceRoot":"","sources":["../../src/auth/jwt.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAEtC,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;IAC1B,EAAE,CAAC,yBAAyB,EAAE,KAAK,IAAI,EAAE;QACvC,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC,CAAC;QACtD,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/F,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACxC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC/B,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=signature.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signature.spec.d.ts","sourceRoot":"","sources":["../../src/auth/signature.spec.ts"],"names":[],"mappings":""}
@@ -0,0 +1,195 @@
1
+ import { describe, it, expect, beforeEach } from 'vitest';
2
+ import { generateInternalSignature, verifyInternalSignature, timingSafeEqual, generateSignedHeaders, SIGNATURE_VALIDITY_MS } from './signature';
3
+ describe('Signature Utils', () => {
4
+ const testSecret = 'test-secret-key-12345';
5
+ const testMethod = 'GET';
6
+ const testPath = '/api/assets/internal/123';
7
+ let testTimestamp;
8
+ beforeEach(() => {
9
+ testTimestamp = Date.now();
10
+ });
11
+ describe('generateInternalSignature', () => {
12
+ it('should generate a valid signature', () => {
13
+ const signature = generateInternalSignature(testMethod, testPath, testTimestamp, testSecret);
14
+ expect(signature).toBeDefined();
15
+ expect(typeof signature).toBe('string');
16
+ expect(signature.length).toBe(64); // SHA256 hex = 64 characters
17
+ });
18
+ it('should generate consistent signatures for same inputs', () => {
19
+ const sig1 = generateInternalSignature(testMethod, testPath, testTimestamp, testSecret);
20
+ const sig2 = generateInternalSignature(testMethod, testPath, testTimestamp, testSecret);
21
+ expect(sig1).toBe(sig2);
22
+ });
23
+ it('should generate different signatures for different methods', () => {
24
+ const getSig = generateInternalSignature('GET', testPath, testTimestamp, testSecret);
25
+ const postSig = generateInternalSignature('POST', testPath, testTimestamp, testSecret);
26
+ expect(getSig).not.toBe(postSig);
27
+ });
28
+ it('should generate different signatures for different paths', () => {
29
+ const path1Sig = generateInternalSignature(testMethod, '/api/assets/internal/123', testTimestamp, testSecret);
30
+ const path2Sig = generateInternalSignature(testMethod, '/api/scenes/internal/456', testTimestamp, testSecret);
31
+ expect(path1Sig).not.toBe(path2Sig);
32
+ });
33
+ it('should generate different signatures for different timestamps', () => {
34
+ const sig1 = generateInternalSignature(testMethod, testPath, testTimestamp, testSecret);
35
+ const sig2 = generateInternalSignature(testMethod, testPath, testTimestamp + 1000, testSecret);
36
+ expect(sig1).not.toBe(sig2);
37
+ });
38
+ it('should normalize method to uppercase', () => {
39
+ const upperSig = generateInternalSignature('GET', testPath, testTimestamp, testSecret);
40
+ const lowerSig = generateInternalSignature('get', testPath, testTimestamp, testSecret);
41
+ expect(upperSig).toBe(lowerSig);
42
+ });
43
+ it('should throw error when missing required parameters', () => {
44
+ expect(() => generateInternalSignature('', testPath, testTimestamp, testSecret)).toThrow();
45
+ expect(() => generateInternalSignature(testMethod, '', testTimestamp, testSecret)).toThrow();
46
+ expect(() => generateInternalSignature(testMethod, testPath, 0, testSecret)).toThrow();
47
+ expect(() => generateInternalSignature(testMethod, testPath, testTimestamp, '')).toThrow();
48
+ });
49
+ });
50
+ describe('verifyInternalSignature', () => {
51
+ it('should verify valid signature successfully', () => {
52
+ const signature = generateInternalSignature(testMethod, testPath, testTimestamp, testSecret);
53
+ const result = verifyInternalSignature(testMethod, testPath, testTimestamp, signature, testSecret);
54
+ expect(result.valid).toBe(true);
55
+ expect(result.error).toBeUndefined();
56
+ });
57
+ it('should reject invalid signature', () => {
58
+ const result = verifyInternalSignature(testMethod, testPath, testTimestamp, 'invalid-signature', testSecret);
59
+ expect(result.valid).toBe(false);
60
+ expect(result.error).toBe('Signature mismatch');
61
+ });
62
+ it('should reject expired timestamp', () => {
63
+ const oldTimestamp = Date.now() - SIGNATURE_VALIDITY_MS - 1000; // 超过有效期
64
+ const signature = generateInternalSignature(testMethod, testPath, oldTimestamp, testSecret);
65
+ const result = verifyInternalSignature(testMethod, testPath, oldTimestamp, signature, testSecret);
66
+ expect(result.valid).toBe(false);
67
+ expect(result.error).toContain('Request expired');
68
+ });
69
+ it('should reject future timestamp', () => {
70
+ const futureTimestamp = Date.now() + 10000; // 未来时间
71
+ const signature = generateInternalSignature(testMethod, testPath, futureTimestamp, testSecret);
72
+ const result = verifyInternalSignature(testMethod, testPath, futureTimestamp, signature, testSecret);
73
+ expect(result.valid).toBe(false);
74
+ expect(result.error).toBe('Timestamp is in the future');
75
+ });
76
+ it('should accept timestamp within validity period', () => {
77
+ const recentTimestamp = Date.now() - 60000; // 1 分钟前
78
+ const signature = generateInternalSignature(testMethod, testPath, recentTimestamp, testSecret);
79
+ const result = verifyInternalSignature(testMethod, testPath, recentTimestamp, signature, testSecret);
80
+ expect(result.valid).toBe(true);
81
+ });
82
+ it('should reject missing parameters', () => {
83
+ const signature = generateInternalSignature(testMethod, testPath, testTimestamp, testSecret);
84
+ let result = verifyInternalSignature('', testPath, testTimestamp, signature, testSecret);
85
+ expect(result.valid).toBe(false);
86
+ expect(result.error).toContain('Missing required parameters');
87
+ result = verifyInternalSignature(testMethod, '', testTimestamp, signature, testSecret);
88
+ expect(result.valid).toBe(false);
89
+ result = verifyInternalSignature(testMethod, testPath, testTimestamp, '', testSecret);
90
+ expect(result.valid).toBe(false);
91
+ result = verifyInternalSignature(testMethod, testPath, testTimestamp, signature, '');
92
+ expect(result.valid).toBe(false);
93
+ });
94
+ it('should reject invalid timestamp format', () => {
95
+ const signature = generateInternalSignature(testMethod, testPath, testTimestamp, testSecret);
96
+ const result = verifyInternalSignature(testMethod, testPath, NaN, signature, testSecret);
97
+ expect(result.valid).toBe(false);
98
+ expect(result.error).toBe('Invalid timestamp format');
99
+ });
100
+ it('should reject signature with wrong method', () => {
101
+ const signature = generateInternalSignature('GET', testPath, testTimestamp, testSecret);
102
+ const result = verifyInternalSignature('POST', testPath, testTimestamp, signature, testSecret);
103
+ expect(result.valid).toBe(false);
104
+ expect(result.error).toBe('Signature mismatch');
105
+ });
106
+ it('should reject signature with wrong path', () => {
107
+ const signature = generateInternalSignature(testMethod, '/api/assets/internal/123', testTimestamp, testSecret);
108
+ const result = verifyInternalSignature(testMethod, '/api/scenes/internal/456', testTimestamp, signature, testSecret);
109
+ expect(result.valid).toBe(false);
110
+ expect(result.error).toBe('Signature mismatch');
111
+ });
112
+ });
113
+ describe('timingSafeEqual', () => {
114
+ it('should return true for identical strings', () => {
115
+ expect(timingSafeEqual('abc123', 'abc123')).toBe(true);
116
+ expect(timingSafeEqual('', '')).toBe(true);
117
+ });
118
+ it('should return false for different strings', () => {
119
+ expect(timingSafeEqual('abc123', 'abc124')).toBe(false);
120
+ expect(timingSafeEqual('abc', 'def')).toBe(false);
121
+ });
122
+ it('should return false for strings of different lengths', () => {
123
+ expect(timingSafeEqual('abc', 'abcd')).toBe(false);
124
+ expect(timingSafeEqual('abcd', 'abc')).toBe(false);
125
+ });
126
+ it('should return false for non-string inputs', () => {
127
+ expect(timingSafeEqual(null, 'abc')).toBe(false);
128
+ expect(timingSafeEqual('abc', undefined)).toBe(false);
129
+ expect(timingSafeEqual(123, 456)).toBe(false);
130
+ });
131
+ it('should take constant time regardless of where strings differ', () => {
132
+ // 这个测试验证时序安全性的概念
133
+ // 实际的时序测试需要更复杂的基准测试
134
+ const str1 = 'a'.repeat(100);
135
+ const str2Early = 'b' + 'a'.repeat(99); // 第一个字符不同
136
+ const str2Late = 'a'.repeat(99) + 'b'; // 最后一个字符不同
137
+ expect(timingSafeEqual(str1, str2Early)).toBe(false);
138
+ expect(timingSafeEqual(str1, str2Late)).toBe(false);
139
+ });
140
+ });
141
+ describe('generateSignedHeaders', () => {
142
+ it('should generate all required headers', () => {
143
+ const headers = generateSignedHeaders(testMethod, testPath, testSecret, 'realtime');
144
+ expect(headers['X-Internal-Timestamp']).toBeDefined();
145
+ expect(headers['X-Internal-Signature']).toBeDefined();
146
+ expect(headers['X-Internal-Service']).toBe('realtime');
147
+ });
148
+ it('should generate valid signature in headers', () => {
149
+ const headers = generateSignedHeaders(testMethod, testPath, testSecret, 'realtime');
150
+ const timestamp = parseInt(headers['X-Internal-Timestamp'], 10);
151
+ const signature = headers['X-Internal-Signature'];
152
+ const result = verifyInternalSignature(testMethod, testPath, timestamp, signature, testSecret);
153
+ expect(result.valid).toBe(true);
154
+ });
155
+ it('should generate headers for different services', () => {
156
+ const realtimeHeaders = generateSignedHeaders(testMethod, testPath, testSecret, 'realtime');
157
+ const messengerHeaders = generateSignedHeaders(testMethod, testPath, testSecret, 'messenger');
158
+ expect(realtimeHeaders['X-Internal-Service']).toBe('realtime');
159
+ expect(messengerHeaders['X-Internal-Service']).toBe('messenger');
160
+ });
161
+ it('should generate headers for different HTTP methods', () => {
162
+ const getHeaders = generateSignedHeaders('GET', testPath, testSecret, 'realtime');
163
+ const postHeaders = generateSignedHeaders('POST', testPath, testSecret, 'realtime');
164
+ expect(getHeaders['X-Internal-Signature']).not.toBe(postHeaders['X-Internal-Signature']);
165
+ });
166
+ });
167
+ describe('Integration scenarios', () => {
168
+ it('should handle complete request flow', () => {
169
+ // 1. 服务生成签名头
170
+ const headers = generateSignedHeaders('GET', '/api/assets/internal/123', testSecret, 'realtime');
171
+ // 2. Backend 验证签名
172
+ const timestamp = parseInt(headers['X-Internal-Timestamp'], 10);
173
+ const result = verifyInternalSignature('GET', '/api/assets/internal/123', timestamp, headers['X-Internal-Signature'], testSecret);
174
+ expect(result.valid).toBe(true);
175
+ });
176
+ it('should reject tampered signature', () => {
177
+ const headers = generateSignedHeaders('GET', testPath, testSecret, 'realtime');
178
+ // 篡改签名
179
+ const tamperedSignature = headers['X-Internal-Signature'].replace(/a/g, 'b');
180
+ const timestamp = parseInt(headers['X-Internal-Timestamp'], 10);
181
+ const result = verifyInternalSignature('GET', testPath, timestamp, tamperedSignature, testSecret);
182
+ expect(result.valid).toBe(false);
183
+ });
184
+ it('should reject replay attack with old timestamp', () => {
185
+ // 生成旧的签名
186
+ const oldTimestamp = Date.now() - SIGNATURE_VALIDITY_MS - 10000;
187
+ const oldSignature = generateInternalSignature('GET', testPath, oldTimestamp, testSecret);
188
+ // 尝试重放
189
+ const result = verifyInternalSignature('GET', testPath, oldTimestamp, oldSignature, testSecret);
190
+ expect(result.valid).toBe(false);
191
+ expect(result.error).toContain('Request expired');
192
+ });
193
+ });
194
+ });
195
+ //# sourceMappingURL=signature.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signature.spec.js","sourceRoot":"","sources":["../../src/auth/signature.spec.ts"],"names":[],"mappings":"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"}
@@ -162,6 +162,25 @@ export declare const projectsSqlite: import("drizzle-orm/sqlite-core").SQLiteTab
162
162
  identity: undefined;
163
163
  generated: undefined;
164
164
  }, {}, {}>;
165
+ tagsJson: import("drizzle-orm/sqlite-core").SQLiteColumn<{
166
+ name: "tags_json";
167
+ tableName: "projects";
168
+ dataType: "string";
169
+ columnType: "SQLiteText";
170
+ data: string;
171
+ driverParam: string;
172
+ notNull: true;
173
+ hasDefault: true;
174
+ isPrimaryKey: false;
175
+ isAutoincrement: false;
176
+ hasRuntimeDefault: false;
177
+ enumValues: [string, ...string[]];
178
+ baseColumn: never;
179
+ identity: undefined;
180
+ generated: undefined;
181
+ }, {}, {
182
+ length: number | undefined;
183
+ }>;
165
184
  createdAt: import("drizzle-orm/sqlite-core").SQLiteColumn<{
166
185
  name: "created_at";
167
186
  tableName: "projects";
@@ -1 +1 @@
1
- {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/database/schema.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;GAWG;AAEH,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAWzB,CAAC;AAEH,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EASvB,CAAC;AAEH,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAwBvB,CAAC;AAEH,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAQvB,CAAC"}
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/database/schema.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;GAWG;AAEH,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAYzB,CAAC;AAEH,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EASvB,CAAC;AAEH,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAwBvB,CAAC;AAEH,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAQvB,CAAC"}
@@ -20,6 +20,7 @@ export const projectsSqlite = sqliteTable('projects', {
20
20
  settingsJson: text('settings_json').default('{}').notNull(),
21
21
  private: integer('private', { mode: 'boolean' }).default(true).notNull(),
22
22
  privateSourceAssets: integer('private_source_assets', { mode: 'boolean' }).default(false).notNull(),
23
+ tagsJson: text('tags_json').default('{}').notNull(), // Record<string, string[]> serialized
23
24
  createdAt: integer('created_at', { mode: 'timestamp' }).notNull(),
24
25
  updatedAt: integer('updated_at', { mode: 'timestamp' }).notNull(),
25
26
  });
@@ -1 +1 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/database/schema.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/database/schema.ts"],"names":[],"mappings":"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"}
@@ -22,8 +22,8 @@ export type McpToolDefinition = {
22
22
  inputSchema?: Record<string, unknown>;
23
23
  };
24
24
  /**
25
- * Minimal tool definitions for MCP tools/list.
26
- * Backend can use this to return full tool list to MCP clients.
25
+ * Full tool definitions for MCP tools/list with inputSchema.
26
+ * Schema definitions match editor test_mcp tool implementations.
27
27
  */
28
28
  export declare const MCP_TOOL_DEFINITIONS: McpToolDefinition[];
29
29
  //# sourceMappingURL=tools.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/mcp/tools.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,mFAAmF;AACnF,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAqFvD,CAAC;AAEF,qEAAqE;AACrE,eAAO,MAAM,mBAAmB,aAAiD,CAAC;AAElF;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAGlE;AAED;;GAEG;AACH,eAAO,MAAM,cAAc,UAK1B,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACvC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,oBAAoB,EAAE,iBAAiB,EA0EnD,CAAC"}
1
+ {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/mcp/tools.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,mFAAmF;AACnF,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAqFvD,CAAC;AAEF,qEAAqE;AACrE,eAAO,MAAM,mBAAmB,aAAiD,CAAC;AAElF;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAGlE;AAED;;GAEG;AACH,eAAO,MAAM,cAAc,UAK1B,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACvC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,oBAAoB,EAAE,iBAAiB,EA0kBnD,CAAC"}