gipity 1.0.264 → 1.0.306
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/__tests__/capture-transcript.test.d.ts +1 -0
- package/dist/__tests__/capture-transcript.test.js +92 -0
- package/dist/__tests__/capture-transcript.test.js.map +1 -0
- package/dist/__tests__/cli-smoke.test.js +5 -5
- package/dist/__tests__/cli-smoke.test.js.map +1 -1
- package/dist/__tests__/prompts.test.d.ts +1 -0
- package/dist/__tests__/prompts.test.js +129 -0
- package/dist/__tests__/prompts.test.js.map +1 -0
- package/dist/__tests__/push-cas.test.d.ts +1 -0
- package/dist/__tests__/push-cas.test.js +133 -0
- package/dist/__tests__/push-cas.test.js.map +1 -0
- package/dist/__tests__/sync-apply.test.d.ts +1 -0
- package/dist/__tests__/sync-apply.test.js +457 -0
- package/dist/__tests__/sync-apply.test.js.map +1 -0
- package/dist/__tests__/sync-lock.test.d.ts +1 -0
- package/dist/__tests__/sync-lock.test.js +105 -0
- package/dist/__tests__/sync-lock.test.js.map +1 -0
- package/dist/__tests__/sync.test.js +115 -151
- package/dist/__tests__/sync.test.js.map +1 -1
- package/dist/adopt-cwd.d.ts +66 -0
- package/dist/adopt-cwd.js +255 -0
- package/dist/adopt-cwd.js.map +1 -0
- package/dist/api.d.ts +11 -1
- package/dist/api.js +46 -3
- package/dist/api.js.map +1 -1
- package/dist/capture/sources/claude-code.d.ts +78 -0
- package/dist/capture/sources/claude-code.js +158 -0
- package/dist/capture/sources/claude-code.js.map +1 -0
- package/dist/commands/chat.js +8 -8
- package/dist/commands/chat.js.map +1 -1
- package/dist/commands/claude.js +265 -129
- package/dist/commands/claude.js.map +1 -1
- package/dist/commands/init.js +34 -59
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/location.js +1 -1
- package/dist/commands/location.js.map +1 -1
- package/dist/commands/logout.js +1 -1
- package/dist/commands/logout.js.map +1 -1
- package/dist/commands/page-inspect.js +36 -25
- package/dist/commands/page-inspect.js.map +1 -1
- package/dist/commands/page-screenshot.d.ts +2 -0
- package/dist/commands/page-screenshot.js +212 -0
- package/dist/commands/page-screenshot.js.map +1 -0
- package/dist/commands/project.js +71 -12
- package/dist/commands/project.js.map +1 -1
- package/dist/commands/relay.js +1 -1
- package/dist/commands/relay.js.map +1 -1
- package/dist/commands/scaffold.js +19 -13
- package/dist/commands/scaffold.js.map +1 -1
- package/dist/commands/sync.js +15 -24
- package/dist/commands/sync.js.map +1 -1
- package/dist/commands/uninstall.js +1 -1
- package/dist/commands/uninstall.js.map +1 -1
- package/dist/commands/update.js +1 -1
- package/dist/commands/update.js.map +1 -1
- package/dist/config.d.ts +9 -0
- package/dist/config.js +9 -0
- package/dist/config.js.map +1 -1
- package/dist/helpers/sync.d.ts +4 -2
- package/dist/helpers/sync.js +13 -7
- package/dist/helpers/sync.js.map +1 -1
- package/dist/hooks/capture-runner.d.ts +24 -0
- package/dist/hooks/capture-runner.js +233 -0
- package/dist/hooks/capture-runner.js.map +1 -0
- package/dist/index.js +17 -16
- package/dist/index.js.map +1 -1
- package/dist/project-setup.d.ts +21 -0
- package/dist/project-setup.js +42 -0
- package/dist/project-setup.js.map +1 -0
- package/dist/prompts.d.ts +7 -0
- package/dist/prompts.js +25 -2
- package/dist/prompts.js.map +1 -1
- package/dist/relay/daemon.d.ts +8 -8
- package/dist/relay/daemon.js +23 -61
- package/dist/relay/daemon.js.map +1 -1
- package/dist/relay/device-http.d.ts +9 -0
- package/dist/relay/device-http.js +58 -0
- package/dist/relay/device-http.js.map +1 -0
- package/dist/relay/onboarding.js +3 -2
- package/dist/relay/onboarding.js.map +1 -1
- package/dist/setup.d.ts +8 -0
- package/dist/setup.js +55 -16
- package/dist/setup.js.map +1 -1
- package/dist/sync.d.ts +55 -37
- package/dist/sync.js +628 -445
- package/dist/sync.js.map +1 -1
- package/dist/updater/bootstrap.d.ts +6 -1
- package/dist/updater/bootstrap.js +21 -13
- package/dist/updater/bootstrap.js.map +1 -1
- package/dist/updater/shim.js +12 -1
- package/dist/updater/shim.js.map +1 -1
- package/dist/upload.d.ts +13 -2
- package/dist/upload.js +59 -6
- package/dist/upload.js.map +1 -1
- package/package.json +2 -2
|
@@ -1,160 +1,124 @@
|
|
|
1
1
|
import { describe, it } from 'node:test';
|
|
2
2
|
import assert from 'node:assert/strict';
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
{ path:
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
{
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
assert.equal(
|
|
26
|
-
assert.equal(
|
|
27
|
-
});
|
|
28
|
-
it('
|
|
29
|
-
const
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
const
|
|
36
|
-
|
|
37
|
-
assert.equal(
|
|
38
|
-
assert.
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
const
|
|
47
|
-
assert.equal(
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
const
|
|
53
|
-
|
|
54
|
-
];
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
const
|
|
68
|
-
|
|
69
|
-
]);
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
const
|
|
83
|
-
|
|
84
|
-
assert.equal(
|
|
85
|
-
});
|
|
86
|
-
it('flags conflict when both sides diverged from baseline', () => {
|
|
87
|
-
const remote = [
|
|
88
|
-
{ path: 'src/index.html', size: 500, modified: '2024-02-01', type: 'file', guid: 'f1', contentHash: 'remote-new' },
|
|
89
|
-
];
|
|
90
|
-
const local = new Map([
|
|
91
|
-
['src/index.html', { size: 500, modified: '2024-02-02', sha256: 'local-new' }],
|
|
92
|
-
]);
|
|
93
|
-
const baseline = { 'src/index.html': { size: 500, modified: '2024-01-01', sha256: 'base-hash' } };
|
|
94
|
-
const changes = diffManifest(remote, local, 'down', baseline);
|
|
95
|
-
assert.equal(changes.length, 1);
|
|
96
|
-
assert.equal(changes[0].type, 'conflict');
|
|
97
|
-
});
|
|
98
|
-
it('treats matching hash as in-sync even when size/mtime metadata differs', () => {
|
|
99
|
-
const remote = [
|
|
100
|
-
{ path: 'src/index.html', size: 500, modified: '2024-02-01', type: 'file', guid: 'f1', contentHash: 'same-hash' },
|
|
101
|
-
];
|
|
102
|
-
const local = new Map([
|
|
103
|
-
['src/index.html', { size: 500, modified: '2024-01-01', sha256: 'same-hash' }],
|
|
104
|
-
]);
|
|
105
|
-
const changes = diffManifest(remote, local, 'down');
|
|
106
|
-
assert.equal(changes.length, 0);
|
|
3
|
+
import { plan, formatPlan } from '../sync.js';
|
|
4
|
+
function remote(path, sha, sv = 1, size = 100) {
|
|
5
|
+
return { path, size, sha256: sha, serverVersion: sv, modified: '2024-01-01' };
|
|
6
|
+
}
|
|
7
|
+
function local(size = 100, sha) {
|
|
8
|
+
return { size, mtime: '2024-01-01', sha256: sha };
|
|
9
|
+
}
|
|
10
|
+
function baselineOf(sha, sv = 1, size = 100) {
|
|
11
|
+
return { size, mtime: '2024-01-01', sha256: sha, serverVersion: sv };
|
|
12
|
+
}
|
|
13
|
+
describe('plan() — 9-cell decision table', () => {
|
|
14
|
+
it('unchanged × unchanged → noop (no action)', () => {
|
|
15
|
+
const p = plan(new Map([['foo', local(100, 'h1')]]), new Map([['foo', remote('foo', 'h1', 5)]]), { foo: baselineOf('h1', 5) });
|
|
16
|
+
assert.equal(p.actions.length, 0);
|
|
17
|
+
});
|
|
18
|
+
it('unchanged × modified → download', () => {
|
|
19
|
+
const p = plan(new Map([['foo', local(100, 'h1')]]), new Map([['foo', remote('foo', 'h2', 6)]]), { foo: baselineOf('h1', 5) });
|
|
20
|
+
assert.equal(p.actions.length, 1);
|
|
21
|
+
assert.equal(p.actions[0].kind, 'download');
|
|
22
|
+
});
|
|
23
|
+
it('unchanged × deleted → delete-local', () => {
|
|
24
|
+
const p = plan(new Map([['foo', local(100, 'h1')]]), new Map(), { foo: baselineOf('h1', 5) });
|
|
25
|
+
assert.equal(p.actions.length, 1);
|
|
26
|
+
assert.equal(p.actions[0].kind, 'delete-local');
|
|
27
|
+
});
|
|
28
|
+
it('modified × unchanged → upload with CAS=baseline.serverVersion', () => {
|
|
29
|
+
const p = plan(new Map([['foo', local(100, 'h-local-new')]]), new Map([['foo', remote('foo', 'h1', 5)]]), { foo: baselineOf('h1', 5) });
|
|
30
|
+
assert.equal(p.actions.length, 1);
|
|
31
|
+
assert.equal(p.actions[0].kind, 'upload');
|
|
32
|
+
assert.equal(p.actions[0].expectedServerVersion, 5);
|
|
33
|
+
});
|
|
34
|
+
it('modified × modified (shas differ) → conflict', () => {
|
|
35
|
+
const p = plan(new Map([['foo', local(100, 'h-local')]]), new Map([['foo', remote('foo', 'h-remote', 6)]]), { foo: baselineOf('h-base', 5) });
|
|
36
|
+
assert.equal(p.actions.length, 1);
|
|
37
|
+
assert.equal(p.actions[0].kind, 'conflict');
|
|
38
|
+
assert.ok(p.actions[0].renamedLocalTo);
|
|
39
|
+
assert.ok(p.actions[0].renamedLocalTo.includes('conflict from'));
|
|
40
|
+
});
|
|
41
|
+
it('modified × modified (shas happen to match) → noop', () => {
|
|
42
|
+
const p = plan(new Map([['foo', local(100, 'h-new')]]), new Map([['foo', remote('foo', 'h-new', 6)]]), { foo: baselineOf('h-base', 5) });
|
|
43
|
+
assert.equal(p.actions.length, 0);
|
|
44
|
+
});
|
|
45
|
+
it('modified × deleted → re-upload as new (expected=null)', () => {
|
|
46
|
+
const p = plan(new Map([['foo', local(100, 'h-local')]]), new Map(), { foo: baselineOf('h-base', 5) });
|
|
47
|
+
assert.equal(p.actions.length, 1);
|
|
48
|
+
assert.equal(p.actions[0].kind, 'upload');
|
|
49
|
+
assert.equal(p.actions[0].expectedServerVersion, null);
|
|
50
|
+
});
|
|
51
|
+
it('added × absent → upload as new (expected=null)', () => {
|
|
52
|
+
const p = plan(new Map([['foo', local(100, 'h1')]]), new Map(), {});
|
|
53
|
+
assert.equal(p.actions.length, 1);
|
|
54
|
+
assert.equal(p.actions[0].kind, 'upload');
|
|
55
|
+
assert.equal(p.actions[0].expectedServerVersion, null);
|
|
56
|
+
});
|
|
57
|
+
it('added × added (shas match) → noop', () => {
|
|
58
|
+
const p = plan(new Map([['foo', local(100, 'h1')]]), new Map([['foo', remote('foo', 'h1', 1)]]), {});
|
|
59
|
+
assert.equal(p.actions.length, 0);
|
|
60
|
+
});
|
|
61
|
+
it('added × added (shas differ) → conflict', () => {
|
|
62
|
+
const p = plan(new Map([['foo', local(100, 'h-local')]]), new Map([['foo', remote('foo', 'h-remote', 1)]]), {});
|
|
63
|
+
assert.equal(p.actions.length, 1);
|
|
64
|
+
assert.equal(p.actions[0].kind, 'conflict');
|
|
65
|
+
});
|
|
66
|
+
it('deleted × unchanged → delete-remote with CAS=baseline.serverVersion', () => {
|
|
67
|
+
const p = plan(new Map(), new Map([['foo', remote('foo', 'h1', 5)]]), { foo: baselineOf('h1', 5) });
|
|
68
|
+
assert.equal(p.actions.length, 1);
|
|
69
|
+
assert.equal(p.actions[0].kind, 'delete-remote');
|
|
70
|
+
assert.equal(p.actions[0].expectedServerVersion, 5);
|
|
71
|
+
});
|
|
72
|
+
it('deleted × modified → download (remote preserved)', () => {
|
|
73
|
+
const p = plan(new Map(), new Map([['foo', remote('foo', 'h-new', 6)]]), { foo: baselineOf('h-base', 5) });
|
|
74
|
+
assert.equal(p.actions.length, 1);
|
|
75
|
+
assert.equal(p.actions[0].kind, 'download');
|
|
76
|
+
});
|
|
77
|
+
it('deleted × deleted → noop (baseline dropped silently)', () => {
|
|
78
|
+
const p = plan(new Map(), new Map(), { foo: baselineOf('h1', 5) });
|
|
79
|
+
assert.equal(p.actions.length, 0);
|
|
80
|
+
});
|
|
81
|
+
it('absent × added → download (remote added since last sync)', () => {
|
|
82
|
+
const p = plan(new Map(), new Map([['foo', remote('foo', 'h1', 1)]]), {});
|
|
83
|
+
assert.equal(p.actions.length, 1);
|
|
84
|
+
assert.equal(p.actions[0].kind, 'download');
|
|
107
85
|
});
|
|
108
86
|
});
|
|
109
|
-
describe('
|
|
110
|
-
it('
|
|
111
|
-
const
|
|
112
|
-
['
|
|
113
|
-
['
|
|
114
|
-
['
|
|
115
|
-
['
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
assert.equal(
|
|
87
|
+
describe('plan() — summary counts', () => {
|
|
88
|
+
it('counts uploads, downloads, conflicts, deletes correctly', () => {
|
|
89
|
+
const p = plan(new Map([
|
|
90
|
+
['add', local(100, 'a1')], // → upload
|
|
91
|
+
['mod', local(100, 'm2')], // → upload (CAS)
|
|
92
|
+
['keep', local(100, 'k1')], // unchanged
|
|
93
|
+
['conflict', local(100, 'cL')], // → conflict
|
|
94
|
+
['delremote', local(100, 'd1')], // unchanged, remote deletes → delete-local
|
|
95
|
+
]), new Map([
|
|
96
|
+
['mod', remote('mod', 'm1', 5)],
|
|
97
|
+
['keep', remote('keep', 'k1', 3)],
|
|
98
|
+
['conflict', remote('conflict', 'cR', 7)],
|
|
99
|
+
['remote-new', remote('remote-new', 'r1', 1)], // → download
|
|
100
|
+
]), {
|
|
101
|
+
mod: baselineOf('m1', 5),
|
|
102
|
+
keep: baselineOf('k1', 3),
|
|
103
|
+
conflict: baselineOf('cBase', 6),
|
|
104
|
+
delremote: baselineOf('d1', 4),
|
|
105
|
+
});
|
|
106
|
+
assert.equal(p.uploads, 2);
|
|
107
|
+
assert.equal(p.downloads, 1);
|
|
108
|
+
assert.equal(p.deletesLocal, 1);
|
|
109
|
+
assert.equal(p.conflicts, 1);
|
|
129
110
|
});
|
|
130
111
|
});
|
|
131
|
-
describe('
|
|
132
|
-
it('returns
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
const
|
|
138
|
-
|
|
139
|
-
assert.ok(
|
|
140
|
-
|
|
141
|
-
it('shows singular file in recent pull message', () => {
|
|
142
|
-
const lastPull = { timestamp: new Date().toISOString(), count: 1, summary: '1 change:' };
|
|
143
|
-
const result = formatDiff([], 'down', lastPull);
|
|
144
|
-
assert.ok(result.includes('1 file pulled'));
|
|
145
|
-
assert.ok(!result.includes('1 files'));
|
|
146
|
-
});
|
|
147
|
-
it('formats changes with counts', () => {
|
|
148
|
-
const changes = [
|
|
149
|
-
{ type: 'added', path: 'src/new.js', remoteSize: 100 },
|
|
150
|
-
{ type: 'modified', path: 'src/app.js', localSize: 1000, remoteSize: 1200 },
|
|
151
|
-
{ type: 'deleted', path: 'src/old.js', localSize: 50 },
|
|
152
|
-
];
|
|
153
|
-
const output = formatDiff(changes, 'down');
|
|
154
|
-
assert.ok(output.includes('3 changes'));
|
|
155
|
-
assert.ok(output.includes('+ src/new.js'));
|
|
156
|
-
assert.ok(output.includes('~ src/app.js'));
|
|
157
|
-
assert.ok(output.includes('- src/old.js'));
|
|
112
|
+
describe('formatPlan', () => {
|
|
113
|
+
it('returns "Up to date." for empty plan', () => {
|
|
114
|
+
const p = plan(new Map(), new Map(), {});
|
|
115
|
+
assert.equal(formatPlan(p), 'Up to date.');
|
|
116
|
+
});
|
|
117
|
+
it('includes action counts in the summary line', () => {
|
|
118
|
+
const p = plan(new Map([['foo', local(100, 'h1')]]), new Map(), {});
|
|
119
|
+
const out = formatPlan(p);
|
|
120
|
+
assert.ok(out.includes('1 upload'));
|
|
121
|
+
assert.ok(out.includes('↑ foo'));
|
|
158
122
|
});
|
|
159
123
|
});
|
|
160
124
|
//# sourceMappingURL=sync.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync.test.js","sourceRoot":"","sources":["../../src/__tests__/sync.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"sync.test.js","sourceRoot":"","sources":["../../src/__tests__/sync.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
export interface ProjectData {
|
|
2
|
+
short_guid: string;
|
|
3
|
+
name: string;
|
|
4
|
+
slug: string;
|
|
5
|
+
}
|
|
6
|
+
export type AdoptTier = 'easy' | 'moderate' | 'refuse';
|
|
7
|
+
export interface AdoptScan {
|
|
8
|
+
tier: AdoptTier;
|
|
9
|
+
files: number;
|
|
10
|
+
bytes: number;
|
|
11
|
+
/** True once we hit the refuse threshold and stopped walking. */
|
|
12
|
+
truncated: boolean;
|
|
13
|
+
}
|
|
14
|
+
/** Walk `cwd` (respecting `isSyncIgnored`) and bucket by file count + size.
|
|
15
|
+
* Bails out early once we cross either refuse threshold so a 1M-file dir
|
|
16
|
+
* doesn't take seconds to count. */
|
|
17
|
+
export declare function scanForAdoption(cwd: string): AdoptScan;
|
|
18
|
+
/** Treat cwd as "empty" if it has no entries that aren't sync-ignored
|
|
19
|
+
* (dotfiles, node_modules, .git, etc.). When true, the picker should still
|
|
20
|
+
* offer the "what would you like to build?" prompt so Claude can scaffold
|
|
21
|
+
* in place. */
|
|
22
|
+
export declare function isLikelyEmpty(cwd: string): boolean;
|
|
23
|
+
/** Hide-list for "Use this directory" — places where adopting cwd as a
|
|
24
|
+
* project is obviously wrong. Exact-match only; subdirectories are fine
|
|
25
|
+
* (e.g. `/tmp/scratch` is allowed, just not `/tmp` itself). */
|
|
26
|
+
export declare function canAdoptCwd(cwd: string): boolean;
|
|
27
|
+
/** Format `cwd` as a short two-segment tail for picker labels:
|
|
28
|
+
* /home/steve/Github/Gipity → ~/Github/Gipity (collapse home)
|
|
29
|
+
* /tmp/scratch → /tmp/scratch
|
|
30
|
+
* Used to give the user enough context to recognize the dir without
|
|
31
|
+
* taking up the whole line. */
|
|
32
|
+
export declare function formatCwdLabel(cwd: string): string;
|
|
33
|
+
/** Format byte count handling KB/MB/GB. utils.formatSize tops out at MB,
|
|
34
|
+
* which prints "1024.0 MB" for the 1 GB refuse threshold. */
|
|
35
|
+
export declare function formatBytes(n: number): string;
|
|
36
|
+
export interface AdoptResult {
|
|
37
|
+
project: ProjectData;
|
|
38
|
+
isNew: boolean;
|
|
39
|
+
agentGuid: string;
|
|
40
|
+
accountSlug: string;
|
|
41
|
+
applied: number;
|
|
42
|
+
}
|
|
43
|
+
/** Adopt `cwd` as a Gipity project. Mirrors `gipity init`'s flow:
|
|
44
|
+
* 1. Slug = slugify(basename(cwd)) — provided by caller (so caller can
|
|
45
|
+
* validate/prompt as needed).
|
|
46
|
+
* 2. Try to match an existing server project by slug; adopt if found.
|
|
47
|
+
* 3. Otherwise POST /projects with relay-device wiring.
|
|
48
|
+
* 4. Fetch agent + account, then `finalizeLocalProject` to write config,
|
|
49
|
+
* sync, and install hooks/skills/gitignore.
|
|
50
|
+
* Caller is responsible for the size-tier check before calling. */
|
|
51
|
+
export declare function adoptCurrentDir(opts: {
|
|
52
|
+
cwd: string;
|
|
53
|
+
projectName: string;
|
|
54
|
+
projectSlug: string;
|
|
55
|
+
accountSlug: string;
|
|
56
|
+
confirmDeletions: boolean;
|
|
57
|
+
/** Force a specific agent guid; skip the auto-lookup. */
|
|
58
|
+
agentOverride?: string;
|
|
59
|
+
}): Promise<AdoptResult>;
|
|
60
|
+
/** Re-export so callers can unify on these constants for messaging. */
|
|
61
|
+
export declare const ADOPT_THRESHOLDS: {
|
|
62
|
+
EASY_FILES: number;
|
|
63
|
+
EASY_BYTES: number;
|
|
64
|
+
REFUSE_FILES: number;
|
|
65
|
+
REFUSE_BYTES: number;
|
|
66
|
+
};
|