@namzu/cli 0.2.3 → 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.
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +2 -0
- package/dist/cli.js.map +1 -1
- package/dist/cli.test.js +1 -1
- package/dist/commands/__tests__/eval.test.d.ts +2 -0
- package/dist/commands/__tests__/eval.test.d.ts.map +1 -0
- package/dist/commands/__tests__/eval.test.js +165 -0
- package/dist/commands/__tests__/eval.test.js.map +1 -0
- package/dist/commands/__tests__/passthrough-help.test.d.ts +2 -0
- package/dist/commands/__tests__/passthrough-help.test.d.ts.map +1 -0
- package/dist/commands/__tests__/passthrough-help.test.js +96 -0
- package/dist/commands/__tests__/passthrough-help.test.js.map +1 -0
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +5 -2
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/doctor.test.js +4 -4
- package/dist/commands/doctor.test.js.map +1 -1
- package/dist/commands/eval.d.ts +54 -0
- package/dist/commands/eval.d.ts.map +1 -0
- package/dist/commands/eval.js +237 -0
- package/dist/commands/eval.js.map +1 -0
- package/dist/commands/registry.d.ts.map +1 -1
- package/dist/commands/registry.js +14 -4
- package/dist/commands/registry.js.map +1 -1
- package/dist/commands/run-stream.d.ts.map +1 -1
- package/dist/commands/run-stream.js +20 -0
- package/dist/commands/run-stream.js.map +1 -1
- package/dist/commands/run.d.ts +1 -1
- package/dist/commands/run.d.ts.map +1 -1
- package/dist/commands/run.js +14 -1
- package/dist/commands/run.js.map +1 -1
- package/dist/commands/tools.js +1 -1
- package/dist/commands/tools.js.map +1 -1
- package/dist/commands/types.d.ts +13 -0
- package/dist/commands/types.d.ts.map +1 -1
- package/dist/doctor/checks/sandbox.d.ts +11 -1
- package/dist/doctor/checks/sandbox.d.ts.map +1 -1
- package/dist/doctor/checks/sandbox.js +68 -34
- package/dist/doctor/checks/sandbox.js.map +1 -1
- package/dist/doctor/checks/sandbox.test.d.ts +2 -0
- package/dist/doctor/checks/sandbox.test.d.ts.map +1 -0
- package/dist/doctor/checks/sandbox.test.js +59 -0
- package/dist/doctor/checks/sandbox.test.js.map +1 -0
- package/dist/exit-codes.d.ts +7 -1
- package/dist/exit-codes.d.ts.map +1 -1
- package/dist/exit-codes.js +6 -0
- package/dist/exit-codes.js.map +1 -1
- package/dist/integrations/clawtool/binary.test.js +9 -1
- package/dist/integrations/clawtool/binary.test.js.map +1 -1
- package/dist/integrations/clawtool/dispatch.d.ts +2 -2
- package/dist/integrations/clawtool/dispatch.js +4 -4
- package/dist/integrations/clawtool/dispatch.js.map +1 -1
- package/dist/integrations/clawtool/mcp.d.ts.map +1 -1
- package/dist/integrations/clawtool/mcp.js +20 -2
- package/dist/integrations/clawtool/mcp.js.map +1 -1
- package/dist/integrations/clawtool/tooling.d.ts +8 -6
- package/dist/integrations/clawtool/tooling.d.ts.map +1 -1
- package/dist/integrations/clawtool/tooling.js +8 -6
- package/dist/integrations/clawtool/tooling.js.map +1 -1
- package/dist/integrations/clipboard/image.d.ts +0 -1
- package/dist/integrations/clipboard/image.d.ts.map +1 -1
- package/dist/integrations/clipboard/image.js +0 -1
- package/dist/integrations/clipboard/image.js.map +1 -1
- package/dist/integrations/providers/discover.d.ts +1 -1
- package/dist/integrations/providers/discover.js +9 -9
- package/dist/integrations/providers/discover.js.map +1 -1
- package/dist/integrations/providers/index.d.ts +2 -2
- package/dist/integrations/providers/index.d.ts.map +1 -1
- package/dist/integrations/providers/index.js +2 -2
- package/dist/integrations/providers/index.js.map +1 -1
- package/dist/integrations/providers/keychain.d.ts +17 -16
- package/dist/integrations/providers/keychain.d.ts.map +1 -1
- package/dist/integrations/providers/keychain.js +19 -19
- package/dist/integrations/providers/keychain.js.map +1 -1
- package/dist/integrations/providers/oauth.d.ts +7 -8
- package/dist/integrations/providers/oauth.d.ts.map +1 -1
- package/dist/integrations/providers/oauth.js +13 -11
- package/dist/integrations/providers/oauth.js.map +1 -1
- package/dist/integrations/providers/oauth.test.js +8 -8
- package/dist/integrations/providers/oauth.test.js.map +1 -1
- package/dist/integrations/providers/preferences.test.js +9 -1
- package/dist/integrations/providers/preferences.test.js.map +1 -1
- package/dist/integrations/providers/registry.d.ts +2 -3
- package/dist/integrations/providers/registry.d.ts.map +1 -1
- package/dist/integrations/providers/registry.js +3 -4
- package/dist/integrations/providers/registry.js.map +1 -1
- package/dist/integrations/providers/store.d.ts +1 -1
- package/dist/integrations/providers/store.js +1 -1
- package/dist/integrations/providers/store.test.js +9 -1
- package/dist/integrations/providers/store.test.js.map +1 -1
- package/dist/integrations/trust/store.d.ts +2 -2
- package/dist/integrations/trust/store.js +2 -2
- package/dist/memory/store.d.ts +1 -1
- package/dist/memory/store.js +1 -1
- package/dist/output/rendered-payload.test.d.ts +2 -0
- package/dist/output/rendered-payload.test.d.ts.map +1 -0
- package/dist/output/rendered-payload.test.js +61 -0
- package/dist/output/rendered-payload.test.js.map +1 -0
- package/dist/output/text.js +14 -0
- package/dist/output/text.js.map +1 -1
- package/dist/tui/App.js +4 -2
- package/dist/tui/App.js.map +1 -1
- package/dist/tui/Markdown.d.ts +2 -1
- package/dist/tui/Markdown.d.ts.map +1 -1
- package/dist/tui/Markdown.js +2 -1
- package/dist/tui/Markdown.js.map +1 -1
- package/dist/tui/Transcript.js +3 -2
- package/dist/tui/Transcript.js.map +1 -1
- package/dist/tui/TrustPrompt.d.ts +1 -1
- package/dist/tui/TrustPrompt.js +1 -1
- package/dist/tui/agent.d.ts +1 -1
- package/dist/tui/agent.d.ts.map +1 -1
- package/dist/tui/agent.js +46 -17
- package/dist/tui/agent.js.map +1 -1
- package/dist/tui/index.js +1 -1
- package/dist/tui/index.js.map +1 -1
- package/dist/tui/mentions.d.ts +2 -2
- package/dist/tui/mentions.js +2 -2
- package/dist/tui/theme.d.ts +4 -3
- package/dist/tui/theme.d.ts.map +1 -1
- package/dist/tui/theme.js +4 -3
- package/dist/tui/theme.js.map +1 -1
- package/package.json +7 -7
|
@@ -1,41 +1,75 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
1
|
+
import { LocalSandboxProvider, SANDBOX_ISOLATION_CONTROLS, isolationOf } from '@namzu/sdk';
|
|
2
|
+
/**
|
|
3
|
+
* Report the confinement this host will ACTUALLY give, by asking the
|
|
4
|
+
* thing that decides.
|
|
5
|
+
*
|
|
6
|
+
* The check used to switch on `process.platform` and answer from a table
|
|
7
|
+
* written beside it. That table drifted from the runtime in both
|
|
8
|
+
* directions: it called the Linux probe unimplemented when the provider
|
|
9
|
+
* has probed real `unshare` flags for some time, and it told a Windows
|
|
10
|
+
* operator that sandboxing "is not supported" full stop — true of the
|
|
11
|
+
* in-process tier, and silent about the container tier that does run
|
|
12
|
+
* there. An operator reading a health check is deciding whether to trust
|
|
13
|
+
* the boundary, and a second opinion derived from the OS name is the
|
|
14
|
+
* wrong thing to hand them.
|
|
15
|
+
*
|
|
16
|
+
* Constructing the provider is the probe: it runs the real spawn
|
|
17
|
+
* arguments and reports which controls survived. No isolation is
|
|
18
|
+
* REQUIRED here, so the construction cannot refuse — this asks what is
|
|
19
|
+
* available, it does not ask for anything.
|
|
20
|
+
*/
|
|
21
|
+
/** A logger that says nothing: the check reports, the probe should not. */
|
|
22
|
+
const quietLogger = (() => {
|
|
23
|
+
const noop = () => { };
|
|
24
|
+
const self = { info: noop, warn: noop, error: noop, debug: noop };
|
|
25
|
+
return { ...self, child: () => self };
|
|
26
|
+
})();
|
|
27
|
+
const listControls = (report, want) => SANDBOX_ISOLATION_CONTROLS.filter((control) => report[control] === want).join(', ');
|
|
28
|
+
/**
|
|
29
|
+
* Turn a detected environment into the verdict an operator reads.
|
|
30
|
+
*
|
|
31
|
+
* Separate from the probe because the probe answers for THIS host, and
|
|
32
|
+
* every branch below is about a host the machine running the tests is
|
|
33
|
+
* not. Asserting on the check as a whole can only ever exercise the one
|
|
34
|
+
* outcome the developer's own machine produces, which is how a report
|
|
35
|
+
* for the other tiers rots unnoticed.
|
|
36
|
+
*/
|
|
37
|
+
export function describeIsolationHealth(environment) {
|
|
38
|
+
const report = isolationOf(environment);
|
|
39
|
+
const enforced = listControls(report, true);
|
|
40
|
+
const missing = listControls(report, false);
|
|
41
|
+
if (missing.length === 0) {
|
|
42
|
+
return { status: 'pass', message: `${environment} enforces ${enforced}` };
|
|
43
|
+
}
|
|
44
|
+
if (enforced.length === 0) {
|
|
45
|
+
// Not `fail`: nothing is broken. The host simply has no in-process
|
|
46
|
+
// confinement, which is a fact an operator has to decide about
|
|
47
|
+
// rather than an error to fix.
|
|
48
|
+
return {
|
|
49
|
+
status: 'warn',
|
|
50
|
+
message: `${environment} enforces nothing — commands run unconfined`,
|
|
51
|
+
remediation: 'Run the agent inside a container per task (@namzu/sandbox, container tier), or pass requireIsolation so a run refuses rather than proceeding unconfined.',
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
return {
|
|
55
|
+
status: 'warn',
|
|
56
|
+
message: `${environment} enforces ${enforced} but not ${missing}`,
|
|
57
|
+
remediation: 'Pass requireIsolation with the controls you depend on, so a host that cannot enforce one refuses instead of downgrading quietly.',
|
|
58
|
+
};
|
|
59
|
+
}
|
|
3
60
|
export const sandboxPlatformCheck = {
|
|
4
61
|
id: 'sandbox.platform',
|
|
5
62
|
category: 'sandbox',
|
|
6
63
|
run: async () => {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
}
|
|
17
|
-
catch {
|
|
18
|
-
return {
|
|
19
|
-
status: 'fail',
|
|
20
|
-
message: `darwin / ${DARWIN_SANDBOX_EXEC} not executable`,
|
|
21
|
-
remediation: 'macOS sandboxing requires sandbox-exec; check system integrity.',
|
|
22
|
-
};
|
|
23
|
-
}
|
|
24
|
-
case 'linux':
|
|
25
|
-
return {
|
|
26
|
-
status: 'inconclusive',
|
|
27
|
-
message: 'linux sandbox capability probe (unshare + namespaces) not implemented in v1; register a custom check via registerDoctorCheck if you need it',
|
|
28
|
-
};
|
|
29
|
-
case 'win32':
|
|
30
|
-
return {
|
|
31
|
-
status: 'warn',
|
|
32
|
-
message: 'windows sandbox is not supported by @namzu/sdk today',
|
|
33
|
-
};
|
|
34
|
-
default:
|
|
35
|
-
return {
|
|
36
|
-
status: 'inconclusive',
|
|
37
|
-
message: `unrecognized platform "${platform}"`,
|
|
38
|
-
};
|
|
64
|
+
try {
|
|
65
|
+
return describeIsolationHealth(new LocalSandboxProvider(quietLogger).environment);
|
|
66
|
+
}
|
|
67
|
+
catch (error) {
|
|
68
|
+
return {
|
|
69
|
+
status: 'fail',
|
|
70
|
+
message: `sandbox probe failed: ${error instanceof Error ? error.message : String(error)}`,
|
|
71
|
+
remediation: 'The local sandbox provider could not determine what this host enforces. Treat commands as unconfined until this is resolved.',
|
|
72
|
+
};
|
|
39
73
|
}
|
|
40
74
|
},
|
|
41
75
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sandbox.js","sourceRoot":"","sources":["../../../src/doctor/checks/sandbox.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"sandbox.js","sourceRoot":"","sources":["../../../src/doctor/checks/sandbox.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,oBAAoB,EAAE,0BAA0B,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAE1F;;;;;;;;;;;;;;;;;;GAkBG;AAEH,2EAA2E;AAC3E,MAAM,WAAW,GAAG,CAAC,GAAG,EAAE;IACzB,MAAM,IAAI,GAAG,GAAG,EAAE,GAAE,CAAC,CAAA;IACrB,MAAM,IAAI,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAA;IACjE,OAAO,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,IAAI,EAAuB,CAAA;AAC3D,CAAC,CAAC,EAAE,CAAA;AAEJ,MAAM,YAAY,GAAG,CAAC,MAAgD,EAAE,IAAa,EAAE,EAAE,CACxF,0BAA0B,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AAEpF;;;;;;;;GAQG;AACH,MAAM,UAAU,uBAAuB,CAAC,WAA+B;IACtE,MAAM,MAAM,GAAG,WAAW,CAAC,WAAW,CAAC,CAAA;IACvC,MAAM,QAAQ,GAAG,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;IAC3C,MAAM,OAAO,GAAG,YAAY,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;IAE3C,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,WAAW,aAAa,QAAQ,EAAE,EAAE,CAAA;IAC1E,CAAC;IAED,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3B,mEAAmE;QACnE,+DAA+D;QAC/D,+BAA+B;QAC/B,OAAO;YACN,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,GAAG,WAAW,6CAA6C;YACpE,WAAW,EACV,0JAA0J;SAC3J,CAAA;IACF,CAAC;IAED,OAAO;QACN,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,GAAG,WAAW,aAAa,QAAQ,YAAY,OAAO,EAAE;QACjE,WAAW,EACV,kIAAkI;KACnI,CAAA;AACF,CAAC;AAED,MAAM,CAAC,MAAM,oBAAoB,GAAgB;IAChD,EAAE,EAAE,kBAAkB;IACtB,QAAQ,EAAE,SAAS;IACnB,GAAG,EAAE,KAAK,IAAgC,EAAE;QAC3C,IAAI,CAAC;YACJ,OAAO,uBAAuB,CAAC,IAAI,oBAAoB,CAAC,WAAW,CAAC,CAAC,WAAW,CAAC,CAAA;QAClF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,OAAO;gBACN,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,yBAAyB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;gBAC1F,WAAW,EACV,8HAA8H;aAC/H,CAAA;QACF,CAAC;IACF,CAAC;CACD,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sandbox.test.d.ts","sourceRoot":"","sources":["../../../src/doctor/checks/sandbox.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
import { describeIsolationHealth, sandboxPlatformCheck } from './sandbox.js';
|
|
3
|
+
/**
|
|
4
|
+
* The check used to switch on `process.platform` and answer from a table
|
|
5
|
+
* written beside it, which drifted from the runtime in both directions:
|
|
6
|
+
* it called the Linux probe unimplemented long after the provider began
|
|
7
|
+
* probing real flags, and it told a Windows operator that sandboxing is
|
|
8
|
+
* "not supported" full stop — true of the in-process tier, silent about
|
|
9
|
+
* the container tier that runs there.
|
|
10
|
+
*
|
|
11
|
+
* The verdict is tested apart from the probe on purpose. Driving the
|
|
12
|
+
* whole check can only ever exercise the outcome THIS machine produces,
|
|
13
|
+
* so the branches for the other tiers would rot unnoticed — and did: an
|
|
14
|
+
* earlier version of this file guarded every assertion behind the status
|
|
15
|
+
* it happened to get, which made two of them unreachable here.
|
|
16
|
+
*/
|
|
17
|
+
const verdict = (environment) => describeIsolationHealth(environment);
|
|
18
|
+
describe('the verdict for a host that enforces everything', () => {
|
|
19
|
+
it('passes, and names every control it is claiming', () => {
|
|
20
|
+
const result = verdict('macos-seatbelt');
|
|
21
|
+
expect(result.status).toBe('pass');
|
|
22
|
+
expect(result.message).toBe('macos-seatbelt enforces filesystem, network, process');
|
|
23
|
+
});
|
|
24
|
+
});
|
|
25
|
+
describe('the verdict for a host that enforces some of it', () => {
|
|
26
|
+
it('warns rather than passing', () => {
|
|
27
|
+
// The run that depended on the missing control is the one that gets
|
|
28
|
+
// hurt, so a partial boundary is not a whole one.
|
|
29
|
+
expect(verdict('linux-namespace').status).toBe('warn');
|
|
30
|
+
});
|
|
31
|
+
it('names what is missing, not just that something is', () => {
|
|
32
|
+
const result = verdict('linux-namespace');
|
|
33
|
+
expect(result.message).toContain('enforces network, process');
|
|
34
|
+
expect(result.message).toContain('but not filesystem');
|
|
35
|
+
});
|
|
36
|
+
it('says what to do about it', () => {
|
|
37
|
+
expect(verdict('linux-namespace').remediation).toContain('requireIsolation');
|
|
38
|
+
});
|
|
39
|
+
});
|
|
40
|
+
describe('the verdict for a host that enforces nothing', () => {
|
|
41
|
+
it('warns and says so plainly', () => {
|
|
42
|
+
const result = verdict('basic');
|
|
43
|
+
expect(result.status).toBe('warn');
|
|
44
|
+
expect(result.message).toContain('enforces nothing');
|
|
45
|
+
expect(result.message).toContain('unconfined');
|
|
46
|
+
});
|
|
47
|
+
it('points at the boundary that does work there', () => {
|
|
48
|
+
// "Not supported", with nowhere to go, is what this replaced.
|
|
49
|
+
expect(verdict('basic').remediation).toContain('container');
|
|
50
|
+
});
|
|
51
|
+
});
|
|
52
|
+
describe('the check itself', () => {
|
|
53
|
+
it('answers from the provider rather than from the OS name', async () => {
|
|
54
|
+
const result = await sandboxPlatformCheck.run({});
|
|
55
|
+
expect(['pass', 'warn', 'fail']).toContain(result.status);
|
|
56
|
+
expect(result.message).toMatch(/^(basic|linux-namespace|macos-seatbelt|sandbox probe failed)/);
|
|
57
|
+
});
|
|
58
|
+
});
|
|
59
|
+
//# sourceMappingURL=sandbox.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sandbox.test.js","sourceRoot":"","sources":["../../../src/doctor/checks/sandbox.test.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAE7C,OAAO,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAA;AAE5E;;;;;;;;;;;;;GAaG;AAEH,MAAM,OAAO,GAAG,CAAC,WAA+B,EAAE,EAAE,CAAC,uBAAuB,CAAC,WAAW,CAAC,CAAA;AAEzF,QAAQ,CAAC,iDAAiD,EAAE,GAAG,EAAE;IAChE,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;QACzD,MAAM,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAA;QAExC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QAClC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,sDAAsD,CAAC,CAAA;IACpF,CAAC,CAAC,CAAA;AACH,CAAC,CAAC,CAAA;AAEF,QAAQ,CAAC,iDAAiD,EAAE,GAAG,EAAE;IAChE,EAAE,CAAC,2BAA2B,EAAE,GAAG,EAAE;QACpC,oEAAoE;QACpE,kDAAkD;QAClD,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IACvD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;QAC5D,MAAM,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAA;QAEzC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,2BAA2B,CAAC,CAAA;QAC7D,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAA;IACvD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,0BAA0B,EAAE,GAAG,EAAE;QACnC,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAA;IAC7E,CAAC,CAAC,CAAA;AACH,CAAC,CAAC,CAAA;AAEF,QAAQ,CAAC,8CAA8C,EAAE,GAAG,EAAE;IAC7D,EAAE,CAAC,2BAA2B,EAAE,GAAG,EAAE;QACpC,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;QAE/B,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QAClC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAA;QACpD,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,CAAA;IAC/C,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACtD,8DAA8D;QAC9D,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,CAAA;IAC5D,CAAC,CAAC,CAAA;AACH,CAAC,CAAC,CAAA;AAEF,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IACjC,EAAE,CAAC,wDAAwD,EAAE,KAAK,IAAI,EAAE;QACvE,MAAM,MAAM,GAAG,MAAM,oBAAoB,CAAC,GAAG,CAAC,EAAW,CAAC,CAAA;QAE1D,MAAM,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;QACzD,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,8DAA8D,CAAC,CAAA;IAC/F,CAAC,CAAC,CAAA;AACH,CAAC,CAAC,CAAA"}
|
package/dist/exit-codes.d.ts
CHANGED
|
@@ -6,11 +6,17 @@
|
|
|
6
6
|
* 1 EXIT_FAIL — one or more checks reported `fail`
|
|
7
7
|
* 2 EXIT_NO_CONFIG — Namzu is not configured in this environment
|
|
8
8
|
* (no checks registered, no config file found)
|
|
9
|
+
* 64 EXIT_USAGE — sysexits EX_USAGE; the caller's arguments are
|
|
10
|
+
* wrong. Distinct from 70 on purpose: 70 says the
|
|
11
|
+
* CLI is broken and is worth a bug report, 64 says
|
|
12
|
+
* the invocation is, and reporting one as the other
|
|
13
|
+
* sends the reader looking in the wrong place.
|
|
9
14
|
* 70 EXIT_INTERNAL_ERROR — sysexits EX_SOFTWARE; internal CLI error
|
|
10
15
|
*/
|
|
11
16
|
export declare const EXIT_OK = 0;
|
|
12
17
|
export declare const EXIT_FAIL = 1;
|
|
13
18
|
export declare const EXIT_NO_CONFIG = 2;
|
|
19
|
+
export declare const EXIT_USAGE = 64;
|
|
14
20
|
export declare const EXIT_INTERNAL_ERROR = 70;
|
|
15
|
-
export type CliExitCode = typeof EXIT_OK | typeof EXIT_FAIL | typeof EXIT_NO_CONFIG | typeof EXIT_INTERNAL_ERROR;
|
|
21
|
+
export type CliExitCode = typeof EXIT_OK | typeof EXIT_FAIL | typeof EXIT_NO_CONFIG | typeof EXIT_USAGE | typeof EXIT_INTERNAL_ERROR;
|
|
16
22
|
//# sourceMappingURL=exit-codes.d.ts.map
|
package/dist/exit-codes.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exit-codes.d.ts","sourceRoot":"","sources":["../src/exit-codes.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"exit-codes.d.ts","sourceRoot":"","sources":["../src/exit-codes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,OAAO,IAAI,CAAA;AACxB,eAAO,MAAM,SAAS,IAAI,CAAA;AAC1B,eAAO,MAAM,cAAc,IAAI,CAAA;AAC/B,eAAO,MAAM,UAAU,KAAK,CAAA;AAC5B,eAAO,MAAM,mBAAmB,KAAK,CAAA;AAErC,MAAM,MAAM,WAAW,GACpB,OAAO,OAAO,GACd,OAAO,SAAS,GAChB,OAAO,cAAc,GACrB,OAAO,UAAU,GACjB,OAAO,mBAAmB,CAAA"}
|
package/dist/exit-codes.js
CHANGED
|
@@ -6,10 +6,16 @@
|
|
|
6
6
|
* 1 EXIT_FAIL — one or more checks reported `fail`
|
|
7
7
|
* 2 EXIT_NO_CONFIG — Namzu is not configured in this environment
|
|
8
8
|
* (no checks registered, no config file found)
|
|
9
|
+
* 64 EXIT_USAGE — sysexits EX_USAGE; the caller's arguments are
|
|
10
|
+
* wrong. Distinct from 70 on purpose: 70 says the
|
|
11
|
+
* CLI is broken and is worth a bug report, 64 says
|
|
12
|
+
* the invocation is, and reporting one as the other
|
|
13
|
+
* sends the reader looking in the wrong place.
|
|
9
14
|
* 70 EXIT_INTERNAL_ERROR — sysexits EX_SOFTWARE; internal CLI error
|
|
10
15
|
*/
|
|
11
16
|
export const EXIT_OK = 0;
|
|
12
17
|
export const EXIT_FAIL = 1;
|
|
13
18
|
export const EXIT_NO_CONFIG = 2;
|
|
19
|
+
export const EXIT_USAGE = 64;
|
|
14
20
|
export const EXIT_INTERNAL_ERROR = 70;
|
|
15
21
|
//# sourceMappingURL=exit-codes.js.map
|
package/dist/exit-codes.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exit-codes.js","sourceRoot":"","sources":["../src/exit-codes.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"exit-codes.js","sourceRoot":"","sources":["../src/exit-codes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,CAAA;AACxB,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,CAAA;AAC1B,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAA;AAC/B,MAAM,CAAC,MAAM,UAAU,GAAG,EAAE,CAAA;AAC5B,MAAM,CAAC,MAAM,mBAAmB,GAAG,EAAE,CAAA"}
|
|
@@ -3,6 +3,14 @@ import { tmpdir } from 'node:os';
|
|
|
3
3
|
import { delimiter, join } from 'node:path';
|
|
4
4
|
import { describe, expect, it } from 'vitest';
|
|
5
5
|
import { ClawtoolBinaryError, findBinary } from './binary.js';
|
|
6
|
+
/**
|
|
7
|
+
* POSIX file modes do not exist on Windows: `chmod` is a no-op there and
|
|
8
|
+
* `fs.stat().mode` reports a fixed value, so these cases assert a
|
|
9
|
+
* permission the platform cannot enforce. Skipping keeps the suite
|
|
10
|
+
* meaningful on Windows instead of permanently red — the behavior itself
|
|
11
|
+
* is still covered on Linux and macOS, where it actually matters.
|
|
12
|
+
*/
|
|
13
|
+
const IS_WINDOWS = process.platform === 'win32';
|
|
6
14
|
function execBin(dir, name) {
|
|
7
15
|
const path = join(dir, name);
|
|
8
16
|
writeFileSync(path, '#!/bin/sh\nexit 0\n');
|
|
@@ -15,7 +23,7 @@ describe('findBinary', () => {
|
|
|
15
23
|
const path = execBin(dir, 'clawtool');
|
|
16
24
|
expect(findBinary({ override: path })).toBe(path);
|
|
17
25
|
});
|
|
18
|
-
it('throws when the override is not executable', () => {
|
|
26
|
+
it.skipIf(IS_WINDOWS)('throws when the override is not executable', () => {
|
|
19
27
|
const dir = mkdtempSync(join(tmpdir(), 'namzu-bin-'));
|
|
20
28
|
const path = join(dir, 'clawtool');
|
|
21
29
|
writeFileSync(path, '#!/bin/sh\nexit 0\n');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"binary.test.js","sourceRoot":"","sources":["../../../src/integrations/clawtool/binary.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAC/D,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AAChC,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAE7C,OAAO,EAAE,mBAAmB,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAE7D,SAAS,OAAO,CAAC,GAAW,EAAE,IAAY;IACzC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;IAC5B,aAAa,CAAC,IAAI,EAAE,qBAAqB,CAAC,CAAA;IAC1C,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;IACtB,OAAO,IAAI,CAAA;AACZ,CAAC;AAED,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;IAC3B,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACrD,MAAM,GAAG,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,YAAY,CAAC,CAAC,CAAA;QACrD,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,EAAE,UAAU,CAAC,CAAA;QACrC,MAAM,CAAC,UAAU,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAClD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;
|
|
1
|
+
{"version":3,"file":"binary.test.js","sourceRoot":"","sources":["../../../src/integrations/clawtool/binary.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAC/D,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AAChC,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAE7C,OAAO,EAAE,mBAAmB,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAE7D;;;;;;GAMG;AACH,MAAM,UAAU,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAA;AAE/C,SAAS,OAAO,CAAC,GAAW,EAAE,IAAY;IACzC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;IAC5B,aAAa,CAAC,IAAI,EAAE,qBAAqB,CAAC,CAAA;IAC1C,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;IACtB,OAAO,IAAI,CAAA;AACZ,CAAC;AAED,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;IAC3B,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACrD,MAAM,GAAG,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,YAAY,CAAC,CAAC,CAAA;QACrD,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,EAAE,UAAU,CAAC,CAAA;QACrC,MAAM,CAAC,UAAU,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAClD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACxE,MAAM,GAAG,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,YAAY,CAAC,CAAC,CAAA;QACrD,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,CAAA;QAClC,aAAa,CAAC,IAAI,EAAE,qBAAqB,CAAC,CAAA;QAC1C,cAAc;QACd,MAAM,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAA;IAC1E,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QACnD,MAAM,GAAG,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,YAAY,CAAC,CAAC,CAAA;QACrD,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,EAAE,UAAU,CAAC,CAAA;QACrC,MAAM,QAAQ,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,kBAAkB,CAAC,CAAC,CAAA;QAChE,MAAM,MAAM,GAAG,UAAU,CAAC,EAAE,IAAI,EAAE,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAA;QACpE,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAC1B,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,+DAA+D,EAAE,GAAG,EAAE;QACxE,MAAM,QAAQ,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,kBAAkB,CAAC,CAAC,CAAA;QAChE,MAAM,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,2BAA2B,CAAC,CAAA;IACvF,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QACjD,MAAM,GAAG,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,YAAY,CAAC,CAAC,CAAA;QACrD,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,EAAE,cAAc,CAAC,CAAA;QACzC,MAAM,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACnE,CAAC,CAAC,CAAA;AACH,CAAC,CAAC,CAAA"}
|
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
* upstream CLI's exact wire format.
|
|
6
6
|
*
|
|
7
7
|
* The clawtool server passes through the upstream agent's NDJSON frames
|
|
8
|
-
* verbatim
|
|
9
|
-
*
|
|
8
|
+
* verbatim, and each upstream family emits a different shape. We do
|
|
9
|
+
* **best-effort normalization**: extract any `text` /
|
|
10
10
|
* `content` string fields as visible deltas; collapse `error` lines into
|
|
11
11
|
* error events; everything else (tool_use, tool_result, ping, message
|
|
12
12
|
* envelopes) is silently consumed for now — tool-call surfacing lands
|
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
* upstream CLI's exact wire format.
|
|
6
6
|
*
|
|
7
7
|
* The clawtool server passes through the upstream agent's NDJSON frames
|
|
8
|
-
* verbatim
|
|
9
|
-
*
|
|
8
|
+
* verbatim, and each upstream family emits a different shape. We do
|
|
9
|
+
* **best-effort normalization**: extract any `text` /
|
|
10
10
|
* `content` string fields as visible deltas; collapse `error` lines into
|
|
11
11
|
* error events; everything else (tool_use, tool_result, ping, message
|
|
12
12
|
* envelopes) is silently consumed for now — tool-call surfacing lands
|
|
@@ -135,7 +135,7 @@ function extractText(frame) {
|
|
|
135
135
|
return frame.text;
|
|
136
136
|
if (typeof frame.content === 'string')
|
|
137
137
|
return frame.content;
|
|
138
|
-
//
|
|
138
|
+
// Block-delta shape: { type: 'content_block_delta', delta: { text: '...' } }
|
|
139
139
|
if (frame.delta && typeof frame.delta === 'object') {
|
|
140
140
|
const delta = frame.delta;
|
|
141
141
|
if (typeof delta.text === 'string')
|
|
@@ -143,7 +143,7 @@ function extractText(frame) {
|
|
|
143
143
|
if (typeof delta.content === 'string')
|
|
144
144
|
return delta.content;
|
|
145
145
|
}
|
|
146
|
-
//
|
|
146
|
+
// Choice-delta shape: { choices: [{ delta: { content: '...' } }] }
|
|
147
147
|
const choices = frame.choices;
|
|
148
148
|
if (Array.isArray(choices) && choices[0]?.delta?.content) {
|
|
149
149
|
const v = choices[0].delta.content;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dispatch.js","sourceRoot":"","sources":["../../../src/integrations/clawtool/dispatch.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"dispatch.js","sourceRoot":"","sources":["../../../src/integrations/clawtool/dispatch.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../../../src/integrations/clawtool/mcp.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../../../src/integrations/clawtool/mcp.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAKlE,eAAO,MAAM,oBAAoB,eAAe,CAAA;AAEhD,qBAAa,gBAAiB,SAAQ,KAAK;IAGzC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM;gBADtB,OAAO,EAAE,MAAM,EACN,IAAI,CAAC,EAAE,MAAM,YAAA;CAKvB;AAED,MAAM,WAAW,gBAAgB;IAChC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,UAAU,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAA;IACvD,kCAAkC;IAClC,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,KAAK,CAAA;IAC7B,8CAA8C;IAC9C,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAC3B;AAsBD,qBAAa,iBAAiB;IAOjB,OAAO,CAAC,QAAQ,CAAC,IAAI;IANjC,OAAO,CAAC,EAAE,CAAI;IACd,OAAO,CAAC,WAAW,CAAQ;IAC3B,OAAO,CAAC,SAAS,CAAsB;IACvC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAc;IACtC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAQ;gBAEL,IAAI,EAAE,gBAAgB;IAK7C,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAa3B,SAAS,IAAI,OAAO,CAAC,iBAAiB,EAAE,CAAC;IA2BzC,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,aAAa,CAAC;YAKrE,GAAG;YAqCH,MAAM;IAWpB,OAAO,CAAC,gBAAgB;IAUxB,OAAO,CAAC,OAAO;YAoBD,YAAY;CAQ1B"}
|
|
@@ -13,6 +13,8 @@
|
|
|
13
13
|
* read fully before resolving (clawtool's current handlers return a
|
|
14
14
|
* single event per call).
|
|
15
15
|
*/
|
|
16
|
+
/** Runaway guard for a server whose cursor never ends. */
|
|
17
|
+
const MAX_LIST_PAGES = 100;
|
|
16
18
|
export const MCP_PROTOCOL_VERSION = '2024-11-05';
|
|
17
19
|
export class McpProtocolError extends Error {
|
|
18
20
|
code;
|
|
@@ -49,8 +51,24 @@ export class ClawtoolMcpClient {
|
|
|
49
51
|
}
|
|
50
52
|
async listTools() {
|
|
51
53
|
await this.initialize();
|
|
52
|
-
|
|
53
|
-
|
|
54
|
+
// Paged to the end. Sending no cursor and ignoring the one that
|
|
55
|
+
// comes back returns only the first page, so a server that pages
|
|
56
|
+
// its catalogue contributes part of it and nothing says so — the
|
|
57
|
+
// symptom is a model that never uses a tool it was told about.
|
|
58
|
+
const tools = [];
|
|
59
|
+
let cursor;
|
|
60
|
+
for (let page = 1;; page++) {
|
|
61
|
+
const result = await this.rpc('tools/list', cursor === undefined ? {} : { cursor });
|
|
62
|
+
if (Array.isArray(result.tools))
|
|
63
|
+
tools.push(...result.tools);
|
|
64
|
+
const next = result.nextCursor;
|
|
65
|
+
if (typeof next !== 'string' || next.length === 0)
|
|
66
|
+
return tools;
|
|
67
|
+
if (page >= MAX_LIST_PAGES) {
|
|
68
|
+
throw new Error(`tools/list did not stop paging after ${MAX_LIST_PAGES} pages (${tools.length} tools so far).`);
|
|
69
|
+
}
|
|
70
|
+
cursor = next;
|
|
71
|
+
}
|
|
54
72
|
}
|
|
55
73
|
async callTool(name, args) {
|
|
56
74
|
await this.initialize();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../../src/integrations/clawtool/mcp.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAIH,MAAM,CAAC,MAAM,oBAAoB,GAAG,YAAY,CAAA;AAEhD,MAAM,OAAO,gBAAiB,SAAQ,KAAK;IAGhC;IAFV,YACC,OAAe,EACN,IAAa;QAEtB,KAAK,CAAC,OAAO,CAAC,CAAA;QAFL,SAAI,GAAJ,IAAI,CAAS;QAGtB,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAA;IAC/B,CAAC;CACD;
|
|
1
|
+
{"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../../src/integrations/clawtool/mcp.ts"],"names":[],"mappings":"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"}
|
|
@@ -18,12 +18,14 @@ import type { ClawtoolProxyTool } from './plugin.js';
|
|
|
18
18
|
/** Bridged clawtool tools are namespaced under this prefix. */
|
|
19
19
|
export declare const CLAWTOOL_TOOL_PREFIX = "clawtool_";
|
|
20
20
|
/**
|
|
21
|
-
* clawtool tools namzu never bridges (bare lowercased names).
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
21
|
+
* clawtool tools namzu never bridges (bare lowercased names).
|
|
22
|
+
*
|
|
23
|
+
* The `Agent*` family is clawtool's on-disk persona manager. It writes
|
|
24
|
+
* agent definitions into a third-party tool's configuration directory —
|
|
25
|
+
* a mechanism namzu neither owns nor reads, and one that is redundant with
|
|
26
|
+
* (and confusing alongside) namzu's own in-memory dynamic sub-agents.
|
|
27
|
+
* namzu defines and dispatches sub-agents natively, so these are dropped
|
|
28
|
+
* before they reach the model.
|
|
27
29
|
*/
|
|
28
30
|
export declare const EXCLUDED_CLAWTOOL_TOOLS: Set<string>;
|
|
29
31
|
/** Whether a bridged clawtool tool (by its bare name) is excluded from namzu. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tooling.d.ts","sourceRoot":"","sources":["../../../src/integrations/clawtool/tooling.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EACN,KAAK,cAAc,EAInB,MAAM,YAAY,CAAA;AAEnB,OAAO,EAAE,KAAK,2BAA2B,EAAwB,MAAM,aAAa,CAAA;AACpF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAIpD,+DAA+D;AAC/D,eAAO,MAAM,oBAAoB,cAAc,CAAA;AAE/C
|
|
1
|
+
{"version":3,"file":"tooling.d.ts","sourceRoot":"","sources":["../../../src/integrations/clawtool/tooling.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EACN,KAAK,cAAc,EAInB,MAAM,YAAY,CAAA;AAEnB,OAAO,EAAE,KAAK,2BAA2B,EAAwB,MAAM,aAAa,CAAA;AACpF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAIpD,+DAA+D;AAC/D,eAAO,MAAM,oBAAoB,cAAc,CAAA;AAE/C;;;;;;;;;GASG;AACH,eAAO,MAAM,uBAAuB,aAAoD,CAAA;AAExF,iFAAiF;AACjF,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEhE;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,iBAAiB,GAAG,cAAc,CAkBjF;AAED,MAAM,WAAW,wBAAyB,SAAQ,2BAA2B;IAC5E,oFAAoF;IACpF,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IACtC,oEAAoE;IACpE,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAC3B;AAED;;;;GAIG;AACH,wBAAsB,2BAA2B,CAChD,IAAI,GAAE,wBAA6B,GACjC,OAAO,CAAC,cAAc,EAAE,CAAC,CAc3B"}
|
|
@@ -18,12 +18,14 @@ const DEFAULT_LOAD_TIMEOUT_MS = 5_000;
|
|
|
18
18
|
/** Bridged clawtool tools are namespaced under this prefix. */
|
|
19
19
|
export const CLAWTOOL_TOOL_PREFIX = 'clawtool_';
|
|
20
20
|
/**
|
|
21
|
-
* clawtool tools namzu never bridges (bare lowercased names).
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
21
|
+
* clawtool tools namzu never bridges (bare lowercased names).
|
|
22
|
+
*
|
|
23
|
+
* The `Agent*` family is clawtool's on-disk persona manager. It writes
|
|
24
|
+
* agent definitions into a third-party tool's configuration directory —
|
|
25
|
+
* a mechanism namzu neither owns nor reads, and one that is redundant with
|
|
26
|
+
* (and confusing alongside) namzu's own in-memory dynamic sub-agents.
|
|
27
|
+
* namzu defines and dispatches sub-agents natively, so these are dropped
|
|
28
|
+
* before they reach the model.
|
|
27
29
|
*/
|
|
28
30
|
export const EXCLUDED_CLAWTOOL_TOOLS = new Set(['agentnew', 'agentlist', 'agentdetect']);
|
|
29
31
|
/** Whether a bridged clawtool tool (by its bare name) is excluded from namzu. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tooling.js","sourceRoot":"","sources":["../../../src/integrations/clawtool/tooling.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAEN,UAAU,EACV,kBAAkB,EAClB,yBAAyB,GACzB,MAAM,YAAY,CAAA;AAEnB,OAAO,EAAoC,oBAAoB,EAAE,MAAM,aAAa,CAAA;AAGpF,MAAM,uBAAuB,GAAG,KAAK,CAAA;AAErC,+DAA+D;AAC/D,MAAM,CAAC,MAAM,oBAAoB,GAAG,WAAW,CAAA;AAE/C
|
|
1
|
+
{"version":3,"file":"tooling.js","sourceRoot":"","sources":["../../../src/integrations/clawtool/tooling.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,7 +7,6 @@
|
|
|
7
7
|
* `xclip` then `wl-paste`; Windows uses PowerShell. Non-throwing — any
|
|
8
8
|
* failure (no image on the clipboard, tool missing) returns `null`.
|
|
9
9
|
*
|
|
10
|
-
* Pattern mirrors Claude Code's `utils/imagePaste.ts` clipboard plumbing.
|
|
11
10
|
*/
|
|
12
11
|
export interface ClipboardImage {
|
|
13
12
|
/** Base64-encoded PNG bytes (no `data:` prefix). */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"image.d.ts","sourceRoot":"","sources":["../../../src/integrations/clipboard/image.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"image.d.ts","sourceRoot":"","sources":["../../../src/integrations/clipboard/image.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAQH,MAAM,WAAW,cAAc;IAC9B,oDAAoD;IACpD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAA;CAC/B;AAID,wBAAgB,kBAAkB,IAAI,cAAc,GAAG,IAAI,CAgB1D"}
|
|
@@ -7,7 +7,6 @@
|
|
|
7
7
|
* `xclip` then `wl-paste`; Windows uses PowerShell. Non-throwing — any
|
|
8
8
|
* failure (no image on the clipboard, tool missing) returns `null`.
|
|
9
9
|
*
|
|
10
|
-
* Pattern mirrors Claude Code's `utils/imagePaste.ts` clipboard plumbing.
|
|
11
10
|
*/
|
|
12
11
|
import { execFileSync } from 'node:child_process';
|
|
13
12
|
import { readFileSync, rmSync } from 'node:fs';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"image.js","sourceRoot":"","sources":["../../../src/integrations/clipboard/image.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"image.js","sourceRoot":"","sources":["../../../src/integrations/clipboard/image.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AAChC,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAQhC,MAAM,UAAU,GAAG,KAAK,CAAA;AAExB,MAAM,UAAU,kBAAkB;IACjC,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,cAAc,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;IAC3D,IAAI,CAAC;QACJ,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAA;QAC5C,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,CAAC,CAAA;QAC9B,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAA;QACjC,OAAO,EAAE,IAAI,EAAE,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,EAAE,WAAW,EAAE,CAAA;IAChE,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,IAAI,CAAA;IACZ,CAAC;YAAS,CAAC;QACV,IAAI,CAAC;YACJ,MAAM,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;QAC9B,CAAC;QAAC,MAAM,CAAC;YACR,sBAAsB;QACvB,CAAC;IACF,CAAC;AACF,CAAC;AAED,gFAAgF;AAChF,SAAS,oBAAoB,CAAC,IAAY;IACzC,MAAM,GAAG,GAAG,CAAC,GAAW,EAAE,IAAc,EAAW,EAAE;QACpD,IAAI,CAAC;YACJ,YAAY,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAA;YACvF,OAAO,IAAI,CAAA;QACZ,CAAC;QAAC,MAAM,CAAC;YACR,OAAO,KAAK,CAAA;QACb,CAAC;IACF,CAAC,CAAA;IACD,MAAM,QAAQ,GAAG,CAAC,MAAc,EAAW,EAAE;QAC5C,IAAI,CAAC;YACJ,YAAY,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE;gBACvC,OAAO,EAAE,UAAU;gBACnB,KAAK,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC;aACrC,CAAC,CAAA;YACF,OAAO,IAAI,CAAA;QACZ,CAAC;QAAC,MAAM,CAAC;YACR,OAAO,KAAK,CAAA;QACb,CAAC;IACF,CAAC,CAAA;IAED,QAAQ,QAAQ,EAAE,EAAE,CAAC;QACpB,KAAK,QAAQ;YACZ,OAAO,GAAG,CAAC,WAAW,EAAE;gBACvB,IAAI;gBACJ,iDAAiD;gBACjD,IAAI;gBACJ,yCAAyC,IAAI,yBAAyB;gBACtE,IAAI;gBACJ,sBAAsB;gBACtB,IAAI;gBACJ,iBAAiB;aACjB,CAAC,CAAA;QACH,KAAK,OAAO;YACX,OAAO,CACN,QAAQ,CAAC,iDAAiD,IAAI,eAAe,CAAC;gBAC9E,QAAQ,CAAC,gCAAgC,IAAI,eAAe,CAAC,CAC7D,CAAA;QACF,KAAK,OAAO;YACX,OAAO,GAAG,CAAC,YAAY,EAAE;gBACxB,YAAY;gBACZ,UAAU;gBACV,8DAA8D,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,iEAAiE;aACvJ,CAAC,CAAA;QACH;YACC,OAAO,KAAK,CAAA;IACd,CAAC;AACF,CAAC"}
|
|
@@ -38,7 +38,7 @@ export interface DetectedProvider {
|
|
|
38
38
|
readonly baseUrl?: string;
|
|
39
39
|
/**
|
|
40
40
|
* OAuth refresh metadata, present only when `apiKey` is an OAuth access
|
|
41
|
-
* token carrying a refresh token + expiry (the
|
|
41
|
+
* token carrying a refresh token + expiry (the Keychain source). Lets
|
|
42
42
|
* the session layer renew a lapsed token instead of failing with a 401.
|
|
43
43
|
*/
|
|
44
44
|
readonly oauth?: {
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
* Discovery is non-throwing. Network probes have short timeouts. The
|
|
14
14
|
* picker can render immediately and refine if discovery completes later.
|
|
15
15
|
*/
|
|
16
|
-
import {
|
|
16
|
+
import { KEYCHAIN_SERVICE, readAgentKeychainCredential } from './keychain.js';
|
|
17
17
|
import { PROVIDER_REGISTRY } from './registry.js';
|
|
18
18
|
import { readClawtoolSecrets } from './secrets.js';
|
|
19
19
|
const DEFAULT_PROBE_TIMEOUT_MS = 500;
|
|
@@ -21,10 +21,10 @@ export async function discoverProviders(opts = {}) {
|
|
|
21
21
|
const env = opts.env ?? process.env;
|
|
22
22
|
const secrets = readClawtoolSecrets(opts.home);
|
|
23
23
|
const detected = [];
|
|
24
|
-
// macOS-only: read
|
|
24
|
+
// macOS-only: read the third-party OAuth credential stored in the login
|
|
25
25
|
// Keychain once. Only anthropic consumes it, but we scan up front so
|
|
26
26
|
// the loop body stays uniform.
|
|
27
|
-
const
|
|
27
|
+
const keychainCredential = opts.skipKeychain ? null : readAgentKeychainCredential();
|
|
28
28
|
for (const id of Object.keys(PROVIDER_REGISTRY)) {
|
|
29
29
|
const entry = PROVIDER_REGISTRY[id];
|
|
30
30
|
const sources = [];
|
|
@@ -45,16 +45,16 @@ export async function discoverProviders(opts = {}) {
|
|
|
45
45
|
sources.push({ kind: 'secrets-toml', envName: cand.envName, scope: cand.scope });
|
|
46
46
|
}
|
|
47
47
|
}
|
|
48
|
-
if (id === 'anthropic' &&
|
|
48
|
+
if (id === 'anthropic' && keychainCredential) {
|
|
49
49
|
if (apiKey === undefined)
|
|
50
|
-
apiKey =
|
|
51
|
-
sources.push({ kind: 'keychain', service:
|
|
50
|
+
apiKey = keychainCredential.accessToken;
|
|
51
|
+
sources.push({ kind: 'keychain', service: KEYCHAIN_SERVICE });
|
|
52
52
|
// Only carry refresh metadata when the Keychain token is the one we'll
|
|
53
53
|
// actually use (an env/secrets token has no refresh path).
|
|
54
|
-
if (apiKey ===
|
|
54
|
+
if (apiKey === keychainCredential.accessToken) {
|
|
55
55
|
oauth = {
|
|
56
|
-
refreshToken:
|
|
57
|
-
expiresAt:
|
|
56
|
+
refreshToken: keychainCredential.refreshToken,
|
|
57
|
+
expiresAt: keychainCredential.expiresAt,
|
|
58
58
|
};
|
|
59
59
|
}
|
|
60
60
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"discover.js","sourceRoot":"","sources":["../../../src/integrations/providers/discover.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"discover.js","sourceRoot":"","sources":["../../../src/integrations/providers/discover.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,gBAAgB,EAAE,2BAA2B,EAAE,MAAM,eAAe,CAAA;AAC7E,OAAO,EAAE,iBAAiB,EAA+C,MAAM,eAAe,CAAA;AAC9F,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAA;AAyClD,MAAM,wBAAwB,GAAG,GAAG,CAAA;AAEpC,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACtC,OAAwB,EAAE;IAE1B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAA;IACnC,MAAM,OAAO,GAAG,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAC9C,MAAM,QAAQ,GAAuB,EAAE,CAAA;IAEvC,wEAAwE;IACxE,qEAAqE;IACrE,+BAA+B;IAC/B,MAAM,kBAAkB,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,2BAA2B,EAAE,CAAA;IAEnF,KAAK,MAAM,EAAE,IAAI,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAA0B,EAAE,CAAC;QAC1E,MAAM,KAAK,GAAG,iBAAiB,CAAC,EAAE,CAAC,CAAA;QACnC,MAAM,OAAO,GAAsB,EAAE,CAAA;QACrC,IAAI,MAA0B,CAAA;QAC9B,IAAI,KAAgC,CAAA;QACpC,KAAK,MAAM,OAAO,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YACrC,MAAM,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,CAAA;YACtB,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACvB,IAAI,MAAM,KAAK,SAAS;oBAAE,MAAM,GAAG,CAAC,CAAA;gBACpC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAA;YACvC,CAAC;QACF,CAAC;QACD,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;YAC5B,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC1C,IAAI,MAAM,KAAK,SAAS;oBAAE,MAAM,GAAG,IAAI,CAAC,KAAK,CAAA;gBAC7C,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAA;YACjF,CAAC;QACF,CAAC;QACD,IAAI,EAAE,KAAK,WAAW,IAAI,kBAAkB,EAAE,CAAC;YAC9C,IAAI,MAAM,KAAK,SAAS;gBAAE,MAAM,GAAG,kBAAkB,CAAC,WAAW,CAAA;YACjE,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,gBAAgB,EAAE,CAAC,CAAA;YAC7D,uEAAuE;YACvE,2DAA2D;YAC3D,IAAI,MAAM,KAAK,kBAAkB,CAAC,WAAW,EAAE,CAAC;gBAC/C,KAAK,GAAG;oBACP,YAAY,EAAE,kBAAkB,CAAC,YAAY;oBAC7C,SAAS,EAAE,kBAAkB,CAAC,SAAS;iBACvC,CAAA;YACF,CAAC;QACF,CAAC;QACD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YAChE,MAAM,SAAS,GAAG,MAAM,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAA;YACnD,IAAI,SAAS,EAAE,CAAC;gBACf,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAA;YACrD,CAAC;QACF,CAAC;QACD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,QAAQ,CAAC,IAAI,CAAC;gBACb,KAAK;gBACL,MAAM,EAAE,OAAO,CAAC,CAAC,CAAoB;gBACrC,MAAM;gBACN,OAAO,EAAE,KAAK,CAAC,cAAc;gBAC7B,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC3B,YAAY,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;aAC9B,CAAC,CAAA;YACF,SAAQ;QACT,CAAC;QACD,oEAAoE;QACpE,kEAAkE;QAClE,mEAAmE;QACnE,kCAAkC;QAClC,IAAI,CAAC,KAAK,CAAC,cAAc,IAAI,KAAK,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,UAAU,KAAK,KAAK,EAAE,CAAC;YAC3E,sEAAsE;YACtE,mEAAmE;QACpE,CAAC;IACF,CAAC;IACD,OAAO,QAAQ,CAAA;AAChB,CAAC;AAED,KAAK,UAAU,KAAK,CAAC,GAAW,EAAE,IAAqB;IACtD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,IAAI,UAAU,CAAC,KAAK,CAAA;IAC9C,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAA;IACxC,MAAM,KAAK,GAAG,UAAU,CACvB,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EACxB,IAAI,CAAC,cAAc,IAAI,wBAAwB,CAC/C,CAAA;IACD,IAAI,CAAC;QACJ,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,CAAC,CAAA;QAC5E,OAAO,GAAG,CAAC,EAAE,CAAA;IACd,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,KAAK,CAAA;IACb,CAAC;YAAS,CAAC;QACV,YAAY,CAAC,KAAK,CAAC,CAAA;IACpB,CAAC;AACF,CAAC;AAED,yEAAyE;AACzE,MAAM,UAAU,YAAY,CAC3B,IAAiC,EACjC,EAAc;IAEd,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,CAAC,IAAI,IAAI,CAAA;AACnD,CAAC"}
|