@orbitpanel/cli 1.5.0 → 1.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.
- package/dist/lib/context-guard.d.ts +58 -7
- package/dist/lib/context-guard.js +142 -28
- package/dist/lib/context-guard.js.map +1 -1
- package/oclif.manifest.json +1 -1
- package/package.json +1 -1
|
@@ -8,17 +8,33 @@
|
|
|
8
8
|
* DESIGN:
|
|
9
9
|
* - Centralizzata: una sola funzione, chiamata dal router
|
|
10
10
|
* - Fail-closed: se non puoi chiedere, non eseguire
|
|
11
|
-
* -
|
|
11
|
+
* - Policy esplicita: ogni comando sensibile ha risk level e reason
|
|
12
|
+
* - Audit: --force su critical viene loggato in ~/.orbit/force.log
|
|
12
13
|
* - Override esplicito: --force bypassa la guard
|
|
13
14
|
*/
|
|
14
|
-
import type { ContextHealth } from '../types.js';
|
|
15
|
+
import type { ContextHealth, ContextHealthLevel } from '../types.js';
|
|
16
|
+
export interface SensitiveCommandPolicy {
|
|
17
|
+
/** Primary command name (e.g. '/report') */
|
|
18
|
+
name: string;
|
|
19
|
+
/** Aliases (e.g. ['/r']) */
|
|
20
|
+
aliases: string[];
|
|
21
|
+
/** Risk level — determines guard behavior */
|
|
22
|
+
risk: 'low' | 'medium' | 'high';
|
|
23
|
+
/** Human-readable reason why this command is sensitive */
|
|
24
|
+
reason: string;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Centralized policy registry for sensitive commands.
|
|
28
|
+
* Single source of truth — add new commands here.
|
|
29
|
+
*/
|
|
30
|
+
export declare const COMMAND_POLICIES: readonly SensitiveCommandPolicy[];
|
|
15
31
|
/**
|
|
16
|
-
*
|
|
17
|
-
* Each entry is a prefix — e.g. '/link' matches '/link site_123'.
|
|
32
|
+
* Find the policy for a given command. Returns null for non-sensitive commands.
|
|
18
33
|
*/
|
|
19
|
-
export declare
|
|
34
|
+
export declare function getCommandPolicy(cmd: string): SensitiveCommandPolicy | null;
|
|
20
35
|
/**
|
|
21
36
|
* Check if a command is sensitive (requires guard on critical context).
|
|
37
|
+
* Backward-compatible wrapper around getCommandPolicy.
|
|
22
38
|
*/
|
|
23
39
|
export declare function isSensitiveCommand(cmd: string): boolean;
|
|
24
40
|
/**
|
|
@@ -29,18 +45,52 @@ export declare function parseForceFlag(input: string): {
|
|
|
29
45
|
force: boolean;
|
|
30
46
|
cleanInput: string;
|
|
31
47
|
};
|
|
48
|
+
/** Guard levels: none (execute), soft (confirm but don't block), hard (confirm or block) */
|
|
49
|
+
export type GuardLevel = 'none' | 'soft' | 'hard';
|
|
50
|
+
/**
|
|
51
|
+
* Determine the guard level for a command given the current health.
|
|
52
|
+
*
|
|
53
|
+
* | health | risk | guard |
|
|
54
|
+
* |----------|----------|-------|
|
|
55
|
+
* | critical | any sens.| hard |
|
|
56
|
+
* | warning | high | soft |
|
|
57
|
+
* | warning | med/low | none |
|
|
58
|
+
* | ok/info | * | none |
|
|
59
|
+
* | * | non-sens | none |
|
|
60
|
+
*/
|
|
61
|
+
export declare function getGuardLevel(cmd: string, health: ContextHealth): GuardLevel;
|
|
32
62
|
/**
|
|
33
|
-
* Should the guard activate?
|
|
63
|
+
* Should the guard activate? Backward-compatible boolean wrapper.
|
|
64
|
+
* Returns true for both soft and hard guards.
|
|
34
65
|
*/
|
|
35
66
|
export declare function shouldGuard(cmd: string, health: ContextHealth): boolean;
|
|
36
67
|
/**
|
|
37
68
|
* Format the warning message shown in TTY before asking confirmation.
|
|
38
69
|
*/
|
|
39
70
|
export declare function formatGuardMessage(health: ContextHealth): string;
|
|
71
|
+
/**
|
|
72
|
+
* Format the soft warning message for high-risk commands on warning health.
|
|
73
|
+
* Less alarming than the critical guard message.
|
|
74
|
+
*/
|
|
75
|
+
export declare function formatSoftGuardMessage(policy: SensitiveCommandPolicy): string;
|
|
40
76
|
/**
|
|
41
77
|
* Format the blocked message shown in non-TTY when command is blocked.
|
|
42
78
|
*/
|
|
43
79
|
export declare function formatBlockedMessage(health: ContextHealth): string;
|
|
80
|
+
/** I/O interface for audit — overridable for testing. */
|
|
81
|
+
export interface AuditIO {
|
|
82
|
+
append(path: string, data: string): Promise<void>;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Log a --force bypass to ~/.orbit/force.log.
|
|
86
|
+
* Fire-and-forget — never blocks or throws.
|
|
87
|
+
*/
|
|
88
|
+
export declare function auditForceBypass(opts: {
|
|
89
|
+
cmd: string;
|
|
90
|
+
healthLevel: ContextHealthLevel;
|
|
91
|
+
cwd: string;
|
|
92
|
+
io?: AuditIO;
|
|
93
|
+
}): Promise<void>;
|
|
44
94
|
export interface GuardOptions {
|
|
45
95
|
cmd: string;
|
|
46
96
|
health: ContextHealth;
|
|
@@ -48,6 +98,7 @@ export interface GuardOptions {
|
|
|
48
98
|
promptConfirm?: (message: string) => Promise<boolean>;
|
|
49
99
|
force: boolean;
|
|
50
100
|
execute: () => void | Promise<void>;
|
|
101
|
+
cwd?: string;
|
|
51
102
|
}
|
|
52
103
|
/**
|
|
53
104
|
* Run a command with context guard.
|
|
@@ -56,7 +107,7 @@ export interface GuardOptions {
|
|
|
56
107
|
* | Guard needed | Force | TTY | Action |
|
|
57
108
|
* |-------------|-------|------------|---------------------|
|
|
58
109
|
* | No | * | * | Execute |
|
|
59
|
-
* | Yes | Yes | * |
|
|
110
|
+
* | Yes | Yes | * | Audit + notice + execute |
|
|
60
111
|
* | Yes | No | Yes (TTY) | Ask → execute/abort |
|
|
61
112
|
* | Yes | No | No (pipe) | BLOCK |
|
|
62
113
|
*/
|
|
@@ -8,27 +8,59 @@
|
|
|
8
8
|
* DESIGN:
|
|
9
9
|
* - Centralizzata: una sola funzione, chiamata dal router
|
|
10
10
|
* - Fail-closed: se non puoi chiedere, non eseguire
|
|
11
|
-
* -
|
|
11
|
+
* - Policy esplicita: ogni comando sensibile ha risk level e reason
|
|
12
|
+
* - Audit: --force su critical viene loggato in ~/.orbit/force.log
|
|
12
13
|
* - Override esplicito: --force bypassa la guard
|
|
13
14
|
*/
|
|
14
|
-
|
|
15
|
+
import { join } from 'node:path';
|
|
16
|
+
import { appendFile, mkdir } from 'node:fs/promises';
|
|
15
17
|
/**
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
+
* Centralized policy registry for sensitive commands.
|
|
19
|
+
* Single source of truth — add new commands here.
|
|
18
20
|
*/
|
|
19
|
-
export const
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
21
|
+
export const COMMAND_POLICIES = [
|
|
22
|
+
{
|
|
23
|
+
name: '/report',
|
|
24
|
+
aliases: ['/r'],
|
|
25
|
+
risk: 'high',
|
|
26
|
+
reason: 'Invia dati al backend Orbit',
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
name: '/session start',
|
|
30
|
+
aliases: ['/ss'],
|
|
31
|
+
risk: 'medium',
|
|
32
|
+
reason: 'Crea sessione su sito potenzialmente sbagliato',
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
name: '/link',
|
|
36
|
+
aliases: [],
|
|
37
|
+
risk: 'high',
|
|
38
|
+
reason: 'Modifica il collegamento progetto-sito',
|
|
39
|
+
},
|
|
25
40
|
];
|
|
41
|
+
/**
|
|
42
|
+
* Find the policy for a given command. Returns null for non-sensitive commands.
|
|
43
|
+
*/
|
|
44
|
+
export function getCommandPolicy(cmd) {
|
|
45
|
+
const lower = cmd.toLowerCase().trim();
|
|
46
|
+
for (const policy of COMMAND_POLICIES) {
|
|
47
|
+
if (lower === policy.name || lower.startsWith(policy.name + ' ')) {
|
|
48
|
+
return policy;
|
|
49
|
+
}
|
|
50
|
+
for (const alias of policy.aliases) {
|
|
51
|
+
if (lower === alias || lower.startsWith(alias + ' ')) {
|
|
52
|
+
return policy;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
return null;
|
|
57
|
+
}
|
|
26
58
|
/**
|
|
27
59
|
* Check if a command is sensitive (requires guard on critical context).
|
|
60
|
+
* Backward-compatible wrapper around getCommandPolicy.
|
|
28
61
|
*/
|
|
29
62
|
export function isSensitiveCommand(cmd) {
|
|
30
|
-
|
|
31
|
-
return SENSITIVE_COMMANDS.some(sc => lower === sc || lower.startsWith(sc + ' '));
|
|
63
|
+
return getCommandPolicy(cmd) !== null;
|
|
32
64
|
}
|
|
33
65
|
// ─── Force Flag Parsing ───────────────────────────────────────────
|
|
34
66
|
/**
|
|
@@ -36,7 +68,6 @@ export function isSensitiveCommand(cmd) {
|
|
|
36
68
|
* Returns the clean input (without --force) and whether the flag was present.
|
|
37
69
|
*/
|
|
38
70
|
export function parseForceFlag(input) {
|
|
39
|
-
// Match --force as a standalone word (not --forced, --forceful, etc.)
|
|
40
71
|
const forceRegex = /\s--force(?:\s|$)/;
|
|
41
72
|
if (forceRegex.test(` ${input} `)) {
|
|
42
73
|
const cleanInput = input.replace(/\s*--force\s*/, ' ').trim();
|
|
@@ -44,12 +75,33 @@ export function parseForceFlag(input) {
|
|
|
44
75
|
}
|
|
45
76
|
return { force: false, cleanInput: input };
|
|
46
77
|
}
|
|
47
|
-
// ─── Guard Logic ──────────────────────────────────────────────────
|
|
48
78
|
/**
|
|
49
|
-
*
|
|
79
|
+
* Determine the guard level for a command given the current health.
|
|
80
|
+
*
|
|
81
|
+
* | health | risk | guard |
|
|
82
|
+
* |----------|----------|-------|
|
|
83
|
+
* | critical | any sens.| hard |
|
|
84
|
+
* | warning | high | soft |
|
|
85
|
+
* | warning | med/low | none |
|
|
86
|
+
* | ok/info | * | none |
|
|
87
|
+
* | * | non-sens | none |
|
|
88
|
+
*/
|
|
89
|
+
export function getGuardLevel(cmd, health) {
|
|
90
|
+
const policy = getCommandPolicy(cmd);
|
|
91
|
+
if (!policy)
|
|
92
|
+
return 'none';
|
|
93
|
+
if (health.level === 'critical')
|
|
94
|
+
return 'hard';
|
|
95
|
+
if (health.level === 'warning' && policy.risk === 'high')
|
|
96
|
+
return 'soft';
|
|
97
|
+
return 'none';
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Should the guard activate? Backward-compatible boolean wrapper.
|
|
101
|
+
* Returns true for both soft and hard guards.
|
|
50
102
|
*/
|
|
51
103
|
export function shouldGuard(cmd, health) {
|
|
52
|
-
return
|
|
104
|
+
return getGuardLevel(cmd, health) !== 'none';
|
|
53
105
|
}
|
|
54
106
|
/**
|
|
55
107
|
* Format the warning message shown in TTY before asking confirmation.
|
|
@@ -70,6 +122,18 @@ export function formatGuardMessage(health) {
|
|
|
70
122
|
lines.push('');
|
|
71
123
|
return lines.join('\n');
|
|
72
124
|
}
|
|
125
|
+
/**
|
|
126
|
+
* Format the soft warning message for high-risk commands on warning health.
|
|
127
|
+
* Less alarming than the critical guard message.
|
|
128
|
+
*/
|
|
129
|
+
export function formatSoftGuardMessage(policy) {
|
|
130
|
+
const lines = [];
|
|
131
|
+
lines.push('');
|
|
132
|
+
lines.push(' ⚠️ Operazione con rischio elevato');
|
|
133
|
+
lines.push(` → ${policy.reason}`);
|
|
134
|
+
lines.push('');
|
|
135
|
+
return lines.join('\n');
|
|
136
|
+
}
|
|
73
137
|
/**
|
|
74
138
|
* Format the blocked message shown in non-TTY when command is blocked.
|
|
75
139
|
*/
|
|
@@ -88,6 +152,30 @@ export function formatBlockedMessage(health) {
|
|
|
88
152
|
lines.push('');
|
|
89
153
|
return lines.join('\n');
|
|
90
154
|
}
|
|
155
|
+
// ─── Audit ────────────────────────────────────────────────────────
|
|
156
|
+
const ORBIT_DIR = join(process.env.HOME ?? '~', '.orbit');
|
|
157
|
+
const FORCE_LOG_PATH = join(ORBIT_DIR, 'force.log');
|
|
158
|
+
const defaultAuditIO = {
|
|
159
|
+
append: async (path, data) => {
|
|
160
|
+
await mkdir(ORBIT_DIR, { recursive: true });
|
|
161
|
+
await appendFile(path, data, 'utf-8');
|
|
162
|
+
},
|
|
163
|
+
};
|
|
164
|
+
/**
|
|
165
|
+
* Log a --force bypass to ~/.orbit/force.log.
|
|
166
|
+
* Fire-and-forget — never blocks or throws.
|
|
167
|
+
*/
|
|
168
|
+
export async function auditForceBypass(opts) {
|
|
169
|
+
try {
|
|
170
|
+
const io = opts.io ?? defaultAuditIO;
|
|
171
|
+
const timestamp = new Date().toISOString();
|
|
172
|
+
const line = `${timestamp} | ${opts.cmd} | bypass ${opts.healthLevel} | ${opts.cwd}\n`;
|
|
173
|
+
await io.append(FORCE_LOG_PATH, line);
|
|
174
|
+
}
|
|
175
|
+
catch {
|
|
176
|
+
// Audit failure must never block execution
|
|
177
|
+
}
|
|
178
|
+
}
|
|
91
179
|
/**
|
|
92
180
|
* Run a command with context guard.
|
|
93
181
|
*
|
|
@@ -95,26 +183,49 @@ export function formatBlockedMessage(health) {
|
|
|
95
183
|
* | Guard needed | Force | TTY | Action |
|
|
96
184
|
* |-------------|-------|------------|---------------------|
|
|
97
185
|
* | No | * | * | Execute |
|
|
98
|
-
* | Yes | Yes | * |
|
|
186
|
+
* | Yes | Yes | * | Audit + notice + execute |
|
|
99
187
|
* | Yes | No | Yes (TTY) | Ask → execute/abort |
|
|
100
188
|
* | Yes | No | No (pipe) | BLOCK |
|
|
101
189
|
*/
|
|
102
190
|
export async function runWithContextGuard(opts) {
|
|
103
|
-
const { cmd, health, output, promptConfirm, force, execute } = opts;
|
|
191
|
+
const { cmd, health, output, promptConfirm, force, execute, cwd } = opts;
|
|
192
|
+
const level = getGuardLevel(cmd, health);
|
|
104
193
|
// No guard needed → execute directly
|
|
105
|
-
if (
|
|
194
|
+
if (level === 'none') {
|
|
106
195
|
await execute();
|
|
107
196
|
return;
|
|
108
197
|
}
|
|
109
|
-
//
|
|
110
|
-
if (
|
|
111
|
-
|
|
198
|
+
// ── HARD guard (critical) ──
|
|
199
|
+
if (level === 'hard') {
|
|
200
|
+
// Force → audit + notice + bypass
|
|
201
|
+
if (force) {
|
|
202
|
+
output(' ⚠️ Esecuzione forzata su contesto CRITICAL (--force)');
|
|
203
|
+
auditForceBypass({ cmd, healthLevel: health.level, cwd: cwd ?? process.cwd() });
|
|
204
|
+
await execute();
|
|
205
|
+
return;
|
|
206
|
+
}
|
|
207
|
+
// TTY → ask hard confirmation
|
|
208
|
+
if (promptConfirm) {
|
|
209
|
+
output(formatGuardMessage(health));
|
|
210
|
+
const confirmed = await promptConfirm('Vuoi procedere comunque?');
|
|
211
|
+
if (confirmed) {
|
|
212
|
+
await execute();
|
|
213
|
+
}
|
|
214
|
+
else {
|
|
215
|
+
output(' Annullato.');
|
|
216
|
+
}
|
|
217
|
+
return;
|
|
218
|
+
}
|
|
219
|
+
// Non-TTY, no force → BLOCK (fail-closed)
|
|
220
|
+
output(formatBlockedMessage(health));
|
|
112
221
|
return;
|
|
113
222
|
}
|
|
114
|
-
//
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
223
|
+
// ── SOFT guard (warning + high risk) ──
|
|
224
|
+
const policy = getCommandPolicy(cmd);
|
|
225
|
+
// TTY → ask soft confirmation
|
|
226
|
+
if (promptConfirm && policy) {
|
|
227
|
+
output(formatSoftGuardMessage(policy));
|
|
228
|
+
const confirmed = await promptConfirm('Vuoi procedere?');
|
|
118
229
|
if (confirmed) {
|
|
119
230
|
await execute();
|
|
120
231
|
}
|
|
@@ -123,7 +234,10 @@ export async function runWithContextGuard(opts) {
|
|
|
123
234
|
}
|
|
124
235
|
return;
|
|
125
236
|
}
|
|
126
|
-
// Non-TTY
|
|
127
|
-
|
|
237
|
+
// Non-TTY → show warning but execute (soft = non-blocking)
|
|
238
|
+
if (policy) {
|
|
239
|
+
output(formatSoftGuardMessage(policy));
|
|
240
|
+
}
|
|
241
|
+
await execute();
|
|
128
242
|
}
|
|
129
243
|
//# sourceMappingURL=context-guard.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context-guard.js","sourceRoot":"","sources":["../../src/lib/context-guard.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"context-guard.js","sourceRoot":"","sources":["../../src/lib/context-guard.ts"],"names":[],"mappings":"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"}
|
package/oclif.manifest.json
CHANGED