@phnx-labs/agents-cli 0.1.0 → 1.12.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/README.md +14 -96
- package/dist/commands/exec.d.ts.map +1 -1
- package/dist/commands/exec.js +17 -135
- package/dist/commands/exec.js.map +1 -1
- package/dist/commands/models.d.ts.map +1 -1
- package/dist/commands/models.js +3 -30
- package/dist/commands/models.js.map +1 -1
- package/dist/commands/pull.d.ts.map +1 -1
- package/dist/commands/pull.js +3 -37
- package/dist/commands/pull.js.map +1 -1
- package/dist/commands/sessions.d.ts.map +1 -1
- package/dist/commands/sessions.js +0 -100
- package/dist/commands/sessions.js.map +1 -1
- package/dist/commands/view.d.ts.map +1 -1
- package/dist/commands/view.js +2 -42
- package/dist/commands/view.js.map +1 -1
- package/dist/index.js +8 -37
- package/dist/index.js.map +1 -1
- package/dist/lib/__tests__/hooks.test.js +2 -2
- package/dist/lib/__tests__/hooks.test.js.map +1 -1
- package/dist/lib/__tests__/models.test.js +1 -56
- package/dist/lib/__tests__/models.test.js.map +1 -1
- package/dist/lib/__tests__/usage.test.js +2 -4
- package/dist/lib/__tests__/usage.test.js.map +1 -1
- package/dist/lib/agents.d.ts.map +1 -1
- package/dist/lib/agents.js +2 -10
- package/dist/lib/agents.js.map +1 -1
- package/dist/lib/exec.d.ts +1 -4
- package/dist/lib/exec.d.ts.map +1 -1
- package/dist/lib/exec.js +15 -24
- package/dist/lib/exec.js.map +1 -1
- package/dist/lib/hooks.d.ts.map +1 -1
- package/dist/lib/hooks.js +1 -153
- package/dist/lib/hooks.js.map +1 -1
- package/dist/lib/models.d.ts +10 -18
- package/dist/lib/models.d.ts.map +1 -1
- package/dist/lib/models.js +12 -380
- package/dist/lib/models.js.map +1 -1
- package/dist/lib/session/types.d.ts +0 -8
- package/dist/lib/session/types.d.ts.map +1 -1
- package/dist/lib/shims.d.ts +2 -31
- package/dist/lib/shims.d.ts.map +1 -1
- package/dist/lib/shims.js +24 -75
- package/dist/lib/shims.js.map +1 -1
- package/dist/lib/state.d.ts +0 -7
- package/dist/lib/state.d.ts.map +1 -1
- package/dist/lib/state.js +1 -14
- package/dist/lib/state.js.map +1 -1
- package/dist/lib/usage.d.ts +0 -16
- package/dist/lib/usage.d.ts.map +1 -1
- package/dist/lib/usage.js +10 -27
- package/dist/lib/usage.js.map +1 -1
- package/dist/lib/versions.d.ts +1 -7
- package/dist/lib/versions.d.ts.map +1 -1
- package/dist/lib/versions.js +8 -30
- package/dist/lib/versions.js.map +1 -1
- package/package.json +2 -2
- package/dist/commands/cloud.d.ts +0 -3
- package/dist/commands/cloud.d.ts.map +0 -1
- package/dist/commands/cloud.js +0 -322
- package/dist/commands/cloud.js.map +0 -1
- package/dist/commands/profiles.d.ts +0 -3
- package/dist/commands/profiles.d.ts.map +0 -1
- package/dist/commands/profiles.js +0 -242
- package/dist/commands/profiles.js.map +0 -1
- package/dist/commands/secrets.d.ts +0 -3
- package/dist/commands/secrets.d.ts.map +0 -1
- package/dist/commands/secrets.js +0 -339
- package/dist/commands/secrets.js.map +0 -1
- package/dist/lib/__tests__/rotate.test.d.ts +0 -2
- package/dist/lib/__tests__/rotate.test.d.ts.map +0 -1
- package/dist/lib/__tests__/rotate.test.js +0 -80
- package/dist/lib/__tests__/rotate.test.js.map +0 -1
- package/dist/lib/__tests__/secrets-bundles.test.d.ts +0 -2
- package/dist/lib/__tests__/secrets-bundles.test.d.ts.map +0 -1
- package/dist/lib/__tests__/secrets-bundles.test.js +0 -104
- package/dist/lib/__tests__/secrets-bundles.test.js.map +0 -1
- package/dist/lib/__tests__/secrets.test.d.ts +0 -2
- package/dist/lib/__tests__/secrets.test.d.ts.map +0 -1
- package/dist/lib/__tests__/secrets.test.js +0 -90
- package/dist/lib/__tests__/secrets.test.js.map +0 -1
- package/dist/lib/__tests__/shims.test.d.ts +0 -2
- package/dist/lib/__tests__/shims.test.d.ts.map +0 -1
- package/dist/lib/__tests__/shims.test.js +0 -39
- package/dist/lib/__tests__/shims.test.js.map +0 -1
- package/dist/lib/__tests__/versions.test.d.ts +0 -2
- package/dist/lib/__tests__/versions.test.d.ts.map +0 -1
- package/dist/lib/__tests__/versions.test.js +0 -63
- package/dist/lib/__tests__/versions.test.js.map +0 -1
- package/dist/lib/cloud/codex.d.ts +0 -19
- package/dist/lib/cloud/codex.d.ts.map +0 -1
- package/dist/lib/cloud/codex.js +0 -210
- package/dist/lib/cloud/codex.js.map +0 -1
- package/dist/lib/cloud/factory.d.ts +0 -26
- package/dist/lib/cloud/factory.d.ts.map +0 -1
- package/dist/lib/cloud/factory.js +0 -37
- package/dist/lib/cloud/factory.js.map +0 -1
- package/dist/lib/cloud/registry.d.ts +0 -6
- package/dist/lib/cloud/registry.d.ts.map +0 -1
- package/dist/lib/cloud/registry.js +0 -56
- package/dist/lib/cloud/registry.js.map +0 -1
- package/dist/lib/cloud/rush.d.ts +0 -15
- package/dist/lib/cloud/rush.d.ts.map +0 -1
- package/dist/lib/cloud/rush.js +0 -185
- package/dist/lib/cloud/rush.js.map +0 -1
- package/dist/lib/cloud/store.d.ts +0 -10
- package/dist/lib/cloud/store.d.ts.map +0 -1
- package/dist/lib/cloud/store.js +0 -96
- package/dist/lib/cloud/store.js.map +0 -1
- package/dist/lib/cloud/stream.d.ts +0 -18
- package/dist/lib/cloud/stream.d.ts.map +0 -1
- package/dist/lib/cloud/stream.js +0 -138
- package/dist/lib/cloud/stream.js.map +0 -1
- package/dist/lib/cloud/types.d.ts +0 -60
- package/dist/lib/cloud/types.d.ts.map +0 -1
- package/dist/lib/cloud/types.js +0 -2
- package/dist/lib/cloud/types.js.map +0 -1
- package/dist/lib/profiles-keychain.d.ts +0 -3
- package/dist/lib/profiles-keychain.d.ts.map +0 -1
- package/dist/lib/profiles-keychain.js +0 -10
- package/dist/lib/profiles-keychain.js.map +0 -1
- package/dist/lib/profiles-presets.d.ts +0 -15
- package/dist/lib/profiles-presets.d.ts.map +0 -1
- package/dist/lib/profiles-presets.js +0 -95
- package/dist/lib/profiles-presets.js.map +0 -1
- package/dist/lib/profiles.d.ts +0 -35
- package/dist/lib/profiles.d.ts.map +0 -1
- package/dist/lib/profiles.js +0 -123
- package/dist/lib/profiles.js.map +0 -1
- package/dist/lib/rotate.d.ts +0 -52
- package/dist/lib/rotate.d.ts.map +0 -1
- package/dist/lib/rotate.js +0 -87
- package/dist/lib/rotate.js.map +0 -1
- package/dist/lib/secrets-bundles.d.ts +0 -29
- package/dist/lib/secrets-bundles.d.ts.map +0 -1
- package/dist/lib/secrets-bundles.js +0 -168
- package/dist/lib/secrets-bundles.js.map +0 -1
- package/dist/lib/secrets.d.ts +0 -27
- package/dist/lib/secrets.d.ts.map +0 -1
- package/dist/lib/secrets.js +0 -127
- package/dist/lib/secrets.js.map +0 -1
- package/dist/lib/session/artifacts.d.ts +0 -5
- package/dist/lib/session/artifacts.d.ts.map +0 -1
- package/dist/lib/session/artifacts.js +0 -75
- package/dist/lib/session/artifacts.js.map +0 -1
|
@@ -1,90 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect } from 'vitest';
|
|
2
|
-
import { parseBundleValue, secretsKeychainItem, profileKeychainItem, resolveRef, } from '../secrets.js';
|
|
3
|
-
import * as fs from 'fs';
|
|
4
|
-
import * as os from 'os';
|
|
5
|
-
import * as path from 'path';
|
|
6
|
-
describe('parseBundleValue', () => {
|
|
7
|
-
it('returns a literal for plain strings', () => {
|
|
8
|
-
expect(parseBundleValue('hello')).toEqual({ literal: 'hello' });
|
|
9
|
-
});
|
|
10
|
-
it('parses keychain:foo as a ref', () => {
|
|
11
|
-
expect(parseBundleValue('keychain:STRIPE_KEY')).toEqual({
|
|
12
|
-
ref: { provider: 'keychain', value: 'STRIPE_KEY' },
|
|
13
|
-
});
|
|
14
|
-
});
|
|
15
|
-
it('parses env:VAR as a ref', () => {
|
|
16
|
-
expect(parseBundleValue('env:GH_TOKEN')).toEqual({
|
|
17
|
-
ref: { provider: 'env', value: 'GH_TOKEN' },
|
|
18
|
-
});
|
|
19
|
-
});
|
|
20
|
-
it('parses file:/path as a ref', () => {
|
|
21
|
-
expect(parseBundleValue('file:/tmp/token')).toEqual({
|
|
22
|
-
ref: { provider: 'file', value: '/tmp/token' },
|
|
23
|
-
});
|
|
24
|
-
});
|
|
25
|
-
it('parses exec:cmd as a ref', () => {
|
|
26
|
-
expect(parseBundleValue('exec:op read op://vault/item')).toEqual({
|
|
27
|
-
ref: { provider: 'exec', value: 'op read op://vault/item' },
|
|
28
|
-
});
|
|
29
|
-
});
|
|
30
|
-
it('treats {value: string} as a literal escape hatch', () => {
|
|
31
|
-
// The only reason to use the object form is to store a literal that would
|
|
32
|
-
// otherwise be parsed as a ref.
|
|
33
|
-
expect(parseBundleValue({ value: 'keychain:literal-with-colon' })).toEqual({
|
|
34
|
-
literal: 'keychain:literal-with-colon',
|
|
35
|
-
});
|
|
36
|
-
});
|
|
37
|
-
it('does not treat unknown prefixes as refs', () => {
|
|
38
|
-
// Only the four documented providers trigger ref parsing. Anything else
|
|
39
|
-
// (e.g. "https://") is a literal.
|
|
40
|
-
expect(parseBundleValue('https://example.com')).toEqual({ literal: 'https://example.com' });
|
|
41
|
-
});
|
|
42
|
-
});
|
|
43
|
-
describe('keychain item namespacing', () => {
|
|
44
|
-
it('secretsKeychainItem scopes by bundle + key', () => {
|
|
45
|
-
expect(secretsKeychainItem('prod', 'CARD_NUMBER')).toBe('agents-cli.secrets.prod.CARD_NUMBER');
|
|
46
|
-
expect(secretsKeychainItem('staging', 'CARD_NUMBER')).toBe('agents-cli.secrets.staging.CARD_NUMBER');
|
|
47
|
-
});
|
|
48
|
-
it('profile and secrets namespaces never collide', () => {
|
|
49
|
-
// Regression guard: both subsystems share a service prefix but must sit in
|
|
50
|
-
// disjoint sub-namespaces so a provider-named bundle can't shadow a
|
|
51
|
-
// profile token.
|
|
52
|
-
expect(profileKeychainItem('openrouter')).not.toBe(secretsKeychainItem('openrouter', 'token'));
|
|
53
|
-
});
|
|
54
|
-
});
|
|
55
|
-
describe('resolveRef providers', () => {
|
|
56
|
-
it('resolves env: from process.env', () => {
|
|
57
|
-
process.env.__AGENTS_TEST_ENV_VAR = 'hello-from-parent';
|
|
58
|
-
const value = resolveRef({ provider: 'env', value: '__AGENTS_TEST_ENV_VAR' });
|
|
59
|
-
expect(value).toBe('hello-from-parent');
|
|
60
|
-
});
|
|
61
|
-
it('env: throws when the parent var is unset', () => {
|
|
62
|
-
delete process.env.__AGENTS_TEST_MISSING;
|
|
63
|
-
expect(() => resolveRef({ provider: 'env', value: '__AGENTS_TEST_MISSING' })).toThrow(/not set in parent environment/);
|
|
64
|
-
});
|
|
65
|
-
it('env: enforces the allowlist when one is set', () => {
|
|
66
|
-
process.env.__AGENTS_TEST_BLOCKED = 'leaky';
|
|
67
|
-
expect(() => resolveRef({ provider: 'env', value: '__AGENTS_TEST_BLOCKED' }, { envAllowlist: ['SOMETHING_ELSE'] })).toThrow(/not in allowlist/);
|
|
68
|
-
});
|
|
69
|
-
it('file: reads and trims the target', () => {
|
|
70
|
-
const file = path.join(os.tmpdir(), `agents-test-${process.pid}.secret`);
|
|
71
|
-
fs.writeFileSync(file, ' value-with-trailing-ws \n', 'utf-8');
|
|
72
|
-
try {
|
|
73
|
-
expect(resolveRef({ provider: 'file', value: file })).toBe('value-with-trailing-ws');
|
|
74
|
-
}
|
|
75
|
-
finally {
|
|
76
|
-
fs.unlinkSync(file);
|
|
77
|
-
}
|
|
78
|
-
});
|
|
79
|
-
it('file: throws on a missing path', () => {
|
|
80
|
-
expect(() => resolveRef({ provider: 'file', value: '/nonexistent/agents-test-never' })).toThrow(/does not exist/);
|
|
81
|
-
});
|
|
82
|
-
it('exec: is blocked unless allowExec is true', () => {
|
|
83
|
-
expect(() => resolveRef({ provider: 'exec', value: 'echo hi' })).toThrow(/blocked/);
|
|
84
|
-
});
|
|
85
|
-
it('exec: runs when allowExec is true', () => {
|
|
86
|
-
const out = resolveRef({ provider: 'exec', value: 'echo agents-exec-ok' }, { allowExec: true });
|
|
87
|
-
expect(out).toBe('agents-exec-ok');
|
|
88
|
-
});
|
|
89
|
-
});
|
|
90
|
-
//# sourceMappingURL=secrets.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"secrets.test.js","sourceRoot":"","sources":["../../../src/lib/__tests__/secrets.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"shims.test.d.ts","sourceRoot":"","sources":["../../../src/lib/__tests__/shims.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect } from 'vitest';
|
|
2
|
-
import { generateShimScript, SHIM_SCHEMA_VERSION } from '../shims.js';
|
|
3
|
-
describe('SHIM_SCHEMA_VERSION', () => {
|
|
4
|
-
it('is 4', () => {
|
|
5
|
-
expect(SHIM_SCHEMA_VERSION).toBe(4);
|
|
6
|
-
});
|
|
7
|
-
});
|
|
8
|
-
describe('generateShimScript', () => {
|
|
9
|
-
it('contains no reference to .agents-version', () => {
|
|
10
|
-
const script = generateShimScript('claude');
|
|
11
|
-
expect(script).not.toContain('.agents-version');
|
|
12
|
-
});
|
|
13
|
-
it('embeds the shim schema version marker matching SHIM_SCHEMA_VERSION', () => {
|
|
14
|
-
const script = generateShimScript('claude');
|
|
15
|
-
expect(script).toContain(`agents-shim-version: ${SHIM_SCHEMA_VERSION}`);
|
|
16
|
-
});
|
|
17
|
-
it('walks up looking for agents.yaml (not .agents-version)', () => {
|
|
18
|
-
const script = generateShimScript('claude');
|
|
19
|
-
expect(script).toContain('agents.yaml');
|
|
20
|
-
});
|
|
21
|
-
it('skips $HOME/.agents/agents.yaml when walking up', () => {
|
|
22
|
-
const script = generateShimScript('claude');
|
|
23
|
-
expect(script).toContain('user_agents_yaml');
|
|
24
|
-
expect(script).toContain('"$candidate" != "$user_agents_yaml"');
|
|
25
|
-
});
|
|
26
|
-
it('error message references agents.yaml not .agents-version', () => {
|
|
27
|
-
const script = generateShimScript('claude');
|
|
28
|
-
expect(script).toContain('required by agents.yaml but not installed');
|
|
29
|
-
expect(script).not.toContain('required by .agents-version');
|
|
30
|
-
});
|
|
31
|
-
it('find_project_agents_dir stops at agents.yaml or .git', () => {
|
|
32
|
-
const script = generateShimScript('claude');
|
|
33
|
-
// Boundary detection should check agents.yaml
|
|
34
|
-
expect(script).toContain('[ -f "$dir/agents.yaml" ]');
|
|
35
|
-
// And should NOT check .agents-version as a boundary
|
|
36
|
-
expect(script).not.toContain('[ -f "$dir/.agents-version" ]');
|
|
37
|
-
});
|
|
38
|
-
});
|
|
39
|
-
//# sourceMappingURL=shims.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"shims.test.js","sourceRoot":"","sources":["../../../src/lib/__tests__/shims.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAE9C,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAEtE,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;IACnC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE;QACd,MAAM,CAAC,mBAAmB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IAClC,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAClD,MAAM,MAAM,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC;QAC5C,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oEAAoE,EAAE,GAAG,EAAE;QAC5E,MAAM,MAAM,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC;QAC5C,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,wBAAwB,mBAAmB,EAAE,CAAC,CAAC;IAC1E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wDAAwD,EAAE,GAAG,EAAE;QAChE,MAAM,MAAM,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC;QAC5C,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;QACzD,MAAM,MAAM,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC;QAC5C,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC;QAC7C,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,qCAAqC,CAAC,CAAC;IAClE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0DAA0D,EAAE,GAAG,EAAE;QAClE,MAAM,MAAM,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC;QAC5C,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,2CAA2C,CAAC,CAAC;QACtE,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,6BAA6B,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;QAC9D,MAAM,MAAM,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC;QAC5C,8CAA8C;QAC9C,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,2BAA2B,CAAC,CAAC;QACtD,qDAAqD;QACrD,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,+BAA+B,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"versions.test.d.ts","sourceRoot":"","sources":["../../../src/lib/__tests__/versions.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect, beforeEach, afterEach } from 'vitest';
|
|
2
|
-
import * as fs from 'fs';
|
|
3
|
-
import * as path from 'path';
|
|
4
|
-
import * as os from 'os';
|
|
5
|
-
import { getProjectVersion } from '../versions.js';
|
|
6
|
-
let tmpDir;
|
|
7
|
-
beforeEach(() => {
|
|
8
|
-
tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'versions-test-'));
|
|
9
|
-
});
|
|
10
|
-
afterEach(() => {
|
|
11
|
-
fs.rmSync(tmpDir, { recursive: true, force: true });
|
|
12
|
-
});
|
|
13
|
-
describe('getProjectVersion', () => {
|
|
14
|
-
it('resolves version from agents.yaml in startPath', () => {
|
|
15
|
-
fs.writeFileSync(path.join(tmpDir, 'agents.yaml'), 'agents:\n claude: "1.2.3"\n');
|
|
16
|
-
expect(getProjectVersion('claude', tmpDir)).toBe('1.2.3');
|
|
17
|
-
});
|
|
18
|
-
it('walks up to find agents.yaml in a parent directory', () => {
|
|
19
|
-
const nested = path.join(tmpDir, 'a', 'b', 'c');
|
|
20
|
-
fs.mkdirSync(nested, { recursive: true });
|
|
21
|
-
fs.writeFileSync(path.join(tmpDir, 'agents.yaml'), 'agents:\n claude: "2.0.0"\n');
|
|
22
|
-
expect(getProjectVersion('claude', nested)).toBe('2.0.0');
|
|
23
|
-
});
|
|
24
|
-
it('returns null when no agents.yaml exists', () => {
|
|
25
|
-
const nested = path.join(tmpDir, 'empty');
|
|
26
|
-
fs.mkdirSync(nested, { recursive: true });
|
|
27
|
-
expect(getProjectVersion('claude', nested)).toBeNull();
|
|
28
|
-
});
|
|
29
|
-
it('returns null when agents.yaml exists but agent key is absent', () => {
|
|
30
|
-
fs.writeFileSync(path.join(tmpDir, 'agents.yaml'), 'agents:\n codex: "0.9.0"\n');
|
|
31
|
-
expect(getProjectVersion('claude', tmpDir)).toBeNull();
|
|
32
|
-
});
|
|
33
|
-
it('ignores ~/.agents/agents.yaml (user file) when walking up', () => {
|
|
34
|
-
// Simulate the user agents.yaml path being encountered during the walk.
|
|
35
|
-
// We cannot mutate os.homedir(), but we CAN verify that passing the
|
|
36
|
-
// actual user file path returns null (no version extracted from it).
|
|
37
|
-
const userAgentsYaml = path.join(os.homedir(), '.agents', 'agents.yaml');
|
|
38
|
-
// If the file actually exists on this machine, starting from its directory
|
|
39
|
-
// must NOT return its contents as a project version.
|
|
40
|
-
if (fs.existsSync(userAgentsYaml)) {
|
|
41
|
-
const result = getProjectVersion('claude', path.dirname(userAgentsYaml));
|
|
42
|
-
// The function should skip ~/.agents/agents.yaml itself
|
|
43
|
-
// so result is null (no sibling agents.yaml) or a version from a
|
|
44
|
-
// higher-up project agents.yaml — either way it must not come from the
|
|
45
|
-
// user file at ~/.agents/agents.yaml.
|
|
46
|
-
// We just confirm no error is thrown and type is correct.
|
|
47
|
-
expect(typeof result === 'string' || result === null).toBe(true);
|
|
48
|
-
}
|
|
49
|
-
else {
|
|
50
|
-
// If the file doesn't exist, the test is vacuously satisfied.
|
|
51
|
-
expect(true).toBe(true);
|
|
52
|
-
}
|
|
53
|
-
});
|
|
54
|
-
it('parses agents.yaml with quoted version string', () => {
|
|
55
|
-
fs.writeFileSync(path.join(tmpDir, 'agents.yaml'), 'agents:\n claude: \'1.5.0\'\n');
|
|
56
|
-
expect(getProjectVersion('claude', tmpDir)).toBe('1.5.0');
|
|
57
|
-
});
|
|
58
|
-
it('parses agents.yaml with unquoted version string', () => {
|
|
59
|
-
fs.writeFileSync(path.join(tmpDir, 'agents.yaml'), 'agents:\n claude: 1.7.2\n');
|
|
60
|
-
expect(getProjectVersion('claude', tmpDir)).toBe('1.7.2');
|
|
61
|
-
});
|
|
62
|
-
});
|
|
63
|
-
//# sourceMappingURL=versions.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"versions.test.js","sourceRoot":"","sources":["../../../src/lib/__tests__/versions.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import type { CloudProvider, CloudTask, CloudTaskStatus, CloudEvent, DispatchOptions } from './types.js';
|
|
2
|
-
export declare class CodexCloudProvider implements CloudProvider {
|
|
3
|
-
id: "codex";
|
|
4
|
-
name: string;
|
|
5
|
-
private defaultEnv?;
|
|
6
|
-
constructor(config?: {
|
|
7
|
-
env?: string;
|
|
8
|
-
});
|
|
9
|
-
supports(_options: DispatchOptions): boolean;
|
|
10
|
-
dispatch(options: DispatchOptions): Promise<CloudTask>;
|
|
11
|
-
status(taskId: string): Promise<CloudTask>;
|
|
12
|
-
list(filter?: {
|
|
13
|
-
status?: CloudTaskStatus;
|
|
14
|
-
}): Promise<CloudTask[]>;
|
|
15
|
-
stream(taskId: string): AsyncIterable<CloudEvent>;
|
|
16
|
-
cancel(_taskId: string): Promise<void>;
|
|
17
|
-
message(_taskId: string, _content: string): Promise<void>;
|
|
18
|
-
}
|
|
19
|
-
//# sourceMappingURL=codex.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"codex.d.ts","sourceRoot":"","sources":["../../../src/lib/cloud/codex.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,aAAa,EACb,SAAS,EACT,eAAe,EACf,UAAU,EACV,eAAe,EAChB,MAAM,YAAY,CAAC;AAqEpB,qBAAa,kBAAmB,YAAW,aAAa;IACtD,EAAE,EAAG,OAAO,CAAU;IACtB,IAAI,SAAiB;IAErB,OAAO,CAAC,UAAU,CAAC,CAAS;gBAEhB,MAAM,CAAC,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE;IAIrC,QAAQ,CAAC,QAAQ,EAAE,eAAe,GAAG,OAAO;IAItC,QAAQ,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,SAAS,CAAC;IA+BtD,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IAqB1C,IAAI,CAAC,MAAM,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,eAAe,CAAA;KAAE,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAgChE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa,CAAC,UAAU,CAAC;IA+BlD,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKtC,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAGhE"}
|
package/dist/lib/cloud/codex.js
DELETED
|
@@ -1,210 +0,0 @@
|
|
|
1
|
-
import { spawn, execFileSync } from 'child_process';
|
|
2
|
-
import * as fs from 'fs';
|
|
3
|
-
import * as path from 'path';
|
|
4
|
-
import * as os from 'os';
|
|
5
|
-
const SHIMS_DIR = path.join(os.homedir(), '.agents', 'shims');
|
|
6
|
-
/** Map Codex Cloud status strings to our canonical status. */
|
|
7
|
-
function mapStatus(s) {
|
|
8
|
-
const lower = s.toLowerCase();
|
|
9
|
-
if (lower.includes('queued') || lower.includes('pending'))
|
|
10
|
-
return 'queued';
|
|
11
|
-
if (lower.includes('running') || lower.includes('in_progress'))
|
|
12
|
-
return 'running';
|
|
13
|
-
if (lower.includes('completed') || lower.includes('succeeded') || lower.includes('success'))
|
|
14
|
-
return 'completed';
|
|
15
|
-
if (lower.includes('failed') || lower.includes('error'))
|
|
16
|
-
return 'failed';
|
|
17
|
-
if (lower.includes('cancelled') || lower.includes('canceled'))
|
|
18
|
-
return 'cancelled';
|
|
19
|
-
return 'running';
|
|
20
|
-
}
|
|
21
|
-
function findCodexBinary() {
|
|
22
|
-
// Check agents-cli shims first
|
|
23
|
-
const shim = path.join(SHIMS_DIR, 'codex');
|
|
24
|
-
if (fs.existsSync(shim))
|
|
25
|
-
return shim;
|
|
26
|
-
// Check PATH via which
|
|
27
|
-
try {
|
|
28
|
-
return execFileSync('which', ['codex'], { stdio: 'pipe' }).toString().trim() || null;
|
|
29
|
-
}
|
|
30
|
-
catch {
|
|
31
|
-
return null;
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
function codexAvailable() {
|
|
35
|
-
return findCodexBinary() !== null;
|
|
36
|
-
}
|
|
37
|
-
function runCodex(args) {
|
|
38
|
-
const bin = findCodexBinary();
|
|
39
|
-
if (!bin)
|
|
40
|
-
return Promise.resolve({ stdout: '', stderr: 'codex not found', code: 127 });
|
|
41
|
-
return new Promise((resolve) => {
|
|
42
|
-
const proc = spawn(bin, args, { stdio: ['pipe', 'pipe', 'pipe'] });
|
|
43
|
-
let stdout = '';
|
|
44
|
-
let stderr = '';
|
|
45
|
-
proc.stdout.on('data', (d) => { stdout += d.toString(); });
|
|
46
|
-
proc.stderr.on('data', (d) => { stderr += d.toString(); });
|
|
47
|
-
proc.on('close', (code) => {
|
|
48
|
-
resolve({ stdout, stderr, code: code ?? 1 });
|
|
49
|
-
});
|
|
50
|
-
});
|
|
51
|
-
}
|
|
52
|
-
function parseTaskFromText(text) {
|
|
53
|
-
// Codex cloud list/status output varies. Try JSON first, then parse text.
|
|
54
|
-
try {
|
|
55
|
-
return JSON.parse(text);
|
|
56
|
-
}
|
|
57
|
-
catch {
|
|
58
|
-
// Parse text output line by line for key: value patterns
|
|
59
|
-
const result = {};
|
|
60
|
-
for (const line of text.split('\n')) {
|
|
61
|
-
const match = line.match(/^\s*(\w[\w\s]*\w)\s*[:=]\s*(.+)\s*$/);
|
|
62
|
-
if (match) {
|
|
63
|
-
result[match[1].toLowerCase().replace(/\s+/g, '_')] = match[2].trim();
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
return {
|
|
67
|
-
id: result.id || result.task_id,
|
|
68
|
-
status: result.status ? mapStatus(result.status) : undefined,
|
|
69
|
-
summary: result.summary || result.output,
|
|
70
|
-
};
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
export class CodexCloudProvider {
|
|
74
|
-
id = 'codex';
|
|
75
|
-
name = 'Codex Cloud';
|
|
76
|
-
defaultEnv;
|
|
77
|
-
constructor(config) {
|
|
78
|
-
this.defaultEnv = config?.env;
|
|
79
|
-
}
|
|
80
|
-
supports(_options) {
|
|
81
|
-
return codexAvailable();
|
|
82
|
-
}
|
|
83
|
-
async dispatch(options) {
|
|
84
|
-
const env = options.providerOptions?.env ?? this.defaultEnv;
|
|
85
|
-
if (!env) {
|
|
86
|
-
throw new Error('Codex Cloud requires --env <id>. Set a default in ~/.agents/agents.yaml under cloud.providers.codex.env.');
|
|
87
|
-
}
|
|
88
|
-
const args = ['cloud', 'exec', '--env', env];
|
|
89
|
-
if (options.branch)
|
|
90
|
-
args.push('--branch', options.branch);
|
|
91
|
-
args.push(options.prompt);
|
|
92
|
-
const { stdout, stderr, code } = await runCodex(args);
|
|
93
|
-
if (code !== 0) {
|
|
94
|
-
throw new Error(`codex cloud exec failed: ${stderr || stdout}`);
|
|
95
|
-
}
|
|
96
|
-
// Parse task ID from output. Codex typically prints the task ID.
|
|
97
|
-
const taskId = extractTaskId(stdout) ?? `codex-${Date.now()}`;
|
|
98
|
-
const now = new Date().toISOString();
|
|
99
|
-
return {
|
|
100
|
-
id: taskId,
|
|
101
|
-
provider: 'codex',
|
|
102
|
-
status: 'queued',
|
|
103
|
-
agent: 'codex',
|
|
104
|
-
prompt: options.prompt,
|
|
105
|
-
branch: options.branch,
|
|
106
|
-
createdAt: now,
|
|
107
|
-
updatedAt: now,
|
|
108
|
-
};
|
|
109
|
-
}
|
|
110
|
-
async status(taskId) {
|
|
111
|
-
const { stdout, stderr, code } = await runCodex(['cloud', 'status', taskId]);
|
|
112
|
-
if (code !== 0) {
|
|
113
|
-
throw new Error(`codex cloud status failed: ${stderr || stdout}`);
|
|
114
|
-
}
|
|
115
|
-
const parsed = parseTaskFromText(stdout);
|
|
116
|
-
const now = new Date().toISOString();
|
|
117
|
-
return {
|
|
118
|
-
id: taskId,
|
|
119
|
-
provider: 'codex',
|
|
120
|
-
status: parsed.status ?? 'running',
|
|
121
|
-
agent: 'codex',
|
|
122
|
-
prompt: parsed.prompt ?? '',
|
|
123
|
-
summary: parsed.summary,
|
|
124
|
-
createdAt: parsed.createdAt ?? now,
|
|
125
|
-
updatedAt: now,
|
|
126
|
-
};
|
|
127
|
-
}
|
|
128
|
-
async list(filter) {
|
|
129
|
-
const args = ['cloud', 'list', '--json', '--limit', '20'];
|
|
130
|
-
if (this.defaultEnv)
|
|
131
|
-
args.push('--env', this.defaultEnv);
|
|
132
|
-
const { stdout, stderr, code } = await runCodex(args);
|
|
133
|
-
if (code !== 0) {
|
|
134
|
-
throw new Error(`codex cloud list failed: ${stderr || stdout}`);
|
|
135
|
-
}
|
|
136
|
-
try {
|
|
137
|
-
const data = JSON.parse(stdout);
|
|
138
|
-
const tasks = (data.tasks ?? data ?? []).map((t) => ({
|
|
139
|
-
id: (t.id || t.task_id),
|
|
140
|
-
provider: 'codex',
|
|
141
|
-
status: mapStatus(t.status ?? ''),
|
|
142
|
-
agent: 'codex',
|
|
143
|
-
prompt: (t.prompt || t.query || ''),
|
|
144
|
-
branch: t.branch || undefined,
|
|
145
|
-
summary: t.summary || undefined,
|
|
146
|
-
createdAt: t.created_at || '',
|
|
147
|
-
updatedAt: t.updated_at || '',
|
|
148
|
-
}));
|
|
149
|
-
if (filter?.status) {
|
|
150
|
-
return tasks.filter((t) => t.status === filter.status);
|
|
151
|
-
}
|
|
152
|
-
return tasks;
|
|
153
|
-
}
|
|
154
|
-
catch {
|
|
155
|
-
return [];
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
async *stream(taskId) {
|
|
159
|
-
// Codex Cloud doesn't have SSE streaming. Poll status until terminal.
|
|
160
|
-
const terminalStatuses = new Set(['completed', 'failed', 'cancelled']);
|
|
161
|
-
let lastStatus = '';
|
|
162
|
-
while (true) {
|
|
163
|
-
try {
|
|
164
|
-
const task = await this.status(taskId);
|
|
165
|
-
if (task.status !== lastStatus) {
|
|
166
|
-
lastStatus = task.status;
|
|
167
|
-
yield {
|
|
168
|
-
type: terminalStatuses.has(task.status) ? 'done' : 'status',
|
|
169
|
-
data: JSON.stringify({ status: task.status, summary: task.summary }),
|
|
170
|
-
timestamp: new Date().toISOString(),
|
|
171
|
-
};
|
|
172
|
-
}
|
|
173
|
-
if (terminalStatuses.has(task.status))
|
|
174
|
-
break;
|
|
175
|
-
}
|
|
176
|
-
catch (err) {
|
|
177
|
-
yield {
|
|
178
|
-
type: 'error',
|
|
179
|
-
data: err instanceof Error ? err.message : String(err),
|
|
180
|
-
timestamp: new Date().toISOString(),
|
|
181
|
-
};
|
|
182
|
-
break;
|
|
183
|
-
}
|
|
184
|
-
// Poll every 5 seconds
|
|
185
|
-
await new Promise((r) => setTimeout(r, 5000));
|
|
186
|
-
}
|
|
187
|
-
}
|
|
188
|
-
async cancel(_taskId) {
|
|
189
|
-
// Codex Cloud doesn't expose a cancel command via CLI.
|
|
190
|
-
throw new Error('Cancel is not supported for Codex Cloud tasks via CLI.');
|
|
191
|
-
}
|
|
192
|
-
async message(_taskId, _content) {
|
|
193
|
-
throw new Error('Follow-up messages are not supported for Codex Cloud tasks.');
|
|
194
|
-
}
|
|
195
|
-
}
|
|
196
|
-
function extractTaskId(output) {
|
|
197
|
-
// Try JSON first
|
|
198
|
-
try {
|
|
199
|
-
const data = JSON.parse(output);
|
|
200
|
-
return data.id || data.task_id;
|
|
201
|
-
}
|
|
202
|
-
catch {
|
|
203
|
-
// Look for UUID-like patterns or task IDs in the text
|
|
204
|
-
const match = output.match(/(?:task[_\s]?id|id)\s*[:=]\s*["']?([a-zA-Z0-9_-]+)/i)
|
|
205
|
-
|| output.match(/([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})/i)
|
|
206
|
-
|| output.match(/(task_[a-zA-Z0-9]+)/i);
|
|
207
|
-
return match?.[1];
|
|
208
|
-
}
|
|
209
|
-
}
|
|
210
|
-
//# sourceMappingURL=codex.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"codex.js","sourceRoot":"","sources":["../../../src/lib/cloud/codex.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import type { CloudProvider, CloudTask, CloudTaskStatus, CloudEvent, DispatchOptions } from './types.js';
|
|
2
|
-
/**
|
|
3
|
-
* Factory/Droid cloud provider — stub for Phase 2.
|
|
4
|
-
*
|
|
5
|
-
* Integration path: `droid daemon` running on a remote machine (mac-mini, cloud VM, k8s pod).
|
|
6
|
-
* Dispatch via HTTP to the daemon, stream output, cancel via HTTP DELETE.
|
|
7
|
-
*
|
|
8
|
-
* Not yet implemented because:
|
|
9
|
-
* 1. Droid v0.104 has no cloud dispatch command (droid exec is local only)
|
|
10
|
-
* 2. droid daemon API isn't documented yet
|
|
11
|
-
* 3. droid computer register/ssh is the remote execution primitive but needs exploration
|
|
12
|
-
*/
|
|
13
|
-
export declare class FactoryCloudProvider implements CloudProvider {
|
|
14
|
-
id: "factory";
|
|
15
|
-
name: string;
|
|
16
|
-
supports(_options: DispatchOptions): boolean;
|
|
17
|
-
dispatch(_options: DispatchOptions): Promise<CloudTask>;
|
|
18
|
-
status(_taskId: string): Promise<CloudTask>;
|
|
19
|
-
list(_filter?: {
|
|
20
|
-
status?: CloudTaskStatus;
|
|
21
|
-
}): Promise<CloudTask[]>;
|
|
22
|
-
stream(_taskId: string): AsyncIterable<CloudEvent>;
|
|
23
|
-
cancel(_taskId: string): Promise<void>;
|
|
24
|
-
message(_taskId: string, _content: string): Promise<void>;
|
|
25
|
-
}
|
|
26
|
-
//# sourceMappingURL=factory.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../../src/lib/cloud/factory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,SAAS,EACT,eAAe,EACf,UAAU,EACV,eAAe,EAChB,MAAM,YAAY,CAAC;AAEpB;;;;;;;;;;GAUG;AACH,qBAAa,oBAAqB,YAAW,aAAa;IACxD,EAAE,EAAG,SAAS,CAAU;IACxB,IAAI,SAAqB;IAEzB,QAAQ,CAAC,QAAQ,EAAE,eAAe,GAAG,OAAO;IAItC,QAAQ,CAAC,QAAQ,EAAE,eAAe,GAAG,OAAO,CAAC,SAAS,CAAC;IAIvD,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IAI3C,IAAI,CAAC,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,eAAe,CAAA;KAAE,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAIjE,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,aAAa,CAAC,UAAU,CAAC;IAInD,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAItC,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAGhE"}
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Factory/Droid cloud provider — stub for Phase 2.
|
|
3
|
-
*
|
|
4
|
-
* Integration path: `droid daemon` running on a remote machine (mac-mini, cloud VM, k8s pod).
|
|
5
|
-
* Dispatch via HTTP to the daemon, stream output, cancel via HTTP DELETE.
|
|
6
|
-
*
|
|
7
|
-
* Not yet implemented because:
|
|
8
|
-
* 1. Droid v0.104 has no cloud dispatch command (droid exec is local only)
|
|
9
|
-
* 2. droid daemon API isn't documented yet
|
|
10
|
-
* 3. droid computer register/ssh is the remote execution primitive but needs exploration
|
|
11
|
-
*/
|
|
12
|
-
export class FactoryCloudProvider {
|
|
13
|
-
id = 'factory';
|
|
14
|
-
name = 'Factory (Droid)';
|
|
15
|
-
supports(_options) {
|
|
16
|
-
return false;
|
|
17
|
-
}
|
|
18
|
-
async dispatch(_options) {
|
|
19
|
-
throw new Error('Factory cloud provider is not yet available. Coming in a future release.');
|
|
20
|
-
}
|
|
21
|
-
async status(_taskId) {
|
|
22
|
-
throw new Error('Factory cloud provider is not yet available.');
|
|
23
|
-
}
|
|
24
|
-
async list(_filter) {
|
|
25
|
-
return [];
|
|
26
|
-
}
|
|
27
|
-
async *stream(_taskId) {
|
|
28
|
-
throw new Error('Factory cloud provider is not yet available.');
|
|
29
|
-
}
|
|
30
|
-
async cancel(_taskId) {
|
|
31
|
-
throw new Error('Factory cloud provider is not yet available.');
|
|
32
|
-
}
|
|
33
|
-
async message(_taskId, _content) {
|
|
34
|
-
throw new Error('Factory cloud provider is not yet available.');
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
//# sourceMappingURL=factory.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"factory.js","sourceRoot":"","sources":["../../../src/lib/cloud/factory.ts"],"names":[],"mappings":"AAQA;;;;;;;;;;GAUG;AACH,MAAM,OAAO,oBAAoB;IAC/B,EAAE,GAAG,SAAkB,CAAC;IACxB,IAAI,GAAG,iBAAiB,CAAC;IAEzB,QAAQ,CAAC,QAAyB;QAChC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,QAAyB;QACtC,MAAM,IAAI,KAAK,CAAC,0EAA0E,CAAC,CAAC;IAC9F,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,OAAe;QAC1B,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;IAClE,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,OAAsC;QAC/C,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,KAAK,CAAC,CAAC,MAAM,CAAC,OAAe;QAC3B,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;IAClE,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,OAAe;QAC1B,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;IAClE,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,OAAe,EAAE,QAAgB;QAC7C,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;IAClE,CAAC;CACF"}
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import type { CloudProvider, CloudProviderId } from './types.js';
|
|
2
|
-
export declare function getProvider(id: CloudProviderId): CloudProvider;
|
|
3
|
-
export declare function getDefaultProviderId(): CloudProviderId;
|
|
4
|
-
export declare function getAllProviders(): CloudProvider[];
|
|
5
|
-
export declare function resolveProvider(explicit?: string): CloudProvider;
|
|
6
|
-
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../src/lib/cloud/registry.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAe,MAAM,YAAY,CAAC;AAuC9E,wBAAgB,WAAW,CAAC,EAAE,EAAE,eAAe,GAAG,aAAa,CAO9D;AAED,wBAAgB,oBAAoB,IAAI,eAAe,CAGtD;AAED,wBAAgB,eAAe,IAAI,aAAa,EAAE,CAGjD;AAED,wBAAgB,eAAe,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,aAAa,CAGhE"}
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
import * as fs from 'fs';
|
|
2
|
-
import * as path from 'path';
|
|
3
|
-
import * as os from 'os';
|
|
4
|
-
import * as yaml from 'yaml';
|
|
5
|
-
import { RushCloudProvider } from './rush.js';
|
|
6
|
-
import { CodexCloudProvider } from './codex.js';
|
|
7
|
-
import { FactoryCloudProvider } from './factory.js';
|
|
8
|
-
const META_FILE = path.join(os.homedir(), '.agents', 'agents.yaml');
|
|
9
|
-
let _config = null;
|
|
10
|
-
function loadCloudConfig() {
|
|
11
|
-
if (_config)
|
|
12
|
-
return _config;
|
|
13
|
-
if (!fs.existsSync(META_FILE)) {
|
|
14
|
-
_config = {};
|
|
15
|
-
return _config;
|
|
16
|
-
}
|
|
17
|
-
try {
|
|
18
|
-
const raw = fs.readFileSync(META_FILE, 'utf-8');
|
|
19
|
-
const data = yaml.parse(raw);
|
|
20
|
-
_config = data?.cloud ?? {};
|
|
21
|
-
}
|
|
22
|
-
catch {
|
|
23
|
-
_config = {};
|
|
24
|
-
}
|
|
25
|
-
return _config;
|
|
26
|
-
}
|
|
27
|
-
const providers = new Map();
|
|
28
|
-
function initProviders() {
|
|
29
|
-
if (providers.size > 0)
|
|
30
|
-
return;
|
|
31
|
-
const config = loadCloudConfig();
|
|
32
|
-
providers.set('rush', new RushCloudProvider());
|
|
33
|
-
providers.set('codex', new CodexCloudProvider(config.providers?.codex));
|
|
34
|
-
providers.set('factory', new FactoryCloudProvider());
|
|
35
|
-
}
|
|
36
|
-
export function getProvider(id) {
|
|
37
|
-
initProviders();
|
|
38
|
-
const provider = providers.get(id);
|
|
39
|
-
if (!provider) {
|
|
40
|
-
throw new Error(`Unknown cloud provider: ${id}. Available: ${[...providers.keys()].join(', ')}`);
|
|
41
|
-
}
|
|
42
|
-
return provider;
|
|
43
|
-
}
|
|
44
|
-
export function getDefaultProviderId() {
|
|
45
|
-
const config = loadCloudConfig();
|
|
46
|
-
return config.default_provider ?? 'rush';
|
|
47
|
-
}
|
|
48
|
-
export function getAllProviders() {
|
|
49
|
-
initProviders();
|
|
50
|
-
return [...providers.values()];
|
|
51
|
-
}
|
|
52
|
-
export function resolveProvider(explicit) {
|
|
53
|
-
const id = (explicit ?? getDefaultProviderId());
|
|
54
|
-
return getProvider(id);
|
|
55
|
-
}
|
|
56
|
-
//# sourceMappingURL=registry.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/lib/cloud/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAE7B,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAEpD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC;AAEpE,IAAI,OAAO,GAAuB,IAAI,CAAC;AAEvC,SAAS,eAAe;IACtB,IAAI,OAAO;QAAE,OAAO,OAAO,CAAC;IAE5B,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC9B,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAChD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAA4B,CAAC;QACxD,OAAO,GAAI,IAAI,EAAE,KAAqB,IAAI,EAAE,CAAC;IAC/C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,GAAG,EAAE,CAAC;IACf,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,SAAS,GAAwC,IAAI,GAAG,EAAE,CAAC;AAEjE,SAAS,aAAa;IACpB,IAAI,SAAS,CAAC,IAAI,GAAG,CAAC;QAAE,OAAO;IAE/B,MAAM,MAAM,GAAG,eAAe,EAAE,CAAC;IAEjC,SAAS,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,iBAAiB,EAAE,CAAC,CAAC;IAC/C,SAAS,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,kBAAkB,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC;IACxE,SAAS,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,oBAAoB,EAAE,CAAC,CAAC;AACvD,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,EAAmB;IAC7C,aAAa,EAAE,CAAC;IAChB,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACnC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,2BAA2B,EAAE,gBAAgB,CAAC,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACnG,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,oBAAoB;IAClC,MAAM,MAAM,GAAG,eAAe,EAAE,CAAC;IACjC,OAAO,MAAM,CAAC,gBAAgB,IAAI,MAAM,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,eAAe;IAC7B,aAAa,EAAE,CAAC;IAChB,OAAO,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,QAAiB;IAC/C,MAAM,EAAE,GAAG,CAAC,QAAQ,IAAI,oBAAoB,EAAE,CAAoB,CAAC;IACnE,OAAO,WAAW,CAAC,EAAE,CAAC,CAAC;AACzB,CAAC"}
|