tlc-claude-code 1.2.29 → 1.4.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 (182) hide show
  1. package/dashboard/dist/components/AuditPane.d.ts +30 -0
  2. package/dashboard/dist/components/AuditPane.js +127 -0
  3. package/dashboard/dist/components/AuditPane.test.d.ts +1 -0
  4. package/dashboard/dist/components/AuditPane.test.js +339 -0
  5. package/dashboard/dist/components/CompliancePane.d.ts +39 -0
  6. package/dashboard/dist/components/CompliancePane.js +96 -0
  7. package/dashboard/dist/components/CompliancePane.test.d.ts +1 -0
  8. package/dashboard/dist/components/CompliancePane.test.js +183 -0
  9. package/dashboard/dist/components/SSOPane.d.ts +36 -0
  10. package/dashboard/dist/components/SSOPane.js +71 -0
  11. package/dashboard/dist/components/SSOPane.test.d.ts +1 -0
  12. package/dashboard/dist/components/SSOPane.test.js +155 -0
  13. package/dashboard/dist/components/UsagePane.d.ts +13 -0
  14. package/dashboard/dist/components/UsagePane.js +51 -0
  15. package/dashboard/dist/components/UsagePane.test.d.ts +1 -0
  16. package/dashboard/dist/components/UsagePane.test.js +142 -0
  17. package/dashboard/dist/components/WorkspaceDocsPane.d.ts +19 -0
  18. package/dashboard/dist/components/WorkspaceDocsPane.js +130 -0
  19. package/dashboard/dist/components/WorkspaceDocsPane.test.d.ts +1 -0
  20. package/dashboard/dist/components/WorkspaceDocsPane.test.js +242 -0
  21. package/dashboard/dist/components/WorkspacePane.d.ts +18 -0
  22. package/dashboard/dist/components/WorkspacePane.js +17 -0
  23. package/dashboard/dist/components/WorkspacePane.test.d.ts +1 -0
  24. package/dashboard/dist/components/WorkspacePane.test.js +84 -0
  25. package/dashboard/dist/components/ZeroRetentionPane.d.ts +44 -0
  26. package/dashboard/dist/components/ZeroRetentionPane.js +83 -0
  27. package/dashboard/dist/components/ZeroRetentionPane.test.d.ts +1 -0
  28. package/dashboard/dist/components/ZeroRetentionPane.test.js +160 -0
  29. package/package.json +1 -1
  30. package/server/lib/access-control-doc.js +541 -0
  31. package/server/lib/access-control-doc.test.js +672 -0
  32. package/server/lib/adr-generator.js +423 -0
  33. package/server/lib/adr-generator.test.js +586 -0
  34. package/server/lib/agent-progress-monitor.js +223 -0
  35. package/server/lib/agent-progress-monitor.test.js +202 -0
  36. package/server/lib/architecture-command.js +450 -0
  37. package/server/lib/architecture-command.test.js +754 -0
  38. package/server/lib/ast-analyzer.js +324 -0
  39. package/server/lib/ast-analyzer.test.js +437 -0
  40. package/server/lib/audit-attribution.js +191 -0
  41. package/server/lib/audit-attribution.test.js +359 -0
  42. package/server/lib/audit-classifier.js +202 -0
  43. package/server/lib/audit-classifier.test.js +209 -0
  44. package/server/lib/audit-command.js +275 -0
  45. package/server/lib/audit-command.test.js +325 -0
  46. package/server/lib/audit-exporter.js +380 -0
  47. package/server/lib/audit-exporter.test.js +464 -0
  48. package/server/lib/audit-logger.js +236 -0
  49. package/server/lib/audit-logger.test.js +364 -0
  50. package/server/lib/audit-query.js +257 -0
  51. package/server/lib/audit-query.test.js +352 -0
  52. package/server/lib/audit-storage.js +269 -0
  53. package/server/lib/audit-storage.test.js +272 -0
  54. package/server/lib/auth-system.test.js +4 -1
  55. package/server/lib/boundary-detector.js +427 -0
  56. package/server/lib/boundary-detector.test.js +320 -0
  57. package/server/lib/budget-alerts.js +138 -0
  58. package/server/lib/budget-alerts.test.js +235 -0
  59. package/server/lib/bulk-repo-init.js +342 -0
  60. package/server/lib/bulk-repo-init.test.js +388 -0
  61. package/server/lib/candidates-tracker.js +210 -0
  62. package/server/lib/candidates-tracker.test.js +300 -0
  63. package/server/lib/checkpoint-manager.js +251 -0
  64. package/server/lib/checkpoint-manager.test.js +474 -0
  65. package/server/lib/circular-detector.js +337 -0
  66. package/server/lib/circular-detector.test.js +353 -0
  67. package/server/lib/cohesion-analyzer.js +310 -0
  68. package/server/lib/cohesion-analyzer.test.js +447 -0
  69. package/server/lib/compliance-checklist.js +866 -0
  70. package/server/lib/compliance-checklist.test.js +476 -0
  71. package/server/lib/compliance-command.js +616 -0
  72. package/server/lib/compliance-command.test.js +551 -0
  73. package/server/lib/compliance-reporter.js +692 -0
  74. package/server/lib/compliance-reporter.test.js +707 -0
  75. package/server/lib/contract-testing.js +625 -0
  76. package/server/lib/contract-testing.test.js +342 -0
  77. package/server/lib/conversion-planner.js +469 -0
  78. package/server/lib/conversion-planner.test.js +361 -0
  79. package/server/lib/convert-command.js +351 -0
  80. package/server/lib/convert-command.test.js +608 -0
  81. package/server/lib/coupling-calculator.js +189 -0
  82. package/server/lib/coupling-calculator.test.js +509 -0
  83. package/server/lib/data-flow-doc.js +665 -0
  84. package/server/lib/data-flow-doc.test.js +659 -0
  85. package/server/lib/dependency-graph.js +367 -0
  86. package/server/lib/dependency-graph.test.js +516 -0
  87. package/server/lib/duplication-detector.js +349 -0
  88. package/server/lib/duplication-detector.test.js +401 -0
  89. package/server/lib/ephemeral-storage.js +249 -0
  90. package/server/lib/ephemeral-storage.test.js +254 -0
  91. package/server/lib/evidence-collector.js +627 -0
  92. package/server/lib/evidence-collector.test.js +901 -0
  93. package/server/lib/example-service.js +616 -0
  94. package/server/lib/example-service.test.js +397 -0
  95. package/server/lib/flow-diagram-generator.js +474 -0
  96. package/server/lib/flow-diagram-generator.test.js +446 -0
  97. package/server/lib/idp-manager.js +626 -0
  98. package/server/lib/idp-manager.test.js +587 -0
  99. package/server/lib/impact-scorer.js +184 -0
  100. package/server/lib/impact-scorer.test.js +211 -0
  101. package/server/lib/memory-exclusion.js +326 -0
  102. package/server/lib/memory-exclusion.test.js +241 -0
  103. package/server/lib/mermaid-generator.js +358 -0
  104. package/server/lib/mermaid-generator.test.js +301 -0
  105. package/server/lib/messaging-patterns.js +750 -0
  106. package/server/lib/messaging-patterns.test.js +213 -0
  107. package/server/lib/mfa-handler.js +452 -0
  108. package/server/lib/mfa-handler.test.js +490 -0
  109. package/server/lib/microservice-template.js +386 -0
  110. package/server/lib/microservice-template.test.js +325 -0
  111. package/server/lib/new-project-microservice.js +450 -0
  112. package/server/lib/new-project-microservice.test.js +600 -0
  113. package/server/lib/oauth-flow.js +375 -0
  114. package/server/lib/oauth-flow.test.js +487 -0
  115. package/server/lib/oauth-registry.js +190 -0
  116. package/server/lib/oauth-registry.test.js +306 -0
  117. package/server/lib/readme-generator.js +490 -0
  118. package/server/lib/readme-generator.test.js +493 -0
  119. package/server/lib/refactor-command.js +326 -0
  120. package/server/lib/refactor-command.test.js +528 -0
  121. package/server/lib/refactor-executor.js +254 -0
  122. package/server/lib/refactor-executor.test.js +305 -0
  123. package/server/lib/refactor-observer.js +292 -0
  124. package/server/lib/refactor-observer.test.js +422 -0
  125. package/server/lib/refactor-progress.js +193 -0
  126. package/server/lib/refactor-progress.test.js +251 -0
  127. package/server/lib/refactor-reporter.js +237 -0
  128. package/server/lib/refactor-reporter.test.js +247 -0
  129. package/server/lib/repo-dependency-tracker.js +261 -0
  130. package/server/lib/repo-dependency-tracker.test.js +350 -0
  131. package/server/lib/retention-policy.js +281 -0
  132. package/server/lib/retention-policy.test.js +486 -0
  133. package/server/lib/role-mapper.js +236 -0
  134. package/server/lib/role-mapper.test.js +395 -0
  135. package/server/lib/saml-provider.js +765 -0
  136. package/server/lib/saml-provider.test.js +643 -0
  137. package/server/lib/security-policy-generator.js +682 -0
  138. package/server/lib/security-policy-generator.test.js +544 -0
  139. package/server/lib/semantic-analyzer.js +198 -0
  140. package/server/lib/semantic-analyzer.test.js +474 -0
  141. package/server/lib/sensitive-detector.js +112 -0
  142. package/server/lib/sensitive-detector.test.js +209 -0
  143. package/server/lib/service-interaction-diagram.js +700 -0
  144. package/server/lib/service-interaction-diagram.test.js +638 -0
  145. package/server/lib/service-scaffold.js +486 -0
  146. package/server/lib/service-scaffold.test.js +373 -0
  147. package/server/lib/service-summary.js +553 -0
  148. package/server/lib/service-summary.test.js +619 -0
  149. package/server/lib/session-purge.js +460 -0
  150. package/server/lib/session-purge.test.js +312 -0
  151. package/server/lib/shared-kernel.js +578 -0
  152. package/server/lib/shared-kernel.test.js +255 -0
  153. package/server/lib/sso-command.js +544 -0
  154. package/server/lib/sso-command.test.js +552 -0
  155. package/server/lib/sso-session.js +492 -0
  156. package/server/lib/sso-session.test.js +670 -0
  157. package/server/lib/traefik-config.js +282 -0
  158. package/server/lib/traefik-config.test.js +312 -0
  159. package/server/lib/usage-command.js +218 -0
  160. package/server/lib/usage-command.test.js +391 -0
  161. package/server/lib/usage-formatter.js +192 -0
  162. package/server/lib/usage-formatter.test.js +267 -0
  163. package/server/lib/usage-history.js +122 -0
  164. package/server/lib/usage-history.test.js +206 -0
  165. package/server/lib/workspace-command.js +249 -0
  166. package/server/lib/workspace-command.test.js +264 -0
  167. package/server/lib/workspace-config.js +270 -0
  168. package/server/lib/workspace-config.test.js +312 -0
  169. package/server/lib/workspace-docs-command.js +547 -0
  170. package/server/lib/workspace-docs-command.test.js +692 -0
  171. package/server/lib/workspace-memory.js +451 -0
  172. package/server/lib/workspace-memory.test.js +403 -0
  173. package/server/lib/workspace-scanner.js +452 -0
  174. package/server/lib/workspace-scanner.test.js +677 -0
  175. package/server/lib/workspace-test-runner.js +315 -0
  176. package/server/lib/workspace-test-runner.test.js +294 -0
  177. package/server/lib/zero-retention-command.js +439 -0
  178. package/server/lib/zero-retention-command.test.js +448 -0
  179. package/server/lib/zero-retention.js +322 -0
  180. package/server/lib/zero-retention.test.js +258 -0
  181. package/server/package-lock.json +14 -0
  182. package/server/package.json +1 -0
@@ -0,0 +1,255 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import {
3
+ SharedKernel,
4
+ createSharedKernel,
5
+ generatePackageJson,
6
+ generateTypes,
7
+ generateContracts,
8
+ generateEvents,
9
+ generateUtils,
10
+ } from './shared-kernel.js';
11
+
12
+ describe('shared-kernel', () => {
13
+ describe('SharedKernel', () => {
14
+ describe('generate', () => {
15
+ it('creates shared directory structure', () => {
16
+ const kernel = new SharedKernel({ projectName: 'myapp' });
17
+ const result = kernel.generate({
18
+ services: ['user', 'order'],
19
+ events: ['UserCreated', 'OrderPlaced'],
20
+ });
21
+
22
+ expect(result.directories).toBeDefined();
23
+ expect(result.directories).toContain('shared');
24
+ });
25
+
26
+ it('creates types/, contracts/, events/, utils/ subdirectories', () => {
27
+ const kernel = new SharedKernel({ projectName: 'myapp' });
28
+ const result = kernel.generate({
29
+ services: ['user'],
30
+ events: ['UserCreated'],
31
+ });
32
+
33
+ expect(result.directories).toContain('shared/types');
34
+ expect(result.directories).toContain('shared/contracts');
35
+ expect(result.directories).toContain('shared/events');
36
+ expect(result.directories).toContain('shared/utils');
37
+ });
38
+
39
+ it('returns files array with generated content', () => {
40
+ const kernel = new SharedKernel({ projectName: 'myapp' });
41
+ const result = kernel.generate({
42
+ services: ['user'],
43
+ events: ['UserCreated'],
44
+ });
45
+
46
+ expect(result.files).toBeDefined();
47
+ expect(Array.isArray(result.files)).toBe(true);
48
+ expect(result.files.length).toBeGreaterThan(0);
49
+ });
50
+
51
+ it('handles empty services array', () => {
52
+ const kernel = new SharedKernel({ projectName: 'myapp' });
53
+ const result = kernel.generate({
54
+ services: [],
55
+ events: ['SomeEvent'],
56
+ });
57
+
58
+ expect(result.directories).toContain('shared');
59
+ expect(result.files).toBeDefined();
60
+ });
61
+
62
+ it('handles empty events array', () => {
63
+ const kernel = new SharedKernel({ projectName: 'myapp' });
64
+ const result = kernel.generate({
65
+ services: ['user'],
66
+ events: [],
67
+ });
68
+
69
+ expect(result.directories).toContain('shared');
70
+ expect(result.files).toBeDefined();
71
+ });
72
+ });
73
+ });
74
+
75
+ describe('generatePackageJson', () => {
76
+ it('has correct name format', () => {
77
+ const pkg = generatePackageJson({ projectName: 'myapp' });
78
+
79
+ expect(pkg.name).toBe('@myapp/shared');
80
+ });
81
+
82
+ it('has exports field', () => {
83
+ const pkg = generatePackageJson({ projectName: 'myapp' });
84
+
85
+ expect(pkg.exports).toBeDefined();
86
+ expect(pkg.exports['./types']).toBeDefined();
87
+ expect(pkg.exports['./contracts']).toBeDefined();
88
+ expect(pkg.exports['./events']).toBeDefined();
89
+ expect(pkg.exports['./utils']).toBeDefined();
90
+ });
91
+
92
+ it('includes version and description', () => {
93
+ const pkg = generatePackageJson({ projectName: 'myapp' });
94
+
95
+ expect(pkg.version).toBeDefined();
96
+ expect(pkg.description).toBeDefined();
97
+ });
98
+ });
99
+
100
+ describe('generateTypes', () => {
101
+ it('includes common types', () => {
102
+ const types = generateTypes({ services: ['user'] });
103
+
104
+ expect(types).toContain('ID');
105
+ expect(types).toContain('Timestamp');
106
+ expect(types).toContain('PaginatedResponse');
107
+ });
108
+
109
+ it('includes service-specific types', () => {
110
+ const types = generateTypes({ services: ['user', 'order'] });
111
+
112
+ expect(types).toContain('User');
113
+ expect(types).toContain('Order');
114
+ });
115
+
116
+ it('generates syntactically valid TypeScript', () => {
117
+ const types = generateTypes({ services: ['user'] });
118
+
119
+ // Should have proper export statements
120
+ expect(types).toContain('export');
121
+ // Should have type or interface declarations
122
+ expect(types).toMatch(/export\s+(type|interface)/);
123
+ // Should not have obvious syntax errors (unbalanced braces)
124
+ const openBraces = (types.match(/\{/g) || []).length;
125
+ const closeBraces = (types.match(/\}/g) || []).length;
126
+ expect(openBraces).toBe(closeBraces);
127
+ });
128
+
129
+ it('handles empty services array', () => {
130
+ const types = generateTypes({ services: [] });
131
+
132
+ expect(types).toContain('ID');
133
+ expect(types).toContain('Timestamp');
134
+ });
135
+ });
136
+
137
+ describe('generateContracts', () => {
138
+ it('generates valid JSON Schema for services', () => {
139
+ const contracts = generateContracts(['user', 'order']);
140
+
141
+ expect(contracts.user).toBeDefined();
142
+ expect(contracts.order).toBeDefined();
143
+ expect(contracts.user.$schema).toContain('json-schema');
144
+ });
145
+
146
+ it('has request/response schemas', () => {
147
+ const contracts = generateContracts(['user']);
148
+
149
+ expect(contracts.user.definitions).toBeDefined();
150
+ expect(contracts.user.definitions.Request).toBeDefined();
151
+ expect(contracts.user.definitions.Response).toBeDefined();
152
+ });
153
+
154
+ it('includes error response schema', () => {
155
+ const contracts = generateContracts(['user']);
156
+
157
+ expect(contracts.user.definitions.ErrorResponse).toBeDefined();
158
+ expect(contracts.user.definitions.ErrorResponse.properties.error).toBeDefined();
159
+ });
160
+
161
+ it('handles empty services array', () => {
162
+ const contracts = generateContracts([]);
163
+
164
+ expect(contracts).toBeDefined();
165
+ expect(Object.keys(contracts).length).toBe(0);
166
+ });
167
+ });
168
+
169
+ describe('generateEvents', () => {
170
+ it('includes metadata fields', () => {
171
+ const events = generateEvents(['UserCreated', 'OrderPlaced']);
172
+
173
+ expect(events.base).toBeDefined();
174
+ expect(events.base).toContain('id');
175
+ expect(events.base).toContain('timestamp');
176
+ expect(events.base).toContain('source');
177
+ });
178
+
179
+ it('generates per-event schema with payload types', () => {
180
+ const events = generateEvents(['UserCreated', 'OrderPlaced']);
181
+
182
+ expect(events.schemas.UserCreated).toBeDefined();
183
+ expect(events.schemas.OrderPlaced).toBeDefined();
184
+ expect(events.schemas.UserCreated).toContain('payload');
185
+ });
186
+
187
+ it('generates event catalog listing all events', () => {
188
+ const events = generateEvents(['UserCreated', 'OrderPlaced']);
189
+
190
+ expect(events.catalog).toBeDefined();
191
+ expect(events.catalog).toContain('UserCreated');
192
+ expect(events.catalog).toContain('OrderPlaced');
193
+ });
194
+
195
+ it('handles empty events array', () => {
196
+ const events = generateEvents([]);
197
+
198
+ expect(events.base).toBeDefined();
199
+ expect(events.catalog).toBeDefined();
200
+ });
201
+ });
202
+
203
+ describe('generateUtils', () => {
204
+ it('includes logger utility', () => {
205
+ const utils = generateUtils();
206
+
207
+ expect(utils.logger).toBeDefined();
208
+ expect(utils.logger).toContain('log');
209
+ });
210
+
211
+ it('includes error classes', () => {
212
+ const utils = generateUtils();
213
+
214
+ expect(utils.errors).toBeDefined();
215
+ expect(utils.errors).toContain('AppError');
216
+ expect(utils.errors).toContain('ValidationError');
217
+ expect(utils.errors).toContain('NotFoundError');
218
+ });
219
+
220
+ it('error classes extend base AppError', () => {
221
+ const utils = generateUtils();
222
+
223
+ expect(utils.errors).toContain('extends AppError');
224
+ });
225
+
226
+ it('includes validation helpers', () => {
227
+ const utils = generateUtils();
228
+
229
+ expect(utils.validation).toBeDefined();
230
+ expect(utils.validation).toContain('validate');
231
+ });
232
+ });
233
+
234
+ describe('createSharedKernel', () => {
235
+ it('creates kernel instance with methods', () => {
236
+ const kernel = createSharedKernel({ projectName: 'myapp' });
237
+
238
+ expect(kernel.generate).toBeDefined();
239
+ expect(typeof kernel.generate).toBe('function');
240
+ });
241
+
242
+ it('uses provided options', () => {
243
+ const kernel = createSharedKernel({ projectName: 'customapp' });
244
+ const result = kernel.generate({
245
+ services: ['user'],
246
+ events: [],
247
+ });
248
+
249
+ // Find the package.json file in result
250
+ const pkgFile = result.files.find(f => f.path === 'shared/package.json');
251
+ expect(pkgFile).toBeDefined();
252
+ expect(pkgFile.content).toContain('@customapp/shared');
253
+ });
254
+ });
255
+ });