@noesis-brain/mcp-server 2.1.5 → 2.5.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 (49) hide show
  1. package/README.md +10 -1
  2. package/dist/agent/identity.d.ts +33 -0
  3. package/dist/agent/identity.d.ts.map +1 -0
  4. package/dist/agent/identity.js +61 -0
  5. package/dist/agent/identity.js.map +1 -0
  6. package/dist/agent/runner.d.ts +103 -6
  7. package/dist/agent/runner.d.ts.map +1 -1
  8. package/dist/agent/runner.js +375 -64
  9. package/dist/agent/runner.js.map +1 -1
  10. package/dist/agent/tokenState.d.ts +81 -0
  11. package/dist/agent/tokenState.d.ts.map +1 -0
  12. package/dist/agent/tokenState.js +173 -0
  13. package/dist/agent/tokenState.js.map +1 -0
  14. package/dist/agent/webGuard.d.ts +48 -0
  15. package/dist/agent/webGuard.d.ts.map +1 -0
  16. package/dist/agent/webGuard.js +173 -0
  17. package/dist/agent/webGuard.js.map +1 -0
  18. package/dist/api/NoesisClient.d.ts +19 -1
  19. package/dist/api/NoesisClient.d.ts.map +1 -1
  20. package/dist/api/NoesisClient.js +55 -3
  21. package/dist/api/NoesisClient.js.map +1 -1
  22. package/dist/cli/setup.js +1 -1
  23. package/dist/cli/setup.js.map +1 -1
  24. package/dist/machineLabel.d.ts +16 -0
  25. package/dist/machineLabel.d.ts.map +1 -0
  26. package/dist/machineLabel.js +43 -0
  27. package/dist/machineLabel.js.map +1 -0
  28. package/dist/tools/backlog.d.ts +21 -0
  29. package/dist/tools/backlog.d.ts.map +1 -1
  30. package/dist/tools/backlog.js +123 -1
  31. package/dist/tools/backlog.js.map +1 -1
  32. package/dist/tools/claudeSessions.d.ts +83 -0
  33. package/dist/tools/claudeSessions.d.ts.map +1 -0
  34. package/dist/tools/claudeSessions.js +330 -0
  35. package/dist/tools/claudeSessions.js.map +1 -0
  36. package/dist/tools/index.d.ts +1 -6
  37. package/dist/tools/index.d.ts.map +1 -1
  38. package/dist/tools/index.js +166 -37
  39. package/dist/tools/index.js.map +1 -1
  40. package/dist/tools/sessionIndex.d.ts +66 -0
  41. package/dist/tools/sessionIndex.d.ts.map +1 -0
  42. package/dist/tools/sessionIndex.js +241 -0
  43. package/dist/tools/sessionIndex.js.map +1 -0
  44. package/package.json +1 -1
  45. package/scripts/noesis-capture-watcher.mjs +722 -107
  46. package/scripts/start-agent.sh +51 -12
  47. package/skill-templates/noesis-refine-relations.md +163 -0
  48. package/skill-templates/noesis-ticket.md +79 -0
  49. package/templates/claude-md-block.md +7 -0
@@ -1 +1 @@
1
- {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/agent/runner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/agent/runner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,81 @@
1
+ /**
2
+ * The local agent's view of its own Noesis API token.
3
+ *
4
+ * Noesis API tokens expire after 90 days. Before 2.3.1 an expired token made every claim
5
+ * fail with 401 and the daemon said nothing — it simply never picked anything up. Now:
6
+ * - at startup, checkToken() asks GET /api/agent/token and explains any refusal;
7
+ * - while running, one TokenGate shared by every worker turns a 401 into ONE clear log
8
+ * line, slows polling to REJECTED_BACKOFF_MS, and logs again when the token is accepted
9
+ * (e.g. after the owner clicks Extend in Settings → API Tokens — the token value does
10
+ * not change, so no restart is needed);
11
+ * - the X-Noesis-Token-Expires header on every answer drives an "expires soon" warning,
12
+ * at most once a day.
13
+ *
14
+ * Old servers send no error_code and have no /api/agent/token: refusals are classified from
15
+ * their error text, and a 404 from the check just skips it.
16
+ */
17
+ /** While the server refuses the token, poll this slowly instead of every 2 s. */
18
+ export declare const REJECTED_BACKOFF_MS = 60000;
19
+ /** Warn when the token has this many days or fewer left. */
20
+ export declare const EXPIRY_WARN_DAYS = 7;
21
+ export type TokenRefusal = {
22
+ kind: 'expired';
23
+ name?: string;
24
+ expiresAt?: string;
25
+ } | {
26
+ kind: 'revoked';
27
+ name?: string;
28
+ } | {
29
+ kind: 'invalid';
30
+ };
31
+ export type TokenCheck = {
32
+ kind: 'ok';
33
+ name: string;
34
+ expiresAt: string;
35
+ daysLeft: number;
36
+ } | {
37
+ kind: 'refused';
38
+ refusal: TokenRefusal;
39
+ } | {
40
+ kind: 'skip';
41
+ reason: string;
42
+ };
43
+ /** What a 401 body says about the token — by error_code, or by the text older servers send. */
44
+ export declare function classifyRefusal(body: unknown): TokenRefusal;
45
+ /** The one line a refusal is explained with — at startup and at runtime alike. */
46
+ export declare function describeRefusal(r: TokenRefusal): string;
47
+ export declare function describeExpirySoon(name: string | undefined, expiresAt: string, daysLeft: number): string;
48
+ /** Startup: ask the server about this token. Never throws. */
49
+ export declare function checkToken(apiBaseUrl: string, apiToken: string, fetchImpl?: typeof fetch): Promise<TokenCheck>;
50
+ /**
51
+ * The token state every worker shares, so N workers produce ONE log line per change
52
+ * rather than one per worker per poll.
53
+ */
54
+ export declare class TokenGate {
55
+ private readonly log;
56
+ private readonly now;
57
+ private refusal;
58
+ private warnedOn;
59
+ private tokenName;
60
+ constructor(log?: (line: string) => void, now?: () => number);
61
+ get isRefused(): boolean;
62
+ /** The server refused the token: say why once, then stay quiet until it changes. */
63
+ refused(r: TokenRefusal): void;
64
+ /** The server accepted the token: if it had been refusing it, say so. */
65
+ accepted(): void;
66
+ /** How long a worker with nothing to do waits before polling again. */
67
+ waitMs(pollMs: number): number;
68
+ /** Remember the token's name (from the startup check) for later warnings. */
69
+ setTokenName(name: string | undefined): void;
70
+ /**
71
+ * Warn when the token expires within EXPIRY_WARN_DAYS — at most once a day, whether
72
+ * the date came from the startup check or from an answer's X-Noesis-Token-Expires.
73
+ */
74
+ expiryHeader(iso: string | null | undefined): void;
75
+ }
76
+ /**
77
+ * Apply the startup check. Returns normally to start the workers; throws for a token that
78
+ * can never work again (revoked or unknown), which ends the process with that message.
79
+ */
80
+ export declare function applyStartupCheck(check: TokenCheck, gate: TokenGate): void;
81
+ //# sourceMappingURL=tokenState.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokenState.d.ts","sourceRoot":"","sources":["../../src/agent/tokenState.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,iFAAiF;AACjF,eAAO,MAAM,mBAAmB,QAAS,CAAC;AAC1C,4DAA4D;AAC5D,eAAO,MAAM,gBAAgB,IAAI,CAAC;AAKlC,MAAM,MAAM,YAAY,GACpB;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GACtD;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAClC;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,CAAC;AAExB,MAAM,MAAM,UAAU,GAClB;IAAE,IAAI,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GACjE;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,OAAO,EAAE,YAAY,CAAA;CAAE,GAC1C;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAWrC,+FAA+F;AAC/F,wBAAgB,eAAe,CAAC,IAAI,EAAE,OAAO,GAAG,YAAY,CAe3D;AASD,kFAAkF;AAClF,wBAAgB,eAAe,CAAC,CAAC,EAAE,YAAY,GAAG,MAAM,CAYvD;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAIxG;AAED,8DAA8D;AAC9D,wBAAsB,UAAU,CAC9B,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,SAAS,GAAE,OAAO,KAAa,GAC9B,OAAO,CAAC,UAAU,CAAC,CAyBrB;AAED;;;GAGG;AACH,qBAAa,SAAS;IAMlB,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,GAAG;IANtB,OAAO,CAAC,OAAO,CAAuB;IACtC,OAAO,CAAC,QAAQ,CAAuB;IACvC,OAAO,CAAC,SAAS,CAAqB;gBAGnB,GAAG,GAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAoC,EAC3D,GAAG,GAAE,MAAM,MAAyB;IAGvD,IAAI,SAAS,IAAI,OAAO,CAEvB;IAED,oFAAoF;IACpF,OAAO,CAAC,CAAC,EAAE,YAAY,GAAG,IAAI;IAM9B,yEAAyE;IACzE,QAAQ,IAAI,IAAI;IAMhB,uEAAuE;IACvE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAI9B,6EAA6E;IAC7E,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;IAI5C;;;OAGG;IACH,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,IAAI;CAWnD;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,GAAG,IAAI,CAY1E"}
@@ -0,0 +1,173 @@
1
+ /**
2
+ * The local agent's view of its own Noesis API token.
3
+ *
4
+ * Noesis API tokens expire after 90 days. Before 2.3.1 an expired token made every claim
5
+ * fail with 401 and the daemon said nothing — it simply never picked anything up. Now:
6
+ * - at startup, checkToken() asks GET /api/agent/token and explains any refusal;
7
+ * - while running, one TokenGate shared by every worker turns a 401 into ONE clear log
8
+ * line, slows polling to REJECTED_BACKOFF_MS, and logs again when the token is accepted
9
+ * (e.g. after the owner clicks Extend in Settings → API Tokens — the token value does
10
+ * not change, so no restart is needed);
11
+ * - the X-Noesis-Token-Expires header on every answer drives an "expires soon" warning,
12
+ * at most once a day.
13
+ *
14
+ * Old servers send no error_code and have no /api/agent/token: refusals are classified from
15
+ * their error text, and a 404 from the check just skips it.
16
+ */
17
+ /** While the server refuses the token, poll this slowly instead of every 2 s. */
18
+ export const REJECTED_BACKOFF_MS = 60_000;
19
+ /** Warn when the token has this many days or fewer left. */
20
+ export const EXPIRY_WARN_DAYS = 7;
21
+ const DAY_MS = 86_400_000;
22
+ const WHERE_TO_FIX = 'Settings → API Tokens';
23
+ const str = (v) => (typeof v === 'string' && v.length > 0 ? v : undefined);
24
+ /** What a 401 body says about the token — by error_code, or by the text older servers send. */
25
+ export function classifyRefusal(body) {
26
+ const b = (body && typeof body === 'object' ? body : {});
27
+ const code = str(b.error_code);
28
+ const text = str(b.error) ?? '';
29
+ // Older servers: `API token has expired (name: "X", expired: 2026-10-14T03:18:32.151Z, sent: …)`
30
+ const textName = /name: "([^"]*)"/.exec(text)?.[1];
31
+ const textExpiry = /expired: (\d{4}-\d{2}-\d{2}T[0-9:.]+Z)/.exec(text)?.[1];
32
+ const name = str(b.tokenName) ?? textName;
33
+ if (code === 'API_TOKEN_EXPIRED' || (!code && /has expired/i.test(text))) {
34
+ return { kind: 'expired', name, expiresAt: str(b.expiresAt) ?? textExpiry };
35
+ }
36
+ if (code === 'API_TOKEN_REVOKED' || (!code && /revoked/i.test(text))) {
37
+ return { kind: 'revoked', name };
38
+ }
39
+ return { kind: 'invalid' };
40
+ }
41
+ function formatWhen(iso) {
42
+ if (!iso || Number.isNaN(Date.parse(iso)))
43
+ return 'an unknown date';
44
+ return `${new Date(iso).toISOString().slice(0, 16).replace('T', ' ')} UTC`;
45
+ }
46
+ const quoted = (name) => (name ? ` "${name}"` : '');
47
+ /** The one line a refusal is explained with — at startup and at runtime alike. */
48
+ export function describeRefusal(r) {
49
+ switch (r.kind) {
50
+ case 'expired':
51
+ return `[noesis-agent] Your Noesis API token${quoted(r.name)} expired on ${formatWhen(r.expiresAt)}. ` +
52
+ `Extend it in ${WHERE_TO_FIX} — this agent keeps checking and resumes by itself.`;
53
+ case 'revoked':
54
+ return `[noesis-agent] Your Noesis API token${quoted(r.name)} was revoked. ` +
55
+ `Generate a new one in ${WHERE_TO_FIX} and restart the agent with it.`;
56
+ default:
57
+ return `[noesis-agent] Noesis did not recognise this API token. ` +
58
+ `Check NOESIS_API_TOKEN, or generate a new one in ${WHERE_TO_FIX}.`;
59
+ }
60
+ }
61
+ export function describeExpirySoon(name, expiresAt, daysLeft) {
62
+ const when = daysLeft <= 0 ? 'today' : daysLeft === 1 ? 'in 1 day' : `in ${daysLeft} days`;
63
+ return `[noesis-agent] Your Noesis API token${quoted(name)} expires ${when} (${formatWhen(expiresAt)}). ` +
64
+ `Extend it in ${WHERE_TO_FIX} to keep this agent running.`;
65
+ }
66
+ /** Startup: ask the server about this token. Never throws. */
67
+ export async function checkToken(apiBaseUrl, apiToken, fetchImpl = fetch) {
68
+ let res;
69
+ try {
70
+ res = await fetchImpl(`${apiBaseUrl}/api/agent/token`, { headers: { Authorization: `Bearer ${apiToken}` } });
71
+ }
72
+ catch (err) {
73
+ return { kind: 'skip', reason: `could not reach the server (${err instanceof Error ? err.message : String(err)})` };
74
+ }
75
+ if (res.status === 401) {
76
+ const body = (await res.json().catch(() => ({})));
77
+ // A server without the check routes this path on to a later layer, which refuses the
78
+ // noe_ token with ITS OWN code (e.g. a JWT check's TOKEN_INVALID) — meaning the token
79
+ // layer already accepted it. Only API_TOKEN_* codes, or the older server's code-less
80
+ // token texts, are about this token. A token without the noe_ prefix never reaches the
81
+ // token layer at all, so that same answer means it is simply not a Noesis API token.
82
+ const code = str(body.error_code);
83
+ if (code && !code.startsWith('API_TOKEN_') && apiToken.startsWith('noe_')) {
84
+ return { kind: 'skip', reason: `this server has no token check (${code})` };
85
+ }
86
+ return { kind: 'refused', refusal: classifyRefusal(body) };
87
+ }
88
+ if (!res.ok)
89
+ return { kind: 'skip', reason: `HTTP ${res.status}` }; // e.g. a server without the check
90
+ const body = (await res.json().catch(() => ({})));
91
+ const expiresAt = str(body.expiresAt);
92
+ if (!expiresAt || typeof body.daysLeft !== 'number')
93
+ return { kind: 'skip', reason: 'unexpected answer' };
94
+ return { kind: 'ok', name: str(body.name) ?? '', expiresAt, daysLeft: body.daysLeft };
95
+ }
96
+ /**
97
+ * The token state every worker shares, so N workers produce ONE log line per change
98
+ * rather than one per worker per poll.
99
+ */
100
+ export class TokenGate {
101
+ log;
102
+ now;
103
+ refusal = null;
104
+ warnedOn = null;
105
+ tokenName;
106
+ constructor(log = (line) => console.error(line), now = () => Date.now()) {
107
+ this.log = log;
108
+ this.now = now;
109
+ }
110
+ get isRefused() {
111
+ return this.refusal !== null;
112
+ }
113
+ /** The server refused the token: say why once, then stay quiet until it changes. */
114
+ refused(r) {
115
+ const line = describeRefusal(r);
116
+ if (this.refusal !== line)
117
+ this.log(line);
118
+ this.refusal = line;
119
+ }
120
+ /** The server accepted the token: if it had been refusing it, say so. */
121
+ accepted() {
122
+ if (this.refusal === null)
123
+ return;
124
+ this.refusal = null;
125
+ this.log('[noesis-agent] API token accepted again — resuming.');
126
+ }
127
+ /** How long a worker with nothing to do waits before polling again. */
128
+ waitMs(pollMs) {
129
+ return this.refusal === null ? pollMs : REJECTED_BACKOFF_MS;
130
+ }
131
+ /** Remember the token's name (from the startup check) for later warnings. */
132
+ setTokenName(name) {
133
+ this.tokenName = name || undefined;
134
+ }
135
+ /**
136
+ * Warn when the token expires within EXPIRY_WARN_DAYS — at most once a day, whether
137
+ * the date came from the startup check or from an answer's X-Noesis-Token-Expires.
138
+ */
139
+ expiryHeader(iso) {
140
+ if (!iso)
141
+ return;
142
+ const at = Date.parse(iso);
143
+ if (Number.isNaN(at))
144
+ return;
145
+ const daysLeft = Math.floor((at - this.now()) / DAY_MS);
146
+ if (daysLeft > EXPIRY_WARN_DAYS)
147
+ return;
148
+ const today = new Date(this.now()).toISOString().slice(0, 10);
149
+ if (this.warnedOn === today)
150
+ return;
151
+ this.warnedOn = today;
152
+ this.log(describeExpirySoon(this.tokenName, iso, daysLeft));
153
+ }
154
+ }
155
+ /**
156
+ * Apply the startup check. Returns normally to start the workers; throws for a token that
157
+ * can never work again (revoked or unknown), which ends the process with that message.
158
+ */
159
+ export function applyStartupCheck(check, gate) {
160
+ if (check.kind === 'skip')
161
+ return;
162
+ if (check.kind === 'ok') {
163
+ gate.setTokenName(check.name);
164
+ gate.expiryHeader(check.expiresAt); // shares the once-a-day warning with the claim answers
165
+ return;
166
+ }
167
+ if (check.refusal.kind === 'expired') {
168
+ gate.refused(check.refusal); // logs once; the workers start in backoff and recover after an Extend
169
+ return;
170
+ }
171
+ throw new Error(describeRefusal(check.refusal).replace(/^\[noesis-agent\] /, ''));
172
+ }
173
+ //# sourceMappingURL=tokenState.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokenState.js","sourceRoot":"","sources":["../../src/agent/tokenState.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Address guard for the daemon's WebFetch tool.
3
+ *
4
+ * The daemon runs on the USER'S OWN machine, so a request forged by a web page does not
5
+ * land in some cloud network — it lands on their LAN, their router's admin page, and
6
+ * anything listening on localhost (a dev backend on :5555, a database). A page a Navi
7
+ * reads can carry instructions; this is what stops "now fetch http://192.168.1.1/…" from
8
+ * working. It runs inside buildCanUseTool, before the CLI performs the fetch.
9
+ *
10
+ * Mirrors the backend's src/backend/utils/ssrfGuard.ts (this package is published on its
11
+ * own and cannot import from the main repo), with two deliberate differences:
12
+ * - `net.BlockList` decides membership, so IPv4-mapped IPv6 (`::ffff:7f00:1`) is caught.
13
+ * The backend's dotted-form regex misses the hex form WHATWG URL produces.
14
+ * - NAT64 addresses (64:ff9b::/96) are judged by the IPv4 address they embed, which
15
+ * BlockList does not do on its own (verified: `64:ff9b::7f00:1` passes a v4 rule).
16
+ *
17
+ * WHAT THIS CANNOT DO: the CLI resolves the host name again when it fetches, so an answer
18
+ * that changes between the two lookups (DNS rebinding) is not stopped here. WebFetch
19
+ * itself stops it: it upgrades every URL to https and verifies the certificate, which a
20
+ * private device cannot present for the attacker's name. That protection is gone when
21
+ * certificate checks are disabled or a proxy resolves names for us, hence
22
+ * webFetchEnvWarnings below.
23
+ */
24
+ export type UrlVerdict = {
25
+ ok: true;
26
+ host: string;
27
+ } | {
28
+ ok: false;
29
+ reason: string;
30
+ };
31
+ /** Resolves a host name to every address it has. Injectable so tests never touch real DNS. */
32
+ export type HostLookup = (host: string) => Promise<Array<{
33
+ address: string;
34
+ }>>;
35
+ /** True for private, reserved or otherwise non-public addresses. Unparseable input is blocked. */
36
+ export declare function isBlockedAddress(address: string): boolean;
37
+ /**
38
+ * Decide whether WebFetch may fetch `raw`. Denies anything that is not an http(s) URL on a
39
+ * public host; a host name must resolve, and EVERY address it resolves to must be public.
40
+ */
41
+ export declare function checkWebFetchUrl(raw: unknown, lookup?: HostLookup): Promise<UrlVerdict>;
42
+ /**
43
+ * Startup warnings for environments where the guard's assumptions do not hold: with
44
+ * certificate checks off, DNS rebinding reaches the LAN; behind a proxy, the proxy
45
+ * resolves names, so the address this guard checked is not the one that gets fetched.
46
+ */
47
+ export declare function webFetchEnvWarnings(env: Record<string, string | undefined>): string[];
48
+ //# sourceMappingURL=webGuard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webGuard.d.ts","sourceRoot":"","sources":["../../src/agent/webGuard.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAKH,MAAM,MAAM,UAAU,GAAG;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAEpF,8FAA8F;AAC9F,MAAM,MAAM,UAAU,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,KAAK,CAAC;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,CAAC;AA4D/E,kGAAkG;AAClG,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAWzD;AAeD;;;GAGG;AACH,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,GAAE,UAAyB,GAAG,OAAO,CAAC,UAAU,CAAC,CAiC3G;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,GAAG,MAAM,EAAE,CAerF"}
@@ -0,0 +1,173 @@
1
+ /**
2
+ * Address guard for the daemon's WebFetch tool.
3
+ *
4
+ * The daemon runs on the USER'S OWN machine, so a request forged by a web page does not
5
+ * land in some cloud network — it lands on their LAN, their router's admin page, and
6
+ * anything listening on localhost (a dev backend on :5555, a database). A page a Navi
7
+ * reads can carry instructions; this is what stops "now fetch http://192.168.1.1/…" from
8
+ * working. It runs inside buildCanUseTool, before the CLI performs the fetch.
9
+ *
10
+ * Mirrors the backend's src/backend/utils/ssrfGuard.ts (this package is published on its
11
+ * own and cannot import from the main repo), with two deliberate differences:
12
+ * - `net.BlockList` decides membership, so IPv4-mapped IPv6 (`::ffff:7f00:1`) is caught.
13
+ * The backend's dotted-form regex misses the hex form WHATWG URL produces.
14
+ * - NAT64 addresses (64:ff9b::/96) are judged by the IPv4 address they embed, which
15
+ * BlockList does not do on its own (verified: `64:ff9b::7f00:1` passes a v4 rule).
16
+ *
17
+ * WHAT THIS CANNOT DO: the CLI resolves the host name again when it fetches, so an answer
18
+ * that changes between the two lookups (DNS rebinding) is not stopped here. WebFetch
19
+ * itself stops it: it upgrades every URL to https and verifies the certificate, which a
20
+ * private device cannot present for the attacker's name. That protection is gone when
21
+ * certificate checks are disabled or a proxy resolves names for us, hence
22
+ * webFetchEnvWarnings below.
23
+ */
24
+ import { lookup as dnsLookup } from 'node:dns/promises';
25
+ import { BlockList, isIP } from 'node:net';
26
+ const DNS_TIMEOUT_MS = 3000;
27
+ /** [network, prefix] IPv4 blocks that must never be fetched — same list as the backend's. */
28
+ const PRIVATE_IPV4_CIDRS = [
29
+ ['0.0.0.0', 8], // "this network"
30
+ ['10.0.0.0', 8], // private
31
+ ['100.64.0.0', 10], // CGNAT (also Tailscale)
32
+ ['127.0.0.0', 8], // loopback
33
+ ['169.254.0.0', 16], // link-local / cloud metadata service
34
+ ['172.16.0.0', 12], // private
35
+ ['192.0.0.0', 24], // IETF protocol assignments
36
+ ['192.168.0.0', 16], // private
37
+ ['198.18.0.0', 15], // benchmarking
38
+ ['224.0.0.0', 4], // multicast
39
+ ['240.0.0.0', 4], // reserved + broadcast
40
+ ];
41
+ /**
42
+ * IPv6 blocks that are never a public web server. IPv4-mapped addresses (::ffff:0:0/96)
43
+ * need no entry: BlockList checks them against the IPv4 rules above.
44
+ */
45
+ const PRIVATE_IPV6_CIDRS = [
46
+ ['::', 96], // unspecified, loopback (::1), deprecated IPv4-compatible
47
+ ['64:ff9b:1::', 48], // local-use NAT64
48
+ ['100::', 64], // discard-only
49
+ ['2001::', 32], // Teredo (embeds an obfuscated IPv4)
50
+ ['2001:db8::', 32], // documentation
51
+ ['2002::', 16], // 6to4 (embeds an IPv4)
52
+ ['fc00::', 7], // unique local
53
+ ['fe80::', 10], // link-local
54
+ ['ff00::', 8], // multicast
55
+ ];
56
+ const BLOCKED = new BlockList();
57
+ for (const [network, prefix] of PRIVATE_IPV4_CIDRS)
58
+ BLOCKED.addSubnet(network, prefix, 'ipv4');
59
+ for (const [network, prefix] of PRIVATE_IPV6_CIDRS)
60
+ BLOCKED.addSubnet(network, prefix, 'ipv6');
61
+ /** Host-name suffixes reserved for names that only exist on a local network. */
62
+ const LOCAL_SUFFIXES = ['.localhost', '.local', '.internal', '.home.arpa'];
63
+ /** Last 32 bits of a well-known-prefix NAT64 address, as dotted IPv4; null if not NAT64. */
64
+ function embeddedNat64(ipv6) {
65
+ // Canonicalize through the WHATWG serializer so every spelling (`64:ff9b::127.0.0.1`,
66
+ // `0064:ff9b:0:0:0:0:7f00:0001`) reduces to one lower-case, compressed form.
67
+ let canon;
68
+ try {
69
+ canon = new URL(`http://[${ipv6}]/`).hostname.slice(1, -1);
70
+ }
71
+ catch {
72
+ return null;
73
+ }
74
+ if (canon === '64:ff9b::')
75
+ return '0.0.0.0';
76
+ const m = /^64:ff9b::(?:([0-9a-f]{1,4}):)?([0-9a-f]{1,4})$/.exec(canon);
77
+ if (!m)
78
+ return null;
79
+ const hi = m[1] ? parseInt(m[1], 16) : 0;
80
+ const lo = parseInt(m[2], 16);
81
+ return `${hi >> 8}.${hi & 255}.${lo >> 8}.${lo & 255}`;
82
+ }
83
+ /** True for private, reserved or otherwise non-public addresses. Unparseable input is blocked. */
84
+ export function isBlockedAddress(address) {
85
+ try {
86
+ const family = isIP(address);
87
+ if (family === 4)
88
+ return BLOCKED.check(address, 'ipv4');
89
+ if (family !== 6)
90
+ return true;
91
+ const v4 = embeddedNat64(address);
92
+ if (v4 !== null)
93
+ return BLOCKED.check(v4, 'ipv4');
94
+ return BLOCKED.check(address, 'ipv6');
95
+ }
96
+ catch {
97
+ return true;
98
+ }
99
+ }
100
+ /** Every address the OS would use — dns.lookup honours /etc/hosts, as the CLI's fetch does. */
101
+ const systemLookup = (host) => dnsLookup(host, { all: true, verbatim: true });
102
+ function withTimeout(p, ms) {
103
+ let timer;
104
+ const timeout = new Promise((_, reject) => {
105
+ timer = setTimeout(() => reject(new Error('timeout')), ms);
106
+ });
107
+ return Promise.race([p, timeout]).finally(() => clearTimeout(timer));
108
+ }
109
+ const deny = (reason) => ({ ok: false, reason });
110
+ /**
111
+ * Decide whether WebFetch may fetch `raw`. Denies anything that is not an http(s) URL on a
112
+ * public host; a host name must resolve, and EVERY address it resolves to must be public.
113
+ */
114
+ export async function checkWebFetchUrl(raw, lookup = systemLookup) {
115
+ if (typeof raw !== 'string' || raw.trim() === '')
116
+ return deny('no URL was given');
117
+ let url;
118
+ try {
119
+ url = new URL(raw);
120
+ }
121
+ catch {
122
+ return deny('it is not a valid URL');
123
+ }
124
+ if (url.protocol !== 'http:' && url.protocol !== 'https:')
125
+ return deny(`${url.protocol} URLs are not allowed`);
126
+ if (url.username || url.password)
127
+ return deny('URLs with embedded credentials are not allowed');
128
+ let host = url.hostname.toLowerCase();
129
+ if (host.startsWith('[') && host.endsWith(']'))
130
+ host = host.slice(1, -1);
131
+ // `localhost.` is the same host as `localhost`, and it slips past a "needs a dot" rule.
132
+ host = host.replace(/\.+$/, '');
133
+ if (!host)
134
+ return deny('it has no host');
135
+ if (isIP(host)) {
136
+ return isBlockedAddress(host) ? deny(`${host} is a private or reserved address`) : { ok: true, host };
137
+ }
138
+ if (!host.includes('.'))
139
+ return deny(`"${host}" is a local host name`);
140
+ if (LOCAL_SUFFIXES.some((suffix) => host.endsWith(suffix)))
141
+ return deny(`"${host}" is a local-network host name`);
142
+ let addresses;
143
+ try {
144
+ addresses = await withTimeout(lookup(host), DNS_TIMEOUT_MS);
145
+ }
146
+ catch {
147
+ return deny(`${host} could not be resolved`);
148
+ }
149
+ if (addresses.length === 0)
150
+ return deny(`${host} could not be resolved`);
151
+ const blocked = addresses.find((a) => isBlockedAddress(a.address));
152
+ if (blocked)
153
+ return deny(`${host} resolves to a private or reserved address (${blocked.address})`);
154
+ return { ok: true, host };
155
+ }
156
+ /**
157
+ * Startup warnings for environments where the guard's assumptions do not hold: with
158
+ * certificate checks off, DNS rebinding reaches the LAN; behind a proxy, the proxy
159
+ * resolves names, so the address this guard checked is not the one that gets fetched.
160
+ */
161
+ export function webFetchEnvWarnings(env) {
162
+ const warnings = [];
163
+ if (env.NODE_TLS_REJECT_UNAUTHORIZED === '0') {
164
+ warnings.push('[noesis-agent] WARNING: NODE_TLS_REJECT_UNAUTHORIZED=0 turns off certificate checks, so a ' +
165
+ 'web page read by a Navi could reach your local network. Unset it before starting the daemon.');
166
+ }
167
+ if (env.HTTPS_PROXY || env.https_proxy || env.HTTP_PROXY || env.http_proxy) {
168
+ warnings.push('[noesis-agent] WARNING: an HTTP(S) proxy is set. Navi web fetches are resolved by the proxy, ' +
169
+ "so the daemon's private-address check cannot see where they really go.");
170
+ }
171
+ return warnings;
172
+ }
173
+ //# sourceMappingURL=webGuard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webGuard.js","sourceRoot":"","sources":["../../src/agent/webGuard.ts"],"names":[],"mappings":"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"}