sqlew 3.5.3 → 3.6.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 (227) hide show
  1. package/CHANGELOG.md +247 -1772
  2. package/README.md +70 -304
  3. package/assets/config.example.toml +97 -0
  4. package/dist/adapters/index.d.ts +11 -0
  5. package/dist/adapters/index.d.ts.map +1 -0
  6. package/dist/adapters/index.js +21 -0
  7. package/dist/adapters/index.js.map +1 -0
  8. package/dist/adapters/mysql-adapter.d.ts +31 -0
  9. package/dist/adapters/mysql-adapter.d.ts.map +1 -0
  10. package/dist/adapters/mysql-adapter.js +63 -0
  11. package/dist/adapters/mysql-adapter.js.map +1 -0
  12. package/dist/adapters/postgresql-adapter.d.ts +31 -0
  13. package/dist/adapters/postgresql-adapter.d.ts.map +1 -0
  14. package/dist/adapters/postgresql-adapter.js +63 -0
  15. package/dist/adapters/postgresql-adapter.js.map +1 -0
  16. package/dist/adapters/sqlite-adapter.d.ts +37 -0
  17. package/dist/adapters/sqlite-adapter.d.ts.map +1 -0
  18. package/dist/adapters/sqlite-adapter.js +129 -0
  19. package/dist/adapters/sqlite-adapter.js.map +1 -0
  20. package/dist/adapters/types.d.ts +33 -0
  21. package/dist/adapters/types.d.ts.map +1 -0
  22. package/dist/adapters/types.js +2 -0
  23. package/dist/adapters/types.js.map +1 -0
  24. package/dist/cli.js +55 -54
  25. package/dist/cli.js.map +1 -1
  26. package/dist/config/example-generator.d.ts +11 -0
  27. package/dist/config/example-generator.d.ts.map +1 -0
  28. package/dist/config/example-generator.js +48 -0
  29. package/dist/config/example-generator.js.map +1 -0
  30. package/dist/config/loader.d.ts.map +1 -1
  31. package/dist/config/loader.js +4 -0
  32. package/dist/config/loader.js.map +1 -1
  33. package/dist/config/types.d.ts +9 -0
  34. package/dist/config/types.d.ts.map +1 -1
  35. package/dist/config/types.js.map +1 -1
  36. package/dist/database.d.ts +44 -122
  37. package/dist/database.d.ts.map +1 -1
  38. package/dist/database.js +145 -416
  39. package/dist/database.js.map +1 -1
  40. package/dist/index.js +215 -185
  41. package/dist/index.js.map +1 -1
  42. package/dist/knexfile.d.ts +6 -0
  43. package/dist/knexfile.d.ts.map +1 -0
  44. package/dist/knexfile.js +85 -0
  45. package/dist/knexfile.js.map +1 -0
  46. package/dist/migrations/add-help-system-tables.d.ts +35 -0
  47. package/dist/migrations/add-help-system-tables.d.ts.map +1 -0
  48. package/dist/migrations/add-help-system-tables.js +206 -0
  49. package/dist/migrations/add-help-system-tables.js.map +1 -0
  50. package/dist/migrations/add-token-tracking.d.ts +28 -0
  51. package/dist/migrations/add-token-tracking.d.ts.map +1 -0
  52. package/dist/migrations/add-token-tracking.js +108 -0
  53. package/dist/migrations/add-token-tracking.js.map +1 -0
  54. package/dist/migrations/index.d.ts +25 -12
  55. package/dist/migrations/index.d.ts.map +1 -1
  56. package/dist/migrations/index.js +147 -20
  57. package/dist/migrations/index.js.map +1 -1
  58. package/dist/migrations/knex/20251025020452_create_master_tables.d.ts +4 -0
  59. package/dist/migrations/knex/20251025020452_create_master_tables.d.ts.map +1 -0
  60. package/dist/migrations/knex/20251025020452_create_master_tables.js +65 -0
  61. package/dist/migrations/knex/20251025020452_create_master_tables.js.map +1 -0
  62. package/dist/migrations/knex/20251025021152_create_transaction_tables.d.ts +4 -0
  63. package/dist/migrations/knex/20251025021152_create_transaction_tables.d.ts.map +1 -0
  64. package/dist/migrations/knex/20251025021152_create_transaction_tables.js +235 -0
  65. package/dist/migrations/knex/20251025021152_create_transaction_tables.js.map +1 -0
  66. package/dist/migrations/knex/20251025021351_create_indexes.d.ts +4 -0
  67. package/dist/migrations/knex/20251025021351_create_indexes.d.ts.map +1 -0
  68. package/dist/migrations/knex/20251025021351_create_indexes.js +62 -0
  69. package/dist/migrations/knex/20251025021351_create_indexes.js.map +1 -0
  70. package/dist/migrations/knex/20251025021416_seed_master_data.d.ts +4 -0
  71. package/dist/migrations/knex/20251025021416_seed_master_data.d.ts.map +1 -0
  72. package/dist/migrations/knex/20251025021416_seed_master_data.js +58 -0
  73. package/dist/migrations/knex/20251025021416_seed_master_data.js.map +1 -0
  74. package/dist/migrations/knex/20251025070349_create_views.d.ts +4 -0
  75. package/dist/migrations/knex/20251025070349_create_views.d.ts.map +1 -0
  76. package/dist/migrations/knex/20251025070349_create_views.js +143 -0
  77. package/dist/migrations/knex/20251025070349_create_views.js.map +1 -0
  78. package/dist/migrations/knex/20251025081221_add_link_type_to_task_decision_links.d.ts +4 -0
  79. package/dist/migrations/knex/20251025081221_add_link_type_to_task_decision_links.d.ts.map +1 -0
  80. package/dist/migrations/knex/20251025081221_add_link_type_to_task_decision_links.js +15 -0
  81. package/dist/migrations/knex/20251025081221_add_link_type_to_task_decision_links.js.map +1 -0
  82. package/dist/migrations/knex/20251025082220_fix_task_dependencies_columns.d.ts +8 -0
  83. package/dist/migrations/knex/20251025082220_fix_task_dependencies_columns.d.ts.map +1 -0
  84. package/dist/migrations/knex/20251025082220_fix_task_dependencies_columns.js +12 -0
  85. package/dist/migrations/knex/20251025082220_fix_task_dependencies_columns.js.map +1 -0
  86. package/dist/migrations/knex/20251025090000_create_help_system_tables.d.ts +19 -0
  87. package/dist/migrations/knex/20251025090000_create_help_system_tables.d.ts.map +1 -0
  88. package/dist/migrations/knex/20251025090000_create_help_system_tables.js +115 -0
  89. package/dist/migrations/knex/20251025090000_create_help_system_tables.js.map +1 -0
  90. package/dist/migrations/knex/20251025090100_seed_help_categories_and_use_cases.d.ts +13 -0
  91. package/dist/migrations/knex/20251025090100_seed_help_categories_and_use_cases.d.ts.map +1 -0
  92. package/dist/migrations/knex/20251025090100_seed_help_categories_and_use_cases.js +377 -0
  93. package/dist/migrations/knex/20251025090100_seed_help_categories_and_use_cases.js.map +1 -0
  94. package/dist/migrations/knex/20251025100000_seed_help_metadata.d.ts +15 -0
  95. package/dist/migrations/knex/20251025100000_seed_help_metadata.d.ts.map +1 -0
  96. package/dist/migrations/knex/20251025100000_seed_help_metadata.js +253 -0
  97. package/dist/migrations/knex/20251025100000_seed_help_metadata.js.map +1 -0
  98. package/dist/migrations/knex/20251025100100_seed_remaining_use_cases.d.ts +16 -0
  99. package/dist/migrations/knex/20251025100100_seed_remaining_use_cases.d.ts.map +1 -0
  100. package/dist/migrations/knex/20251025100100_seed_remaining_use_cases.js +276 -0
  101. package/dist/migrations/knex/20251025100100_seed_remaining_use_cases.js.map +1 -0
  102. package/dist/migrations/knex/20251025120000_add_cascade_to_task_dependencies.d.ts +8 -0
  103. package/dist/migrations/knex/20251025120000_add_cascade_to_task_dependencies.d.ts.map +1 -0
  104. package/dist/migrations/knex/20251025120000_add_cascade_to_task_dependencies.js +64 -0
  105. package/dist/migrations/knex/20251025120000_add_cascade_to_task_dependencies.js.map +1 -0
  106. package/dist/migrations/seed-help-data.d.ts +48 -0
  107. package/dist/migrations/seed-help-data.d.ts.map +1 -0
  108. package/dist/migrations/seed-help-data.js +1466 -0
  109. package/dist/migrations/seed-help-data.js.map +1 -0
  110. package/dist/migrations/seed-tool-metadata.d.ts +24 -0
  111. package/dist/migrations/seed-tool-metadata.d.ts.map +1 -0
  112. package/dist/migrations/seed-tool-metadata.js +392 -0
  113. package/dist/migrations/seed-tool-metadata.js.map +1 -0
  114. package/dist/migrations/v3.6.0-help-system-refactor.d.ts +46 -0
  115. package/dist/migrations/v3.6.0-help-system-refactor.d.ts.map +1 -0
  116. package/dist/migrations/v3.6.0-help-system-refactor.js +223 -0
  117. package/dist/migrations/v3.6.0-help-system-refactor.js.map +1 -0
  118. package/dist/schema.d.ts.map +1 -1
  119. package/dist/schema.js +2 -0
  120. package/dist/schema.js.map +1 -1
  121. package/dist/tests/git-aware-completion.test.js +89 -70
  122. package/dist/tests/git-aware-completion.test.js.map +1 -1
  123. package/dist/tests/help-system.test.d.ts +23 -0
  124. package/dist/tests/help-system.test.d.ts.map +1 -0
  125. package/dist/tests/help-system.test.js +374 -0
  126. package/dist/tests/help-system.test.js.map +1 -0
  127. package/dist/tests/tasks.auto-pruning-decision-link.test.js +92 -78
  128. package/dist/tests/tasks.auto-pruning-decision-link.test.js.map +1 -1
  129. package/dist/tests/tasks.auto-pruning-partial.test.js +106 -95
  130. package/dist/tests/tasks.auto-pruning-partial.test.js.map +1 -1
  131. package/dist/tests/tasks.auto-pruning-persistence.test.js +115 -97
  132. package/dist/tests/tasks.auto-pruning-persistence.test.js.map +1 -1
  133. package/dist/tests/tasks.auto-pruning-safety.test.js +124 -103
  134. package/dist/tests/tasks.auto-pruning-safety.test.js.map +1 -1
  135. package/dist/tests/tasks.dependencies.test.js +338 -307
  136. package/dist/tests/tasks.dependencies.test.js.map +1 -1
  137. package/dist/tests/tasks.link-file-backward-compat.test.js +116 -104
  138. package/dist/tests/tasks.link-file-backward-compat.test.js.map +1 -1
  139. package/dist/tests/tasks.watch-files-action.test.js +122 -101
  140. package/dist/tests/tasks.watch-files-action.test.js.map +1 -1
  141. package/dist/tests/tasks.watch-files-parameter.test.js +105 -94
  142. package/dist/tests/tasks.watch-files-parameter.test.js.map +1 -1
  143. package/dist/tests/two-step-git-completion.test.js +176 -133
  144. package/dist/tests/two-step-git-completion.test.js.map +1 -1
  145. package/dist/tests/vcs-staging.test.js +1 -1
  146. package/dist/tests/vcs-staging.test.js.map +1 -1
  147. package/dist/tools/config.d.ts +9 -6
  148. package/dist/tools/config.d.ts.map +1 -1
  149. package/dist/tools/config.js +16 -14
  150. package/dist/tools/config.js.map +1 -1
  151. package/dist/tools/constraints.d.ts +10 -7
  152. package/dist/tools/constraints.d.ts.map +1 -1
  153. package/dist/tools/constraints.js +66 -48
  154. package/dist/tools/constraints.js.map +1 -1
  155. package/dist/tools/context.d.ts +36 -33
  156. package/dist/tools/context.d.ts.map +1 -1
  157. package/dist/tools/context.js +374 -330
  158. package/dist/tools/context.js.map +1 -1
  159. package/dist/tools/files.d.ts +12 -9
  160. package/dist/tools/files.d.ts.map +1 -1
  161. package/dist/tools/files.js +173 -95
  162. package/dist/tools/files.js.map +1 -1
  163. package/dist/tools/help-queries.d.ts +130 -0
  164. package/dist/tools/help-queries.d.ts.map +1 -0
  165. package/dist/tools/help-queries.js +393 -0
  166. package/dist/tools/help-queries.js.map +1 -0
  167. package/dist/tools/messaging.d.ts +14 -11
  168. package/dist/tools/messaging.d.ts.map +1 -1
  169. package/dist/tools/messaging.js +217 -133
  170. package/dist/tools/messaging.js.map +1 -1
  171. package/dist/tools/tasks.d.ts +18 -16
  172. package/dist/tools/tasks.d.ts.map +1 -1
  173. package/dist/tools/tasks.js +513 -439
  174. package/dist/tools/tasks.js.map +1 -1
  175. package/dist/tools/utils.d.ts +14 -11
  176. package/dist/tools/utils.d.ts.map +1 -1
  177. package/dist/tools/utils.js +86 -121
  178. package/dist/tools/utils.js.map +1 -1
  179. package/dist/utils/activity-logging.d.ts +114 -0
  180. package/dist/utils/activity-logging.d.ts.map +1 -0
  181. package/dist/utils/activity-logging.js +162 -0
  182. package/dist/utils/activity-logging.js.map +1 -0
  183. package/dist/utils/batch.d.ts +2 -2
  184. package/dist/utils/batch.d.ts.map +1 -1
  185. package/dist/utils/batch.js +8 -8
  186. package/dist/utils/batch.js.map +1 -1
  187. package/dist/utils/cleanup.d.ts +21 -13
  188. package/dist/utils/cleanup.d.ts.map +1 -1
  189. package/dist/utils/cleanup.js +31 -24
  190. package/dist/utils/cleanup.js.map +1 -1
  191. package/dist/utils/debug-logger.d.ts +44 -0
  192. package/dist/utils/debug-logger.d.ts.map +1 -0
  193. package/dist/utils/debug-logger.js +116 -0
  194. package/dist/utils/debug-logger.js.map +1 -0
  195. package/dist/utils/help-tracking.d.ts +55 -0
  196. package/dist/utils/help-tracking.d.ts.map +1 -0
  197. package/dist/utils/help-tracking.js +88 -0
  198. package/dist/utils/help-tracking.js.map +1 -0
  199. package/dist/utils/retention.d.ts +7 -7
  200. package/dist/utils/retention.d.ts.map +1 -1
  201. package/dist/utils/retention.js +12 -12
  202. package/dist/utils/retention.js.map +1 -1
  203. package/dist/utils/task-stale-detection.d.ts +15 -13
  204. package/dist/utils/task-stale-detection.d.ts.map +1 -1
  205. package/dist/utils/task-stale-detection.js +100 -302
  206. package/dist/utils/task-stale-detection.js.map +1 -1
  207. package/dist/utils/token-estimation.d.ts +72 -0
  208. package/dist/utils/token-estimation.d.ts.map +1 -0
  209. package/dist/utils/token-estimation.js +71 -0
  210. package/dist/utils/token-estimation.js.map +1 -0
  211. package/dist/utils/token-logging.d.ts +48 -0
  212. package/dist/utils/token-logging.d.ts.map +1 -0
  213. package/dist/utils/token-logging.js +112 -0
  214. package/dist/utils/token-logging.js.map +1 -0
  215. package/dist/utils/view-queries.d.ts +34 -0
  216. package/dist/utils/view-queries.d.ts.map +1 -0
  217. package/dist/utils/view-queries.js +192 -0
  218. package/dist/utils/view-queries.js.map +1 -0
  219. package/dist/watcher/file-watcher.d.ts.map +1 -1
  220. package/dist/watcher/file-watcher.js +25 -11
  221. package/dist/watcher/file-watcher.js.map +1 -1
  222. package/docs/BEST_PRACTICES.md +56 -448
  223. package/docs/MIGRATION_v3.6.0.md +170 -0
  224. package/docs/SHARED_CONCEPTS.md +63 -208
  225. package/docs/TASK_OVERVIEW.md +2 -2
  226. package/docs/TOOL_SELECTION.md +41 -248
  227. package/package.json +16 -4
@@ -0,0 +1,374 @@
1
+ /**
2
+ * Help System Test Suite
3
+ *
4
+ * Comprehensive tests for all help query actions to ensure:
5
+ * 1. All help queries return valid data
6
+ * 2. Error handling works correctly
7
+ * 3. Token efficiency targets are met
8
+ * 4. Database queries are performant
9
+ */
10
+ import { initializeDatabase, getDatabase } from '../database.js';
11
+ import { queryHelpAction, queryHelpParams, queryHelpTool, queryHelpUseCase, queryHelpListUseCases, queryHelpNextActions } from '../tools/help-queries.js';
12
+ import { estimateTokens } from '../utils/token-estimation.js';
13
+ // Test configuration
14
+ const TEST_TOOLS = ['decision', 'task', 'message', 'file', 'constraint', 'config', 'stats'];
15
+ const TEST_ACTIONS = {
16
+ decision: ['set', 'get', 'list'],
17
+ task: ['create'],
18
+ message: ['send', 'get'],
19
+ file: ['record', 'get'],
20
+ constraint: ['add', 'get'],
21
+ config: ['get', 'update'],
22
+ stats: ['layer_summary', 'db_stats', 'clear']
23
+ };
24
+ /**
25
+ * Test Suite Runner
26
+ */
27
+ export async function runHelpSystemTests() {
28
+ const results = [];
29
+ let passed = 0;
30
+ let failed = 0;
31
+ // Initialize database
32
+ const dbPath = process.env.DB_PATH || 'src/.sqlew/tmp/test-knex.db';
33
+ await initializeDatabase({
34
+ databaseType: 'sqlite',
35
+ connection: { filename: dbPath }
36
+ });
37
+ const db = getDatabase();
38
+ console.log('\n🧪 Running Help System Test Suite\n');
39
+ // Test 1: help_action queries
40
+ console.log('Test Group 1: help_action queries');
41
+ for (const tool of TEST_TOOLS) {
42
+ const actions = TEST_ACTIONS[tool] || ['set', 'get'];
43
+ for (const action of actions) {
44
+ try {
45
+ const result = queryHelpAction(db, tool, action);
46
+ if ('error' in result) {
47
+ results.push({
48
+ test: `help_action: ${tool}.${action}`,
49
+ status: 'FAIL',
50
+ message: result.error
51
+ });
52
+ failed++;
53
+ console.log(` ❌ ${tool}.${action}: ${result.error}`);
54
+ }
55
+ else {
56
+ const tokens = estimateTokens(result);
57
+ const isEfficient = tokens >= 50 && tokens <= 450;
58
+ if (isEfficient) {
59
+ results.push({
60
+ test: `help_action: ${tool}.${action}`,
61
+ status: 'PASS',
62
+ tokens
63
+ });
64
+ passed++;
65
+ console.log(` ✅ ${tool}.${action}: ${tokens} tokens`);
66
+ }
67
+ else {
68
+ results.push({
69
+ test: `help_action: ${tool}.${action}`,
70
+ status: 'FAIL',
71
+ message: `Token count ${tokens} outside target range (50-450)`,
72
+ tokens
73
+ });
74
+ failed++;
75
+ console.log(` ❌ ${tool}.${action}: ${tokens} tokens (outside range)`);
76
+ }
77
+ }
78
+ }
79
+ catch (error) {
80
+ const message = error instanceof Error ? error.message : String(error);
81
+ results.push({
82
+ test: `help_action: ${tool}.${action}`,
83
+ status: 'FAIL',
84
+ message
85
+ });
86
+ failed++;
87
+ console.log(` ❌ ${tool}.${action}: ${message}`);
88
+ }
89
+ }
90
+ }
91
+ // Test 2: help_params queries
92
+ console.log('\nTest Group 2: help_params queries');
93
+ for (const tool of TEST_TOOLS.slice(0, 3)) { // Test subset
94
+ const actions = TEST_ACTIONS[tool] || ['set'];
95
+ for (const action of actions.slice(0, 1)) {
96
+ try {
97
+ const result = queryHelpParams(db, tool, action);
98
+ if ('error' in result) {
99
+ results.push({
100
+ test: `help_params: ${tool}.${action}`,
101
+ status: 'FAIL',
102
+ message: result.error
103
+ });
104
+ failed++;
105
+ console.log(` ❌ ${tool}.${action}: ${result.error}`);
106
+ }
107
+ else {
108
+ const tokens = estimateTokens(result);
109
+ const isEfficient = tokens >= 30 && tokens <= 350;
110
+ if (isEfficient) {
111
+ results.push({
112
+ test: `help_params: ${tool}.${action}`,
113
+ status: 'PASS',
114
+ tokens
115
+ });
116
+ passed++;
117
+ console.log(` ✅ ${tool}.${action}: ${tokens} tokens`);
118
+ }
119
+ else {
120
+ results.push({
121
+ test: `help_params: ${tool}.${action}`,
122
+ status: 'FAIL',
123
+ message: `Token count ${tokens} outside target range (30-350)`,
124
+ tokens
125
+ });
126
+ failed++;
127
+ console.log(` ❌ ${tool}.${action}: ${tokens} tokens (outside range)`);
128
+ }
129
+ }
130
+ }
131
+ catch (error) {
132
+ const message = error instanceof Error ? error.message : String(error);
133
+ results.push({
134
+ test: `help_params: ${tool}.${action}`,
135
+ status: 'FAIL',
136
+ message
137
+ });
138
+ failed++;
139
+ console.log(` ❌ ${tool}.${action}: ${message}`);
140
+ }
141
+ }
142
+ }
143
+ // Test 3: help_tool queries
144
+ console.log('\nTest Group 3: help_tool queries');
145
+ for (const tool of TEST_TOOLS) {
146
+ try {
147
+ const result = queryHelpTool(db, tool);
148
+ if ('error' in result) {
149
+ results.push({
150
+ test: `help_tool: ${tool}`,
151
+ status: 'FAIL',
152
+ message: result.error
153
+ });
154
+ failed++;
155
+ console.log(` ❌ ${tool}: ${result.error}`);
156
+ }
157
+ else {
158
+ const tokens = estimateTokens(result);
159
+ const isEfficient = tokens >= 80 && tokens <= 300;
160
+ if (isEfficient) {
161
+ results.push({
162
+ test: `help_tool: ${tool}`,
163
+ status: 'PASS',
164
+ tokens
165
+ });
166
+ passed++;
167
+ console.log(` ✅ ${tool}: ${tokens} tokens`);
168
+ }
169
+ else {
170
+ results.push({
171
+ test: `help_tool: ${tool}`,
172
+ status: 'FAIL',
173
+ message: `Token count ${tokens} outside target range (80-300)`,
174
+ tokens
175
+ });
176
+ failed++;
177
+ console.log(` ❌ ${tool}: ${tokens} tokens (outside range)`);
178
+ }
179
+ }
180
+ }
181
+ catch (error) {
182
+ const message = error instanceof Error ? error.message : String(error);
183
+ results.push({
184
+ test: `help_tool: ${tool}`,
185
+ status: 'FAIL',
186
+ message
187
+ });
188
+ failed++;
189
+ console.log(` ❌ ${tool}: ${message}`);
190
+ }
191
+ }
192
+ // Test 4: help_use_case queries
193
+ console.log('\nTest Group 4: help_use_case queries');
194
+ const useCaseIds = [1, 2, 3, 10, 20, 30]; // Test various IDs
195
+ for (const id of useCaseIds) {
196
+ try {
197
+ const result = queryHelpUseCase(db, id);
198
+ if ('error' in result) {
199
+ // Expected for non-existent IDs
200
+ if (id > 41) {
201
+ results.push({
202
+ test: `help_use_case: ID ${id} (expected fail)`,
203
+ status: 'PASS'
204
+ });
205
+ passed++;
206
+ console.log(` ✅ ID ${id}: Error handling works`);
207
+ }
208
+ else {
209
+ results.push({
210
+ test: `help_use_case: ID ${id}`,
211
+ status: 'FAIL',
212
+ message: result.error
213
+ });
214
+ failed++;
215
+ console.log(` ❌ ID ${id}: ${result.error}`);
216
+ }
217
+ }
218
+ else {
219
+ const tokens = estimateTokens(result);
220
+ const isEfficient = tokens >= 80 && tokens <= 350;
221
+ if (isEfficient) {
222
+ results.push({
223
+ test: `help_use_case: ID ${id}`,
224
+ status: 'PASS',
225
+ tokens
226
+ });
227
+ passed++;
228
+ console.log(` ✅ ID ${id}: ${tokens} tokens`);
229
+ }
230
+ else {
231
+ results.push({
232
+ test: `help_use_case: ID ${id}`,
233
+ status: 'FAIL',
234
+ message: `Token count ${tokens} outside target range (80-350)`,
235
+ tokens
236
+ });
237
+ failed++;
238
+ console.log(` ❌ ID ${id}: ${tokens} tokens (outside range)`);
239
+ }
240
+ }
241
+ }
242
+ catch (error) {
243
+ const message = error instanceof Error ? error.message : String(error);
244
+ results.push({
245
+ test: `help_use_case: ID ${id}`,
246
+ status: 'FAIL',
247
+ message
248
+ });
249
+ failed++;
250
+ console.log(` ❌ ID ${id}: ${message}`);
251
+ }
252
+ }
253
+ // Test 5: help_list_use_cases queries
254
+ console.log('\nTest Group 5: help_list_use_cases queries');
255
+ const listTests = [
256
+ { name: 'all', params: {} },
257
+ { name: 'by category', params: { category: 'task_management' } },
258
+ { name: 'by complexity', params: { complexity: 'basic' } },
259
+ { name: 'pagination', params: { limit: 5, offset: 0 } },
260
+ ];
261
+ for (const test of listTests) {
262
+ try {
263
+ const result = queryHelpListUseCases(db, test.params);
264
+ if ('error' in result) {
265
+ results.push({
266
+ test: `help_list_use_cases: ${test.name}`,
267
+ status: 'FAIL',
268
+ message: result.error
269
+ });
270
+ failed++;
271
+ console.log(` ❌ ${test.name}: ${result.error}`);
272
+ }
273
+ else {
274
+ const tokens = estimateTokens(result);
275
+ const isEfficient = tokens >= 100 && tokens <= 700;
276
+ if (isEfficient) {
277
+ results.push({
278
+ test: `help_list_use_cases: ${test.name}`,
279
+ status: 'PASS',
280
+ tokens
281
+ });
282
+ passed++;
283
+ console.log(` ✅ ${test.name}: ${tokens} tokens`);
284
+ }
285
+ else {
286
+ results.push({
287
+ test: `help_list_use_cases: ${test.name}`,
288
+ status: 'FAIL',
289
+ message: `Token count ${tokens} outside target range (100-700)`,
290
+ tokens
291
+ });
292
+ failed++;
293
+ console.log(` ❌ ${test.name}: ${tokens} tokens (outside range)`);
294
+ }
295
+ }
296
+ }
297
+ catch (error) {
298
+ const message = error instanceof Error ? error.message : String(error);
299
+ results.push({
300
+ test: `help_list_use_cases: ${test.name}`,
301
+ status: 'FAIL',
302
+ message
303
+ });
304
+ failed++;
305
+ console.log(` ❌ ${test.name}: ${message}`);
306
+ }
307
+ }
308
+ // Test 6: help_next_actions queries
309
+ console.log('\nTest Group 6: help_next_actions queries');
310
+ const nextActionsTests = [
311
+ { tool: 'decision', action: 'set' },
312
+ { tool: 'task', action: 'create' },
313
+ { tool: 'message', action: 'send' }
314
+ ];
315
+ for (const test of nextActionsTests) {
316
+ try {
317
+ const result = queryHelpNextActions(db, test.tool, test.action);
318
+ if ('error' in result) {
319
+ results.push({
320
+ test: `help_next_actions: ${test.tool}.${test.action}`,
321
+ status: 'FAIL',
322
+ message: result.error
323
+ });
324
+ failed++;
325
+ console.log(` ❌ ${test.tool}.${test.action}: ${result.error}`);
326
+ }
327
+ else {
328
+ const tokens = estimateTokens(result);
329
+ const isEfficient = tokens >= 30 && tokens <= 150;
330
+ if (isEfficient) {
331
+ results.push({
332
+ test: `help_next_actions: ${test.tool}.${test.action}`,
333
+ status: 'PASS',
334
+ tokens
335
+ });
336
+ passed++;
337
+ console.log(` ✅ ${test.tool}.${test.action}: ${tokens} tokens`);
338
+ }
339
+ else {
340
+ results.push({
341
+ test: `help_next_actions: ${test.tool}.${test.action}`,
342
+ status: 'FAIL',
343
+ message: `Token count ${tokens} outside target range (30-150)`,
344
+ tokens
345
+ });
346
+ failed++;
347
+ console.log(` ❌ ${test.tool}.${test.action}: ${tokens} tokens (outside range)`);
348
+ }
349
+ }
350
+ }
351
+ catch (error) {
352
+ const message = error instanceof Error ? error.message : String(error);
353
+ results.push({
354
+ test: `help_next_actions: ${test.tool}.${test.action}`,
355
+ status: 'FAIL',
356
+ message
357
+ });
358
+ failed++;
359
+ console.log(` ❌ ${test.tool}.${test.action}: ${message}`);
360
+ }
361
+ }
362
+ // Summary
363
+ console.log('\n' + '='.repeat(60));
364
+ console.log(`Test Summary: ${passed} passed, ${failed} failed`);
365
+ console.log('='.repeat(60) + '\n');
366
+ return { passed, failed, results };
367
+ }
368
+ // Run tests if executed directly
369
+ if (import.meta.url === `file://${process.argv[1]}`) {
370
+ runHelpSystemTests().then(result => {
371
+ process.exit(result.failed > 0 ? 1 : 0);
372
+ });
373
+ }
374
+ //# sourceMappingURL=help-system.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"help-system.test.js","sourceRoot":"","sources":["../../src/tests/help-system.test.ts"],"names":[],"mappings":"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"}