securenow 8.12.3 → 8.12.4
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/cli/threatModel.js +7 -5
- package/mcp/catalog.js +52 -3
- package/package.json +2 -1
package/cli/threatModel.js
CHANGED
|
@@ -2,9 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
// `securenow threat-model <category>` — print the copy-paste threat-modeling prompt for a category,
|
|
4
4
|
// fetched from the published set at securenow.ai (the same prompt shown on securenow.ai/threat-modeling).
|
|
5
|
-
//
|
|
6
|
-
//
|
|
7
|
-
//
|
|
5
|
+
// Save it and have your coding agent follow the file (prompts run to ~136 KB, over
|
|
6
|
+
// Linux's 128 KB single-argument limit, so `claude -p "$(...)"` fails):
|
|
7
|
+
// npx securenow threat-model authentication --out threat-prompt.md
|
|
8
|
+
// or pipe it on stdin: npx securenow threat-model authentication | claude -p
|
|
8
9
|
const fs = require('fs');
|
|
9
10
|
const ui = require('./ui');
|
|
10
11
|
|
|
@@ -34,8 +35,9 @@ function listCategories() {
|
|
|
34
35
|
console.log(' Copy-paste a prompt into your coding agent, or run it with the SecureNow CLI.\n');
|
|
35
36
|
for (const slug of CATEGORIES) console.log(' ' + slug);
|
|
36
37
|
console.log('\n Print one: securenow threat-model authentication');
|
|
37
|
-
console.log('
|
|
38
|
-
console.log('
|
|
38
|
+
console.log(' Save it: securenow threat-model authentication --out threat-prompt.md');
|
|
39
|
+
console.log(' then tell your agent: "Follow threat-prompt.md"');
|
|
40
|
+
console.log(' Pipe it: securenow threat-model authentication | claude -p');
|
|
39
41
|
console.log(' On the web: securenow.ai/threat-modeling');
|
|
40
42
|
}
|
|
41
43
|
|
package/mcp/catalog.js
CHANGED
|
@@ -1852,6 +1852,54 @@ const TOOLS = [
|
|
|
1852
1852
|
},
|
|
1853
1853
|
];
|
|
1854
1854
|
|
|
1855
|
+
// Annotation policy, matching how Claude's and ChatGPT's directory reviews read
|
|
1856
|
+
// the hints: a write is destructive when it removes or overwrites something,
|
|
1857
|
+
// or can stop production traffic or detection, even if it can be undone. Pure
|
|
1858
|
+
// record-keeping writes (reports, queue closures, read markers, dry runs) are
|
|
1859
|
+
// not. Only tools that reach arbitrary public entities are open-world.
|
|
1860
|
+
const DESTRUCTIVE_TOOLS = new Set([
|
|
1861
|
+
'securenow_firewall_enable',
|
|
1862
|
+
'securenow_firewall_disable',
|
|
1863
|
+
'securenow_firewall_set_threshold',
|
|
1864
|
+
'securenow_human_action_block',
|
|
1865
|
+
'securenow_human_action_false_positive',
|
|
1866
|
+
'securenow_human_case_action_update',
|
|
1867
|
+
'securenow_automation_defaults_ensure',
|
|
1868
|
+
'securenow_automation_rule_create',
|
|
1869
|
+
'securenow_automation_rule_update',
|
|
1870
|
+
'securenow_automation_rule_execute',
|
|
1871
|
+
'securenow_automation_rule_delete',
|
|
1872
|
+
'securenow_rate_limit_remove',
|
|
1873
|
+
'securenow_rate_limit_create_from_text',
|
|
1874
|
+
'securenow_alert_rule_rollback',
|
|
1875
|
+
'securenow_alert_rule_update',
|
|
1876
|
+
'securenow_alert_rule_query_update',
|
|
1877
|
+
'securenow_alert_rule_instant_update',
|
|
1878
|
+
'securenow_alert_rule_condition_update',
|
|
1879
|
+
'securenow_alert_rule_exclusion_add',
|
|
1880
|
+
'securenow_alert_rule_exclusion_remove',
|
|
1881
|
+
'securenow_blocklist_pending_approve',
|
|
1882
|
+
'securenow_blocklist_pending_reject',
|
|
1883
|
+
'securenow_blocklist_pending_bulk_approve',
|
|
1884
|
+
'securenow_blocklist_pending_bulk_reject',
|
|
1885
|
+
'securenow_blocklist_add',
|
|
1886
|
+
'securenow_blocklist_remove',
|
|
1887
|
+
'securenow_blocklist_unblock',
|
|
1888
|
+
'securenow_allowlist_add',
|
|
1889
|
+
'securenow_allowlist_remove',
|
|
1890
|
+
'securenow_trusted_add',
|
|
1891
|
+
'securenow_trusted_remove',
|
|
1892
|
+
]);
|
|
1893
|
+
|
|
1894
|
+
const OPEN_WORLD_TOOLS = new Set([
|
|
1895
|
+
'securenow_ip_lookup', // reputation of any public IP address
|
|
1896
|
+
]);
|
|
1897
|
+
|
|
1898
|
+
for (const tool of TOOLS) {
|
|
1899
|
+
if (DESTRUCTIVE_TOOLS.has(tool.name)) tool.destructive = true;
|
|
1900
|
+
tool.openWorld = OPEN_WORLD_TOOLS.has(tool.name);
|
|
1901
|
+
}
|
|
1902
|
+
|
|
1855
1903
|
const RESOURCES = [
|
|
1856
1904
|
{
|
|
1857
1905
|
uri: 'securenow://docs/skill-api',
|
|
@@ -2247,10 +2295,11 @@ function mcpToolDefinition(tool) {
|
|
|
2247
2295
|
inputSchema: tool.inputSchema || objectSchema({}),
|
|
2248
2296
|
annotations: {
|
|
2249
2297
|
readOnlyHint: !!tool.readOnly,
|
|
2250
|
-
destructiveHint: !!tool.destructive,
|
|
2298
|
+
destructiveHint: !tool.readOnly && !!tool.destructive,
|
|
2251
2299
|
idempotentHint: !!tool.readOnly,
|
|
2252
|
-
|
|
2253
|
-
}
|
|
2300
|
+
openWorldHint: !!tool.openWorld,
|
|
2301
|
+
},
|
|
2302
|
+
};
|
|
2254
2303
|
}
|
|
2255
2304
|
|
|
2256
2305
|
function listTools() {
|
package/package.json
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "securenow",
|
|
3
|
-
"version": "8.12.
|
|
3
|
+
"version": "8.12.4",
|
|
4
|
+
"mcpName": "ai.securenow/securenow",
|
|
4
5
|
"description": "OpenTelemetry instrumentation for Node.js, Next.js, and Nuxt - Send traces and logs to any OTLP-compatible backend",
|
|
5
6
|
"type": "commonjs",
|
|
6
7
|
"main": "register.js",
|