nowaikit 4.0.5 → 4.1.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.
- package/dist/a2a/agent-card.d.ts.map +1 -1
- package/dist/a2a/agent-card.js +2 -1
- package/dist/a2a/agent-card.js.map +1 -1
- package/dist/cli/setup.d.ts.map +1 -1
- package/dist/cli/setup.js +12 -1
- package/dist/cli/setup.js.map +1 -1
- package/dist/dashboard/index.d.ts.map +1 -1
- package/dist/dashboard/index.js +2 -1
- package/dist/dashboard/index.js.map +1 -1
- package/dist/direct/llm-client.d.ts +20 -2
- package/dist/direct/llm-client.d.ts.map +1 -1
- package/dist/direct/llm-client.js +257 -51
- package/dist/direct/llm-client.js.map +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +41 -3
- package/dist/server.js.map +1 -1
- package/dist/servicenow/client.d.ts +2 -0
- package/dist/servicenow/client.d.ts.map +1 -1
- package/dist/servicenow/client.js +1 -1
- package/dist/servicenow/client.js.map +1 -1
- package/dist/tools/core.d.ts +97 -0
- package/dist/tools/core.d.ts.map +1 -1
- package/dist/tools/core.js +111 -9
- package/dist/tools/core.js.map +1 -1
- package/dist/tools/governance.d.ts +107 -0
- package/dist/tools/governance.d.ts.map +1 -0
- package/dist/tools/governance.js +149 -0
- package/dist/tools/governance.js.map +1 -0
- package/dist/tools/index.d.ts +307 -1812
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +61 -3
- package/dist/tools/index.js.map +1 -1
- package/dist/tools-manifest.json +147 -3
- package/dist/transport/auth-middleware.d.ts +3 -1
- package/dist/transport/auth-middleware.d.ts.map +1 -1
- package/dist/transport/auth-middleware.js +59 -5
- package/dist/transport/auth-middleware.js.map +1 -1
- package/dist/transport/index.d.ts.map +1 -1
- package/dist/transport/index.js +3 -2
- package/dist/transport/index.js.map +1 -1
- package/dist/utils/audit.d.ts +15 -0
- package/dist/utils/audit.d.ts.map +1 -0
- package/dist/utils/audit.js +48 -0
- package/dist/utils/audit.js.map +1 -0
- package/dist/utils/guardrails.d.ts +5 -0
- package/dist/utils/guardrails.d.ts.map +1 -0
- package/dist/utils/guardrails.js +50 -0
- package/dist/utils/guardrails.js.map +1 -0
- package/dist/utils/version.d.ts +3 -0
- package/dist/utils/version.d.ts.map +1 -0
- package/dist/utils/version.js +25 -0
- package/dist/utils/version.js.map +1 -0
- package/package.json +3 -2
- package/skills/README.md +21 -0
- package/skills/servicenow-cmdb-health-audit/SKILL.md +23 -0
- package/skills/servicenow-incident-triage/SKILL.md +22 -0
- package/skills/servicenow-safe-deployment/SKILL.md +24 -0
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Governance & multi-instance tools — bulk writes with rollback, and
|
|
3
|
+
* cross-instance comparison. Built on the existing client + safety layer.
|
|
4
|
+
*/
|
|
5
|
+
import type { ServiceNowClient } from '../servicenow/client.js';
|
|
6
|
+
export declare function getGovernanceToolDefinitions(): ({
|
|
7
|
+
name: string;
|
|
8
|
+
description: string;
|
|
9
|
+
inputSchema: {
|
|
10
|
+
type: string;
|
|
11
|
+
properties: {
|
|
12
|
+
table: {
|
|
13
|
+
type: string;
|
|
14
|
+
description: string;
|
|
15
|
+
};
|
|
16
|
+
records: {
|
|
17
|
+
type: string;
|
|
18
|
+
items: {
|
|
19
|
+
type: string;
|
|
20
|
+
};
|
|
21
|
+
description: string;
|
|
22
|
+
};
|
|
23
|
+
rollback_on_error: {
|
|
24
|
+
type: string;
|
|
25
|
+
description: string;
|
|
26
|
+
};
|
|
27
|
+
dry_run: {
|
|
28
|
+
type: string;
|
|
29
|
+
description: string;
|
|
30
|
+
};
|
|
31
|
+
changes?: undefined;
|
|
32
|
+
instance_a?: undefined;
|
|
33
|
+
instance_b?: undefined;
|
|
34
|
+
query?: undefined;
|
|
35
|
+
property?: undefined;
|
|
36
|
+
};
|
|
37
|
+
required: string[];
|
|
38
|
+
};
|
|
39
|
+
} | {
|
|
40
|
+
name: string;
|
|
41
|
+
description: string;
|
|
42
|
+
inputSchema: {
|
|
43
|
+
type: string;
|
|
44
|
+
properties: {
|
|
45
|
+
changes: {
|
|
46
|
+
type: string;
|
|
47
|
+
description: string;
|
|
48
|
+
items: {
|
|
49
|
+
type: string;
|
|
50
|
+
properties: {
|
|
51
|
+
table: {
|
|
52
|
+
type: string;
|
|
53
|
+
};
|
|
54
|
+
sys_id: {
|
|
55
|
+
type: string;
|
|
56
|
+
};
|
|
57
|
+
};
|
|
58
|
+
required: string[];
|
|
59
|
+
};
|
|
60
|
+
};
|
|
61
|
+
table?: undefined;
|
|
62
|
+
records?: undefined;
|
|
63
|
+
rollback_on_error?: undefined;
|
|
64
|
+
dry_run?: undefined;
|
|
65
|
+
instance_a?: undefined;
|
|
66
|
+
instance_b?: undefined;
|
|
67
|
+
query?: undefined;
|
|
68
|
+
property?: undefined;
|
|
69
|
+
};
|
|
70
|
+
required: string[];
|
|
71
|
+
};
|
|
72
|
+
} | {
|
|
73
|
+
name: string;
|
|
74
|
+
description: string;
|
|
75
|
+
inputSchema: {
|
|
76
|
+
type: string;
|
|
77
|
+
properties: {
|
|
78
|
+
instance_a: {
|
|
79
|
+
type: string;
|
|
80
|
+
description: string;
|
|
81
|
+
};
|
|
82
|
+
instance_b: {
|
|
83
|
+
type: string;
|
|
84
|
+
description: string;
|
|
85
|
+
};
|
|
86
|
+
table: {
|
|
87
|
+
type: string;
|
|
88
|
+
description: string;
|
|
89
|
+
};
|
|
90
|
+
query: {
|
|
91
|
+
type: string;
|
|
92
|
+
description: string;
|
|
93
|
+
};
|
|
94
|
+
property: {
|
|
95
|
+
type: string;
|
|
96
|
+
description: string;
|
|
97
|
+
};
|
|
98
|
+
records?: undefined;
|
|
99
|
+
rollback_on_error?: undefined;
|
|
100
|
+
dry_run?: undefined;
|
|
101
|
+
changes?: undefined;
|
|
102
|
+
};
|
|
103
|
+
required: string[];
|
|
104
|
+
};
|
|
105
|
+
})[];
|
|
106
|
+
export declare function executeGovernanceToolCall(client: ServiceNowClient, name: string, args: Record<string, any>): Promise<any>;
|
|
107
|
+
//# sourceMappingURL=governance.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"governance.d.ts","sourceRoot":"","sources":["../../src/tools/governance.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAOhE,wBAAgB,4BAA4B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KA+C3C;AAED,wBAAsB,yBAAyB,CAC7C,MAAM,EAAE,gBAAgB,EACxB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GACxB,OAAO,CAAC,GAAG,CAAC,CAuFd"}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
import { ServiceNowError } from '../utils/errors.js';
|
|
2
|
+
import { requireWrite } from '../utils/permissions.js';
|
|
3
|
+
import { assertWriteAllowed } from '../utils/guardrails.js';
|
|
4
|
+
import { appendAudit } from '../utils/audit.js';
|
|
5
|
+
import { instanceManager } from '../servicenow/instances.js';
|
|
6
|
+
export function getGovernanceToolDefinitions() {
|
|
7
|
+
return [
|
|
8
|
+
{
|
|
9
|
+
name: 'bulk_create_records',
|
|
10
|
+
description: 'Create many records in one table in a single call, tracking every created sys_id and returning a rollback_token. With rollback_on_error=true, a mid-way failure deletes everything already created so the batch is all-or-nothing. Supports dry_run. Requires WRITE_ENABLED=true.',
|
|
11
|
+
inputSchema: {
|
|
12
|
+
type: 'object',
|
|
13
|
+
properties: {
|
|
14
|
+
table: { type: 'string', description: 'Target table' },
|
|
15
|
+
records: { type: 'array', items: { type: 'object' }, description: 'Array of field key-value objects to create' },
|
|
16
|
+
rollback_on_error: { type: 'boolean', description: 'If a create fails, delete the ones already created (default false)' },
|
|
17
|
+
dry_run: { type: 'boolean', description: 'Preview the resolved payloads without creating anything' },
|
|
18
|
+
},
|
|
19
|
+
required: ['table', 'records'],
|
|
20
|
+
},
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
name: 'rollback_changes',
|
|
24
|
+
description: 'Delete a set of previously-created records, e.g. the rollback_token returned by bulk_create_records. Requires WRITE_ENABLED=true.',
|
|
25
|
+
inputSchema: {
|
|
26
|
+
type: 'object',
|
|
27
|
+
properties: {
|
|
28
|
+
changes: {
|
|
29
|
+
type: 'array',
|
|
30
|
+
description: 'Array of { table, sys_id } to delete',
|
|
31
|
+
items: { type: 'object', properties: { table: { type: 'string' }, sys_id: { type: 'string' } }, required: ['table', 'sys_id'] },
|
|
32
|
+
},
|
|
33
|
+
},
|
|
34
|
+
required: ['changes'],
|
|
35
|
+
},
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
name: 'compare_instances',
|
|
39
|
+
description: 'Compare two configured ServiceNow instances: record counts for a table (with optional query) and/or a specific system property value. Useful for dev→prod drift detection and governance.',
|
|
40
|
+
inputSchema: {
|
|
41
|
+
type: 'object',
|
|
42
|
+
properties: {
|
|
43
|
+
instance_a: { type: 'string', description: 'First instance name (as configured)' },
|
|
44
|
+
instance_b: { type: 'string', description: 'Second instance name (as configured)' },
|
|
45
|
+
table: { type: 'string', description: 'Table to compare record counts for (optional)' },
|
|
46
|
+
query: { type: 'string', description: 'Encoded query to scope the count (optional)' },
|
|
47
|
+
property: { type: 'string', description: 'A sys_properties name to compare values for (optional)' },
|
|
48
|
+
},
|
|
49
|
+
required: ['instance_a', 'instance_b'],
|
|
50
|
+
},
|
|
51
|
+
},
|
|
52
|
+
];
|
|
53
|
+
}
|
|
54
|
+
export async function executeGovernanceToolCall(client, name, args) {
|
|
55
|
+
switch (name) {
|
|
56
|
+
case 'bulk_create_records': {
|
|
57
|
+
requireWrite();
|
|
58
|
+
const { table, records } = args;
|
|
59
|
+
if (!table || !Array.isArray(records))
|
|
60
|
+
throw new ServiceNowError('table and records[] are required', 'INVALID_REQUEST');
|
|
61
|
+
for (const rec of records)
|
|
62
|
+
assertWriteAllowed(table, rec);
|
|
63
|
+
if (args.dry_run) {
|
|
64
|
+
return { action: 'dry_run', would: 'bulk_create', table, count: records.length, payloads: records, note: 'No records created. Re-run without dry_run to apply.' };
|
|
65
|
+
}
|
|
66
|
+
const instance = instanceManager.getCurrentName();
|
|
67
|
+
const created = [];
|
|
68
|
+
try {
|
|
69
|
+
for (const rec of records) {
|
|
70
|
+
const r = await client.createRecord(table, rec);
|
|
71
|
+
const sysId = r?.sys_id;
|
|
72
|
+
if (sysId)
|
|
73
|
+
created.push({ table, sys_id: sysId });
|
|
74
|
+
await appendAudit({ instance, tool: 'bulk_create_records', action: 'create', table, sys_id: sysId, result: 'ok' }, rec);
|
|
75
|
+
}
|
|
76
|
+
return { action: 'bulk_created', table, count: created.length, created, rollback_token: created };
|
|
77
|
+
}
|
|
78
|
+
catch (err) {
|
|
79
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
80
|
+
await appendAudit({ instance, tool: 'bulk_create_records', action: 'create', table, result: 'error', error: message });
|
|
81
|
+
if (args.rollback_on_error && created.length) {
|
|
82
|
+
const rolledBack = [];
|
|
83
|
+
for (const c of created.reverse()) {
|
|
84
|
+
try {
|
|
85
|
+
await client.deleteRecord(c.table, c.sys_id);
|
|
86
|
+
rolledBack.push(c.sys_id);
|
|
87
|
+
}
|
|
88
|
+
catch { /* best effort */ }
|
|
89
|
+
}
|
|
90
|
+
return { action: 'rolled_back', error: message, created_then_deleted: rolledBack, note: 'Batch failed; created records were rolled back.' };
|
|
91
|
+
}
|
|
92
|
+
return { action: 'partial', error: message, created, rollback_token: created, note: 'Batch failed mid-way. Use rollback_changes with rollback_token to undo.' };
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
case 'rollback_changes': {
|
|
96
|
+
requireWrite();
|
|
97
|
+
const changes = args.changes;
|
|
98
|
+
if (!Array.isArray(changes))
|
|
99
|
+
throw new ServiceNowError('changes[] is required', 'INVALID_REQUEST');
|
|
100
|
+
const instance = instanceManager.getCurrentName();
|
|
101
|
+
const results = [];
|
|
102
|
+
for (const c of changes) {
|
|
103
|
+
try {
|
|
104
|
+
await client.deleteRecord(c.table, c.sys_id);
|
|
105
|
+
await appendAudit({ instance, tool: 'rollback_changes', action: 'delete', table: c.table, sys_id: c.sys_id, result: 'ok' });
|
|
106
|
+
results.push({ table: c.table, sys_id: c.sys_id, ok: true });
|
|
107
|
+
}
|
|
108
|
+
catch (err) {
|
|
109
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
110
|
+
await appendAudit({ instance, tool: 'rollback_changes', action: 'delete', table: c.table, sys_id: c.sys_id, result: 'error', error: msg });
|
|
111
|
+
results.push({ table: c.table, sys_id: c.sys_id, ok: false, error: msg });
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
return { action: 'rollback', total: changes.length, succeeded: results.filter((r) => r.ok).length, results };
|
|
115
|
+
}
|
|
116
|
+
case 'compare_instances': {
|
|
117
|
+
const { instance_a, instance_b, table, query, property } = args;
|
|
118
|
+
if (!instance_a || !instance_b)
|
|
119
|
+
throw new ServiceNowError('instance_a and instance_b are required', 'INVALID_REQUEST');
|
|
120
|
+
const a = instanceManager.getClient(instance_a);
|
|
121
|
+
const b = instanceManager.getClient(instance_b);
|
|
122
|
+
const out = { instance_a, instance_b };
|
|
123
|
+
if (table) {
|
|
124
|
+
const countOf = async (c) => {
|
|
125
|
+
const res = await c.queryRecords({ table, query, fields: 'sys_id', limit: 1 });
|
|
126
|
+
// queryRecords caps; use a stats call via aggregate for accuracy
|
|
127
|
+
const stats = await c.runAggregateQuery?.(table, '', 'COUNT', query).catch(() => null);
|
|
128
|
+
const n = stats?.stats?.count ?? stats?.count;
|
|
129
|
+
return n != null ? Number(n) : res.count;
|
|
130
|
+
};
|
|
131
|
+
const [ca, cb] = await Promise.all([countOf(a), countOf(b)]);
|
|
132
|
+
out.record_count = { table, query: query || null, [instance_a]: ca, [instance_b]: cb, delta: cb - ca, match: ca === cb };
|
|
133
|
+
}
|
|
134
|
+
if (property) {
|
|
135
|
+
const propOf = async (c) => {
|
|
136
|
+
const res = await c.queryRecords({ table: 'sys_properties', query: `name=${property}`, fields: 'name,value', limit: 1 });
|
|
137
|
+
return res.records[0]?.value ?? null;
|
|
138
|
+
};
|
|
139
|
+
const [pa, pb] = await Promise.all([propOf(a), propOf(b)]);
|
|
140
|
+
out.property = { name: property, [instance_a]: pa, [instance_b]: pb, match: pa === pb };
|
|
141
|
+
}
|
|
142
|
+
if (!table && !property)
|
|
143
|
+
out.note = 'Pass a table and/or property to compare.';
|
|
144
|
+
return out;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
return null;
|
|
148
|
+
}
|
|
149
|
+
//# sourceMappingURL=governance.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"governance.js","sourceRoot":"","sources":["../../src/tools/governance.ts"],"names":[],"mappings":"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"}
|