@tedorigawa001/servicenow-mcp 1.0.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 (240) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +844 -0
  3. package/dist/cli/auth.d.ts +15 -0
  4. package/dist/cli/auth.d.ts.map +1 -0
  5. package/dist/cli/auth.js +200 -0
  6. package/dist/cli/auth.js.map +1 -0
  7. package/dist/cli/config-store.d.ts +28 -0
  8. package/dist/cli/config-store.d.ts.map +1 -0
  9. package/dist/cli/config-store.js +66 -0
  10. package/dist/cli/config-store.js.map +1 -0
  11. package/dist/cli/detect-clients.d.ts +16 -0
  12. package/dist/cli/detect-clients.d.ts.map +1 -0
  13. package/dist/cli/detect-clients.js +151 -0
  14. package/dist/cli/detect-clients.js.map +1 -0
  15. package/dist/cli/index.d.ts +3 -0
  16. package/dist/cli/index.d.ts.map +1 -0
  17. package/dist/cli/index.js +135 -0
  18. package/dist/cli/index.js.map +1 -0
  19. package/dist/cli/setup.d.ts +4 -0
  20. package/dist/cli/setup.d.ts.map +1 -0
  21. package/dist/cli/setup.js +564 -0
  22. package/dist/cli/setup.js.map +1 -0
  23. package/dist/cli/writers/index.d.ts +9 -0
  24. package/dist/cli/writers/index.d.ts.map +1 -0
  25. package/dist/cli/writers/index.js +135 -0
  26. package/dist/cli/writers/index.js.map +1 -0
  27. package/dist/prompts/index.d.ts +25 -0
  28. package/dist/prompts/index.d.ts.map +1 -0
  29. package/dist/prompts/index.js +38 -0
  30. package/dist/prompts/index.js.map +1 -0
  31. package/dist/prompts/itsm.d.ts +20 -0
  32. package/dist/prompts/itsm.d.ts.map +1 -0
  33. package/dist/prompts/itsm.js +110 -0
  34. package/dist/prompts/itsm.js.map +1 -0
  35. package/dist/prompts/user-prompts.d.ts +3 -0
  36. package/dist/prompts/user-prompts.d.ts.map +1 -0
  37. package/dist/prompts/user-prompts.js +35 -0
  38. package/dist/prompts/user-prompts.js.map +1 -0
  39. package/dist/resources/index.d.ts +26 -0
  40. package/dist/resources/index.d.ts.map +1 -0
  41. package/dist/resources/index.js +99 -0
  42. package/dist/resources/index.js.map +1 -0
  43. package/dist/server-http.d.ts +41 -0
  44. package/dist/server-http.d.ts.map +1 -0
  45. package/dist/server-http.js +187 -0
  46. package/dist/server-http.js.map +1 -0
  47. package/dist/server.d.ts +54 -0
  48. package/dist/server.d.ts.map +1 -0
  49. package/dist/server.js +150 -0
  50. package/dist/server.js.map +1 -0
  51. package/dist/servicenow/client.d.ts +137 -0
  52. package/dist/servicenow/client.d.ts.map +1 -0
  53. package/dist/servicenow/client.js +855 -0
  54. package/dist/servicenow/client.js.map +1 -0
  55. package/dist/servicenow/instances.d.ts +28 -0
  56. package/dist/servicenow/instances.d.ts.map +1 -0
  57. package/dist/servicenow/instances.js +190 -0
  58. package/dist/servicenow/instances.js.map +1 -0
  59. package/dist/servicenow/types.d.ts +578 -0
  60. package/dist/servicenow/types.d.ts.map +1 -0
  61. package/dist/servicenow/types.js +3 -0
  62. package/dist/servicenow/types.js.map +1 -0
  63. package/dist/tools/agile.d.ts +225 -0
  64. package/dist/tools/agile.d.ts.map +1 -0
  65. package/dist/tools/agile.js +205 -0
  66. package/dist/tools/agile.js.map +1 -0
  67. package/dist/tools/app-studio.d.ts +139 -0
  68. package/dist/tools/app-studio.d.ts.map +1 -0
  69. package/dist/tools/app-studio.js +139 -0
  70. package/dist/tools/app-studio.js.map +1 -0
  71. package/dist/tools/atf.d.ts +144 -0
  72. package/dist/tools/atf.d.ts.map +1 -0
  73. package/dist/tools/atf.js +186 -0
  74. package/dist/tools/atf.js.map +1 -0
  75. package/dist/tools/catalog.d.ts +966 -0
  76. package/dist/tools/catalog.d.ts.map +1 -0
  77. package/dist/tools/catalog.js +640 -0
  78. package/dist/tools/catalog.js.map +1 -0
  79. package/dist/tools/change.d.ts +351 -0
  80. package/dist/tools/change.d.ts.map +1 -0
  81. package/dist/tools/change.js +214 -0
  82. package/dist/tools/change.js.map +1 -0
  83. package/dist/tools/core.d.ts +768 -0
  84. package/dist/tools/core.d.ts.map +1 -0
  85. package/dist/tools/core.js +695 -0
  86. package/dist/tools/core.js.map +1 -0
  87. package/dist/tools/csm.d.ts +403 -0
  88. package/dist/tools/csm.d.ts.map +1 -0
  89. package/dist/tools/csm.js +256 -0
  90. package/dist/tools/csm.js.map +1 -0
  91. package/dist/tools/deployment.d.ts +366 -0
  92. package/dist/tools/deployment.d.ts.map +1 -0
  93. package/dist/tools/deployment.js +181 -0
  94. package/dist/tools/deployment.js.map +1 -0
  95. package/dist/tools/devops.d.ts +236 -0
  96. package/dist/tools/devops.d.ts.map +1 -0
  97. package/dist/tools/devops.js +207 -0
  98. package/dist/tools/devops.js.map +1 -0
  99. package/dist/tools/discovery.d.ts +306 -0
  100. package/dist/tools/discovery.d.ts.map +1 -0
  101. package/dist/tools/discovery.js +357 -0
  102. package/dist/tools/discovery.js.map +1 -0
  103. package/dist/tools/flow.d.ts +496 -0
  104. package/dist/tools/flow.d.ts.map +1 -0
  105. package/dist/tools/flow.js +348 -0
  106. package/dist/tools/flow.js.map +1 -0
  107. package/dist/tools/hrsd.d.ts +790 -0
  108. package/dist/tools/hrsd.d.ts.map +1 -0
  109. package/dist/tools/hrsd.js +378 -0
  110. package/dist/tools/hrsd.js.map +1 -0
  111. package/dist/tools/incident.d.ts +259 -0
  112. package/dist/tools/incident.d.ts.map +1 -0
  113. package/dist/tools/incident.js +170 -0
  114. package/dist/tools/incident.js.map +1 -0
  115. package/dist/tools/index.d.ts +13 -0
  116. package/dist/tools/index.d.ts.map +1 -0
  117. package/dist/tools/index.js +385 -0
  118. package/dist/tools/index.js.map +1 -0
  119. package/dist/tools/integration.d.ts +940 -0
  120. package/dist/tools/integration.d.ts.map +1 -0
  121. package/dist/tools/integration.js +685 -0
  122. package/dist/tools/integration.js.map +1 -0
  123. package/dist/tools/itam.d.ts +462 -0
  124. package/dist/tools/itam.d.ts.map +1 -0
  125. package/dist/tools/itam.js +306 -0
  126. package/dist/tools/itam.js.map +1 -0
  127. package/dist/tools/knowledge.d.ts +187 -0
  128. package/dist/tools/knowledge.d.ts.map +1 -0
  129. package/dist/tools/knowledge.js +161 -0
  130. package/dist/tools/knowledge.js.map +1 -0
  131. package/dist/tools/ml.d.ts +263 -0
  132. package/dist/tools/ml.d.ts.map +1 -0
  133. package/dist/tools/ml.js +251 -0
  134. package/dist/tools/ml.js.map +1 -0
  135. package/dist/tools/mobile.d.ts +352 -0
  136. package/dist/tools/mobile.d.ts.map +1 -0
  137. package/dist/tools/mobile.js +122 -0
  138. package/dist/tools/mobile.js.map +1 -0
  139. package/dist/tools/notification.d.ts +590 -0
  140. package/dist/tools/notification.d.ts.map +1 -0
  141. package/dist/tools/notification.js +382 -0
  142. package/dist/tools/notification.js.map +1 -0
  143. package/dist/tools/now-assist.d.ts +300 -0
  144. package/dist/tools/now-assist.d.ts.map +1 -0
  145. package/dist/tools/now-assist.js +227 -0
  146. package/dist/tools/now-assist.js.map +1 -0
  147. package/dist/tools/performance.d.ts +447 -0
  148. package/dist/tools/performance.d.ts.map +1 -0
  149. package/dist/tools/performance.js +473 -0
  150. package/dist/tools/performance.js.map +1 -0
  151. package/dist/tools/portal.d.ts +530 -0
  152. package/dist/tools/portal.d.ts.map +1 -0
  153. package/dist/tools/portal.js +425 -0
  154. package/dist/tools/portal.js.map +1 -0
  155. package/dist/tools/problem.d.ts +111 -0
  156. package/dist/tools/problem.d.ts.map +1 -0
  157. package/dist/tools/problem.js +101 -0
  158. package/dist/tools/problem.js.map +1 -0
  159. package/dist/tools/reporting.d.ts +825 -0
  160. package/dist/tools/reporting.d.ts.map +1 -0
  161. package/dist/tools/reporting.js +453 -0
  162. package/dist/tools/reporting.js.map +1 -0
  163. package/dist/tools/sam.d.ts +312 -0
  164. package/dist/tools/sam.d.ts.map +1 -0
  165. package/dist/tools/sam.js +360 -0
  166. package/dist/tools/sam.js.map +1 -0
  167. package/dist/tools/schema-helpers.d.ts +119 -0
  168. package/dist/tools/schema-helpers.d.ts.map +1 -0
  169. package/dist/tools/schema-helpers.js +121 -0
  170. package/dist/tools/schema-helpers.js.map +1 -0
  171. package/dist/tools/script.d.ts +714 -0
  172. package/dist/tools/script.d.ts.map +1 -0
  173. package/dist/tools/script.js +629 -0
  174. package/dist/tools/script.js.map +1 -0
  175. package/dist/tools/security.d.ts +802 -0
  176. package/dist/tools/security.d.ts.map +1 -0
  177. package/dist/tools/security.js +426 -0
  178. package/dist/tools/security.js.map +1 -0
  179. package/dist/tools/smart-query.d.ts +84 -0
  180. package/dist/tools/smart-query.d.ts.map +1 -0
  181. package/dist/tools/smart-query.js +320 -0
  182. package/dist/tools/smart-query.js.map +1 -0
  183. package/dist/tools/sys-properties.d.ts +315 -0
  184. package/dist/tools/sys-properties.d.ts.map +1 -0
  185. package/dist/tools/sys-properties.js +416 -0
  186. package/dist/tools/sys-properties.js.map +1 -0
  187. package/dist/tools/task.d.ts +82 -0
  188. package/dist/tools/task.d.ts.map +1 -0
  189. package/dist/tools/task.js +96 -0
  190. package/dist/tools/task.js.map +1 -0
  191. package/dist/tools/updateset.d.ts +159 -0
  192. package/dist/tools/updateset.d.ts.map +1 -0
  193. package/dist/tools/updateset.js +266 -0
  194. package/dist/tools/updateset.js.map +1 -0
  195. package/dist/tools/usem-approval.d.ts +130 -0
  196. package/dist/tools/usem-approval.d.ts.map +1 -0
  197. package/dist/tools/usem-approval.js +194 -0
  198. package/dist/tools/usem-approval.js.map +1 -0
  199. package/dist/tools/usem-config.d.ts +171 -0
  200. package/dist/tools/usem-config.d.ts.map +1 -0
  201. package/dist/tools/usem-config.js +254 -0
  202. package/dist/tools/usem-config.js.map +1 -0
  203. package/dist/tools/usem-integration.d.ts +228 -0
  204. package/dist/tools/usem-integration.d.ts.map +1 -0
  205. package/dist/tools/usem-integration.js +223 -0
  206. package/dist/tools/usem-integration.js.map +1 -0
  207. package/dist/tools/usem-sla.d.ts +201 -0
  208. package/dist/tools/usem-sla.d.ts.map +1 -0
  209. package/dist/tools/usem-sla.js +322 -0
  210. package/dist/tools/usem-sla.js.map +1 -0
  211. package/dist/tools/usem.d.ts +489 -0
  212. package/dist/tools/usem.d.ts.map +1 -0
  213. package/dist/tools/usem.js +514 -0
  214. package/dist/tools/usem.js.map +1 -0
  215. package/dist/tools/user.d.ts +206 -0
  216. package/dist/tools/user.d.ts.map +1 -0
  217. package/dist/tools/user.js +163 -0
  218. package/dist/tools/user.js.map +1 -0
  219. package/dist/tools/va.d.ts +217 -0
  220. package/dist/tools/va.d.ts.map +1 -0
  221. package/dist/tools/va.js +178 -0
  222. package/dist/tools/va.js.map +1 -0
  223. package/dist/tools/workspace.d.ts +565 -0
  224. package/dist/tools/workspace.d.ts.map +1 -0
  225. package/dist/tools/workspace.js +201 -0
  226. package/dist/tools/workspace.js.map +1 -0
  227. package/dist/utils/errors.d.ts +6 -0
  228. package/dist/utils/errors.d.ts.map +1 -0
  229. package/dist/utils/errors.js +11 -0
  230. package/dist/utils/errors.js.map +1 -0
  231. package/dist/utils/logging.d.ts +7 -0
  232. package/dist/utils/logging.d.ts.map +1 -0
  233. package/dist/utils/logging.js +15 -0
  234. package/dist/utils/logging.js.map +1 -0
  235. package/dist/utils/permissions.d.ts +21 -0
  236. package/dist/utils/permissions.d.ts.map +1 -0
  237. package/dist/utils/permissions.js +54 -0
  238. package/dist/utils/permissions.js.map +1 -0
  239. package/instances.example.json +69 -0
  240. package/package.json +110 -0
@@ -0,0 +1,320 @@
1
+ import { ServiceNowError } from '../utils/errors.js';
2
+ // ─── Pure helpers (no client — unit-testable) ───────────────────────────────
3
+ /** A keyword → table mapping. Longer matched terms win (see resolveTableByKeyword). */
4
+ const TABLE_SYNONYMS = [
5
+ { table: 'change_request', terms: ['change request', '変更要求', '変更リクエスト', '変更', 'chg'] },
6
+ { table: 'sc_req_item', terms: ['requested item', 'req item', 'ritm', '要求アイテム'] },
7
+ { table: 'sc_request', terms: ['service request', 'リクエスト', '依頼', 'サービス要求'] },
8
+ { table: 'sc_cat_item', terms: ['catalog item', 'カタログアイテム', 'カタログ'] },
9
+ { table: 'incident', terms: ['incident', 'インシデント', '障害', 'ticket', 'チケット'] },
10
+ { table: 'problem', terms: ['problem', '問題', 'prb'] },
11
+ { table: 'sn_vul_vulnerable_item', terms: ['vulnerable item', '脆弱性アイテム', 'vulnerable items'] },
12
+ { table: 'sn_vul_remediation_task', terms: ['remediation task', '修復タスク'] },
13
+ // The approval *queue* people act on lives in sysapproval_approver — not the
14
+ // sysapproval_group join table the sys_db_object label search would pick first.
15
+ { table: 'sysapproval_approver', terms: ['approval', 'approvals', '承認待ち', '承認'] },
16
+ { table: 'cmdb_ci', terms: ['configuration item', '構成アイテム', 'cmdb', ' ci '] },
17
+ { table: 'sys_user_group', terms: ['user group', 'グループ', 'チーム'] },
18
+ { table: 'sys_user', terms: ['user', 'ユーザー', '利用者', '社員'] },
19
+ { table: 'kb_knowledge', terms: ['knowledge article', 'knowledge', 'ナレッジ', '記事'] },
20
+ { table: 'cmn_location', terms: ['location', 'ロケーション', '拠点', '場所'] },
21
+ { table: 'task', terms: ['task', 'タスク'] },
22
+ ];
23
+ /**
24
+ * Resolve a table from keyword synonyms. The match whose matched term is the
25
+ * longest wins, so "change request" beats the bare "request"/"task" terms.
26
+ */
27
+ export function resolveTableByKeyword(description) {
28
+ const lower = ` ${description.toLowerCase()} `;
29
+ const hits = [];
30
+ for (const { table, terms } of TABLE_SYNONYMS) {
31
+ for (const t of terms) {
32
+ if (lower.includes(t.toLowerCase())) {
33
+ hits.push({ table, len: t.trim().length });
34
+ break;
35
+ }
36
+ }
37
+ }
38
+ hits.sort((a, b) => b.len - a.len);
39
+ const candidates = [];
40
+ for (const h of hits)
41
+ if (!candidates.includes(h.table))
42
+ candidates.push(h.table);
43
+ return { table: candidates[0], candidates };
44
+ }
45
+ /** System fields present on every table — never gated on the dictionary. */
46
+ const ALWAYS_FIELDS = new Set(['sys_created_on', 'sys_updated_on', 'sys_id', 'sys_created_by']);
47
+ /**
48
+ * Parse a natural-language description into encoded-query conditions, keeping
49
+ * only those whose target field exists in `fieldSet` (or is a system field).
50
+ */
51
+ export function buildSmartQueryPlan(description, fieldSet) {
52
+ const lower = description.toLowerCase();
53
+ const conditions = [];
54
+ const unmatched = [];
55
+ const add = (intent, field, fragment) => {
56
+ if (ALWAYS_FIELDS.has(field) || fieldSet.has(field)) {
57
+ conditions.push({ intent, field, fragment });
58
+ }
59
+ else {
60
+ unmatched.push(intent);
61
+ }
62
+ };
63
+ // ── Priority ──
64
+ let priority;
65
+ const pMatch = lower.match(/\bp([1-5])\b/) || description.match(/優先度\s*([1-5])/);
66
+ if (pMatch)
67
+ priority = parseInt(pMatch[1], 10);
68
+ else if (/\bcritical\b|緊急|重大|最優先/.test(lower) || /緊急|重大|最優先/.test(description))
69
+ priority = 1;
70
+ else if (/high[\s-]?priority|高優先/.test(lower) || /高優先/.test(description))
71
+ priority = 2;
72
+ else if (/(moderate|medium)[\s-]?priority|中優先/.test(lower) || /中優先/.test(description))
73
+ priority = 3;
74
+ else if (/low[\s-]?priority|低優先/.test(lower) || /低優先/.test(description))
75
+ priority = 4;
76
+ if (priority !== undefined)
77
+ add(`priority=${priority}`, 'priority', `priority=${priority}`);
78
+ // ── Open vs closed (active flag) ──
79
+ // \bactive\b does not match the "active" inside "inactive" (the preceding
80
+ // word char blocks the boundary), so this stays safe.
81
+ const openRe = /\bopen\b|\bactive\b|未解決|未対応|オープン|未クローズ|有効/;
82
+ const closedRe = /\bclosed\b|\bresolved\b|解決済|完了|クローズ済|終了/;
83
+ if (openRe.test(lower) || openRe.test(description)) {
84
+ add('open (active=true)', 'active', 'active=true');
85
+ }
86
+ else if (closedRe.test(lower) || closedRe.test(description)) {
87
+ add('closed (active=false)', 'active', 'active=false');
88
+ }
89
+ // ── Assignment ──
90
+ if (/unassigned|未割り?当|未アサイン/.test(lower) || /未割り?当|未アサイン/.test(description)) {
91
+ add('unassigned', 'assigned_to', 'assigned_toISEMPTY');
92
+ }
93
+ else if (/assigned to me|自分|私の|私が/.test(lower) || /自分|私の|私が/.test(description)) {
94
+ add('assigned to me', 'assigned_to', 'assigned_to=javascript:gs.getUserID()');
95
+ }
96
+ // ── Time window (created/updated date) ──
97
+ // Only GlideSystem functions on the client's SAFE_GS_PATTERN allowlist are
98
+ // emitted (no week-boundary funcs exist there, so week → a 7-day approximation
99
+ // via daysAgo, which is allowlisted).
100
+ const dateField = /updated|更新|変更日/.test(lower) || /更新|変更日/.test(description)
101
+ ? 'sys_updated_on'
102
+ : 'sys_created_on';
103
+ const between = (label, start, end) => add(label, dateField, `${dateField}>=javascript:gs.${start}^${dateField}<=javascript:gs.${end}`);
104
+ const since = (label, start) => add(label, dateField, `${dateField}>=javascript:gs.${start}`);
105
+ const nDays = lower.match(/(?:last|past|直近|過去)\s*(\d+)\s*(?:days?|日)/) ||
106
+ description.match(/(\d+)\s*日(?:以内|間)/);
107
+ if (nDays) {
108
+ const n = Math.min(Math.max(parseInt(nDays[1], 10), 1), 3650);
109
+ // daysAgo takes a validated int — injection-safe.
110
+ since(`last ${n} day(s)`, `daysAgo(${n})`);
111
+ }
112
+ else if (/today|今日|本日/.test(lower) || /今日|本日/.test(description)) {
113
+ since('today', 'beginningOfToday()');
114
+ }
115
+ else if (/yesterday|昨日/.test(lower) || /昨日/.test(description)) {
116
+ between('yesterday', 'beginningOfYesterday()', 'endOfYesterday()');
117
+ }
118
+ else if (/this week|today.?s week|今週/.test(lower) || /今週/.test(description)) {
119
+ since('this week (~last 7 days)', 'daysAgo(7)');
120
+ }
121
+ else if (/last week|先週/.test(lower) || /先週/.test(description)) {
122
+ between('last week (~7-14 days ago)', 'daysAgo(14)', 'daysAgo(7)');
123
+ }
124
+ else if (/this month|今月/.test(lower) || /今月/.test(description)) {
125
+ since('this month', 'beginningOfThisMonth()');
126
+ }
127
+ else if (/last month|先月/.test(lower) || /先月/.test(description)) {
128
+ between('last month', 'beginningOfLastMonth()', 'endOfLastMonth()');
129
+ }
130
+ const encoded_query = conditions.map(c => c.fragment).join('^');
131
+ return { conditions, unmatched, encoded_query };
132
+ }
133
+ // ─── Client-backed helpers ──────────────────────────────────────────────────
134
+ const strVal = (v) => v && typeof v === 'object' ? (v.value ?? '') : (v ?? '');
135
+ /**
136
+ * Resolve the field set for a table, walking its super_class chain so that
137
+ * inherited fields (e.g. task.priority on incident) are recognized.
138
+ */
139
+ async function getTableFieldSet(client, table) {
140
+ const chain = [];
141
+ let current = table;
142
+ let exists = false;
143
+ for (let depth = 0; current && depth < 6; depth++) {
144
+ const resp = await client.queryRecords({
145
+ table: 'sys_db_object',
146
+ query: `name=${current}`,
147
+ fields: 'name,super_class',
148
+ limit: 1,
149
+ });
150
+ if (resp.count === 0 || resp.records.length === 0)
151
+ break;
152
+ if (depth === 0)
153
+ exists = true;
154
+ chain.push(current);
155
+ const superSysId = strVal(resp.records[0].super_class);
156
+ if (!superSysId)
157
+ break;
158
+ const parentResp = await client.queryRecords({
159
+ table: 'sys_db_object',
160
+ query: `sys_id=${superSysId}`,
161
+ fields: 'name',
162
+ limit: 1,
163
+ });
164
+ current = strVal(parentResp.records[0]?.name) || undefined;
165
+ if (chain.includes(current))
166
+ break; // guard against cycles
167
+ }
168
+ const fields = new Set();
169
+ if (chain.length > 0) {
170
+ const dictResp = await client.queryRecords({
171
+ table: 'sys_dictionary',
172
+ query: `nameIN${chain.join(',')}^element!=NULL`,
173
+ fields: 'element',
174
+ limit: 2000,
175
+ });
176
+ for (const row of dictResp.records) {
177
+ const el = strVal(row.element);
178
+ if (el)
179
+ fields.add(el);
180
+ }
181
+ }
182
+ return { exists, fields, chain };
183
+ }
184
+ /**
185
+ * Extract LIKE-search tokens from a free-text description, covering both ASCII
186
+ * and Japanese. A plain `split(/[^A-Za-z0-9_]+/)` would treat every kana/kanji
187
+ * as a delimiter and drop all Japanese text, so we *match* token runs instead:
188
+ * - ASCII words ≥5 chars (≥5 avoids noisy substrings like "here" in "WebSphere")
189
+ * - Katakana runs ≥3 chars (e.g. "ワークフロー"; the long-vowel ー is included)
190
+ * - Kanji runs ≥2 chars (e.g. "勤怠管理" / "申請"; hiragana is excluded so
191
+ * particles/inflection like の・して don't glue onto a kanji compound)
192
+ */
193
+ export function extractSearchTokens(description) {
194
+ const matches = description.match(/[A-Za-z0-9_]{5,}|[゠-ヿーヲ-゚]{3,}|[㐀-鿿々〇]{2,}/g);
195
+ return (matches ?? []).slice(0, 5);
196
+ }
197
+ /** Best-effort fallback: search sys_db_object by label/name for description tokens. */
198
+ async function searchTableByLabel(client, description) {
199
+ const tokens = extractSearchTokens(description);
200
+ for (const token of tokens) {
201
+ try {
202
+ const resp = await client.queryRecords({
203
+ table: 'sys_db_object',
204
+ query: `labelLIKE${token}^ORnameLIKE${token}`,
205
+ fields: 'name,label',
206
+ limit: 5,
207
+ });
208
+ if (resp.count > 0 && resp.records.length > 0) {
209
+ const candidates = resp.records.map((r) => strVal(r.name)).filter(Boolean);
210
+ return { table: candidates[0], candidates };
211
+ }
212
+ }
213
+ catch {
214
+ // ignore and try the next token
215
+ }
216
+ }
217
+ return { candidates: [] };
218
+ }
219
+ // ─── Tool definition + executor ─────────────────────────────────────────────
220
+ export function getSmartQueryToolDefinitions() {
221
+ return [
222
+ {
223
+ name: 'smart_query',
224
+ description: 'Resolve a natural-language request into a ServiceNow table + encoded query and (optionally) run it. ' +
225
+ 'Maps keywords to common tables (incident, change_request, problem, sc_request, sn_vul_vulnerable_item, cmdb_ci, sys_user, …), ' +
226
+ 'then infers conditions for priority (P1/critical/high), open vs closed state, "assigned to me"/unassigned, ' +
227
+ 'and time windows (today, yesterday, this/last week, this/last month, last N days). Conditions whose field does not exist ' +
228
+ 'on the resolved table are dropped and reported in unmatched_intents. Returns the interpretation (table, encoded_query, ' +
229
+ 'conditions) plus matching records. Set execute=false to preview the query without running it, or pass table to override resolution.',
230
+ inputSchema: {
231
+ type: 'object',
232
+ properties: {
233
+ description: {
234
+ type: 'string',
235
+ description: 'Natural-language request, e.g. "P1 incidents still open from last month" / "先月の未解決 P1 インシデント"',
236
+ },
237
+ table: {
238
+ type: 'string',
239
+ description: 'Optional: force this table instead of auto-resolving from keywords',
240
+ },
241
+ limit: { type: 'number', description: 'Max records to return when executed (default 10, max 1000)' },
242
+ execute: { type: 'boolean', description: 'Run the resolved query (default true). false = preview only.' },
243
+ },
244
+ required: ['description'],
245
+ },
246
+ },
247
+ ];
248
+ }
249
+ export async function executeSmartQueryToolCall(client, name, args) {
250
+ if (name !== 'smart_query')
251
+ return null;
252
+ const description = args.description;
253
+ if (typeof description !== 'string' || description.trim() === '') {
254
+ throw new ServiceNowError('description (non-empty string) is required', 'INVALID_REQUEST');
255
+ }
256
+ const limit = Math.min(Math.max(Number(args.limit) || 10, 1), 1000);
257
+ const execute = args.execute !== false;
258
+ // 1. Resolve the table.
259
+ let table;
260
+ let resolution;
261
+ let candidates = [];
262
+ if (typeof args.table === 'string' && args.table.trim() !== '') {
263
+ table = args.table.trim();
264
+ resolution = 'hint';
265
+ }
266
+ else {
267
+ const kw = resolveTableByKeyword(description);
268
+ candidates = kw.candidates;
269
+ if (kw.table) {
270
+ table = kw.table;
271
+ resolution = 'keyword';
272
+ }
273
+ else {
274
+ const found = await searchTableByLabel(client, description);
275
+ if (found.table) {
276
+ table = found.table;
277
+ resolution = 'sys_db_object';
278
+ candidates = found.candidates;
279
+ }
280
+ }
281
+ }
282
+ if (!table) {
283
+ throw new ServiceNowError(`Could not resolve a table from "${description}". Pass an explicit "table".`, 'NOT_FOUND');
284
+ }
285
+ // 2. Field set (own + inherited).
286
+ const meta = await getTableFieldSet(client, table);
287
+ if (!meta.exists) {
288
+ throw new ServiceNowError(`Resolved table "${table}" not found in sys_db_object`, 'NOT_FOUND');
289
+ }
290
+ // 3. Build the query plan.
291
+ const plan = buildSmartQueryPlan(description, meta.fields);
292
+ const interpreted = {
293
+ table,
294
+ table_resolution: resolution,
295
+ candidate_tables: candidates,
296
+ inheritance_chain: meta.chain,
297
+ conditions: plan.conditions,
298
+ unmatched_intents: plan.unmatched,
299
+ encoded_query: plan.encoded_query,
300
+ };
301
+ const condCount = plan.conditions.length;
302
+ const queryDesc = plan.encoded_query || '(no filter — all records)';
303
+ // 4. Optionally execute.
304
+ if (!execute) {
305
+ return {
306
+ ...interpreted,
307
+ executed: false,
308
+ summary: `Resolved "${description}" → table "${table}" with ${condCount} condition(s): ${queryDesc} (preview only)`,
309
+ };
310
+ }
311
+ const resp = await client.queryRecords({ table, query: plan.encoded_query, limit });
312
+ return {
313
+ ...interpreted,
314
+ executed: true,
315
+ count: resp.count,
316
+ records: resp.records,
317
+ summary: `Resolved "${description}" → ${resp.count} record(s) in "${table}" via [${queryDesc}]`,
318
+ };
319
+ }
320
+ //# sourceMappingURL=smart-query.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"smart-query.js","sourceRoot":"","sources":["../../src/tools/smart-query.ts"],"names":[],"mappings":"AAkBA,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,+EAA+E;AAE/E,uFAAuF;AACvF,MAAM,cAAc,GAA8C;IAChE,EAAE,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,CAAC,gBAAgB,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,CAAC,EAAE;IACtF,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC,gBAAgB,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE;IACjF,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,iBAAiB,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,EAAE;IAC5E,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC,cAAc,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE;IACrE,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE;IAC5E,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,SAAS,EAAE,IAAI,EAAE,KAAK,CAAC,EAAE;IACrD,EAAE,KAAK,EAAE,wBAAwB,EAAE,KAAK,EAAE,CAAC,iBAAiB,EAAE,SAAS,EAAE,kBAAkB,CAAC,EAAE;IAC9F,EAAE,KAAK,EAAE,yBAAyB,EAAE,KAAK,EAAE,CAAC,kBAAkB,EAAE,OAAO,CAAC,EAAE;IAC1E,6EAA6E;IAC7E,gFAAgF;IAChF,EAAE,KAAK,EAAE,sBAAsB,EAAE,KAAK,EAAE,CAAC,UAAU,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;IACjF,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,oBAAoB,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE;IAC7E,EAAE,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE;IACjE,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE;IAC3D,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,CAAC,mBAAmB,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;IAClF,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,CAAC,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE;IACpE,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE;CAC1C,CAAC;AAOF;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CAAC,WAAmB;IACvD,MAAM,KAAK,GAAG,IAAI,WAAW,CAAC,WAAW,EAAE,GAAG,CAAC;IAC/C,MAAM,IAAI,GAA0C,EAAE,CAAC;IACvD,KAAK,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,cAAc,EAAE,CAAC;QAC9C,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;YACtB,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;gBACpC,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC;gBAC3C,MAAM;YACR,CAAC;QACH,CAAC;IACH,CAAC;IACD,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;IACnC,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,KAAK,MAAM,CAAC,IAAI,IAAI;QAAE,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC;YAAE,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAClF,OAAO,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC;AAC9C,CAAC;AAkBD,4EAA4E;AAC5E,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,QAAQ,EAAE,gBAAgB,CAAC,CAAC,CAAC;AAEhG;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,WAAmB,EAAE,QAAqB;IAC5E,MAAM,KAAK,GAAG,WAAW,CAAC,WAAW,EAAE,CAAC;IACxC,MAAM,UAAU,GAAwB,EAAE,CAAC;IAC3C,MAAM,SAAS,GAAa,EAAE,CAAC;IAE/B,MAAM,GAAG,GAAG,CAAC,MAAc,EAAE,KAAa,EAAE,QAAgB,EAAE,EAAE;QAC9D,IAAI,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YACpD,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC/C,CAAC;aAAM,CAAC;YACN,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACzB,CAAC;IACH,CAAC,CAAC;IAEF,iBAAiB;IACjB,IAAI,QAA4B,CAAC;IACjC,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,WAAW,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;IACjF,IAAI,MAAM;QAAE,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;SAC1C,IAAI,wBAAwB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC;QAAE,QAAQ,GAAG,CAAC,CAAC;SACxF,IAAI,wBAAwB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC;QAAE,QAAQ,GAAG,CAAC,CAAC;SAClF,IAAI,qCAAqC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC;QAAE,QAAQ,GAAG,CAAC,CAAC;SAC/F,IAAI,uBAAuB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC;QAAE,QAAQ,GAAG,CAAC,CAAC;IACtF,IAAI,QAAQ,KAAK,SAAS;QAAE,GAAG,CAAC,YAAY,QAAQ,EAAE,EAAE,UAAU,EAAE,YAAY,QAAQ,EAAE,CAAC,CAAC;IAE5F,qCAAqC;IACrC,0EAA0E;IAC1E,sDAAsD;IACtD,MAAM,MAAM,GAAG,2CAA2C,CAAC;IAC3D,MAAM,QAAQ,GAAG,yCAAyC,CAAC;IAC3D,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;QACnD,GAAG,CAAC,oBAAoB,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC;IACrD,CAAC;SAAM,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;QAC9D,GAAG,CAAC,uBAAuB,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAC;IACzD,CAAC;IAED,mBAAmB;IACnB,IAAI,wBAAwB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;QAC5E,GAAG,CAAC,YAAY,EAAE,aAAa,EAAE,oBAAoB,CAAC,CAAC;IACzD,CAAC;SAAM,IAAI,yBAAyB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;QACjF,GAAG,CAAC,gBAAgB,EAAE,aAAa,EAAE,uCAAuC,CAAC,CAAC;IAChF,CAAC;IAED,2CAA2C;IAC3C,2EAA2E;IAC3E,+EAA+E;IAC/E,sCAAsC;IACtC,MAAM,SAAS,GAAG,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC;QAC1E,CAAC,CAAC,gBAAgB;QAClB,CAAC,CAAC,gBAAgB,CAAC;IACrB,MAAM,OAAO,GAAG,CAAC,KAAa,EAAE,KAAa,EAAE,GAAW,EAAE,EAAE,CAC5D,GAAG,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,SAAS,mBAAmB,KAAK,IAAI,SAAS,mBAAmB,GAAG,EAAE,CAAC,CAAC;IACnG,MAAM,KAAK,GAAG,CAAC,KAAa,EAAE,KAAa,EAAE,EAAE,CAC7C,GAAG,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,SAAS,mBAAmB,KAAK,EAAE,CAAC,CAAC;IAEhE,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,2CAA2C,CAAC;QACpE,WAAW,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACzC,IAAI,KAAK,EAAE,CAAC;QACV,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;QAC9D,kDAAkD;QAClD,KAAK,CAAC,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC;IAC7C,CAAC;SAAM,IAAI,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;QAClE,KAAK,CAAC,OAAO,EAAE,oBAAoB,CAAC,CAAC;IACvC,CAAC;SAAM,IAAI,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;QAChE,OAAO,CAAC,WAAW,EAAE,wBAAwB,EAAE,kBAAkB,CAAC,CAAC;IACrE,CAAC;SAAM,IAAI,4BAA4B,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;QAC9E,KAAK,CAAC,0BAA0B,EAAE,YAAY,CAAC,CAAC;IAClD,CAAC;SAAM,IAAI,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;QAChE,OAAO,CAAC,4BAA4B,EAAE,aAAa,EAAE,YAAY,CAAC,CAAC;IACrE,CAAC;SAAM,IAAI,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;QACjE,KAAK,CAAC,YAAY,EAAE,wBAAwB,CAAC,CAAC;IAChD,CAAC;SAAM,IAAI,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;QACjE,OAAO,CAAC,YAAY,EAAE,wBAAwB,EAAE,kBAAkB,CAAC,CAAC;IACtE,CAAC;IAED,MAAM,aAAa,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAChE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,EAAE,CAAC;AAClD,CAAC;AAED,+EAA+E;AAE/E,MAAM,MAAM,GAAG,CAAC,CAAU,EAAU,EAAE,CACpC,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAE,CAAS,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAE,CAAY,IAAI,EAAE,CAAC,CAAC;AAEhF;;;GAGG;AACH,KAAK,UAAU,gBAAgB,CAC7B,MAAwB,EACxB,KAAa;IAEb,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,OAAO,GAAuB,KAAK,CAAC;IACxC,IAAI,MAAM,GAAG,KAAK,CAAC;IAEnB,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,OAAO,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC;QAClD,MAAM,IAAI,GAAQ,MAAM,MAAM,CAAC,YAAY,CAAC;YAC1C,KAAK,EAAE,eAAe;YACtB,KAAK,EAAE,QAAQ,OAAO,EAAE;YACxB,MAAM,EAAE,kBAAkB;YAC1B,KAAK,EAAE,CAAC;SACT,CAAC,CAAC;QACH,IAAI,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,MAAM;QACzD,IAAI,KAAK,KAAK,CAAC;YAAE,MAAM,GAAG,IAAI,CAAC;QAC/B,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACpB,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;QACvD,IAAI,CAAC,UAAU;YAAE,MAAM;QACvB,MAAM,UAAU,GAAQ,MAAM,MAAM,CAAC,YAAY,CAAC;YAChD,KAAK,EAAE,eAAe;YACtB,KAAK,EAAE,UAAU,UAAU,EAAE;YAC7B,MAAM,EAAE,MAAM;YACd,KAAK,EAAE,CAAC;SACT,CAAC,CAAC;QACH,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,SAAS,CAAC;QAC3D,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAiB,CAAC;YAAE,MAAM,CAAC,uBAAuB;IACvE,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,GAAG,EAAU,CAAC;IACjC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrB,MAAM,QAAQ,GAAQ,MAAM,MAAM,CAAC,YAAY,CAAC;YAC9C,KAAK,EAAE,gBAAgB;YACvB,KAAK,EAAE,SAAS,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,gBAAgB;YAC/C,MAAM,EAAE,SAAS;YACjB,KAAK,EAAE,IAAI;SACZ,CAAC,CAAC;QACH,KAAK,MAAM,GAAG,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;YACnC,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAC/B,IAAI,EAAE;gBAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACzB,CAAC;IACH,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;AACnC,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,mBAAmB,CAAC,WAAmB;IACrD,MAAM,OAAO,GAAG,WAAW,CAAC,KAAK,CAC/B,6CAA6C,CAC9C,CAAC;IACF,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACrC,CAAC;AAED,uFAAuF;AACvF,KAAK,UAAU,kBAAkB,CAC/B,MAAwB,EACxB,WAAmB;IAEnB,MAAM,MAAM,GAAG,mBAAmB,CAAC,WAAW,CAAC,CAAC;IAChD,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,CAAC;YACH,MAAM,IAAI,GAAQ,MAAM,MAAM,CAAC,YAAY,CAAC;gBAC1C,KAAK,EAAE,eAAe;gBACtB,KAAK,EAAE,YAAY,KAAK,cAAc,KAAK,EAAE;gBAC7C,MAAM,EAAE,YAAY;gBACpB,KAAK,EAAE,CAAC;aACT,CAAC,CAAC;YACH,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC9C,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;gBAChF,OAAO,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC;YAC9C,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,gCAAgC;QAClC,CAAC;IACH,CAAC;IACD,OAAO,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC;AAC5B,CAAC;AAED,+EAA+E;AAE/E,MAAM,UAAU,4BAA4B;IAC1C,OAAO;QACL;YACE,IAAI,EAAE,aAAa;YACnB,WAAW,EACT,sGAAsG;gBACtG,gIAAgI;gBAChI,6GAA6G;gBAC7G,2HAA2H;gBAC3H,yHAAyH;gBACzH,qIAAqI;YACvI,WAAW,EAAE;gBACX,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE;oBACV,WAAW,EAAE;wBACX,IAAI,EAAE,QAAQ;wBACd,WAAW,EACT,+FAA+F;qBAClG;oBACD,KAAK,EAAE;wBACL,IAAI,EAAE,QAAQ;wBACd,WAAW,EAAE,oEAAoE;qBAClF;oBACD,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,4DAA4D,EAAE;oBACpG,OAAO,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,8DAA8D,EAAE;iBAC1G;gBACD,QAAQ,EAAE,CAAC,aAAa,CAAC;aAC1B;SACF;KACF,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,MAAwB,EACxB,IAAY,EACZ,IAAyB;IAEzB,IAAI,IAAI,KAAK,aAAa;QAAE,OAAO,IAAI,CAAC;IAExC,MAAM,WAAW,GAAY,IAAI,CAAC,WAAW,CAAC;IAC9C,IAAI,OAAO,WAAW,KAAK,QAAQ,IAAI,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QACjE,MAAM,IAAI,eAAe,CAAC,4CAA4C,EAAE,iBAAiB,CAAC,CAAC;IAC7F,CAAC;IACD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IACpE,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,KAAK,KAAK,CAAC;IAEvC,wBAAwB;IACxB,IAAI,KAAyB,CAAC;IAC9B,IAAI,UAA4D,CAAC;IACjE,IAAI,UAAU,GAAa,EAAE,CAAC;IAE9B,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QAC/D,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QAC1B,UAAU,GAAG,MAAM,CAAC;IACtB,CAAC;SAAM,CAAC;QACN,MAAM,EAAE,GAAG,qBAAqB,CAAC,WAAW,CAAC,CAAC;QAC9C,UAAU,GAAG,EAAE,CAAC,UAAU,CAAC;QAC3B,IAAI,EAAE,CAAC,KAAK,EAAE,CAAC;YACb,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC;YACjB,UAAU,GAAG,SAAS,CAAC;QACzB,CAAC;aAAM,CAAC;YACN,MAAM,KAAK,GAAG,MAAM,kBAAkB,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;YAC5D,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;gBAChB,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;gBACpB,UAAU,GAAG,eAAe,CAAC;gBAC7B,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC;YAChC,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,eAAe,CACvB,mCAAmC,WAAW,8BAA8B,EAC5E,WAAW,CACZ,CAAC;IACJ,CAAC;IAED,kCAAkC;IAClC,MAAM,IAAI,GAAG,MAAM,gBAAgB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACnD,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;QACjB,MAAM,IAAI,eAAe,CAAC,mBAAmB,KAAK,8BAA8B,EAAE,WAAW,CAAC,CAAC;IACjG,CAAC;IAED,2BAA2B;IAC3B,MAAM,IAAI,GAAG,mBAAmB,CAAC,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IAE3D,MAAM,WAAW,GAAG;QAClB,KAAK;QACL,gBAAgB,EAAE,UAAU;QAC5B,gBAAgB,EAAE,UAAU;QAC5B,iBAAiB,EAAE,IAAI,CAAC,KAAK;QAC7B,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,iBAAiB,EAAE,IAAI,CAAC,SAAS;QACjC,aAAa,EAAE,IAAI,CAAC,aAAa;KAClC,CAAC;IAEF,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;IACzC,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,IAAI,2BAA2B,CAAC;IAEpE,yBAAyB;IACzB,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO;YACL,GAAG,WAAW;YACd,QAAQ,EAAE,KAAK;YACf,OAAO,EAAE,aAAa,WAAW,cAAc,KAAK,UAAU,SAAS,kBAAkB,SAAS,iBAAiB;SACpH,CAAC;IACJ,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,aAAa,EAAE,KAAK,EAAE,CAAC,CAAC;IACpF,OAAO;QACL,GAAG,WAAW;QACd,QAAQ,EAAE,IAAI;QACd,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,OAAO,EAAE,aAAa,WAAW,OAAO,IAAI,CAAC,KAAK,kBAAkB,KAAK,UAAU,SAAS,GAAG;KAChG,CAAC;AACJ,CAAC"}
@@ -0,0 +1,315 @@
1
+ /**
2
+ * System Properties tools — read and manage ServiceNow sys_properties records.
3
+ *
4
+ * Tier 0 (Read): list, get, search, bulk_get, categories
5
+ * Tier 1 (Write): set, delete, bulk_set, import
6
+ * Tier 0 (Audit): history (read-only)
7
+ *
8
+ * ServiceNow table: sys_properties, sys_audit_sys_properties
9
+ */
10
+ import type { ServiceNowClient } from '../servicenow/client.js';
11
+ export declare function getSysPropertiesToolDefinitions(): ({
12
+ name: string;
13
+ description: string;
14
+ inputSchema: {
15
+ type: string;
16
+ properties: {
17
+ name: {
18
+ type: string;
19
+ description: string;
20
+ };
21
+ value?: undefined;
22
+ description?: undefined;
23
+ type?: undefined;
24
+ query?: undefined;
25
+ category?: undefined;
26
+ limit?: undefined;
27
+ search?: undefined;
28
+ names?: undefined;
29
+ properties?: undefined;
30
+ dry_run?: undefined;
31
+ };
32
+ required: string[];
33
+ };
34
+ } | {
35
+ name: string;
36
+ description: string;
37
+ inputSchema: {
38
+ type: string;
39
+ properties: {
40
+ name: {
41
+ type: string;
42
+ description: string;
43
+ };
44
+ value: {
45
+ type: string;
46
+ description: string;
47
+ };
48
+ description: {
49
+ type: string;
50
+ description: string;
51
+ };
52
+ type: {
53
+ type: string;
54
+ description: string;
55
+ };
56
+ query?: undefined;
57
+ category?: undefined;
58
+ limit?: undefined;
59
+ search?: undefined;
60
+ names?: undefined;
61
+ properties?: undefined;
62
+ dry_run?: undefined;
63
+ };
64
+ required: string[];
65
+ };
66
+ } | {
67
+ name: string;
68
+ description: string;
69
+ inputSchema: {
70
+ type: string;
71
+ properties: {
72
+ query: {
73
+ type: string;
74
+ description: string;
75
+ };
76
+ category: {
77
+ type: string;
78
+ description: string;
79
+ };
80
+ type: {
81
+ type: string;
82
+ description: string;
83
+ };
84
+ limit: {
85
+ type: string;
86
+ description: string;
87
+ };
88
+ name?: undefined;
89
+ value?: undefined;
90
+ description?: undefined;
91
+ search?: undefined;
92
+ names?: undefined;
93
+ properties?: undefined;
94
+ dry_run?: undefined;
95
+ };
96
+ required: never[];
97
+ };
98
+ } | {
99
+ name: string;
100
+ description: string;
101
+ inputSchema: {
102
+ type: string;
103
+ properties: {
104
+ search: {
105
+ type: string;
106
+ description: string;
107
+ };
108
+ limit: {
109
+ type: string;
110
+ description: string;
111
+ };
112
+ name?: undefined;
113
+ value?: undefined;
114
+ description?: undefined;
115
+ type?: undefined;
116
+ query?: undefined;
117
+ category?: undefined;
118
+ names?: undefined;
119
+ properties?: undefined;
120
+ dry_run?: undefined;
121
+ };
122
+ required: string[];
123
+ };
124
+ } | {
125
+ name: string;
126
+ description: string;
127
+ inputSchema: {
128
+ type: string;
129
+ properties: {
130
+ names: {
131
+ type: string;
132
+ items: {
133
+ type: string;
134
+ };
135
+ description: string;
136
+ };
137
+ name?: undefined;
138
+ value?: undefined;
139
+ description?: undefined;
140
+ type?: undefined;
141
+ query?: undefined;
142
+ category?: undefined;
143
+ limit?: undefined;
144
+ search?: undefined;
145
+ properties?: undefined;
146
+ dry_run?: undefined;
147
+ };
148
+ required: string[];
149
+ };
150
+ } | {
151
+ name: string;
152
+ description: string;
153
+ inputSchema: {
154
+ type: string;
155
+ properties: {
156
+ properties: {
157
+ type: string;
158
+ description: string;
159
+ items: {
160
+ type: string;
161
+ properties: {
162
+ name: {
163
+ type: string;
164
+ };
165
+ value: {
166
+ type: string;
167
+ };
168
+ description: {
169
+ type: string;
170
+ };
171
+ };
172
+ required: string[];
173
+ };
174
+ };
175
+ name?: undefined;
176
+ value?: undefined;
177
+ description?: undefined;
178
+ type?: undefined;
179
+ query?: undefined;
180
+ category?: undefined;
181
+ limit?: undefined;
182
+ search?: undefined;
183
+ names?: undefined;
184
+ dry_run?: undefined;
185
+ };
186
+ required: string[];
187
+ };
188
+ } | {
189
+ name: string;
190
+ description: string;
191
+ inputSchema: {
192
+ type: string;
193
+ properties: {
194
+ category: {
195
+ type: string;
196
+ description: string;
197
+ };
198
+ query: {
199
+ type: string;
200
+ description: string;
201
+ };
202
+ name?: undefined;
203
+ value?: undefined;
204
+ description?: undefined;
205
+ type?: undefined;
206
+ limit?: undefined;
207
+ search?: undefined;
208
+ names?: undefined;
209
+ properties?: undefined;
210
+ dry_run?: undefined;
211
+ };
212
+ required: never[];
213
+ };
214
+ } | {
215
+ name: string;
216
+ description: string;
217
+ inputSchema: {
218
+ type: string;
219
+ properties: {
220
+ properties: {
221
+ type: string;
222
+ description: string;
223
+ items?: undefined;
224
+ };
225
+ dry_run: {
226
+ type: string;
227
+ description: string;
228
+ };
229
+ name?: undefined;
230
+ value?: undefined;
231
+ description?: undefined;
232
+ type?: undefined;
233
+ query?: undefined;
234
+ category?: undefined;
235
+ limit?: undefined;
236
+ search?: undefined;
237
+ names?: undefined;
238
+ };
239
+ required: string[];
240
+ };
241
+ } | {
242
+ name: string;
243
+ description: string;
244
+ inputSchema: {
245
+ type: string;
246
+ properties: {
247
+ name: {
248
+ type: string;
249
+ description: string;
250
+ };
251
+ value: {
252
+ type: string;
253
+ description: string;
254
+ };
255
+ description?: undefined;
256
+ type?: undefined;
257
+ query?: undefined;
258
+ category?: undefined;
259
+ limit?: undefined;
260
+ search?: undefined;
261
+ names?: undefined;
262
+ properties?: undefined;
263
+ dry_run?: undefined;
264
+ };
265
+ required: string[];
266
+ };
267
+ } | {
268
+ name: string;
269
+ description: string;
270
+ inputSchema: {
271
+ type: string;
272
+ properties: {
273
+ name?: undefined;
274
+ value?: undefined;
275
+ description?: undefined;
276
+ type?: undefined;
277
+ query?: undefined;
278
+ category?: undefined;
279
+ limit?: undefined;
280
+ search?: undefined;
281
+ names?: undefined;
282
+ properties?: undefined;
283
+ dry_run?: undefined;
284
+ };
285
+ required: never[];
286
+ };
287
+ } | {
288
+ name: string;
289
+ description: string;
290
+ inputSchema: {
291
+ type: string;
292
+ properties: {
293
+ name: {
294
+ type: string;
295
+ description: string;
296
+ };
297
+ limit: {
298
+ type: string;
299
+ description: string;
300
+ };
301
+ value?: undefined;
302
+ description?: undefined;
303
+ type?: undefined;
304
+ query?: undefined;
305
+ category?: undefined;
306
+ search?: undefined;
307
+ names?: undefined;
308
+ properties?: undefined;
309
+ dry_run?: undefined;
310
+ };
311
+ required: string[];
312
+ };
313
+ })[];
314
+ export declare function executeSysPropertiesToolCall(client: ServiceNowClient, name: string, args: Record<string, any>): Promise<any>;
315
+ //# sourceMappingURL=sys-properties.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sys-properties.d.ts","sourceRoot":"","sources":["../../src/tools/sys-properties.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAoChE,wBAAgB,+BAA+B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KA+J9C;AAED,wBAAsB,4BAA4B,CAChD,MAAM,EAAE,gBAAgB,EACxB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GACxB,OAAO,CAAC,GAAG,CAAC,CAkNd"}