@mytechtoday/augment-extensions 0.4.0 → 0.7.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 (226) hide show
  1. package/README.md +6 -6
  2. package/augment-extensions/domain-rules/design/color/themes/catppuccin-latte/README.md +23 -0
  3. package/augment-extensions/domain-rules/design/color/themes/catppuccin-latte/module.json +26 -0
  4. package/augment-extensions/domain-rules/design/color/themes/catppuccin-mocha/README.md +23 -0
  5. package/augment-extensions/domain-rules/design/color/themes/catppuccin-mocha/module.json +26 -0
  6. package/augment-extensions/domain-rules/design/color/themes/dracula/README.md +23 -0
  7. package/augment-extensions/domain-rules/design/color/themes/dracula/module.json +26 -0
  8. package/augment-extensions/domain-rules/design/color/themes/gruvbox-dark/README.md +23 -0
  9. package/augment-extensions/domain-rules/design/color/themes/gruvbox-dark/module.json +26 -0
  10. package/augment-extensions/domain-rules/design/color/themes/gruvbox-light/README.md +23 -0
  11. package/augment-extensions/domain-rules/design/color/themes/gruvbox-light/module.json +26 -0
  12. package/augment-extensions/domain-rules/design/color/themes/high-contrast/README.md +27 -0
  13. package/augment-extensions/domain-rules/design/color/themes/high-contrast/module.json +26 -0
  14. package/augment-extensions/domain-rules/design/color/themes/monokai/README.md +23 -0
  15. package/augment-extensions/domain-rules/design/color/themes/monokai/module.json +26 -0
  16. package/augment-extensions/domain-rules/design/color/themes/nord/README.md +23 -0
  17. package/augment-extensions/domain-rules/design/color/themes/nord/module.json +26 -0
  18. package/augment-extensions/domain-rules/design/color/themes/one-dark/README.md +23 -0
  19. package/augment-extensions/domain-rules/design/color/themes/one-dark/module.json +26 -0
  20. package/augment-extensions/domain-rules/design/color/themes/one-light/README.md +23 -0
  21. package/augment-extensions/domain-rules/design/color/themes/one-light/module.json +26 -0
  22. package/augment-extensions/domain-rules/design/color/themes/solarized-dark/README.md +23 -0
  23. package/augment-extensions/domain-rules/design/color/themes/solarized-dark/module.json +26 -0
  24. package/augment-extensions/domain-rules/design/color/themes/solarized-light/README.md +23 -0
  25. package/augment-extensions/domain-rules/design/color/themes/solarized-light/module.json +26 -0
  26. package/augment-extensions/domain-rules/design/color/themes/tokyo-night/README.md +23 -0
  27. package/augment-extensions/domain-rules/design/color/themes/tokyo-night/module.json +26 -0
  28. package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/README.md +136 -0
  29. package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/SCHEMA-VALIDATION-REPORT.md +216 -0
  30. package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/examples/brand-kit-example.yaml +292 -0
  31. package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/examples/campaign-brief-example.yaml +389 -0
  32. package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/examples/content-calendar-example.yaml +643 -0
  33. package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/examples/email-newsletter-example.md +376 -0
  34. package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/examples/landing-page-example.md +934 -0
  35. package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/examples/ppc-ad-copy-example.md +301 -0
  36. package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/examples/seo-blog-post-example.md +347 -0
  37. package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/examples/social-media-campaign-example.md +606 -0
  38. package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/module.json +50 -0
  39. package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/rules/affiliate-influencer-marketing.md +593 -0
  40. package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/rules/asset-management.md +418 -0
  41. package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/rules/brand-consistency.md +210 -0
  42. package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/rules/content-marketing.md +337 -0
  43. package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/rules/conversion-optimization.md +455 -0
  44. package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/rules/direct-sales.md +499 -0
  45. package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/rules/email-marketing.md +439 -0
  46. package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/rules/legal-compliance.md +227 -0
  47. package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/rules/ppc-advertising.md +569 -0
  48. package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/rules/seo-optimization.md +470 -0
  49. package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/rules/social-media-marketing.md +414 -0
  50. package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/rules/universal-marketing.md +177 -0
  51. package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/schemas/asset-inventory.schema.json +247 -0
  52. package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/schemas/brand-kit.schema.json +326 -0
  53. package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/schemas/campaign-brief.schema.json +342 -0
  54. package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/schemas/color-palette.schema.json +223 -0
  55. package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/schemas/content-template.schema.json +383 -0
  56. package/augment-extensions/workflows/beads-integration/IMPLEMENTATION-STATUS.md +145 -0
  57. package/augment-extensions/workflows/beads-integration/README.md +143 -0
  58. package/augment-extensions/workflows/beads-integration/config/defaults.json +32 -0
  59. package/augment-extensions/workflows/beads-integration/config/schema.json +140 -0
  60. package/augment-extensions/workflows/beads-integration/examples/basic-task-generation.md +293 -0
  61. package/augment-extensions/workflows/beads-integration/module.json +75 -0
  62. package/augment-extensions/workflows/beads-integration/rules/core-rules.md +219 -0
  63. package/augment-extensions/workflows/beads-integration/rules/effectiveness-standards.md +256 -0
  64. package/augment-extensions/workflows/beads-integration/rules/task-generation.md +607 -0
  65. package/augment-extensions/writing-standards/screenplay/README.md +135 -6
  66. package/augment-extensions/writing-standards/screenplay/_templates/README.md +121 -0
  67. package/augment-extensions/writing-standards/screenplay/_templates/genre-template.md +153 -0
  68. package/augment-extensions/writing-standards/screenplay/_templates/style-template.md +243 -0
  69. package/augment-extensions/writing-standards/screenplay/_templates/theme-template.md +213 -0
  70. package/augment-extensions/writing-standards/screenplay/examples/beat-sheet-example.yaml +95 -0
  71. package/augment-extensions/writing-standards/screenplay/examples/character-profile-example.yaml +116 -0
  72. package/augment-extensions/writing-standards/screenplay/examples/commercial-30sec.fountain +151 -0
  73. package/augment-extensions/writing-standards/screenplay/examples/independent-monologue.fountain +67 -0
  74. package/augment-extensions/writing-standards/screenplay/examples/news-segment.fountain +142 -0
  75. package/augment-extensions/writing-standards/screenplay/examples/plot-outline-example.yaml +184 -0
  76. package/augment-extensions/writing-standards/screenplay/examples/tv-episode-teaser.fountain +204 -0
  77. package/augment-extensions/writing-standards/screenplay/genres/README.md +181 -0
  78. package/augment-extensions/writing-standards/screenplay/genres/examples/.gitkeep +2 -0
  79. package/augment-extensions/writing-standards/screenplay/genres/module.json +70 -0
  80. package/augment-extensions/writing-standards/screenplay/genres/rules/.gitkeep +2 -0
  81. package/augment-extensions/writing-standards/screenplay/genres/rules/action.md +399 -0
  82. package/augment-extensions/writing-standards/screenplay/genres/rules/adventure.md +407 -0
  83. package/augment-extensions/writing-standards/screenplay/genres/rules/animation.md +293 -0
  84. package/augment-extensions/writing-standards/screenplay/genres/rules/biographical.md +293 -0
  85. package/augment-extensions/writing-standards/screenplay/genres/rules/comedy.md +401 -0
  86. package/augment-extensions/writing-standards/screenplay/genres/rules/documentary.md +293 -0
  87. package/augment-extensions/writing-standards/screenplay/genres/rules/drama.md +409 -0
  88. package/augment-extensions/writing-standards/screenplay/genres/rules/fantasy.md +293 -0
  89. package/augment-extensions/writing-standards/screenplay/genres/rules/historical.md +293 -0
  90. package/augment-extensions/writing-standards/screenplay/genres/rules/horror.md +268 -0
  91. package/augment-extensions/writing-standards/screenplay/genres/rules/musical.md +294 -0
  92. package/augment-extensions/writing-standards/screenplay/genres/rules/mystery.md +293 -0
  93. package/augment-extensions/writing-standards/screenplay/genres/rules/noir.md +294 -0
  94. package/augment-extensions/writing-standards/screenplay/genres/rules/romance.md +293 -0
  95. package/augment-extensions/writing-standards/screenplay/genres/rules/sci-fi.md +289 -0
  96. package/augment-extensions/writing-standards/screenplay/genres/rules/superhero.md +293 -0
  97. package/augment-extensions/writing-standards/screenplay/genres/rules/thriller.md +294 -0
  98. package/augment-extensions/writing-standards/screenplay/genres/rules/western.md +293 -0
  99. package/augment-extensions/writing-standards/screenplay/module.json +1 -1
  100. package/augment-extensions/writing-standards/screenplay/rules/aaa-hollywood-films.md +339 -0
  101. package/augment-extensions/writing-standards/screenplay/rules/ai-integration-testing.md +329 -0
  102. package/augment-extensions/writing-standards/screenplay/rules/character-development.md +169 -0
  103. package/augment-extensions/writing-standards/screenplay/rules/commercials.md +437 -0
  104. package/augment-extensions/writing-standards/screenplay/rules/dialogue-writing.md +263 -0
  105. package/augment-extensions/writing-standards/screenplay/rules/diversity-inclusion.md +261 -0
  106. package/augment-extensions/writing-standards/screenplay/rules/examples-guide.md +315 -0
  107. package/augment-extensions/writing-standards/screenplay/rules/formatting-validation.md +413 -0
  108. package/augment-extensions/writing-standards/screenplay/rules/fountain-format.md +372 -0
  109. package/augment-extensions/writing-standards/screenplay/rules/independent-films.md +374 -0
  110. package/augment-extensions/writing-standards/screenplay/rules/live-tv-productions.md +443 -0
  111. package/augment-extensions/writing-standards/screenplay/rules/narrative-structures.md +207 -0
  112. package/augment-extensions/writing-standards/screenplay/rules/news-broadcasts.md +444 -0
  113. package/augment-extensions/writing-standards/screenplay/rules/pacing-timing.md +331 -0
  114. package/augment-extensions/writing-standards/screenplay/rules/quality-review-checklist.md +334 -0
  115. package/augment-extensions/writing-standards/screenplay/rules/quick-reference.md +299 -0
  116. package/augment-extensions/writing-standards/screenplay/rules/screen-continuity.md +263 -0
  117. package/augment-extensions/writing-standards/screenplay/rules/streaming-content.md +412 -0
  118. package/augment-extensions/writing-standards/screenplay/rules/trope-management.md +370 -0
  119. package/augment-extensions/writing-standards/screenplay/rules/tv-series.md +374 -0
  120. package/augment-extensions/writing-standards/screenplay/rules/vscode-integration.md +277 -0
  121. package/augment-extensions/writing-standards/screenplay/rules/web-content.md +393 -0
  122. package/augment-extensions/writing-standards/screenplay/schemas/beat-sheet.json +332 -0
  123. package/augment-extensions/writing-standards/screenplay/schemas/character-profile.json +247 -0
  124. package/augment-extensions/writing-standards/screenplay/schemas/feature-selection.json +200 -0
  125. package/augment-extensions/writing-standards/screenplay/schemas/plot-outline.json +233 -0
  126. package/augment-extensions/writing-standards/screenplay/schemas/screenplay-config.json +245 -0
  127. package/augment-extensions/writing-standards/screenplay/schemas/trope-inventory.json +221 -0
  128. package/augment-extensions/writing-standards/screenplay/styles/README.md +159 -0
  129. package/augment-extensions/writing-standards/screenplay/styles/examples/.gitkeep +2 -0
  130. package/augment-extensions/writing-standards/screenplay/styles/examples/style-applications.md +1449 -0
  131. package/augment-extensions/writing-standards/screenplay/styles/module.json +64 -0
  132. package/augment-extensions/writing-standards/screenplay/styles/rules/.gitkeep +2 -0
  133. package/augment-extensions/writing-standards/screenplay/styles/rules/dialogue-centric.md +520 -0
  134. package/augment-extensions/writing-standards/screenplay/styles/rules/ensemble.md +499 -0
  135. package/augment-extensions/writing-standards/screenplay/styles/rules/epic.md +497 -0
  136. package/augment-extensions/writing-standards/screenplay/styles/rules/experimental.md +492 -0
  137. package/augment-extensions/writing-standards/screenplay/styles/rules/flashback.md +509 -0
  138. package/augment-extensions/writing-standards/screenplay/styles/rules/linear.md +490 -0
  139. package/augment-extensions/writing-standards/screenplay/styles/rules/minimalist.md +499 -0
  140. package/augment-extensions/writing-standards/screenplay/styles/rules/non-linear.md +501 -0
  141. package/augment-extensions/writing-standards/screenplay/styles/rules/poetic.md +499 -0
  142. package/augment-extensions/writing-standards/screenplay/styles/rules/realistic.md +498 -0
  143. package/augment-extensions/writing-standards/screenplay/styles/rules/satirical.md +499 -0
  144. package/augment-extensions/writing-standards/screenplay/styles/rules/surreal.md +508 -0
  145. package/augment-extensions/writing-standards/screenplay/styles/rules/voice-over.md +500 -0
  146. package/augment-extensions/writing-standards/screenplay/themes/README.md +158 -0
  147. package/augment-extensions/writing-standards/screenplay/themes/examples/.gitkeep +2 -0
  148. package/augment-extensions/writing-standards/screenplay/themes/examples/common-mistakes-and-fixes.md +643 -0
  149. package/augment-extensions/writing-standards/screenplay/themes/examples/complete-scene-example.md +311 -0
  150. package/augment-extensions/writing-standards/screenplay/themes/examples/individual-theme-examples.md +562 -0
  151. package/augment-extensions/writing-standards/screenplay/themes/examples/multi-theme-weaving.md +538 -0
  152. package/augment-extensions/writing-standards/screenplay/themes/examples/theme-application-guide.md +432 -0
  153. package/augment-extensions/writing-standards/screenplay/themes/examples/theme-integration-across-acts.md +637 -0
  154. package/augment-extensions/writing-standards/screenplay/themes/module.json +66 -0
  155. package/augment-extensions/writing-standards/screenplay/themes/rules/.gitkeep +2 -0
  156. package/augment-extensions/writing-standards/screenplay/themes/rules/ambition.md +458 -0
  157. package/augment-extensions/writing-standards/screenplay/themes/rules/betrayal.md +490 -0
  158. package/augment-extensions/writing-standards/screenplay/themes/rules/environment.md +458 -0
  159. package/augment-extensions/writing-standards/screenplay/themes/rules/fate.md +459 -0
  160. package/augment-extensions/writing-standards/screenplay/themes/rules/friendship.md +491 -0
  161. package/augment-extensions/writing-standards/screenplay/themes/rules/growth.md +491 -0
  162. package/augment-extensions/writing-standards/screenplay/themes/rules/identity.md +490 -0
  163. package/augment-extensions/writing-standards/screenplay/themes/rules/isolation.md +464 -0
  164. package/augment-extensions/writing-standards/screenplay/themes/rules/justice.md +461 -0
  165. package/augment-extensions/writing-standards/screenplay/themes/rules/love.md +489 -0
  166. package/augment-extensions/writing-standards/screenplay/themes/rules/power.md +494 -0
  167. package/augment-extensions/writing-standards/screenplay/themes/rules/redemption.md +483 -0
  168. package/augment-extensions/writing-standards/screenplay/themes/rules/revenge.md +489 -0
  169. package/augment-extensions/writing-standards/screenplay/themes/rules/survival.md +496 -0
  170. package/augment-extensions/writing-standards/screenplay/themes/rules/technology.md +463 -0
  171. package/cli/dist/cli.js +30 -1
  172. package/cli/dist/cli.js.map +1 -1
  173. package/cli/dist/commands/show.d.ts +23 -0
  174. package/cli/dist/commands/show.d.ts.map +1 -1
  175. package/cli/dist/commands/show.js +928 -10
  176. package/cli/dist/commands/show.js.map +1 -1
  177. package/cli/dist/types/gui.d.ts +62 -0
  178. package/cli/dist/types/gui.d.ts.map +1 -0
  179. package/cli/dist/types/gui.js +30 -0
  180. package/cli/dist/types/gui.js.map +1 -0
  181. package/cli/dist/utils/config-system.d.ts +111 -0
  182. package/cli/dist/utils/config-system.d.ts.map +1 -0
  183. package/cli/dist/utils/config-system.js +239 -0
  184. package/cli/dist/utils/config-system.js.map +1 -0
  185. package/cli/dist/utils/gui-helpers.d.ts +23 -0
  186. package/cli/dist/utils/gui-helpers.d.ts.map +1 -0
  187. package/cli/dist/utils/gui-helpers.js +159 -0
  188. package/cli/dist/utils/gui-helpers.js.map +1 -0
  189. package/cli/dist/utils/hook-system.d.ts +84 -0
  190. package/cli/dist/utils/hook-system.d.ts.map +1 -0
  191. package/cli/dist/utils/hook-system.js +151 -0
  192. package/cli/dist/utils/hook-system.js.map +1 -0
  193. package/cli/dist/utils/inspection-cache.d.ts +56 -0
  194. package/cli/dist/utils/inspection-cache.d.ts.map +1 -0
  195. package/cli/dist/utils/inspection-cache.js +166 -0
  196. package/cli/dist/utils/inspection-cache.js.map +1 -0
  197. package/cli/dist/utils/inspection-handlers.d.ts +75 -0
  198. package/cli/dist/utils/inspection-handlers.d.ts.map +1 -0
  199. package/cli/dist/utils/inspection-handlers.js +171 -0
  200. package/cli/dist/utils/inspection-handlers.js.map +1 -0
  201. package/cli/dist/utils/module-system.d.ts +81 -1
  202. package/cli/dist/utils/module-system.d.ts.map +1 -1
  203. package/cli/dist/utils/module-system.js +393 -16
  204. package/cli/dist/utils/module-system.js.map +1 -1
  205. package/cli/dist/utils/plugin-system.d.ts +133 -0
  206. package/cli/dist/utils/plugin-system.d.ts.map +1 -0
  207. package/cli/dist/utils/plugin-system.js +210 -0
  208. package/cli/dist/utils/plugin-system.js.map +1 -0
  209. package/cli/dist/utils/progress.d.ts +67 -0
  210. package/cli/dist/utils/progress.d.ts.map +1 -0
  211. package/cli/dist/utils/progress.js +146 -0
  212. package/cli/dist/utils/progress.js.map +1 -0
  213. package/cli/dist/utils/stream-reader.d.ts +34 -0
  214. package/cli/dist/utils/stream-reader.d.ts.map +1 -0
  215. package/cli/dist/utils/stream-reader.js +147 -0
  216. package/cli/dist/utils/stream-reader.js.map +1 -0
  217. package/cli/dist/utils/vscode-editor.d.ts +45 -0
  218. package/cli/dist/utils/vscode-editor.d.ts.map +1 -0
  219. package/cli/dist/utils/vscode-editor.js +171 -0
  220. package/cli/dist/utils/vscode-editor.js.map +1 -0
  221. package/cli/dist/utils/vscode-links.d.ts +49 -0
  222. package/cli/dist/utils/vscode-links.d.ts.map +1 -0
  223. package/cli/dist/utils/vscode-links.js +167 -0
  224. package/cli/dist/utils/vscode-links.js.map +1 -0
  225. package/modules.md +44 -2
  226. package/package.json +6 -4
@@ -0,0 +1,159 @@
1
+ "use strict";
2
+ /**
3
+ * GUI Helper Functions
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.loadGuiConfig = loadGuiConfig;
7
+ exports.formatModuleChoice = formatModuleChoice;
8
+ exports.fuzzySearch = fuzzySearch;
9
+ exports.filterModules = filterModules;
10
+ const gui_1 = require("../types/gui");
11
+ /**
12
+ * Load GUI configuration from VS Code settings or use defaults
13
+ */
14
+ function loadGuiConfig() {
15
+ // In a real implementation, this would read from VS Code settings
16
+ // For now, return default config
17
+ return { ...gui_1.DEFAULT_GUI_CONFIG };
18
+ }
19
+ /**
20
+ * Format module for display in GUI
21
+ */
22
+ function formatModuleChoice(module, linkedModules = []) {
23
+ return {
24
+ name: `${module.metadata.displayName} (${module.fullName})`,
25
+ value: module.fullName,
26
+ description: module.metadata.description,
27
+ type: module.metadata.type,
28
+ priority: module.metadata.augment?.priority,
29
+ characterCount: module.metadata.augment?.characterCount,
30
+ linked: linkedModules.includes(module.fullName),
31
+ checked: linkedModules.includes(module.fullName)
32
+ };
33
+ }
34
+ /**
35
+ * Fuzzy search implementation using simple string matching
36
+ * For production, consider using Fuse.js or similar library
37
+ */
38
+ function fuzzySearch(query, modules, options) {
39
+ if (!query || query.trim() === '') {
40
+ return modules.map(m => ({ module: m, score: 1, matches: [] }));
41
+ }
42
+ const normalizedQuery = options.caseSensitive ? query : query.toLowerCase();
43
+ const results = [];
44
+ for (const module of modules) {
45
+ let totalScore = 0;
46
+ const matches = [];
47
+ // Search in name
48
+ if (options.searchFields.includes('name')) {
49
+ const nameValue = module.name || '';
50
+ const normalizedName = options.caseSensitive ? nameValue : nameValue.toLowerCase();
51
+ const nameScore = calculateMatchScore(normalizedQuery, normalizedName);
52
+ if (nameScore > 0) {
53
+ totalScore += nameScore * 0.5; // Name weight: 0.5
54
+ matches.push({
55
+ field: 'name',
56
+ indices: findMatchIndices(normalizedQuery, normalizedName),
57
+ value: nameValue
58
+ });
59
+ }
60
+ }
61
+ // Search in description
62
+ if (options.searchFields.includes('description') && module.description) {
63
+ const descValue = module.description;
64
+ const normalizedDesc = options.caseSensitive ? descValue : descValue.toLowerCase();
65
+ const descScore = calculateMatchScore(normalizedQuery, normalizedDesc);
66
+ if (descScore > 0) {
67
+ totalScore += descScore * 0.3; // Description weight: 0.3
68
+ matches.push({
69
+ field: 'description',
70
+ indices: findMatchIndices(normalizedQuery, normalizedDesc),
71
+ value: descValue
72
+ });
73
+ }
74
+ }
75
+ // Search in type (treated as tags)
76
+ if (options.searchFields.includes('tags') && module.type) {
77
+ const typeValue = module.type;
78
+ const normalizedType = options.caseSensitive ? typeValue : typeValue.toLowerCase();
79
+ const typeScore = calculateMatchScore(normalizedQuery, normalizedType);
80
+ if (typeScore > 0) {
81
+ totalScore += typeScore * 0.2; // Tags weight: 0.2
82
+ matches.push({
83
+ field: 'tags',
84
+ indices: findMatchIndices(normalizedQuery, normalizedType),
85
+ value: typeValue
86
+ });
87
+ }
88
+ }
89
+ if (totalScore >= options.minMatchScore) {
90
+ results.push({ module, score: totalScore, matches });
91
+ }
92
+ }
93
+ // Sort by score descending
94
+ return results.sort((a, b) => b.score - a.score);
95
+ }
96
+ /**
97
+ * Calculate match score between query and text
98
+ */
99
+ function calculateMatchScore(query, text) {
100
+ if (text.includes(query)) {
101
+ // Exact substring match
102
+ return 1.0;
103
+ }
104
+ // Simple fuzzy matching: count matching characters in order
105
+ let queryIndex = 0;
106
+ let matchCount = 0;
107
+ for (let i = 0; i < text.length && queryIndex < query.length; i++) {
108
+ if (text[i] === query[queryIndex]) {
109
+ matchCount++;
110
+ queryIndex++;
111
+ }
112
+ }
113
+ return matchCount / query.length;
114
+ }
115
+ /**
116
+ * Find indices of matches in text
117
+ */
118
+ function findMatchIndices(query, text) {
119
+ const indices = [];
120
+ const index = text.indexOf(query);
121
+ if (index !== -1) {
122
+ indices.push([index, index + query.length]);
123
+ }
124
+ return indices;
125
+ }
126
+ /**
127
+ * Filter modules based on filter options
128
+ */
129
+ function filterModules(modules, filters) {
130
+ return modules.filter(module => {
131
+ // Filter by categories
132
+ if (filters.categories.length > 0) {
133
+ const moduleCategory = module.type || '';
134
+ if (!filters.categories.includes(moduleCategory)) {
135
+ return false;
136
+ }
137
+ }
138
+ // Filter by types (same as categories for now)
139
+ if (filters.types.length > 0) {
140
+ const moduleType = module.type || '';
141
+ if (!filters.types.includes(moduleType)) {
142
+ return false;
143
+ }
144
+ }
145
+ // Filter by priorities
146
+ if (filters.priorities.length > 0) {
147
+ const modulePriority = module.priority || 'medium';
148
+ if (!filters.priorities.includes(modulePriority)) {
149
+ return false;
150
+ }
151
+ }
152
+ // Filter by linked status
153
+ if (filters.linkedOnly && !module.linked) {
154
+ return false;
155
+ }
156
+ return true;
157
+ });
158
+ }
159
+ //# sourceMappingURL=gui-helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gui-helpers.js","sourceRoot":"","sources":["../../src/utils/gui-helpers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,84 @@
1
+ /**
2
+ * Hook System for Augment Extensions
3
+ * Provides pre/post inspection hooks with error handling
4
+ */
5
+ import { Hook, HookType, HookContext } from './plugin-system';
6
+ /**
7
+ * Hook execution result
8
+ */
9
+ export interface HookExecutionResult {
10
+ success: boolean;
11
+ hookId: string;
12
+ error?: Error;
13
+ executionTime: number;
14
+ }
15
+ /**
16
+ * Base hook class
17
+ */
18
+ export declare abstract class BaseHook implements Hook {
19
+ abstract id: string;
20
+ abstract type: HookType;
21
+ priority: number;
22
+ /**
23
+ * Execute the hook
24
+ */
25
+ abstract execute(context: HookContext): Promise<void> | void;
26
+ }
27
+ /**
28
+ * Pre-inspection hook - runs before module inspection
29
+ */
30
+ export declare class PreInspectionHook extends BaseHook {
31
+ id: string;
32
+ type: HookType;
33
+ priority: number;
34
+ execute(context: HookContext): Promise<void>;
35
+ }
36
+ /**
37
+ * Post-inspection hook - runs after module inspection
38
+ */
39
+ export declare class PostInspectionHook extends BaseHook {
40
+ id: string;
41
+ type: HookType;
42
+ priority: number;
43
+ execute(context: HookContext): Promise<void>;
44
+ }
45
+ /**
46
+ * Pre-load hook - runs before plugin/module loading
47
+ */
48
+ export declare class PreLoadHook extends BaseHook {
49
+ id: string;
50
+ type: HookType;
51
+ priority: number;
52
+ execute(context: HookContext): Promise<void>;
53
+ }
54
+ /**
55
+ * Post-load hook - runs after plugin/module loading
56
+ */
57
+ export declare class PostLoadHook extends BaseHook {
58
+ id: string;
59
+ type: HookType;
60
+ priority: number;
61
+ execute(context: HookContext): Promise<void>;
62
+ }
63
+ /**
64
+ * Hook manager for executing hooks with error handling
65
+ */
66
+ export declare class HookManager {
67
+ /**
68
+ * Execute a single hook with error handling
69
+ */
70
+ executeHook(hook: Hook, context: HookContext): Promise<HookExecutionResult>;
71
+ /**
72
+ * Execute multiple hooks in sequence
73
+ */
74
+ executeHooks(hooks: Hook[], context: HookContext): Promise<HookExecutionResult[]>;
75
+ /**
76
+ * Execute hooks with timeout
77
+ */
78
+ executeHooksWithTimeout(hooks: Hook[], context: HookContext, timeout?: number): Promise<HookExecutionResult[]>;
79
+ }
80
+ /**
81
+ * Global hook manager instance
82
+ */
83
+ export declare const hookManager: HookManager;
84
+ //# sourceMappingURL=hook-system.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hook-system.d.ts","sourceRoot":"","sources":["../../src/utils/hook-system.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAE9D;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,aAAa,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,8BAAsB,QAAS,YAAW,IAAI;IAC5C,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAK;IAErB;;OAEG;IACH,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;CAC7D;AAED;;GAEG;AACH,qBAAa,iBAAkB,SAAQ,QAAQ;IAC7C,EAAE,SAA4B;IAC9B,IAAI,EAAE,QAAQ,CAAoB;IAClC,QAAQ,SAAK;IAEP,OAAO,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;CAMnD;AAED;;GAEG;AACH,qBAAa,kBAAmB,SAAQ,QAAQ;IAC9C,EAAE,SAA6B;IAC/B,IAAI,EAAE,QAAQ,CAAqB;IACnC,QAAQ,SAAK;IAEP,OAAO,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;CAUnD;AAED;;GAEG;AACH,qBAAa,WAAY,SAAQ,QAAQ;IACvC,EAAE,SAAsB;IACxB,IAAI,EAAE,QAAQ,CAAc;IAC5B,QAAQ,SAAK;IAEP,OAAO,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;CAInD;AAED;;GAEG;AACH,qBAAa,YAAa,SAAQ,QAAQ;IACxC,EAAE,SAAuB;IACzB,IAAI,EAAE,QAAQ,CAAe;IAC7B,QAAQ,SAAK;IAEP,OAAO,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;CAInD;AAED;;GAEG;AACH,qBAAa,WAAW;IACtB;;OAEG;IACG,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAuBjF;;OAEG;IACG,YAAY,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC;IAgBvF;;OAEG;IACG,uBAAuB,CAC3B,KAAK,EAAE,IAAI,EAAE,EACb,OAAO,EAAE,WAAW,EACpB,OAAO,GAAE,MAAa,GACrB,OAAO,CAAC,mBAAmB,EAAE,CAAC;CAalC;AAED;;GAEG;AACH,eAAO,MAAM,WAAW,aAAoB,CAAC"}
@@ -0,0 +1,151 @@
1
+ "use strict";
2
+ /**
3
+ * Hook System for Augment Extensions
4
+ * Provides pre/post inspection hooks with error handling
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.hookManager = exports.HookManager = exports.PostLoadHook = exports.PreLoadHook = exports.PostInspectionHook = exports.PreInspectionHook = exports.BaseHook = void 0;
8
+ /**
9
+ * Base hook class
10
+ */
11
+ class BaseHook {
12
+ constructor() {
13
+ this.priority = 0;
14
+ }
15
+ }
16
+ exports.BaseHook = BaseHook;
17
+ /**
18
+ * Pre-inspection hook - runs before module inspection
19
+ */
20
+ class PreInspectionHook extends BaseHook {
21
+ constructor() {
22
+ super(...arguments);
23
+ this.id = 'pre-inspection-default';
24
+ this.type = 'pre-inspection';
25
+ this.priority = 0;
26
+ }
27
+ async execute(context) {
28
+ // Default pre-inspection logic
29
+ if (context.module) {
30
+ console.log(`Starting inspection of module: ${context.module.fullName || context.module.name}`);
31
+ }
32
+ }
33
+ }
34
+ exports.PreInspectionHook = PreInspectionHook;
35
+ /**
36
+ * Post-inspection hook - runs after module inspection
37
+ */
38
+ class PostInspectionHook extends BaseHook {
39
+ constructor() {
40
+ super(...arguments);
41
+ this.id = 'post-inspection-default';
42
+ this.type = 'post-inspection';
43
+ this.priority = 0;
44
+ }
45
+ async execute(context) {
46
+ // Default post-inspection logic
47
+ if (context.module) {
48
+ console.log(`Completed inspection of module: ${context.module.fullName || context.module.name}`);
49
+ }
50
+ if (context.error) {
51
+ console.error(`Inspection failed with error: ${context.error.message}`);
52
+ }
53
+ }
54
+ }
55
+ exports.PostInspectionHook = PostInspectionHook;
56
+ /**
57
+ * Pre-load hook - runs before plugin/module loading
58
+ */
59
+ class PreLoadHook extends BaseHook {
60
+ constructor() {
61
+ super(...arguments);
62
+ this.id = 'pre-load-default';
63
+ this.type = 'pre-load';
64
+ this.priority = 0;
65
+ }
66
+ async execute(context) {
67
+ // Default pre-load logic
68
+ console.log('Loading plugins and modules...');
69
+ }
70
+ }
71
+ exports.PreLoadHook = PreLoadHook;
72
+ /**
73
+ * Post-load hook - runs after plugin/module loading
74
+ */
75
+ class PostLoadHook extends BaseHook {
76
+ constructor() {
77
+ super(...arguments);
78
+ this.id = 'post-load-default';
79
+ this.type = 'post-load';
80
+ this.priority = 0;
81
+ }
82
+ async execute(context) {
83
+ // Default post-load logic
84
+ console.log('Plugins and modules loaded successfully');
85
+ }
86
+ }
87
+ exports.PostLoadHook = PostLoadHook;
88
+ /**
89
+ * Hook manager for executing hooks with error handling
90
+ */
91
+ class HookManager {
92
+ /**
93
+ * Execute a single hook with error handling
94
+ */
95
+ async executeHook(hook, context) {
96
+ const startTime = Date.now();
97
+ try {
98
+ await hook.execute(context);
99
+ return {
100
+ success: true,
101
+ hookId: hook.id,
102
+ executionTime: Date.now() - startTime
103
+ };
104
+ }
105
+ catch (error) {
106
+ const err = error instanceof Error ? error : new Error(String(error));
107
+ return {
108
+ success: false,
109
+ hookId: hook.id,
110
+ error: err,
111
+ executionTime: Date.now() - startTime
112
+ };
113
+ }
114
+ }
115
+ /**
116
+ * Execute multiple hooks in sequence
117
+ */
118
+ async executeHooks(hooks, context) {
119
+ const results = [];
120
+ for (const hook of hooks) {
121
+ const result = await this.executeHook(hook, context);
122
+ results.push(result);
123
+ // If a hook fails, store the error in context but continue
124
+ if (!result.success && result.error) {
125
+ context.error = result.error;
126
+ }
127
+ }
128
+ return results;
129
+ }
130
+ /**
131
+ * Execute hooks with timeout
132
+ */
133
+ async executeHooksWithTimeout(hooks, context, timeout = 5000) {
134
+ const timeoutPromise = new Promise((_, reject) => {
135
+ setTimeout(() => reject(new Error(`Hook execution timed out after ${timeout}ms`)), timeout);
136
+ });
137
+ const executionPromise = this.executeHooks(hooks, context);
138
+ try {
139
+ return await Promise.race([executionPromise, timeoutPromise]);
140
+ }
141
+ catch (error) {
142
+ throw error;
143
+ }
144
+ }
145
+ }
146
+ exports.HookManager = HookManager;
147
+ /**
148
+ * Global hook manager instance
149
+ */
150
+ exports.hookManager = new HookManager();
151
+ //# sourceMappingURL=hook-system.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hook-system.js","sourceRoot":"","sources":["../../src/utils/hook-system.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Inspection Cache Utility
3
+ *
4
+ * Provides caching for module inspection results to improve performance.
5
+ * Supports in-memory caching with file change detection for cache invalidation.
6
+ */
7
+ interface CacheOptions {
8
+ ttl?: number;
9
+ maxSize?: number;
10
+ }
11
+ export declare class InspectionCache<T = any> {
12
+ private cache;
13
+ private ttl;
14
+ private maxSize;
15
+ private enabled;
16
+ constructor(options?: CacheOptions);
17
+ /**
18
+ * Get cached data if valid
19
+ */
20
+ get(key: string, filePath?: string): T | null;
21
+ /**
22
+ * Set cache data
23
+ */
24
+ set(key: string, data: T, filePath?: string): void;
25
+ /**
26
+ * Clear all cache entries
27
+ */
28
+ clear(): void;
29
+ /**
30
+ * Clear cache entries for a specific file
31
+ */
32
+ clearFile(filePath: string): void;
33
+ /**
34
+ * Enable or disable caching
35
+ */
36
+ setEnabled(enabled: boolean): void;
37
+ /**
38
+ * Check if caching is enabled
39
+ */
40
+ isEnabled(): boolean;
41
+ /**
42
+ * Get cache statistics
43
+ */
44
+ getStats(): {
45
+ size: number;
46
+ maxSize: number;
47
+ enabled: boolean;
48
+ };
49
+ /**
50
+ * Calculate file hash for change detection
51
+ */
52
+ private getFileHash;
53
+ }
54
+ export declare const moduleInspectionCache: InspectionCache<any>;
55
+ export {};
56
+ //# sourceMappingURL=inspection-cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inspection-cache.d.ts","sourceRoot":"","sources":["../../src/utils/inspection-cache.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAaH,UAAU,YAAY;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,eAAe,CAAC,CAAC,GAAG,GAAG;IAClC,OAAO,CAAC,KAAK,CAAyC;IACtD,OAAO,CAAC,GAAG,CAAS;IACpB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,OAAO,CAAiB;gBAEpB,OAAO,GAAE,YAAiB;IAKtC;;OAEG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,CAAC,GAAG,IAAI;IA6B7C;;OAEG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI;IAuBlD;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;OAEG;IACH,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAYjC;;OAEG;IACH,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAOlC;;OAEG;IACH,SAAS,IAAI,OAAO;IAIpB;;OAEG;IACH,QAAQ,IAAI;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE;IAQ/D;;OAEG;IACH,OAAO,CAAC,WAAW;CAapB;AAGD,eAAO,MAAM,qBAAqB,sBAGhC,CAAC"}
@@ -0,0 +1,166 @@
1
+ "use strict";
2
+ /**
3
+ * Inspection Cache Utility
4
+ *
5
+ * Provides caching for module inspection results to improve performance.
6
+ * Supports in-memory caching with file change detection for cache invalidation.
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.moduleInspectionCache = exports.InspectionCache = void 0;
43
+ const fs = __importStar(require("fs"));
44
+ class InspectionCache {
45
+ constructor(options = {}) {
46
+ this.cache = new Map();
47
+ this.enabled = true;
48
+ this.ttl = options.ttl || 5 * 60 * 1000; // 5 minutes default
49
+ this.maxSize = options.maxSize || 100;
50
+ }
51
+ /**
52
+ * Get cached data if valid
53
+ */
54
+ get(key, filePath) {
55
+ if (!this.enabled) {
56
+ return null;
57
+ }
58
+ const entry = this.cache.get(key);
59
+ if (!entry) {
60
+ return null;
61
+ }
62
+ // Check if entry has expired
63
+ const now = Date.now();
64
+ if (now - entry.timestamp > this.ttl) {
65
+ this.cache.delete(key);
66
+ return null;
67
+ }
68
+ // Check if file has changed (if filePath provided)
69
+ if (filePath && entry.filePath) {
70
+ const currentHash = this.getFileHash(filePath);
71
+ if (currentHash !== entry.fileHash) {
72
+ this.cache.delete(key);
73
+ return null;
74
+ }
75
+ }
76
+ return entry.data;
77
+ }
78
+ /**
79
+ * Set cache data
80
+ */
81
+ set(key, data, filePath) {
82
+ if (!this.enabled) {
83
+ return;
84
+ }
85
+ // Enforce max size by removing oldest entries
86
+ if (this.cache.size >= this.maxSize) {
87
+ const firstKey = this.cache.keys().next().value;
88
+ if (firstKey) {
89
+ this.cache.delete(firstKey);
90
+ }
91
+ }
92
+ const entry = {
93
+ data,
94
+ timestamp: Date.now(),
95
+ fileHash: filePath ? this.getFileHash(filePath) : '',
96
+ filePath: filePath || ''
97
+ };
98
+ this.cache.set(key, entry);
99
+ }
100
+ /**
101
+ * Clear all cache entries
102
+ */
103
+ clear() {
104
+ this.cache.clear();
105
+ }
106
+ /**
107
+ * Clear cache entries for a specific file
108
+ */
109
+ clearFile(filePath) {
110
+ const keysToDelete = [];
111
+ for (const [key, entry] of this.cache.entries()) {
112
+ if (entry.filePath === filePath) {
113
+ keysToDelete.push(key);
114
+ }
115
+ }
116
+ keysToDelete.forEach(key => this.cache.delete(key));
117
+ }
118
+ /**
119
+ * Enable or disable caching
120
+ */
121
+ setEnabled(enabled) {
122
+ this.enabled = enabled;
123
+ if (!enabled) {
124
+ this.clear();
125
+ }
126
+ }
127
+ /**
128
+ * Check if caching is enabled
129
+ */
130
+ isEnabled() {
131
+ return this.enabled;
132
+ }
133
+ /**
134
+ * Get cache statistics
135
+ */
136
+ getStats() {
137
+ return {
138
+ size: this.cache.size,
139
+ maxSize: this.maxSize,
140
+ enabled: this.enabled
141
+ };
142
+ }
143
+ /**
144
+ * Calculate file hash for change detection
145
+ */
146
+ getFileHash(filePath) {
147
+ try {
148
+ if (!fs.existsSync(filePath)) {
149
+ return '';
150
+ }
151
+ const stats = fs.statSync(filePath);
152
+ // Use mtime and size for quick hash (faster than reading entire file)
153
+ return `${stats.mtime.getTime()}-${stats.size}`;
154
+ }
155
+ catch (error) {
156
+ return '';
157
+ }
158
+ }
159
+ }
160
+ exports.InspectionCache = InspectionCache;
161
+ // Global cache instance for module inspection
162
+ exports.moduleInspectionCache = new InspectionCache({
163
+ ttl: 5 * 60 * 1000, // 5 minutes
164
+ maxSize: 100
165
+ });
166
+ //# sourceMappingURL=inspection-cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inspection-cache.js","sourceRoot":"","sources":["../../src/utils/inspection-cache.ts"],"names":[],"mappings":"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"}