@moxxy/plugin-provider-acp 0.0.0-stage → 0.46.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 (74) hide show
  1. package/LICENSE +21 -0
  2. package/dist/acp-session.d.ts +201 -0
  3. package/dist/acp-session.d.ts.map +1 -0
  4. package/dist/acp-session.js +812 -0
  5. package/dist/acp-session.js.map +1 -0
  6. package/dist/agent-provider.d.ts +71 -0
  7. package/dist/agent-provider.d.ts.map +1 -0
  8. package/dist/agent-provider.js +203 -0
  9. package/dist/agent-provider.js.map +1 -0
  10. package/dist/agents.d.ts +23 -0
  11. package/dist/agents.d.ts.map +1 -0
  12. package/dist/agents.js +21 -0
  13. package/dist/agents.js.map +1 -0
  14. package/dist/constants.d.ts +31 -0
  15. package/dist/constants.d.ts.map +1 -0
  16. package/dist/constants.js +31 -0
  17. package/dist/constants.js.map +1 -0
  18. package/dist/executable.d.ts +47 -0
  19. package/dist/executable.d.ts.map +1 -0
  20. package/dist/executable.js +106 -0
  21. package/dist/executable.js.map +1 -0
  22. package/dist/index.d.ts +10 -0
  23. package/dist/index.d.ts.map +1 -0
  24. package/dist/index.js +69 -0
  25. package/dist/index.js.map +1 -0
  26. package/dist/login.d.ts +48 -0
  27. package/dist/login.d.ts.map +1 -0
  28. package/dist/login.js +180 -0
  29. package/dist/login.js.map +1 -0
  30. package/dist/opencode-api.d.ts +32 -0
  31. package/dist/opencode-api.d.ts.map +1 -0
  32. package/dist/opencode-api.js +86 -0
  33. package/dist/opencode-api.js.map +1 -0
  34. package/dist/opencode-helpers.d.ts +49 -0
  35. package/dist/opencode-helpers.d.ts.map +1 -0
  36. package/dist/opencode-helpers.js +175 -0
  37. package/dist/opencode-helpers.js.map +1 -0
  38. package/dist/protocol.d.ts +143 -0
  39. package/dist/protocol.d.ts.map +1 -0
  40. package/dist/protocol.js +7 -0
  41. package/dist/protocol.js.map +1 -0
  42. package/dist/rules.d.ts +47 -0
  43. package/dist/rules.d.ts.map +1 -0
  44. package/dist/rules.js +84 -0
  45. package/dist/rules.js.map +1 -0
  46. package/dist/translate.d.ts +50 -0
  47. package/dist/translate.d.ts.map +1 -0
  48. package/dist/translate.js +290 -0
  49. package/dist/translate.js.map +1 -0
  50. package/package.json +81 -3
  51. package/src/acp-session.ts +892 -0
  52. package/src/agent-cli.test.ts +76 -0
  53. package/src/agent-provider.test.ts +1137 -0
  54. package/src/agent-provider.ts +234 -0
  55. package/src/agents.ts +37 -0
  56. package/src/constants.ts +36 -0
  57. package/src/event-coverage.test.ts +65 -0
  58. package/src/executable.test.ts +89 -0
  59. package/src/executable.ts +143 -0
  60. package/src/fake-opencode.testkit.ts +755 -0
  61. package/src/fixtures/acp-session-updates.json +19 -0
  62. package/src/index.test.ts +69 -0
  63. package/src/index.ts +83 -0
  64. package/src/login.test.ts +155 -0
  65. package/src/login.ts +222 -0
  66. package/src/opencode-api.ts +105 -0
  67. package/src/opencode-helpers.test.ts +76 -0
  68. package/src/opencode-helpers.ts +195 -0
  69. package/src/protocol.ts +104 -0
  70. package/src/rules.test.ts +107 -0
  71. package/src/rules.ts +102 -0
  72. package/src/translate.test.ts +253 -0
  73. package/src/translate.ts +318 -0
  74. package/README.md +0 -3
@@ -0,0 +1,76 @@
1
+ /**
2
+ * The connection's CLI: found where the vendor's installer puts it even when
3
+ * this process's PATH does not reach there, and checked for updates. The CLI
4
+ * is a real executable in a temporary home; the registry's answer is a fresh
5
+ * entry in Moxxy's cache, so nothing goes to the network.
6
+ */
7
+ import { chmodSync, mkdirSync, mkdtempSync, writeFileSync } from 'node:fs';
8
+ import { tmpdir } from 'node:os';
9
+ import path from 'node:path';
10
+ import { afterEach, describe, expect, it } from 'vitest';
11
+ import { assertDefined } from '@moxxy/sdk';
12
+ import { removeDirSync } from '@moxxy/vitest-preset/fs';
13
+ import { opencodeProviderDef } from './index.js';
14
+ import { opencodeTarget } from './executable.js';
15
+
16
+ const saved = { HOME: process.env.HOME, PATH: process.env.PATH, MOXXY_HOME: process.env.MOXXY_HOME, OPENCODE_EXECUTABLE: process.env.OPENCODE_EXECUTABLE };
17
+ let home: string | undefined;
18
+
19
+ afterEach(() => {
20
+ for (const [key, value] of Object.entries(saved)) {
21
+ if (value === undefined) delete process.env[key];
22
+ else process.env[key] = value;
23
+ }
24
+ if (home) removeDirSync(home);
25
+ home = undefined;
26
+ });
27
+
28
+ function installed(printed: string, script = ''): string {
29
+ home = mkdtempSync(path.join(tmpdir(), 'moxxy-opencode-cli-'));
30
+ const file = path.join(home, '.opencode/bin', 'opencode');
31
+ mkdirSync(path.dirname(file), { recursive: true });
32
+ writeFileSync(file, `#!/bin/sh\n${script}\nprintf '%s\\n' ${JSON.stringify(printed)}\n`);
33
+ chmodSync(file, 0o755);
34
+ process.env.HOME = home;
35
+ process.env.PATH = '';
36
+ delete process.env.OPENCODE_EXECUTABLE;
37
+ return file;
38
+ }
39
+
40
+ describe.skipIf(process.platform === 'win32')('the opencode CLI', () => {
41
+ it("is found where the vendor's installer put it, off PATH", () => {
42
+ const file = installed('1.18.2');
43
+
44
+ expect(JSON.stringify(opencodeTarget('opencode'))).toContain(JSON.stringify(file).slice(1, -1));
45
+ });
46
+
47
+ it('is checked for updates against the version the registry last gave', async () => {
48
+ installed('1.18.2');
49
+ const moxxyHome = path.join(home ?? '', 'moxxy');
50
+ mkdirSync(path.join(moxxyHome, 'cache'), { recursive: true });
51
+ writeFileSync(
52
+ path.join(moxxyHome, 'cache', 'agent-cli-latest.json'),
53
+ JSON.stringify({ '@opencode/cli': { version: '1.19.0', at: Date.now() } }),
54
+ );
55
+ process.env.MOXXY_HOME = moxxyHome;
56
+ const cli = opencodeProviderDef.agentCli;
57
+ assertDefined(cli, 'the provider checks its CLI');
58
+
59
+ const report = await cli.check();
60
+
61
+ expect(report).toMatchObject({ installed: '1.18.2', latest: '1.19.0' });
62
+ expect(['update-required', 'update-available']).toContain(report.state);
63
+ });
64
+
65
+ it('says who the agent is signed in as', async () => {
66
+ installed('1.19.2', 'if [ "$1" = "auth" ]; then echo "● OpenCode Zen api"; exit 0; fi');
67
+ const moxxyHome = path.join(home ?? '', 'moxxy');
68
+ mkdirSync(path.join(moxxyHome, 'cache'), { recursive: true });
69
+ writeFileSync(path.join(moxxyHome, 'cache', 'agent-cli-latest.json'), JSON.stringify({ '@opencode/cli': { version: '1.19.2', at: Date.now() } }));
70
+ process.env.MOXXY_HOME = moxxyHome;
71
+ const cli = opencodeProviderDef.agentCli;
72
+ assertDefined(cli, 'the provider checks its CLI');
73
+
74
+ expect(await cli.check()).toMatchObject({ signedIn: true, account: 'OpenCode Zen' });
75
+ });
76
+ });