@ai-coders/context 0.5.0 → 0.5.2

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 (114) hide show
  1. package/README.md +103 -360
  2. package/dist/generators/agents/templates/playbookTemplate.d.ts.map +1 -1
  3. package/dist/generators/agents/templates/playbookTemplate.js +5 -1
  4. package/dist/generators/agents/templates/playbookTemplate.js.map +1 -1
  5. package/dist/generators/documentation/templates/apiReferenceTemplate.d.ts.map +1 -1
  6. package/dist/generators/documentation/templates/apiReferenceTemplate.js +3 -1
  7. package/dist/generators/documentation/templates/apiReferenceTemplate.js.map +1 -1
  8. package/dist/generators/documentation/templates/architectureTemplate.d.ts.map +1 -1
  9. package/dist/generators/documentation/templates/architectureTemplate.js +16 -12
  10. package/dist/generators/documentation/templates/architectureTemplate.js.map +1 -1
  11. package/dist/generators/documentation/templates/common.d.ts +5 -0
  12. package/dist/generators/documentation/templates/common.d.ts.map +1 -1
  13. package/dist/generators/documentation/templates/common.js +14 -0
  14. package/dist/generators/documentation/templates/common.js.map +1 -1
  15. package/dist/generators/documentation/templates/dataFlowTemplate.d.ts.map +1 -1
  16. package/dist/generators/documentation/templates/dataFlowTemplate.js +10 -6
  17. package/dist/generators/documentation/templates/dataFlowTemplate.js.map +1 -1
  18. package/dist/generators/documentation/templates/developmentWorkflowTemplate.d.ts.map +1 -1
  19. package/dist/generators/documentation/templates/developmentWorkflowTemplate.js +5 -3
  20. package/dist/generators/documentation/templates/developmentWorkflowTemplate.js.map +1 -1
  21. package/dist/generators/documentation/templates/glossaryTemplate.d.ts.map +1 -1
  22. package/dist/generators/documentation/templates/glossaryTemplate.js +10 -6
  23. package/dist/generators/documentation/templates/glossaryTemplate.js.map +1 -1
  24. package/dist/generators/documentation/templates/migrationTemplate.d.ts.map +1 -1
  25. package/dist/generators/documentation/templates/migrationTemplate.js +3 -1
  26. package/dist/generators/documentation/templates/migrationTemplate.js.map +1 -1
  27. package/dist/generators/documentation/templates/onboardingTemplate.d.ts.map +1 -1
  28. package/dist/generators/documentation/templates/onboardingTemplate.js +3 -1
  29. package/dist/generators/documentation/templates/onboardingTemplate.js.map +1 -1
  30. package/dist/generators/documentation/templates/projectOverviewTemplate.d.ts.map +1 -1
  31. package/dist/generators/documentation/templates/projectOverviewTemplate.js +14 -10
  32. package/dist/generators/documentation/templates/projectOverviewTemplate.js.map +1 -1
  33. package/dist/generators/documentation/templates/securityTemplate.d.ts.map +1 -1
  34. package/dist/generators/documentation/templates/securityTemplate.js +11 -5
  35. package/dist/generators/documentation/templates/securityTemplate.js.map +1 -1
  36. package/dist/generators/documentation/templates/testingTemplate.d.ts.map +1 -1
  37. package/dist/generators/documentation/templates/testingTemplate.js +5 -2
  38. package/dist/generators/documentation/templates/testingTemplate.js.map +1 -1
  39. package/dist/generators/documentation/templates/toolingTemplate.d.ts.map +1 -1
  40. package/dist/generators/documentation/templates/toolingTemplate.js +11 -8
  41. package/dist/generators/documentation/templates/toolingTemplate.js.map +1 -1
  42. package/dist/generators/documentation/templates/troubleshootingTemplate.d.ts.map +1 -1
  43. package/dist/generators/documentation/templates/troubleshootingTemplate.js +3 -1
  44. package/dist/generators/documentation/templates/troubleshootingTemplate.js.map +1 -1
  45. package/dist/generators/plans/templates/planTemplate.d.ts.map +1 -1
  46. package/dist/generators/plans/templates/planTemplate.js +5 -3
  47. package/dist/generators/plans/templates/planTemplate.js.map +1 -1
  48. package/dist/index.d.ts.map +1 -1
  49. package/dist/index.js +235 -39
  50. package/dist/index.js.map +1 -1
  51. package/dist/services/ai/agents/documentationAgent.d.ts.map +1 -1
  52. package/dist/services/ai/agents/documentationAgent.js +3 -29
  53. package/dist/services/ai/agents/documentationAgent.js.map +1 -1
  54. package/dist/services/ai/agents/planAgent.d.ts.map +1 -1
  55. package/dist/services/ai/agents/planAgent.js +6 -53
  56. package/dist/services/ai/agents/planAgent.js.map +1 -1
  57. package/dist/services/ai/agents/playbookAgent.d.ts.map +1 -1
  58. package/dist/services/ai/agents/playbookAgent.js +3 -24
  59. package/dist/services/ai/agents/playbookAgent.js.map +1 -1
  60. package/dist/services/ai/prompts/index.d.ts +2 -0
  61. package/dist/services/ai/prompts/index.d.ts.map +1 -0
  62. package/dist/services/ai/prompts/index.js +12 -0
  63. package/dist/services/ai/prompts/index.js.map +1 -0
  64. package/dist/services/ai/prompts/sharedPrompts.d.ts +33 -0
  65. package/dist/services/ai/prompts/sharedPrompts.d.ts.map +1 -0
  66. package/dist/services/ai/prompts/sharedPrompts.js +136 -0
  67. package/dist/services/ai/prompts/sharedPrompts.js.map +1 -0
  68. package/dist/services/ai/schemas.d.ts +1 -1
  69. package/dist/services/ai/toolRegistry.d.ts +27 -0
  70. package/dist/services/ai/toolRegistry.d.ts.map +1 -0
  71. package/dist/services/ai/toolRegistry.js +126 -0
  72. package/dist/services/ai/toolRegistry.js.map +1 -0
  73. package/dist/services/ai/tools/fillScaffoldingTool.d.ts +75 -5
  74. package/dist/services/ai/tools/fillScaffoldingTool.d.ts.map +1 -1
  75. package/dist/services/ai/tools/fillScaffoldingTool.js +247 -43
  76. package/dist/services/ai/tools/fillScaffoldingTool.js.map +1 -1
  77. package/dist/services/ai/tools/index.d.ts +2 -2
  78. package/dist/services/ai/tools/index.d.ts.map +1 -1
  79. package/dist/services/ai/tools/index.js +9 -3
  80. package/dist/services/ai/tools/index.js.map +1 -1
  81. package/dist/services/ai/tools/initializeContextTool.d.ts +1 -1
  82. package/dist/services/fill/fillService.d.ts.map +1 -1
  83. package/dist/services/fill/fillService.js +7 -2
  84. package/dist/services/fill/fillService.js.map +1 -1
  85. package/dist/services/mcp/mcpServer.d.ts.map +1 -1
  86. package/dist/services/mcp/mcpServer.js +60 -20
  87. package/dist/services/mcp/mcpServer.js.map +1 -1
  88. package/dist/services/state/index.d.ts +2 -0
  89. package/dist/services/state/index.d.ts.map +1 -0
  90. package/dist/services/state/index.js +6 -0
  91. package/dist/services/state/index.js.map +1 -0
  92. package/dist/services/state/stateDetector.d.ts +53 -0
  93. package/dist/services/state/stateDetector.d.ts.map +1 -0
  94. package/dist/services/state/stateDetector.js +189 -0
  95. package/dist/services/state/stateDetector.js.map +1 -0
  96. package/dist/services/update/index.d.ts +2 -0
  97. package/dist/services/update/index.d.ts.map +1 -0
  98. package/dist/services/update/index.js +6 -0
  99. package/dist/services/update/index.js.map +1 -0
  100. package/dist/services/update/updateService.d.ts +64 -0
  101. package/dist/services/update/updateService.d.ts.map +1 -0
  102. package/dist/services/update/updateService.js +295 -0
  103. package/dist/services/update/updateService.js.map +1 -0
  104. package/dist/types.d.ts +0 -5
  105. package/dist/types.d.ts.map +1 -1
  106. package/dist/utils/frontMatter.d.ts +55 -0
  107. package/dist/utils/frontMatter.d.ts.map +1 -0
  108. package/dist/utils/frontMatter.js +173 -0
  109. package/dist/utils/frontMatter.js.map +1 -0
  110. package/dist/utils/i18n.d.ts +14 -0
  111. package/dist/utils/i18n.d.ts.map +1 -1
  112. package/dist/utils/i18n.js +28 -0
  113. package/dist/utils/i18n.js.map +1 -1
  114. package/package.json +1 -1
@@ -0,0 +1,189 @@
1
+ "use strict";
2
+ /**
3
+ * StateDetector - Detects the current state of the project's context documentation.
4
+ *
5
+ * States:
6
+ * - new: No .context directory exists
7
+ * - unfilled: .context exists but files have `status: unfilled` front matter
8
+ * - ready: .context exists with filled content
9
+ * - outdated: .context is older than source code
10
+ */
11
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
12
+ if (k2 === undefined) k2 = k;
13
+ var desc = Object.getOwnPropertyDescriptor(m, k);
14
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
15
+ desc = { enumerable: true, get: function() { return m[k]; } };
16
+ }
17
+ Object.defineProperty(o, k2, desc);
18
+ }) : (function(o, m, k, k2) {
19
+ if (k2 === undefined) k2 = k;
20
+ o[k2] = m[k];
21
+ }));
22
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
23
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
24
+ }) : function(o, v) {
25
+ o["default"] = v;
26
+ });
27
+ var __importStar = (this && this.__importStar) || (function () {
28
+ var ownKeys = function(o) {
29
+ ownKeys = Object.getOwnPropertyNames || function (o) {
30
+ var ar = [];
31
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
32
+ return ar;
33
+ };
34
+ return ownKeys(o);
35
+ };
36
+ return function (mod) {
37
+ if (mod && mod.__esModule) return mod;
38
+ var result = {};
39
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
40
+ __setModuleDefault(result, mod);
41
+ return result;
42
+ };
43
+ })();
44
+ Object.defineProperty(exports, "__esModule", { value: true });
45
+ exports.default = exports.StateDetector = void 0;
46
+ const path = __importStar(require("path"));
47
+ const fs = __importStar(require("fs-extra"));
48
+ const glob_1 = require("glob");
49
+ const frontMatter_1 = require("../../utils/frontMatter");
50
+ const DEFAULT_SOURCE_DIRS = ['src', 'lib', 'app', 'packages'];
51
+ class StateDetector {
52
+ constructor(options) {
53
+ this.projectPath = options.projectPath;
54
+ this.contextDirName = options.contextDirName || '.context';
55
+ this.sourceDirs = options.sourceDirs || DEFAULT_SOURCE_DIRS;
56
+ }
57
+ get contextDir() {
58
+ return path.join(this.projectPath, this.contextDirName);
59
+ }
60
+ /**
61
+ * Detect the current state of the project
62
+ */
63
+ async detect() {
64
+ const hasContextDir = await fs.pathExists(this.contextDir);
65
+ if (!hasContextDir) {
66
+ return {
67
+ state: 'new',
68
+ contextDir: this.contextDir,
69
+ details: {
70
+ hasContextDir: false,
71
+ totalFiles: 0,
72
+ filledFiles: 0,
73
+ unfilledFiles: 0
74
+ }
75
+ };
76
+ }
77
+ // Get stats about filled/unfilled files
78
+ const stats = await (0, frontMatter_1.getFilledStats)(this.contextDir);
79
+ // If there are unfilled files, state is 'unfilled'
80
+ if (stats.unfilled > 0) {
81
+ return {
82
+ state: 'unfilled',
83
+ contextDir: this.contextDir,
84
+ details: {
85
+ hasContextDir: true,
86
+ totalFiles: stats.total,
87
+ filledFiles: stats.filled,
88
+ unfilledFiles: stats.unfilled
89
+ }
90
+ };
91
+ }
92
+ // Check if docs are outdated compared to code
93
+ const codeLastModified = await this.getNewestMtime(this.sourceDirs);
94
+ const docsLastModified = await this.getContextMtime();
95
+ if (codeLastModified && docsLastModified && codeLastModified > docsLastModified) {
96
+ const daysBehind = Math.floor((codeLastModified.getTime() - docsLastModified.getTime()) / (1000 * 60 * 60 * 24));
97
+ return {
98
+ state: 'outdated',
99
+ contextDir: this.contextDir,
100
+ details: {
101
+ hasContextDir: true,
102
+ totalFiles: stats.total,
103
+ filledFiles: stats.filled,
104
+ unfilledFiles: stats.unfilled,
105
+ codeLastModified,
106
+ docsLastModified,
107
+ daysBehind
108
+ }
109
+ };
110
+ }
111
+ // Everything is ready
112
+ return {
113
+ state: 'ready',
114
+ contextDir: this.contextDir,
115
+ details: {
116
+ hasContextDir: true,
117
+ totalFiles: stats.total,
118
+ filledFiles: stats.filled,
119
+ unfilledFiles: stats.unfilled,
120
+ codeLastModified,
121
+ docsLastModified
122
+ }
123
+ };
124
+ }
125
+ /**
126
+ * Get the newest modification time from source directories
127
+ */
128
+ async getNewestMtime(dirs) {
129
+ let newest;
130
+ for (const dir of dirs) {
131
+ const fullPath = path.join(this.projectPath, dir);
132
+ if (!await fs.pathExists(fullPath)) {
133
+ continue;
134
+ }
135
+ try {
136
+ const files = await (0, glob_1.glob)(`${fullPath}/**/*.{ts,tsx,js,jsx,py,go,rs,java,rb}`, {
137
+ ignore: ['**/node_modules/**', '**/dist/**', '**/.git/**']
138
+ });
139
+ for (const file of files) {
140
+ const stat = await fs.stat(file);
141
+ if (!newest || stat.mtime > newest) {
142
+ newest = stat.mtime;
143
+ }
144
+ }
145
+ }
146
+ catch {
147
+ // Ignore errors for individual directories
148
+ }
149
+ }
150
+ return newest;
151
+ }
152
+ /**
153
+ * Get the newest modification time from .context directory
154
+ */
155
+ async getContextMtime() {
156
+ let newest;
157
+ try {
158
+ const files = await (0, glob_1.glob)(`${this.contextDir}/**/*.md`);
159
+ for (const file of files) {
160
+ const stat = await fs.stat(file);
161
+ if (!newest || stat.mtime > newest) {
162
+ newest = stat.mtime;
163
+ }
164
+ }
165
+ }
166
+ catch {
167
+ // Ignore errors
168
+ }
169
+ return newest;
170
+ }
171
+ /**
172
+ * Get a human-readable description of the state
173
+ */
174
+ static describeState(result) {
175
+ switch (result.state) {
176
+ case 'new':
177
+ return 'No context documentation found';
178
+ case 'unfilled':
179
+ return `${result.details.unfilledFiles} of ${result.details.totalFiles} files need to be filled`;
180
+ case 'outdated':
181
+ return `Documentation is ${result.details.daysBehind} day(s) behind code`;
182
+ case 'ready':
183
+ return `${result.details.totalFiles} documentation files up to date`;
184
+ }
185
+ }
186
+ }
187
+ exports.StateDetector = StateDetector;
188
+ exports.default = StateDetector;
189
+ //# sourceMappingURL=stateDetector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stateDetector.js","sourceRoot":"","sources":["../../../src/services/state/stateDetector.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,2CAA6B;AAC7B,6CAA+B;AAC/B,+BAA4B;AAC5B,yDAAoE;AAwBpE,MAAM,mBAAmB,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;AAE9D,MAAa,aAAa;IAKxB,YAAY,OAA6B;QACvC,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;QACvC,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,cAAc,IAAI,UAAU,CAAC;QAC3D,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,mBAAmB,CAAC;IAC9D,CAAC;IAED,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;IAC1D,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM;QACV,MAAM,aAAa,GAAG,MAAM,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAE3D,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,OAAO;gBACL,KAAK,EAAE,KAAK;gBACZ,UAAU,EAAE,IAAI,CAAC,UAAU;gBAC3B,OAAO,EAAE;oBACP,aAAa,EAAE,KAAK;oBACpB,UAAU,EAAE,CAAC;oBACb,WAAW,EAAE,CAAC;oBACd,aAAa,EAAE,CAAC;iBACjB;aACF,CAAC;QACJ,CAAC;QAED,wCAAwC;QACxC,MAAM,KAAK,GAAG,MAAM,IAAA,4BAAc,EAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAEpD,mDAAmD;QACnD,IAAI,KAAK,CAAC,QAAQ,GAAG,CAAC,EAAE,CAAC;YACvB,OAAO;gBACL,KAAK,EAAE,UAAU;gBACjB,UAAU,EAAE,IAAI,CAAC,UAAU;gBAC3B,OAAO,EAAE;oBACP,aAAa,EAAE,IAAI;oBACnB,UAAU,EAAE,KAAK,CAAC,KAAK;oBACvB,WAAW,EAAE,KAAK,CAAC,MAAM;oBACzB,aAAa,EAAE,KAAK,CAAC,QAAQ;iBAC9B;aACF,CAAC;QACJ,CAAC;QAED,8CAA8C;QAC9C,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACpE,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;QAEtD,IAAI,gBAAgB,IAAI,gBAAgB,IAAI,gBAAgB,GAAG,gBAAgB,EAAE,CAAC;YAChF,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,gBAAgB,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;YAEjH,OAAO;gBACL,KAAK,EAAE,UAAU;gBACjB,UAAU,EAAE,IAAI,CAAC,UAAU;gBAC3B,OAAO,EAAE;oBACP,aAAa,EAAE,IAAI;oBACnB,UAAU,EAAE,KAAK,CAAC,KAAK;oBACvB,WAAW,EAAE,KAAK,CAAC,MAAM;oBACzB,aAAa,EAAE,KAAK,CAAC,QAAQ;oBAC7B,gBAAgB;oBAChB,gBAAgB;oBAChB,UAAU;iBACX;aACF,CAAC;QACJ,CAAC;QAED,sBAAsB;QACtB,OAAO;YACL,KAAK,EAAE,OAAO;YACd,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,OAAO,EAAE;gBACP,aAAa,EAAE,IAAI;gBACnB,UAAU,EAAE,KAAK,CAAC,KAAK;gBACvB,WAAW,EAAE,KAAK,CAAC,MAAM;gBACzB,aAAa,EAAE,KAAK,CAAC,QAAQ;gBAC7B,gBAAgB;gBAChB,gBAAgB;aACjB;SACF,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,cAAc,CAAC,IAAc;QACzC,IAAI,MAAwB,CAAC;QAE7B,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;YAElD,IAAI,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACnC,SAAS;YACX,CAAC;YAED,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG,MAAM,IAAA,WAAI,EAAC,GAAG,QAAQ,wCAAwC,EAAE;oBAC5E,MAAM,EAAE,CAAC,oBAAoB,EAAE,YAAY,EAAE,YAAY,CAAC;iBAC3D,CAAC,CAAC;gBAEH,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;oBACzB,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBACjC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,GAAG,MAAM,EAAE,CAAC;wBACnC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC;oBACtB,CAAC;gBACH,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,2CAA2C;YAC7C,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,eAAe;QAC3B,IAAI,MAAwB,CAAC;QAE7B,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,IAAA,WAAI,EAAC,GAAG,IAAI,CAAC,UAAU,UAAU,CAAC,CAAC;YAEvD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACjC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,GAAG,MAAM,EAAE,CAAC;oBACnC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC;gBACtB,CAAC;YACH,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,gBAAgB;QAClB,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,aAAa,CAAC,MAA4B;QAC/C,QAAQ,MAAM,CAAC,KAAK,EAAE,CAAC;YACrB,KAAK,KAAK;gBACR,OAAO,gCAAgC,CAAC;YAC1C,KAAK,UAAU;gBACb,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,aAAa,OAAO,MAAM,CAAC,OAAO,CAAC,UAAU,0BAA0B,CAAC;YACnG,KAAK,UAAU;gBACb,OAAO,oBAAoB,MAAM,CAAC,OAAO,CAAC,UAAU,qBAAqB,CAAC;YAC5E,KAAK,OAAO;gBACV,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,iCAAiC,CAAC;QACzE,CAAC;IACH,CAAC;CACF;AA7JD,sCA6JC;AAEyB,gCAAO"}
@@ -0,0 +1,2 @@
1
+ export { UpdateService, type UpdateCommandFlags, type UpdateAnalysis, type ModifiedFile, type AffectedDoc } from './updateService';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/update/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,KAAK,kBAAkB,EACvB,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,KAAK,WAAW,EACjB,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.UpdateService = void 0;
4
+ var updateService_1 = require("./updateService");
5
+ Object.defineProperty(exports, "UpdateService", { enumerable: true, get: function () { return updateService_1.UpdateService; } });
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/services/update/index.ts"],"names":[],"mappings":";;;AAAA,iDAMyB;AALvB,8GAAA,aAAa,OAAA"}
@@ -0,0 +1,64 @@
1
+ import type { CLIInterface } from '../../utils/cliUI';
2
+ import type { TranslateFn } from '../../utils/i18n';
3
+ import type { LLMConfig } from '../../types';
4
+ export interface UpdateCommandFlags {
5
+ output?: string;
6
+ verbose?: boolean;
7
+ model?: string;
8
+ provider?: LLMConfig['provider'];
9
+ apiKey?: string;
10
+ baseUrl?: string;
11
+ dryRun?: boolean;
12
+ /** Use git diff to detect changes (falls back to mtime if not available) */
13
+ useGit?: boolean;
14
+ /** Number of days to look back for changes */
15
+ days?: number;
16
+ }
17
+ export interface ModifiedFile {
18
+ path: string;
19
+ relativePath: string;
20
+ modifiedAt: Date;
21
+ }
22
+ export interface AffectedDoc {
23
+ path: string;
24
+ relativePath: string;
25
+ references: string[];
26
+ }
27
+ export interface UpdateAnalysis {
28
+ modifiedCodeFiles: ModifiedFile[];
29
+ affectedDocs: AffectedDoc[];
30
+ daysBehind: number;
31
+ lastCodeChange: Date | null;
32
+ lastDocChange: Date | null;
33
+ }
34
+ interface UpdateServiceDependencies {
35
+ ui: CLIInterface;
36
+ t: TranslateFn;
37
+ }
38
+ export declare class UpdateService {
39
+ private readonly ui;
40
+ private readonly t;
41
+ constructor(dependencies: UpdateServiceDependencies);
42
+ /**
43
+ * Analyze what needs to be updated
44
+ */
45
+ analyze(repoPath: string, options?: UpdateCommandFlags): Promise<UpdateAnalysis>;
46
+ /**
47
+ * Display analysis results to the user
48
+ */
49
+ displayAnalysis(analysis: UpdateAnalysis): void;
50
+ /**
51
+ * Get list of files that would be updated
52
+ */
53
+ getFilesToUpdate(analysis: UpdateAnalysis): string[];
54
+ private getModifiedCodeFiles;
55
+ private isGitRepo;
56
+ private getModifiedFilesFromGit;
57
+ private getModifiedFilesByMtime;
58
+ private isCodeFile;
59
+ private getDocFiles;
60
+ private findAffectedDocs;
61
+ private getLastModificationTime;
62
+ }
63
+ export {};
64
+ //# sourceMappingURL=updateService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"updateService.d.ts","sourceRoot":"","sources":["../../../src/services/update/updateService.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,MAAM,WAAW,kBAAkB;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,SAAS,CAAC,UAAU,CAAC,CAAC;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,4EAA4E;IAC5E,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,8CAA8C;IAC9C,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,IAAI,CAAC;CAClB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,cAAc;IAC7B,iBAAiB,EAAE,YAAY,EAAE,CAAC;IAClC,YAAY,EAAE,WAAW,EAAE,CAAC;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,IAAI,GAAG,IAAI,CAAC;IAC5B,aAAa,EAAE,IAAI,GAAG,IAAI,CAAC;CAC5B;AAED,UAAU,yBAAyB;IACjC,EAAE,EAAE,YAAY,CAAC;IACjB,CAAC,EAAE,WAAW,CAAC;CAChB;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAe;IAClC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAc;gBAEpB,YAAY,EAAE,yBAAyB;IAKnD;;OAEG;IACG,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE,kBAAuB,GAAG,OAAO,CAAC,cAAc,CAAC;IAkC1F;;OAEG;IACH,eAAe,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI;IAoC/C;;OAEG;IACH,gBAAgB,CAAC,QAAQ,EAAE,cAAc,GAAG,MAAM,EAAE;YAItC,oBAAoB;IAelC,OAAO,CAAC,SAAS;YASH,uBAAuB;YAmDvB,uBAAuB;IA6CrC,OAAO,CAAC,UAAU;YAUJ,WAAW;YAWX,gBAAgB;YA2DhB,uBAAuB;CAqBtC"}
@@ -0,0 +1,295 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.UpdateService = void 0;
37
+ const path = __importStar(require("path"));
38
+ const fs = __importStar(require("fs-extra"));
39
+ const glob_1 = require("glob");
40
+ const child_process_1 = require("child_process");
41
+ const theme_1 = require("../../utils/theme");
42
+ class UpdateService {
43
+ constructor(dependencies) {
44
+ this.ui = dependencies.ui;
45
+ this.t = dependencies.t;
46
+ }
47
+ /**
48
+ * Analyze what needs to be updated
49
+ */
50
+ async analyze(repoPath, options = {}) {
51
+ const resolvedRepo = path.resolve(repoPath);
52
+ const contextDir = path.join(resolvedRepo, options.output || '.context');
53
+ const docsDir = path.join(contextDir, 'docs');
54
+ // Get modified code files
55
+ const modifiedCodeFiles = await this.getModifiedCodeFiles(resolvedRepo, contextDir, options);
56
+ // Get all docs
57
+ const docFiles = await this.getDocFiles(docsDir);
58
+ // Find which docs reference the modified files
59
+ const affectedDocs = await this.findAffectedDocs(docFiles, modifiedCodeFiles);
60
+ // Calculate timing
61
+ const lastCodeChange = modifiedCodeFiles.length > 0
62
+ ? new Date(Math.max(...modifiedCodeFiles.map(f => f.modifiedAt.getTime())))
63
+ : null;
64
+ const lastDocChange = await this.getLastModificationTime(docsDir);
65
+ const daysBehind = lastCodeChange && lastDocChange
66
+ ? Math.floor((lastCodeChange.getTime() - lastDocChange.getTime()) / (1000 * 60 * 60 * 24))
67
+ : 0;
68
+ return {
69
+ modifiedCodeFiles,
70
+ affectedDocs,
71
+ daysBehind: Math.max(0, daysBehind),
72
+ lastCodeChange,
73
+ lastDocChange
74
+ };
75
+ }
76
+ /**
77
+ * Display analysis results to the user
78
+ */
79
+ displayAnalysis(analysis) {
80
+ if (analysis.modifiedCodeFiles.length === 0) {
81
+ console.log(`\n${theme_1.symbols.success} Documentation is up to date!`);
82
+ return;
83
+ }
84
+ console.log(`\n${theme_1.colors.primaryBold('Modified code files:')} ${analysis.modifiedCodeFiles.length}`);
85
+ const filesToShow = analysis.modifiedCodeFiles.slice(0, 10);
86
+ for (const file of filesToShow) {
87
+ console.log(theme_1.colors.secondaryDim(` ${file.relativePath}`));
88
+ }
89
+ if (analysis.modifiedCodeFiles.length > 10) {
90
+ console.log(theme_1.colors.secondaryDim(` ... and ${analysis.modifiedCodeFiles.length - 10} more`));
91
+ }
92
+ if (analysis.affectedDocs.length > 0) {
93
+ console.log(`\n${theme_1.colors.primaryBold('Docs that may need updating:')} ${analysis.affectedDocs.length}`);
94
+ for (const doc of analysis.affectedDocs) {
95
+ const refs = doc.references.slice(0, 3).join(', ');
96
+ const moreRefs = doc.references.length > 3 ? ` (+${doc.references.length - 3} more)` : '';
97
+ console.log(theme_1.colors.secondary(` ${theme_1.symbols.bullet} ${doc.relativePath}`));
98
+ console.log(theme_1.colors.secondaryDim(` mentions: ${refs}${moreRefs}`));
99
+ }
100
+ }
101
+ else {
102
+ console.log(`\n${theme_1.colors.secondaryDim('No docs directly reference the modified files.')}`);
103
+ console.log(theme_1.colors.secondaryDim('Consider running a full update to ensure everything is current.'));
104
+ }
105
+ if (analysis.daysBehind > 0) {
106
+ console.log(`\n${theme_1.colors.warning(`⚠ Docs are ${analysis.daysBehind} day(s) behind code changes`)}`);
107
+ }
108
+ }
109
+ /**
110
+ * Get list of files that would be updated
111
+ */
112
+ getFilesToUpdate(analysis) {
113
+ return analysis.affectedDocs.map(doc => doc.path);
114
+ }
115
+ async getModifiedCodeFiles(repoPath, contextDir, options) {
116
+ const useGit = options.useGit !== false && this.isGitRepo(repoPath);
117
+ const days = options.days || 30;
118
+ if (useGit) {
119
+ return this.getModifiedFilesFromGit(repoPath, contextDir, days);
120
+ }
121
+ return this.getModifiedFilesByMtime(repoPath, contextDir, days);
122
+ }
123
+ isGitRepo(repoPath) {
124
+ try {
125
+ (0, child_process_1.execSync)('git rev-parse --is-inside-work-tree', { cwd: repoPath, stdio: 'pipe' });
126
+ return true;
127
+ }
128
+ catch {
129
+ return false;
130
+ }
131
+ }
132
+ async getModifiedFilesFromGit(repoPath, contextDir, days) {
133
+ try {
134
+ // Get files modified in the last N days
135
+ const since = new Date();
136
+ since.setDate(since.getDate() - days);
137
+ const sinceStr = since.toISOString().split('T')[0];
138
+ const output = (0, child_process_1.execSync)(`git log --since="${sinceStr}" --name-only --pretty=format: | sort -u | grep -v "^$"`, { cwd: repoPath, encoding: 'utf-8', stdio: ['pipe', 'pipe', 'pipe'] }).trim();
139
+ if (!output) {
140
+ return [];
141
+ }
142
+ const files = output.split('\n').filter(f => f.trim());
143
+ const result = [];
144
+ for (const file of files) {
145
+ const fullPath = path.join(repoPath, file);
146
+ // Skip context directory and non-code files
147
+ if (fullPath.startsWith(contextDir))
148
+ continue;
149
+ if (!this.isCodeFile(file))
150
+ continue;
151
+ try {
152
+ const stat = await fs.stat(fullPath);
153
+ if (stat.isFile()) {
154
+ result.push({
155
+ path: fullPath,
156
+ relativePath: file,
157
+ modifiedAt: stat.mtime
158
+ });
159
+ }
160
+ }
161
+ catch {
162
+ // File may have been deleted
163
+ }
164
+ }
165
+ return result;
166
+ }
167
+ catch {
168
+ // Fall back to mtime if git command fails
169
+ return this.getModifiedFilesByMtime(repoPath, contextDir, days);
170
+ }
171
+ }
172
+ async getModifiedFilesByMtime(repoPath, contextDir, days) {
173
+ const cutoff = new Date();
174
+ cutoff.setDate(cutoff.getDate() - days);
175
+ const patterns = [
176
+ '**/*.ts', '**/*.tsx', '**/*.js', '**/*.jsx',
177
+ '**/*.py', '**/*.go', '**/*.rs', '**/*.java',
178
+ '**/*.rb', '**/*.php', '**/*.c', '**/*.cpp', '**/*.h'
179
+ ];
180
+ const result = [];
181
+ for (const pattern of patterns) {
182
+ const files = await (0, glob_1.glob)(pattern, {
183
+ cwd: repoPath,
184
+ ignore: ['**/node_modules/**', '**/.git/**', '.context/**'],
185
+ absolute: true
186
+ });
187
+ for (const file of files) {
188
+ if (file.startsWith(contextDir))
189
+ continue;
190
+ try {
191
+ const stat = await fs.stat(file);
192
+ if (stat.mtime >= cutoff) {
193
+ result.push({
194
+ path: file,
195
+ relativePath: path.relative(repoPath, file),
196
+ modifiedAt: stat.mtime
197
+ });
198
+ }
199
+ }
200
+ catch {
201
+ // Skip files we can't stat
202
+ }
203
+ }
204
+ }
205
+ // Sort by modification time (newest first)
206
+ return result.sort((a, b) => b.modifiedAt.getTime() - a.modifiedAt.getTime());
207
+ }
208
+ isCodeFile(filePath) {
209
+ const ext = path.extname(filePath).toLowerCase();
210
+ const codeExtensions = [
211
+ '.ts', '.tsx', '.js', '.jsx', '.mjs', '.cjs',
212
+ '.py', '.go', '.rs', '.java', '.rb', '.php',
213
+ '.c', '.cpp', '.h', '.hpp', '.cs', '.swift', '.kt'
214
+ ];
215
+ return codeExtensions.includes(ext);
216
+ }
217
+ async getDocFiles(docsDir) {
218
+ if (!await fs.pathExists(docsDir)) {
219
+ return [];
220
+ }
221
+ return (0, glob_1.glob)('**/*.md', {
222
+ cwd: docsDir,
223
+ absolute: true
224
+ });
225
+ }
226
+ async findAffectedDocs(docFiles, modifiedFiles) {
227
+ if (modifiedFiles.length === 0) {
228
+ return [];
229
+ }
230
+ // Build search terms from modified files
231
+ const searchTerms = new Set();
232
+ for (const file of modifiedFiles) {
233
+ // Add filename without extension
234
+ const basename = path.basename(file.relativePath, path.extname(file.relativePath));
235
+ searchTerms.add(basename);
236
+ // Add camelCase/PascalCase variations
237
+ // e.g., "authService" from "authService.ts"
238
+ if (basename.includes('-')) {
239
+ // kebab-case to camelCase: "auth-service" -> "authService"
240
+ const camel = basename.replace(/-([a-z])/g, (_, c) => c.toUpperCase());
241
+ searchTerms.add(camel);
242
+ }
243
+ // Add directory name if it seems significant
244
+ const dirName = path.basename(path.dirname(file.relativePath));
245
+ if (dirName && dirName !== '.' && dirName !== 'src') {
246
+ searchTerms.add(dirName);
247
+ }
248
+ }
249
+ const affectedDocs = [];
250
+ for (const docPath of docFiles) {
251
+ try {
252
+ const content = await fs.readFile(docPath, 'utf-8');
253
+ const contentLower = content.toLowerCase();
254
+ const references = [];
255
+ for (const term of searchTerms) {
256
+ if (contentLower.includes(term.toLowerCase())) {
257
+ references.push(term);
258
+ }
259
+ }
260
+ if (references.length > 0) {
261
+ affectedDocs.push({
262
+ path: docPath,
263
+ relativePath: path.basename(path.dirname(docPath)) + '/' + path.basename(docPath),
264
+ references
265
+ });
266
+ }
267
+ }
268
+ catch {
269
+ // Skip files we can't read
270
+ }
271
+ }
272
+ return affectedDocs;
273
+ }
274
+ async getLastModificationTime(dir) {
275
+ if (!await fs.pathExists(dir)) {
276
+ return null;
277
+ }
278
+ const files = await (0, glob_1.glob)('**/*.md', { cwd: dir, absolute: true });
279
+ let latest = null;
280
+ for (const file of files) {
281
+ try {
282
+ const stat = await fs.stat(file);
283
+ if (!latest || stat.mtime > latest) {
284
+ latest = stat.mtime;
285
+ }
286
+ }
287
+ catch {
288
+ // Skip
289
+ }
290
+ }
291
+ return latest;
292
+ }
293
+ }
294
+ exports.UpdateService = UpdateService;
295
+ //# sourceMappingURL=updateService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"updateService.js","sourceRoot":"","sources":["../../../src/services/update/updateService.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -19,11 +19,6 @@ export interface RepoStructure {
19
19
  totalSize: number;
20
20
  topLevelDirectoryStats: TopLevelDirectoryStats[];
21
21
  }
22
- export interface OpenRouterConfig {
23
- apiKey: string;
24
- baseUrl: string;
25
- model: string;
26
- }
27
22
  export type AIProvider = 'openrouter' | 'openai' | 'anthropic' | 'google';
28
23
  export interface LLMConfig {
29
24
  apiKey: string;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;CAC5B;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,WAAW,EAAE,QAAQ,EAAE,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,sBAAsB,EAAE,sBAAsB,EAAE,CAAC;CAClD;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,MAAM,UAAU,GAAG,YAAY,GAAG,QAAQ,GAAG,WAAW,GAAG,QAAQ,CAAC;AAE1E,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,UAAU,CAAC;CACtB;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,SAAS,CAAC,UAAU,CAAC,CAAC;IACjC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,UAAU;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,UAAU;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;CACf"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;CAC5B;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,WAAW,EAAE,QAAQ,EAAE,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,sBAAsB,EAAE,sBAAsB,EAAE,CAAC;CAClD;AAED,MAAM,MAAM,UAAU,GAAG,YAAY,GAAG,QAAQ,GAAG,WAAW,GAAG,QAAQ,CAAC;AAE1E,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,UAAU,CAAC;CACtB;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,SAAS,CAAC,UAAU,CAAC,CAAC;IACjC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,UAAU;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,UAAU;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;CACf"}