ysagc-agent 0.2.0 → 0.4.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 (58) hide show
  1. package/README.md +36 -66
  2. package/dist/agent.d.ts +17 -0
  3. package/dist/agent.d.ts.map +1 -0
  4. package/dist/agent.js +293 -0
  5. package/dist/agent.js.map +1 -0
  6. package/dist/cli.d.ts +14 -0
  7. package/dist/cli.d.ts.map +1 -0
  8. package/dist/cli.js +267 -0
  9. package/dist/cli.js.map +1 -0
  10. package/dist/config.d.ts +52 -0
  11. package/dist/config.d.ts.map +1 -0
  12. package/dist/config.js +135 -0
  13. package/dist/config.js.map +1 -0
  14. package/dist/executor.d.ts +46 -0
  15. package/dist/executor.d.ts.map +1 -0
  16. package/dist/executor.js +397 -0
  17. package/dist/executor.js.map +1 -0
  18. package/dist/index.d.ts +19 -0
  19. package/dist/index.d.ts.map +1 -0
  20. package/dist/index.js +34 -0
  21. package/dist/index.js.map +1 -0
  22. package/dist/logger.d.ts +37 -0
  23. package/dist/logger.d.ts.map +1 -0
  24. package/dist/logger.js +121 -0
  25. package/dist/logger.js.map +1 -0
  26. package/dist/path-utils.d.ts +44 -0
  27. package/dist/path-utils.d.ts.map +1 -0
  28. package/dist/path-utils.js +206 -0
  29. package/dist/path-utils.js.map +1 -0
  30. package/dist/protocol.d.ts +77 -0
  31. package/dist/protocol.d.ts.map +1 -0
  32. package/dist/protocol.js +94 -0
  33. package/dist/protocol.js.map +1 -0
  34. package/dist/security.d.ts +32 -0
  35. package/dist/security.d.ts.map +1 -0
  36. package/dist/security.js +228 -0
  37. package/dist/security.js.map +1 -0
  38. package/dist/tools.d.ts +36 -0
  39. package/dist/tools.d.ts.map +1 -0
  40. package/dist/tools.js +498 -0
  41. package/dist/tools.js.map +1 -0
  42. package/package.json +36 -21
  43. package/src/config.js +0 -94
  44. package/src/http-fs.js +0 -178
  45. package/src/index.js +0 -439
  46. package/src/logger.js +0 -84
  47. package/src/methods/dialog.js +0 -84
  48. package/src/methods/fs.js +0 -674
  49. package/src/methods/git.js +0 -391
  50. package/src/methods/project.js +0 -57
  51. package/src/methods/scaffold.js +0 -131
  52. package/src/methods/skill.js +0 -347
  53. package/src/methods/system.js +0 -82
  54. package/src/methods/terminal.js +0 -234
  55. package/src/origin.js +0 -38
  56. package/src/pairing.js +0 -168
  57. package/src/rpc.js +0 -62
  58. package/src/sandbox.js +0 -178
@@ -0,0 +1,228 @@
1
+ "use strict";
2
+ /**
3
+ * Security helpers: dangerous-command detection, sensitive-path detection and
4
+ * secret masking. These are intentionally conservative — when in doubt the
5
+ * path/command is treated as unsafe.
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.MASK = void 0;
9
+ exports.isDangerCommand = isDangerCommand;
10
+ exports.isSensitivePath = isSensitivePath;
11
+ exports.maskSecrets = maskSecrets;
12
+ /**
13
+ * Rules that flag destructive / privilege-escalating commands. Matching is
14
+ * case-insensitive and uses word boundaries so ordinary words ("removal",
15
+ * "formatting") do not trigger a false positive. Rules are cross-platform:
16
+ * bash, powershell and cmd are all covered.
17
+ */
18
+ const DANGER_RULES = [
19
+ // rm -rf / rm -fr / rm -fir etc. (any order of r/f flags)
20
+ {
21
+ severity: 'critical',
22
+ reason: 'recursive/force delete (rm -rf, rm -fr)',
23
+ re: /\brm\b[^\n]*\s+-[a-z]*r[a-z]*f[a-z]*\b|\brm\b[^\n]*\s+-[a-z]*f[a-z]*r[a-z]*\b/i,
24
+ },
25
+ // rm -r on the filesystem root or a system-ish path
26
+ {
27
+ severity: 'critical',
28
+ reason: 'recursive delete targeting a system path (/ , ~, /var, /etc, /dev, /usr, /tmp)',
29
+ re: /\brm\b[^\n]*\s+-[a-z]*r[a-z]*\s+(?:\\|~\/|\$HOME|\/tmp|\/var|\/etc|\/dev|\/usr|\/boot|\/home)\b/i,
30
+ },
31
+ {
32
+ severity: 'critical',
33
+ reason: 'privilege escalation (sudo)',
34
+ re: /\bsudo\b/i,
35
+ },
36
+ {
37
+ severity: 'critical',
38
+ reason: 'disk format',
39
+ re: /\bformat\b/i,
40
+ },
41
+ // Windows: del /f /q /s (force/quiet/subdirs)
42
+ {
43
+ severity: 'critical',
44
+ reason: 'forced recursive delete (del /f, del /s, del /q)',
45
+ re: /\bdel\b[^\n]*\s+\/[a-z]*[fsq][a-z]*\b/i,
46
+ },
47
+ {
48
+ severity: 'critical',
49
+ reason: 'system shutdown',
50
+ re: /\bshutdown\b/i,
51
+ },
52
+ {
53
+ severity: 'critical',
54
+ reason: 'system reboot',
55
+ re: /\breboot\b/i,
56
+ },
57
+ {
58
+ severity: 'danger',
59
+ reason: 'git hard reset (git reset --hard)',
60
+ re: /\bgit\b[^\n]*\breset\b[^\n]*--hard\b/i,
61
+ },
62
+ {
63
+ severity: 'danger',
64
+ reason: 'git clean (git clean -fdx)',
65
+ re: /\bgit\b[^\n]*\bclean\b[^\n]*-(?:fd?x?|xfd?|dxf|fx)\b/i,
66
+ },
67
+ {
68
+ severity: 'danger',
69
+ reason: 'find ... -delete',
70
+ re: /\bfind\b[^\n]*\s-delete\b/i,
71
+ },
72
+ {
73
+ severity: 'critical',
74
+ reason: 'Remove-Item -Recurse -Force',
75
+ re: /\bRemove-Item\b[^\n]*-Recurse\b[^\n]*-Force\b/i,
76
+ },
77
+ {
78
+ severity: 'critical',
79
+ reason: 'move /y to a drive root',
80
+ re: /\bmove\b[^\n]*\/y\b[^\n]*[a-z]:\\/i,
81
+ },
82
+ {
83
+ severity: 'critical',
84
+ reason: 'diskpart',
85
+ re: /\bdiskpart\b/i,
86
+ },
87
+ {
88
+ severity: 'critical',
89
+ reason: 'registry delete',
90
+ re: /\breg\b[^\n]*\bdelete\b/i,
91
+ },
92
+ {
93
+ severity: 'danger',
94
+ reason: 'chmod -R 777 /',
95
+ re: /\bchmod\b[^\n]*\s+-R\b[^\n]*777\b[^\n]*(?:\\|~|\$HOME|\/etc|\/var|\/dev|\/usr|\/home)\b/i,
96
+ },
97
+ {
98
+ severity: 'danger',
99
+ reason: 'mkfs (filesystem creation)',
100
+ re: /\bmkfs\b/i,
101
+ },
102
+ {
103
+ severity: 'critical',
104
+ reason: 'dd writing to a block device',
105
+ re: /\bdd\b[^\n]*\bof=\/dev\/\S+/i,
106
+ },
107
+ {
108
+ severity: 'critical',
109
+ reason: 'redirection to a block device',
110
+ re: />>?\s*\/dev\/(?:sda|sdb|sd\w|nvme\w*|mmcblk\w*|disk\w*)\b/i,
111
+ },
112
+ {
113
+ severity: 'danger',
114
+ reason: 'force-kill all processes',
115
+ re: /\b(?:killall|pkill)\b[^\n]*\s+-9\b|\bkill\b[^\n]*\s+-9\b[^\n]*-?\d+\b/i,
116
+ },
117
+ {
118
+ severity: 'danger',
119
+ reason: 'fork bomb',
120
+ re: /:\(\)\s*\{\s*:\|:&\s*\};:/i,
121
+ },
122
+ // Truncating the filesystem root or a system file.
123
+ {
124
+ severity: 'critical',
125
+ reason: 'truncate a system path',
126
+ re: />>?\s*(?:\/etc\/(?:passwd|shadow|hosts)|\/var\/log\b|\/dev\/null\b)/i,
127
+ },
128
+ ];
129
+ /**
130
+ * Assess whether a shell command is too dangerous to run automatically.
131
+ * Cross-platform (bash / powershell / cmd). Returns a severity and reason.
132
+ */
133
+ function isDangerCommand(command) {
134
+ if (typeof command !== 'string' || command.trim() === '') {
135
+ return { danger: false, severity: 'none', reason: 'empty command' };
136
+ }
137
+ const trimmedTrimmed = command.trim();
138
+ for (const rule of DANGER_RULES) {
139
+ if (rule.re.test(trimmedTrimmed)) {
140
+ return {
141
+ danger: rule.severity === 'critical' || rule.severity === 'danger',
142
+ severity: rule.severity,
143
+ reason: rule.reason,
144
+ };
145
+ }
146
+ }
147
+ return { danger: false, severity: 'none', reason: 'allowed' };
148
+ }
149
+ /**
150
+ * High-value / credential paths that are blocked regardless of authorisation
151
+ * mode. Matched against the lower-cased, slash-normalised path so both POSIX
152
+ * and Windows spellings are covered.
153
+ */
154
+ const SENSITIVE_PATTERN = [
155
+ // System config / credential stores
156
+ /(^|\/)(etc\/passwd|etc\/shadow|etc\/sudoers|etc\/hosts|etc\/group|etc\/fstab)$/,
157
+ /(^|\/)(etc\/ssh|etc\/ssl\/private|etc\/ssl\/certs|etc\/pkcs11)/,
158
+ /(^|\/)(dev\/(sda|sdb|sd[a-z]|nvme[0-9n]+|mmcblk[0-9]+|disk[a-z0-9]+|mem|kmem|initctl|loop[0-9]+|tty))$/,
159
+ /(^|\/)(proc|sys|boot|run|sbin|bin|usr\/lib|usr\/share|lib|lib64|var\/log|var\/lib|var\/run)\b/,
160
+ /(^|\/)(system\/library|library\/keychains|library\/preferences|applications)\b/,
161
+ // Windows system directories
162
+ /^([a-z]:)?\/(windows|winnt|program files|programdata|users\/(?:default|public)\/appdata)/,
163
+ /\/windows\/(system32|syswow64|system|security|systemroot|boot)\b/,
164
+ // Private keys and credential files
165
+ /(^|\/)(id_rsa|id_dsa|id_ecdsa|id_ed25519)(\.pub)?$/,
166
+ /(^|\/)\.(ssh|gnupg|aws|azure|kube|docker-npm|config)\b/,
167
+ /(^|\/)\.env(\.|$)/i,
168
+ /(^|\/)\.npmrc$/,
169
+ /(^|\/)(\.netrc|\.pgpass|\.htpasswd|\.htaccess|\.git-credentials|\.boto|\.s3cfg)$/,
170
+ /(^|\/)(credentials|credentials\.json|secrets?\.json|service-account[^/]*\.json|google-credentials[^/]*\.json|application_default_credentials[^/]*\.json)$/,
171
+ /(^|\/)(keystore|\.keystore|\.jks|\.p12|\.pfx|\.pem|\.key|cert\.pem|server\.pem)$/,
172
+ /(^|\/)(\.npmrc|\.yarnrc|\.pypirc|\.gemrc|\.dockerconfigjson)$/,
173
+ // Files that typically bundle tokens/config keys
174
+ /(^|\/)(config\.json|settings\.json|secrets\.yml|secrets\.yaml|\.env\.(local|prod|production|dev|development|test))$/,
175
+ ];
176
+ /**
177
+ * Whether a (canonical absolute) path should never be read/written by a tool.
178
+ * These are blocked no matter what permission mode is in effect.
179
+ */
180
+ function isSensitivePath(p) {
181
+ if (typeof p !== 'string' || p === '')
182
+ return false;
183
+ const norm = p.replace(/\\/g, '/').toLowerCase();
184
+ for (const re of SENSITIVE_PATTERN) {
185
+ if (re.test(norm))
186
+ return true;
187
+ }
188
+ return false;
189
+ }
190
+ /** Emitted value when any secret has been redacted. */
191
+ exports.MASK = '***';
192
+ /**
193
+ * Redact secrets from a string: provider keys, bearer tokens, JWTs, private
194
+ * keys, and `key=value` / `key: value` pairs for obvious secret names. Used
195
+ * before logging or returning tool output so internal keys never leak.
196
+ */
197
+ function maskSecrets(text) {
198
+ if (typeof text !== 'string' || text === '')
199
+ return text;
200
+ let out = text;
201
+ // Named secret pairs: password=..., token=..., api_key=..., authorization: ...
202
+ out = out.replace(/(password|passwd|secret|token|api[_-]?key|access[_-]?key|auth(?:orization)?|session|refresh[_-]?token|private[_-]?key|cookie|client[_-]?secret)\s*(?:[:=]\s*|["']?\s+)(["']?)([^\s,;'"&]+)\2/gi, (_m, _key, _q, value) => {
203
+ // Never redact a placeholder already present.
204
+ if (value === exports.MASK)
205
+ return _m;
206
+ return `${_q}${exports.MASK}${_q}`;
207
+ });
208
+ // Bearer / Basic auth headers.
209
+ out = out.replace(/\b(Bearer|Basic)\s+[A-Za-z0-9+/=_-]{8,}/gi, `$1 ${exports.MASK}`);
210
+ // OpenAI / Anthropic style sk- keys.
211
+ out = out.replace(/\bsk-[A-Za-z0-9_-]{16,}\b/g, `sk-${exports.MASK}`);
212
+ // Stripe live/test keys.
213
+ out = out.replace(/\bsk_(?:live|test)_[A-Za-z0-9]{16,}\b/g, `sk_${exports.MASK}`);
214
+ // GitHub tokens.
215
+ out = out.replace(/\bgh[pousr]_[A-Za-z0-9]{16,}\b/g, `gh${exports.MASK}`.replace('***', exports.MASK));
216
+ // Slack tokens.
217
+ out = out.replace(/\bxox[baprs]-[A-Za-z0-9-]{10,}\b/g, `xox${exports.MASK}`.replace('***', exports.MASK));
218
+ // Google API keys.
219
+ out = out.replace(/\bAIza[0-9A-Za-z_-]{30,}\b/g, `AIza${exports.MASK}`);
220
+ // AWS access key ID.
221
+ out = out.replace(/\b(AKIA|ASIA)[0-9A-Z]{16}\b/g, `$1${exports.MASK}`);
222
+ // JWT.
223
+ out = out.replace(/\beyJ[A-Za-z0-9_-]{10,}\.[A-Za-z0-9_-]{10,}\.[A-Za-z0-9_-]{10,}\b/g, `eyJ${exports.MASK}`);
224
+ // PEM / OpenSSH private-key blocks.
225
+ out = out.replace(/-----BEGIN ([A-Z ]*)?PRIVATE KEY-----[\s\S]*?-----END ([A-Z ]*)?PRIVATE KEY-----/g, '-----BEGIN PRIVATE KEY-----\n' + exports.MASK + '\n-----END PRIVATE KEY-----');
226
+ return out;
227
+ }
228
+ //# sourceMappingURL=security.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"security.js","sourceRoot":"","sources":["../src/security.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ import type { PermissionMode } from './config';
2
+ import type { Logger } from './logger';
3
+ /** Thrown when a tool invocation is invalid or unsafe. */
4
+ export declare class ToolError extends Error {
5
+ readonly code: string;
6
+ constructor(code: string, message: string);
7
+ }
8
+ export interface ToolContext {
9
+ /** Canonical authorised root; all file operations stay inside it. */
10
+ root: string;
11
+ mode: PermissionMode;
12
+ webEnabled: boolean;
13
+ timeoutMs: number;
14
+ maxBytes: number;
15
+ logger: Logger;
16
+ }
17
+ export interface ToolOutcome {
18
+ ok: boolean;
19
+ result?: unknown;
20
+ error?: string;
21
+ }
22
+ export interface ToolResult extends ToolOutcome {
23
+ durationMs: number;
24
+ /** Set when the result came from the idempotency cache. */
25
+ cached?: boolean;
26
+ }
27
+ export type ToolExecutor = (ctx: ToolContext, args: Record<string, unknown>, signal?: AbortSignal) => Promise<ToolOutcome>;
28
+ export interface ToolRegistry {
29
+ readonly ctx: ToolContext;
30
+ readonly tools: readonly string[];
31
+ has(name: string): boolean;
32
+ dispatch(name: string, args: Record<string, unknown>, signal?: AbortSignal): Promise<ToolResult>;
33
+ }
34
+ /** Build a tool registry bound to a single execution context. */
35
+ export declare function createToolRegistry(ctx: ToolContext): ToolRegistry;
36
+ //# sourceMappingURL=tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC/C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAEvC,0DAA0D;AAC1D,qBAAa,SAAU,SAAQ,KAAK;IAClC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;gBACV,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CAK1C;AAED,MAAM,WAAW,WAAW;IAC1B,qEAAqE;IACrE,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,cAAc,CAAC;IACrB,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,UAAW,SAAQ,WAAW;IAC7C,UAAU,EAAE,MAAM,CAAC;IACnB,2DAA2D;IAC3D,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,MAAM,YAAY,GAAG,CACzB,GAAG,EAAE,WAAW,EAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,MAAM,CAAC,EAAE,WAAW,KACjB,OAAO,CAAC,WAAW,CAAC,CAAC;AA8b1B,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,GAAG,EAAE,WAAW,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;CAClG;AAED,iEAAiE;AACjE,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,WAAW,GAAG,YAAY,CA6BjE"}