crewly 1.20.303 → 1.20.305
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/config/skills/orchestrator/move-team/SKILL.md +53 -0
- package/config/skills/orchestrator/move-team/execute.sh +42 -0
- package/dist/backend/backend/src/constants.d.ts +82 -0
- package/dist/backend/backend/src/constants.d.ts.map +1 -1
- package/dist/backend/backend/src/constants.js +82 -0
- package/dist/backend/backend/src/constants.js.map +1 -1
- package/dist/backend/backend/src/controllers/team-move/team-move.controller.d.ts +39 -0
- package/dist/backend/backend/src/controllers/team-move/team-move.controller.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/team-move/team-move.controller.js +211 -0
- package/dist/backend/backend/src/controllers/team-move/team-move.controller.js.map +1 -0
- package/dist/backend/backend/src/index.d.ts.map +1 -1
- package/dist/backend/backend/src/index.js +22 -3
- package/dist/backend/backend/src/index.js.map +1 -1
- package/dist/backend/backend/src/routes/api.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/routes/api.routes.js +3 -0
- package/dist/backend/backend/src/routes/api.routes.js.map +1 -1
- package/dist/backend/backend/src/services/cloud/cloud-sync.types.d.ts +1 -1
- package/dist/backend/backend/src/services/cloud/cloud-sync.types.d.ts.map +1 -1
- package/dist/backend/backend/src/services/cloud/cloud-sync.types.js +1 -0
- package/dist/backend/backend/src/services/cloud/cloud-sync.types.js.map +1 -1
- package/dist/backend/backend/src/services/core/storage.service.d.ts +18 -0
- package/dist/backend/backend/src/services/core/storage.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/core/storage.service.js +16 -0
- package/dist/backend/backend/src/services/core/storage.service.js.map +1 -1
- package/dist/backend/backend/src/services/decisions/decision.service.d.ts +19 -0
- package/dist/backend/backend/src/services/decisions/decision.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/decisions/decision.service.js +46 -0
- package/dist/backend/backend/src/services/decisions/decision.service.js.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-initializer.d.ts.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-initializer.js +2 -1
- package/dist/backend/backend/src/services/slack/slack-initializer.js.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-team-channel.service.d.ts +9 -0
- package/dist/backend/backend/src/services/slack/slack-team-channel.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-team-channel.service.js +25 -0
- package/dist/backend/backend/src/services/slack/slack-team-channel.service.js.map +1 -1
- package/dist/backend/backend/src/services/task-pool/task-pool.service.d.ts +19 -0
- package/dist/backend/backend/src/services/task-pool/task-pool.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/task-pool/task-pool.service.js +41 -0
- package/dist/backend/backend/src/services/task-pool/task-pool.service.js.map +1 -1
- package/dist/backend/backend/src/services/team-move/team-move-archive.d.ts +122 -0
- package/dist/backend/backend/src/services/team-move/team-move-archive.d.ts.map +1 -0
- package/dist/backend/backend/src/services/team-move/team-move-archive.js +202 -0
- package/dist/backend/backend/src/services/team-move/team-move-archive.js.map +1 -0
- package/dist/backend/backend/src/services/team-move/team-move-chat.d.ts +59 -0
- package/dist/backend/backend/src/services/team-move/team-move-chat.d.ts.map +1 -0
- package/dist/backend/backend/src/services/team-move/team-move-chat.js +133 -0
- package/dist/backend/backend/src/services/team-move/team-move-chat.js.map +1 -0
- package/dist/backend/backend/src/services/team-move/team-move-cloud.client.d.ts +102 -0
- package/dist/backend/backend/src/services/team-move/team-move-cloud.client.d.ts.map +1 -0
- package/dist/backend/backend/src/services/team-move/team-move-cloud.client.js +217 -0
- package/dist/backend/backend/src/services/team-move/team-move-cloud.client.js.map +1 -0
- package/dist/backend/backend/src/services/team-move/team-move-crypto.d.ts +102 -0
- package/dist/backend/backend/src/services/team-move/team-move-crypto.d.ts.map +1 -0
- package/dist/backend/backend/src/services/team-move/team-move-crypto.js +348 -0
- package/dist/backend/backend/src/services/team-move/team-move-crypto.js.map +1 -0
- package/dist/backend/backend/src/services/team-move/team-move-driver.service.d.ts +209 -0
- package/dist/backend/backend/src/services/team-move/team-move-driver.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/team-move/team-move-driver.service.js +504 -0
- package/dist/backend/backend/src/services/team-move/team-move-driver.service.js.map +1 -0
- package/dist/backend/backend/src/services/team-move/team-move-exporter.d.ts +182 -0
- package/dist/backend/backend/src/services/team-move/team-move-exporter.d.ts.map +1 -0
- package/dist/backend/backend/src/services/team-move/team-move-exporter.js +537 -0
- package/dist/backend/backend/src/services/team-move/team-move-exporter.js.map +1 -0
- package/dist/backend/backend/src/services/team-move/team-move-fs.d.ts +157 -0
- package/dist/backend/backend/src/services/team-move/team-move-fs.d.ts.map +1 -0
- package/dist/backend/backend/src/services/team-move/team-move-fs.js +298 -0
- package/dist/backend/backend/src/services/team-move/team-move-fs.js.map +1 -0
- package/dist/backend/backend/src/services/team-move/team-move-git.d.ts +69 -0
- package/dist/backend/backend/src/services/team-move/team-move-git.d.ts.map +1 -0
- package/dist/backend/backend/src/services/team-move/team-move-git.js +198 -0
- package/dist/backend/backend/src/services/team-move/team-move-git.js.map +1 -0
- package/dist/backend/backend/src/services/team-move/team-move-importer.d.ts +121 -0
- package/dist/backend/backend/src/services/team-move/team-move-importer.d.ts.map +1 -0
- package/dist/backend/backend/src/services/team-move/team-move-importer.js +473 -0
- package/dist/backend/backend/src/services/team-move/team-move-importer.js.map +1 -0
- package/dist/backend/backend/src/services/team-move/team-move-journal.d.ts +110 -0
- package/dist/backend/backend/src/services/team-move/team-move-journal.d.ts.map +1 -0
- package/dist/backend/backend/src/services/team-move/team-move-journal.js +198 -0
- package/dist/backend/backend/src/services/team-move/team-move-journal.js.map +1 -0
- package/dist/backend/backend/src/services/team-move/team-move-machines.d.ts +62 -0
- package/dist/backend/backend/src/services/team-move/team-move-machines.d.ts.map +1 -0
- package/dist/backend/backend/src/services/team-move/team-move-machines.js +95 -0
- package/dist/backend/backend/src/services/team-move/team-move-machines.js.map +1 -0
- package/dist/backend/backend/src/services/team-move/team-move-preflight.d.ts +71 -0
- package/dist/backend/backend/src/services/team-move/team-move-preflight.d.ts.map +1 -0
- package/dist/backend/backend/src/services/team-move/team-move-preflight.js +102 -0
- package/dist/backend/backend/src/services/team-move/team-move-preflight.js.map +1 -0
- package/dist/backend/backend/src/services/team-move/team-move-runtime.d.ts +29 -0
- package/dist/backend/backend/src/services/team-move/team-move-runtime.d.ts.map +1 -0
- package/dist/backend/backend/src/services/team-move/team-move-runtime.js +173 -0
- package/dist/backend/backend/src/services/team-move/team-move-runtime.js.map +1 -0
- package/dist/backend/backend/src/services/team-move/team-move-secret-scan.d.ts +50 -0
- package/dist/backend/backend/src/services/team-move/team-move-secret-scan.d.ts.map +1 -0
- package/dist/backend/backend/src/services/team-move/team-move-secret-scan.js +96 -0
- package/dist/backend/backend/src/services/team-move/team-move-secret-scan.js.map +1 -0
- package/dist/backend/backend/src/services/team-move/team-move-select.d.ts +94 -0
- package/dist/backend/backend/src/services/team-move/team-move-select.d.ts.map +1 -0
- package/dist/backend/backend/src/services/team-move/team-move-select.js +124 -0
- package/dist/backend/backend/src/services/team-move/team-move-select.js.map +1 -0
- package/dist/backend/backend/src/services/team-move/team-move.fixture.d.ts +46 -0
- package/dist/backend/backend/src/services/team-move/team-move.fixture.d.ts.map +1 -0
- package/dist/backend/backend/src/services/team-move/team-move.fixture.js +202 -0
- package/dist/backend/backend/src/services/team-move/team-move.fixture.js.map +1 -0
- package/dist/backend/backend/src/services/team-move/team-move.types.d.ts +279 -0
- package/dist/backend/backend/src/services/team-move/team-move.types.d.ts.map +1 -0
- package/dist/backend/backend/src/services/team-move/team-move.types.js +44 -0
- package/dist/backend/backend/src/services/team-move/team-move.types.js.map +1 -0
- package/dist/backend/build-info.json +2 -2
- package/dist/cli/backend/src/constants.d.ts +82 -0
- package/dist/cli/backend/src/constants.d.ts.map +1 -1
- package/dist/cli/backend/src/constants.js +82 -0
- package/dist/cli/backend/src/constants.js.map +1 -1
- package/dist/cli/backend/src/services/cloud/cloud-sync.types.d.ts +1 -1
- package/dist/cli/backend/src/services/cloud/cloud-sync.types.d.ts.map +1 -1
- package/dist/cli/backend/src/services/cloud/cloud-sync.types.js +1 -0
- package/dist/cli/backend/src/services/cloud/cloud-sync.types.js.map +1 -1
- package/dist/cli/backend/src/services/core/storage.service.d.ts +18 -0
- package/dist/cli/backend/src/services/core/storage.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/core/storage.service.js +16 -0
- package/dist/cli/backend/src/services/core/storage.service.js.map +1 -1
- package/dist/cli/backend/src/services/decisions/decision.service.d.ts +19 -0
- package/dist/cli/backend/src/services/decisions/decision.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/decisions/decision.service.js +46 -0
- package/dist/cli/backend/src/services/decisions/decision.service.js.map +1 -1
- package/dist/cli/backend/src/services/slack/slack-team-channel.service.d.ts +9 -0
- package/dist/cli/backend/src/services/slack/slack-team-channel.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/slack/slack-team-channel.service.js +25 -0
- package/dist/cli/backend/src/services/slack/slack-team-channel.service.js.map +1 -1
- package/dist/cli/backend/src/services/task-pool/task-pool.service.d.ts +19 -0
- package/dist/cli/backend/src/services/task-pool/task-pool.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/task-pool/task-pool.service.js +41 -0
- package/dist/cli/backend/src/services/task-pool/task-pool.service.js.map +1 -1
- package/dist/cli/cli/src/commands/team-move.d.ts +68 -0
- package/dist/cli/cli/src/commands/team-move.d.ts.map +1 -0
- package/dist/cli/cli/src/commands/team-move.js +159 -0
- package/dist/cli/cli/src/commands/team-move.js.map +1 -0
- package/dist/cli/cli/src/index.js +33 -0
- package/dist/cli/cli/src/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Test fixture of the team move: builds a throwaway Crewly home with one team
|
|
3
|
+
* (plus a decoy team that must not travel), its agents' memory, handover notes,
|
|
4
|
+
* a project with `.crewly` data and a git repository, task-pool items,
|
|
5
|
+
* decisions, chat channels and a Slack channel mapping.
|
|
6
|
+
*
|
|
7
|
+
* @module services/team-move/team-move.fixture
|
|
8
|
+
*/
|
|
9
|
+
import { execFileSync } from 'node:child_process';
|
|
10
|
+
import * as fs from 'node:fs/promises';
|
|
11
|
+
import * as os from 'node:os';
|
|
12
|
+
import * as path from 'node:path';
|
|
13
|
+
import { openChatDatabase } from '../chat-v2/sqlite/chat-db.js';
|
|
14
|
+
/** Ids of the fixture. */
|
|
15
|
+
export const FIXTURE = {
|
|
16
|
+
teamId: '11111111-1111-4111-8111-111111111111',
|
|
17
|
+
decoyTeamId: '22222222-2222-4222-8222-222222222222',
|
|
18
|
+
projectId: '33333333-3333-4333-8333-333333333333',
|
|
19
|
+
leadId: 'aaaaaaaa-0000-4000-8000-000000000001',
|
|
20
|
+
devId: 'aaaaaaaa-0000-4000-8000-000000000002',
|
|
21
|
+
leadSession: 'movers-lena-aaaaaaaa',
|
|
22
|
+
devSession: 'movers-dev-bbbbbbbb',
|
|
23
|
+
decoySession: 'decoy-dan-cccccccc',
|
|
24
|
+
channelId: 'chan-0001-team-channel',
|
|
25
|
+
dmId: 'chan-0002-lena-dm',
|
|
26
|
+
};
|
|
27
|
+
/**
|
|
28
|
+
* Write a JSON file, creating folders.
|
|
29
|
+
*
|
|
30
|
+
* @param file - Destination
|
|
31
|
+
* @param value - Content
|
|
32
|
+
*/
|
|
33
|
+
async function writeJson(file, value) {
|
|
34
|
+
await fs.mkdir(path.dirname(file), { recursive: true });
|
|
35
|
+
await fs.writeFile(file, JSON.stringify(value, null, 2));
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Write a text file, creating folders.
|
|
39
|
+
*
|
|
40
|
+
* @param file - Destination
|
|
41
|
+
* @param text - Content
|
|
42
|
+
*/
|
|
43
|
+
async function writeText(file, text) {
|
|
44
|
+
await fs.mkdir(path.dirname(file), { recursive: true });
|
|
45
|
+
await fs.writeFile(file, text);
|
|
46
|
+
}
|
|
47
|
+
const git = (cwd, ...args) => execFileSync('git', args, { cwd, encoding: 'utf8', env: { ...process.env, GIT_AUTHOR_NAME: 't', GIT_AUTHOR_EMAIL: 't@t', GIT_COMMITTER_NAME: 't', GIT_COMMITTER_EMAIL: 't@t' } }).trim();
|
|
48
|
+
/**
|
|
49
|
+
* Build the source machine.
|
|
50
|
+
*
|
|
51
|
+
* @returns Paths and a cleanup function
|
|
52
|
+
*/
|
|
53
|
+
export async function buildSourceFixture() {
|
|
54
|
+
const root = await fs.mkdtemp(path.join(os.tmpdir(), 'crewly-move-fixture-'));
|
|
55
|
+
const home = path.join(root, 'source-home', '.crewly');
|
|
56
|
+
const projectDir = path.join(root, 'source-projects', 'movers-app');
|
|
57
|
+
const remoteDir = path.join(root, 'remote.git');
|
|
58
|
+
const F = FIXTURE;
|
|
59
|
+
const now = '2026-10-10T10:00:00.000Z';
|
|
60
|
+
// Git: a bare remote with one pushed commit; the project is a clone of it.
|
|
61
|
+
await fs.mkdir(remoteDir, { recursive: true });
|
|
62
|
+
git(remoteDir, 'init', '--bare', '-q', '-b', 'main');
|
|
63
|
+
await fs.mkdir(projectDir, { recursive: true });
|
|
64
|
+
git(projectDir, 'init', '-q', '-b', 'main');
|
|
65
|
+
await writeText(path.join(projectDir, 'README.md'), '# movers app\n');
|
|
66
|
+
await writeText(path.join(projectDir, '.gitignore'), '.crewly/\n');
|
|
67
|
+
git(projectDir, 'add', '-A');
|
|
68
|
+
git(projectDir, 'commit', '-q', '-m', 'first');
|
|
69
|
+
git(projectDir, 'remote', 'add', 'origin', remoteDir);
|
|
70
|
+
git(projectDir, 'push', '-q', '-u', 'origin', 'main');
|
|
71
|
+
// Project-local Crewly data.
|
|
72
|
+
await writeText(path.join(projectDir, '.crewly', 'tickets', 'MOV-1-ship-it.md'), `---\nid: MOV-1\nstatus: ready\n---\nShip it from ${projectDir}/src\n`);
|
|
73
|
+
await writeText(path.join(projectDir, '.crewly', 'tickets', 'MOV-2-second.md'), '---\nid: MOV-2\nstatus: backlog\n---\nSecond ticket\n');
|
|
74
|
+
await writeJson(path.join(projectDir, '.crewly', 'missions', 'm1.json'), { id: 'm1', title: 'Launch', objective: 'ship' });
|
|
75
|
+
await writeText(path.join(projectDir, '.crewly', 'findings', 'notes.md'), 'findings\n');
|
|
76
|
+
await writeText(path.join(projectDir, '.crewly', 'logs', 'noise.log'), 'log noise\n');
|
|
77
|
+
await writeText(path.join(projectDir, '.crewly', 'tickets', 'old.md.bak-1'), 'backup\n');
|
|
78
|
+
// Teams.
|
|
79
|
+
const member = (id, name, role, session) => ({
|
|
80
|
+
id,
|
|
81
|
+
name,
|
|
82
|
+
sessionName: session,
|
|
83
|
+
role,
|
|
84
|
+
systemPrompt: `You are ${name}. Work in ${projectDir}. Use ffmpeg for video.`,
|
|
85
|
+
agentStatus: 'active',
|
|
86
|
+
workingStatus: 'in_progress',
|
|
87
|
+
runtimeType: 'claude-code',
|
|
88
|
+
readyAt: now,
|
|
89
|
+
dropoutReason: 'idle_exit',
|
|
90
|
+
createdAt: now,
|
|
91
|
+
updatedAt: now,
|
|
92
|
+
agentId: session,
|
|
93
|
+
});
|
|
94
|
+
const teamDir = path.join(home, 'teams', F.teamId);
|
|
95
|
+
await writeJson(path.join(teamDir, 'config.json'), {
|
|
96
|
+
id: F.teamId,
|
|
97
|
+
name: 'Movers',
|
|
98
|
+
description: 'Team that moves',
|
|
99
|
+
members: [member(F.leadId, 'Lena', 'tech-lead', F.leadSession), member(F.devId, 'Dev', 'developer', F.devSession)],
|
|
100
|
+
projectIds: [F.projectId],
|
|
101
|
+
leaderId: F.leadId,
|
|
102
|
+
leaderIds: [F.leadId],
|
|
103
|
+
createdAt: now,
|
|
104
|
+
updatedAt: now,
|
|
105
|
+
});
|
|
106
|
+
await writeText(path.join(teamDir, 'prompts', `${F.leadId}.md`), 'lead prompt');
|
|
107
|
+
await writeText(path.join(teamDir, 'norms', 'review.md'), '# Review norm\nAlways review with Google Drive docs.\n');
|
|
108
|
+
await writeText(path.join(teamDir, 'sops', 'release.md'), '# Release SOP\n');
|
|
109
|
+
await writeText(path.join(teamDir, 'wiki', 'llm-curated', 'index.md'), '# Wiki index\n');
|
|
110
|
+
await writeText(path.join(teamDir, 'wiki', 'llm-curated', 'usage.jsonl'), '{"x":1}\n');
|
|
111
|
+
await writeJson(path.join(teamDir, 'cron-tasks.json'), { tasks: [{ id: 'cron-1', cron: '0 9 * * *', message: 'daily' }] });
|
|
112
|
+
await writeJson(path.join(teamDir, 'config.json.bak-1'), { stale: true });
|
|
113
|
+
const decoyDir = path.join(home, 'teams', F.decoyTeamId);
|
|
114
|
+
await writeJson(path.join(decoyDir, 'config.json'), {
|
|
115
|
+
id: F.decoyTeamId,
|
|
116
|
+
name: 'Decoy',
|
|
117
|
+
members: [member('dddddddd-0000-4000-8000-000000000001', 'Dan', 'developer', F.decoySession)],
|
|
118
|
+
projectIds: [],
|
|
119
|
+
createdAt: now,
|
|
120
|
+
updatedAt: now,
|
|
121
|
+
});
|
|
122
|
+
await writeJson(path.join(home, 'projects.json'), [
|
|
123
|
+
{ id: F.projectId, name: 'Movers App', path: projectDir, teams: {}, status: 'stopped', createdAt: now, updatedAt: now },
|
|
124
|
+
]);
|
|
125
|
+
// Agent memory and handover notes.
|
|
126
|
+
for (const s of [F.leadSession, F.devSession, F.decoySession]) {
|
|
127
|
+
await writeJson(path.join(home, 'agents', s, 'memory.json'), { session: s, notes: [`remember ${s}`] });
|
|
128
|
+
await writeText(path.join(home, 'agents', s, 'standing.md'), `standing answers of ${s}\n`);
|
|
129
|
+
await writeText(path.join(home, 'agents', s, 'sessions', '2026-10-01-10-00.md'), `summary of ${s}\n`);
|
|
130
|
+
}
|
|
131
|
+
for (let i = 0; i < 12; i++) {
|
|
132
|
+
const stamp = `2026-10-${String(i + 1).padStart(2, '0')}T10-00-00-000Z`;
|
|
133
|
+
await writeText(path.join(home, 'handover', `${F.leadSession}-${stamp}.md`), `handover ${i}`);
|
|
134
|
+
}
|
|
135
|
+
await writeText(path.join(home, 'handover', `${F.decoySession}-2026-10-01T10-00-00-000Z.md`), 'decoy handover');
|
|
136
|
+
// Task pool.
|
|
137
|
+
const item = (id, target, status) => ({
|
|
138
|
+
id,
|
|
139
|
+
type: 'delegate',
|
|
140
|
+
owner: 'team_lead',
|
|
141
|
+
target,
|
|
142
|
+
title: `item ${id}`,
|
|
143
|
+
description: `see ${projectDir}`,
|
|
144
|
+
status,
|
|
145
|
+
createdAt: now,
|
|
146
|
+
retryCount: 0,
|
|
147
|
+
maxRetries: 3,
|
|
148
|
+
inputTokens: 0,
|
|
149
|
+
outputTokens: 0,
|
|
150
|
+
cost: 0,
|
|
151
|
+
startedAt: status === 'running' ? now : undefined,
|
|
152
|
+
});
|
|
153
|
+
await writeJson(path.join(home, 'task-pool', 'pool.json'), {
|
|
154
|
+
workItems: [item('wi-queued', F.devSession, 'queued'), item('wi-running', F.leadSession, 'running'), item('wi-done', F.devSession, 'done'), item('wi-decoy', F.decoySession, 'queued')],
|
|
155
|
+
claims: [],
|
|
156
|
+
lastUpdatedAt: now,
|
|
157
|
+
});
|
|
158
|
+
// Decisions.
|
|
159
|
+
await writeJson(path.join(home, 'owner-decisions.json'), {
|
|
160
|
+
nextId: 3,
|
|
161
|
+
decisions: [
|
|
162
|
+
{ id: 'D-1', question: 'Ship?', options: [], defaultKey: 'wait', deadline: now, requestedBy: F.leadSession, asker: F.leadSession, teamId: F.teamId, status: 'open', card: { slackChannelId: 'C1', messageTs: '1.1', postedBy: 'crewly' }, createdAt: now, updatedAt: now },
|
|
163
|
+
{ id: 'D-2', question: 'Old?', options: [], defaultKey: 'wait', deadline: now, requestedBy: F.leadSession, asker: F.leadSession, teamId: F.teamId, status: 'resolved', createdAt: now, updatedAt: now },
|
|
164
|
+
],
|
|
165
|
+
});
|
|
166
|
+
// Slack channel mapping.
|
|
167
|
+
await writeJson(path.join(home, 'slack-team-channels.json'), {
|
|
168
|
+
version: 1,
|
|
169
|
+
autoCreate: true,
|
|
170
|
+
channelPrefix: '',
|
|
171
|
+
mappings: [{ teamId: F.teamId, slackChannelId: 'C0MOVERS', slackChannelName: 'movers', chatChannelId: F.channelId, createdAt: now, autoCreated: true }],
|
|
172
|
+
});
|
|
173
|
+
// Chat channels.
|
|
174
|
+
const db = openChatDatabase({ dbPath: path.join(home, 'chat.db'), skipIntegrityCheck: true });
|
|
175
|
+
try {
|
|
176
|
+
const insert = db.prepare('INSERT INTO chat_channels (id, agent_session, owner_user_id, name, purpose, created_at, type, team_id) VALUES (?, ?, ?, ?, ?, ?, ?, ?)');
|
|
177
|
+
insert.run(F.channelId, '', 'owner', 'movers', null, Date.parse(now), 'huddle', F.teamId);
|
|
178
|
+
insert.run(F.dmId, F.leadSession, 'owner', 'Lena', null, Date.parse(now), 'dm', null);
|
|
179
|
+
insert.run('chan-0003-decoy-dm', F.decoySession, 'owner', 'Dan', null, Date.parse(now), 'dm', null);
|
|
180
|
+
const member = db.prepare('INSERT INTO chat_channel_members (channel_id, member_session, joined_at) VALUES (?, ?, ?)');
|
|
181
|
+
member.run(F.channelId, F.leadSession, Date.parse(now));
|
|
182
|
+
member.run(F.channelId, F.devSession, Date.parse(now));
|
|
183
|
+
}
|
|
184
|
+
finally {
|
|
185
|
+
db.close();
|
|
186
|
+
}
|
|
187
|
+
return { root, home, projectDir, remoteDir, cleanup: () => fs.rm(root, { recursive: true, force: true }) };
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* An empty target machine.
|
|
191
|
+
*
|
|
192
|
+
* @param root - Fixture root
|
|
193
|
+
* @returns Target home and projects root
|
|
194
|
+
*/
|
|
195
|
+
export async function buildTargetPaths(root) {
|
|
196
|
+
const home = path.join(root, 'target-home', '.crewly');
|
|
197
|
+
const projectsRoot = path.join(root, 'target-projects');
|
|
198
|
+
await fs.mkdir(home, { recursive: true });
|
|
199
|
+
await fs.mkdir(projectsRoot, { recursive: true });
|
|
200
|
+
return { home, projectsRoot };
|
|
201
|
+
}
|
|
202
|
+
//# sourceMappingURL=team-move.fixture.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"team-move.fixture.js","sourceRoot":"","sources":["../../../../../../backend/src/services/team-move/team-move.fixture.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,279 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Types of the team move feature (crewly#1189).
|
|
3
|
+
*
|
|
4
|
+
* The Cloud wire format (statuses, relay payload, preflight) mirrors the
|
|
5
|
+
* shared contract with the Cloud service; the package layout and the import
|
|
6
|
+
* report are owned by this side.
|
|
7
|
+
*
|
|
8
|
+
* @module services/team-move/team-move.types
|
|
9
|
+
*/
|
|
10
|
+
/** Move states; Cloud is the source of truth. */
|
|
11
|
+
export declare const TEAM_MOVE_STATUSES: readonly ["requested", "target_ready", "packaging", "uploaded", "importing", "imported", "switched", "completed", "failed", "rolled_back"];
|
|
12
|
+
export type TeamMoveStatus = (typeof TEAM_MOVE_STATUSES)[number];
|
|
13
|
+
/** Which side of the move this machine is. */
|
|
14
|
+
export type TeamMoveRole = 'source' | 'target';
|
|
15
|
+
/** What Cloud asks a machine to do. */
|
|
16
|
+
export type TeamMoveAction = 'prepare' | 'package' | 'import' | 'stop_archive' | 'rollback';
|
|
17
|
+
/** Relay push `data` (`type: 'team_move'`). */
|
|
18
|
+
export interface TeamMoveRelayData {
|
|
19
|
+
moveId: string;
|
|
20
|
+
role: TeamMoveRole;
|
|
21
|
+
action: TeamMoveAction;
|
|
22
|
+
}
|
|
23
|
+
/** Statuses a machine may report on `POST /:moveId/status`. */
|
|
24
|
+
export type TeamMoveReportStatus = 'importing' | 'imported' | 'failed' | 'source_stopped' | 'source_restored' | 'target_stopped';
|
|
25
|
+
/** What the target tells Cloud about itself (`POST /:moveId/target-key`). */
|
|
26
|
+
export interface TeamMovePreflight {
|
|
27
|
+
crewlyVersion: string;
|
|
28
|
+
freeDiskBytes: number;
|
|
29
|
+
tools: Record<string, boolean>;
|
|
30
|
+
runtimes: Record<string, boolean>;
|
|
31
|
+
}
|
|
32
|
+
/** Package metadata Cloud keeps. */
|
|
33
|
+
export interface TeamMovePackageMeta {
|
|
34
|
+
size: number;
|
|
35
|
+
sha256: string;
|
|
36
|
+
chunks: number;
|
|
37
|
+
chunkBytes: number;
|
|
38
|
+
received?: number | number[];
|
|
39
|
+
verified?: boolean;
|
|
40
|
+
manifest?: Record<string, unknown>;
|
|
41
|
+
}
|
|
42
|
+
/** A move as Cloud shows it to an instance or the owner. */
|
|
43
|
+
export interface TeamMoveView {
|
|
44
|
+
moveId: string;
|
|
45
|
+
teamId: string;
|
|
46
|
+
teamName: string;
|
|
47
|
+
source: {
|
|
48
|
+
instanceId: string;
|
|
49
|
+
name: string;
|
|
50
|
+
};
|
|
51
|
+
target: {
|
|
52
|
+
instanceId: string;
|
|
53
|
+
name: string;
|
|
54
|
+
};
|
|
55
|
+
status: TeamMoveStatus;
|
|
56
|
+
error?: string;
|
|
57
|
+
failedAt?: TeamMoveStatus;
|
|
58
|
+
targetPublicKey?: string;
|
|
59
|
+
preflight?: TeamMovePreflight;
|
|
60
|
+
package?: TeamMovePackageMeta;
|
|
61
|
+
report?: Record<string, unknown>;
|
|
62
|
+
cleanup?: {
|
|
63
|
+
sourcePending: boolean;
|
|
64
|
+
targetPending: boolean;
|
|
65
|
+
};
|
|
66
|
+
createdAt: string;
|
|
67
|
+
updatedAt: string;
|
|
68
|
+
completedAt?: string;
|
|
69
|
+
rolledBackAt?: string;
|
|
70
|
+
canRollback?: boolean;
|
|
71
|
+
rollbackUntil?: string;
|
|
72
|
+
/** Set on instance requests: what this instance should do now. */
|
|
73
|
+
role?: TeamMoveRole;
|
|
74
|
+
action?: TeamMoveAction;
|
|
75
|
+
}
|
|
76
|
+
/** One file in the package. */
|
|
77
|
+
export interface PackageFileEntry {
|
|
78
|
+
/** POSIX path inside the package. */
|
|
79
|
+
path: string;
|
|
80
|
+
sha256: string;
|
|
81
|
+
bytes: number;
|
|
82
|
+
}
|
|
83
|
+
/** A git repository a project of the team lives in. */
|
|
84
|
+
export interface PackageRepo {
|
|
85
|
+
projectId: string;
|
|
86
|
+
projectName: string;
|
|
87
|
+
/** Absolute path on the source machine. */
|
|
88
|
+
path: string;
|
|
89
|
+
/** `origin` as configured (not rewritten by `url.*.insteadOf`), or null. */
|
|
90
|
+
remoteUrl: string | null;
|
|
91
|
+
branch: string | null;
|
|
92
|
+
headSha: string | null;
|
|
93
|
+
/** Uncommitted changes in the working tree. */
|
|
94
|
+
dirty: boolean;
|
|
95
|
+
/** Commits on the branch that the remote does not have yet. */
|
|
96
|
+
unpushed: number;
|
|
97
|
+
/** Why the state could not be read (not a repo, no remote, ...). */
|
|
98
|
+
note?: string;
|
|
99
|
+
}
|
|
100
|
+
/** A project-local file left out of the package. */
|
|
101
|
+
export interface SkippedFile {
|
|
102
|
+
path: string;
|
|
103
|
+
bytes: number;
|
|
104
|
+
reason: 'too_large' | 'size_cap' | 'secret_scan' | 'unreadable';
|
|
105
|
+
}
|
|
106
|
+
/** A project of the team and its `.crewly` data in the package. */
|
|
107
|
+
export interface PackageProject {
|
|
108
|
+
id: string;
|
|
109
|
+
name: string;
|
|
110
|
+
/** Absolute path on the source machine. */
|
|
111
|
+
sourcePath: string;
|
|
112
|
+
/** Where the project's Crewly data lives on the source (`<path>/.crewly` or CREWLY_HOME). */
|
|
113
|
+
dataDir: string;
|
|
114
|
+
files: number;
|
|
115
|
+
bytes: number;
|
|
116
|
+
skipped: SkippedFile[];
|
|
117
|
+
/**
|
|
118
|
+
* Working files of a project that is not a git repository (the code itself
|
|
119
|
+
* travels in the package; git projects are cloned instead). Stored under
|
|
120
|
+
* `projects/<id>/files/`.
|
|
121
|
+
*/
|
|
122
|
+
work?: {
|
|
123
|
+
files: number;
|
|
124
|
+
bytes: number;
|
|
125
|
+
skipped: SkippedFile[];
|
|
126
|
+
};
|
|
127
|
+
/** Other teams that also use this project (their data stays on the source). */
|
|
128
|
+
sharedWithTeams: string[];
|
|
129
|
+
}
|
|
130
|
+
/** A member in the manifest (no prompts). */
|
|
131
|
+
export interface PackageMember {
|
|
132
|
+
id: string;
|
|
133
|
+
name: string;
|
|
134
|
+
role: string;
|
|
135
|
+
sessionName: string;
|
|
136
|
+
runtimeType: string;
|
|
137
|
+
}
|
|
138
|
+
/** The full manifest, `manifest.json` at the root of the package. */
|
|
139
|
+
export interface TeamMoveManifest {
|
|
140
|
+
kind: 'crewly-team-move';
|
|
141
|
+
schemaVersion: number;
|
|
142
|
+
moveId: string;
|
|
143
|
+
createdAt: string;
|
|
144
|
+
crewlyVersion: string;
|
|
145
|
+
source: {
|
|
146
|
+
instanceId: string | null;
|
|
147
|
+
deviceName: string | null;
|
|
148
|
+
homePath: string;
|
|
149
|
+
platform: string;
|
|
150
|
+
};
|
|
151
|
+
team: {
|
|
152
|
+
id: string;
|
|
153
|
+
name: string;
|
|
154
|
+
members: PackageMember[];
|
|
155
|
+
projectIds: string[];
|
|
156
|
+
};
|
|
157
|
+
/** What is in the package, by kind. */
|
|
158
|
+
counts: Record<string, number>;
|
|
159
|
+
projects: PackageProject[];
|
|
160
|
+
repos: PackageRepo[];
|
|
161
|
+
/** Tools the team's prompts, norms and SOPs mention. */
|
|
162
|
+
requiredTools: string[];
|
|
163
|
+
/** Runtimes the members use. */
|
|
164
|
+
requiredRuntimes: string[];
|
|
165
|
+
/** Connectors (Google, Zoho, ...) the team's words mention; connections are not moved. */
|
|
166
|
+
requiredConnectors?: string[];
|
|
167
|
+
/** Every file of the package with its hash. */
|
|
168
|
+
files: PackageFileEntry[];
|
|
169
|
+
/** Total uncompressed bytes. */
|
|
170
|
+
totalBytes: number;
|
|
171
|
+
/** Always true: the secret scan passed (a package is never built otherwise). */
|
|
172
|
+
noSecrets: true;
|
|
173
|
+
secretScan: {
|
|
174
|
+
filesScanned: number;
|
|
175
|
+
knownValuesChecked: number;
|
|
176
|
+
findings: 0;
|
|
177
|
+
excludedFiles: number;
|
|
178
|
+
};
|
|
179
|
+
/** Source things that are deliberately not moved (shown to the owner). */
|
|
180
|
+
notMoved: string[];
|
|
181
|
+
}
|
|
182
|
+
/** Compact summary sent to Cloud with `package/init` (kept under 64 KB, no names of files). */
|
|
183
|
+
export interface CloudManifestSummary {
|
|
184
|
+
kind: 'crewly-team-move';
|
|
185
|
+
schemaVersion: number;
|
|
186
|
+
crewlyVersion: string;
|
|
187
|
+
team: {
|
|
188
|
+
id: string;
|
|
189
|
+
name: string;
|
|
190
|
+
members: number;
|
|
191
|
+
};
|
|
192
|
+
counts: Record<string, number>;
|
|
193
|
+
repos: number;
|
|
194
|
+
reposDirty: number;
|
|
195
|
+
requiredTools: string[];
|
|
196
|
+
requiredRuntimes: string[];
|
|
197
|
+
totalBytes: number;
|
|
198
|
+
/** Cloud checks it against the target's free disk. */
|
|
199
|
+
uncompressedBytes: number;
|
|
200
|
+
noSecrets: true;
|
|
201
|
+
[key: string]: unknown;
|
|
202
|
+
}
|
|
203
|
+
/** A credential or login the owner has to reconnect on the target. */
|
|
204
|
+
export interface ReconnectItem {
|
|
205
|
+
/** Short label, e.g. "Claude Code login". */
|
|
206
|
+
label: string;
|
|
207
|
+
/** `runtime` | `connector` | `slack` | `ssh` | `other` */
|
|
208
|
+
kind: string;
|
|
209
|
+
/** Tap-to-fix link when Crewly has a card for it. */
|
|
210
|
+
url?: string;
|
|
211
|
+
detail?: string;
|
|
212
|
+
}
|
|
213
|
+
/** The target's import report (owner-facing). */
|
|
214
|
+
export interface TeamMoveImportReport {
|
|
215
|
+
/** Moved counts by kind; Cloud shows these. */
|
|
216
|
+
moved: Record<string, number>;
|
|
217
|
+
repos: {
|
|
218
|
+
cloned: Array<{
|
|
219
|
+
name: string;
|
|
220
|
+
path: string;
|
|
221
|
+
branch: string | null;
|
|
222
|
+
headSha: string | null;
|
|
223
|
+
}>;
|
|
224
|
+
failed: Array<{
|
|
225
|
+
name: string;
|
|
226
|
+
reason: string;
|
|
227
|
+
}>;
|
|
228
|
+
};
|
|
229
|
+
missingTools: string[];
|
|
230
|
+
/** Runtimes the team uses that are not logged in here. */
|
|
231
|
+
runtimesNotLoggedIn: string[];
|
|
232
|
+
reconnect: ReconnectItem[];
|
|
233
|
+
/** Projects placed on a different path than on the source. */
|
|
234
|
+
paths: Array<{
|
|
235
|
+
projectId: string;
|
|
236
|
+
name: string;
|
|
237
|
+
from: string;
|
|
238
|
+
to: string;
|
|
239
|
+
}>;
|
|
240
|
+
/** Team start result. */
|
|
241
|
+
started: {
|
|
242
|
+
requested: boolean;
|
|
243
|
+
ok: boolean;
|
|
244
|
+
error?: string;
|
|
245
|
+
};
|
|
246
|
+
/** Warnings that need no action. */
|
|
247
|
+
warnings: string[];
|
|
248
|
+
/** Things not moved (copied from the manifest). */
|
|
249
|
+
notMoved: string[];
|
|
250
|
+
crewlyVersion: string;
|
|
251
|
+
importedAt: string;
|
|
252
|
+
}
|
|
253
|
+
/** A step of the import; each is idempotent and recorded in the journal. */
|
|
254
|
+
export declare const IMPORT_STEPS: readonly ["download", "decrypt", "validate", "projects", "repos", "data", "records", "team", "start", "report"];
|
|
255
|
+
export type ImportStep = (typeof IMPORT_STEPS)[number];
|
|
256
|
+
/** A step of the export. */
|
|
257
|
+
export declare const EXPORT_STEPS: readonly ["collect", "scan", "encrypt", "upload"];
|
|
258
|
+
export type ExportStep = (typeof EXPORT_STEPS)[number];
|
|
259
|
+
/** One journal entry. */
|
|
260
|
+
export interface JournalEntry {
|
|
261
|
+
step: string;
|
|
262
|
+
state: 'started' | 'done' | 'failed';
|
|
263
|
+
at: string;
|
|
264
|
+
detail?: unknown;
|
|
265
|
+
error?: string;
|
|
266
|
+
}
|
|
267
|
+
/** Persisted state of one move on this machine (`state.json`). */
|
|
268
|
+
export interface LocalMoveState {
|
|
269
|
+
moveId: string;
|
|
270
|
+
role: TeamMoveRole;
|
|
271
|
+
teamId: string;
|
|
272
|
+
teamName: string;
|
|
273
|
+
/** Last action Cloud asked for and what happened to it. */
|
|
274
|
+
action: TeamMoveAction | null;
|
|
275
|
+
phase: 'idle' | 'running' | 'done' | 'failed';
|
|
276
|
+
error?: string;
|
|
277
|
+
updatedAt: string;
|
|
278
|
+
}
|
|
279
|
+
//# sourceMappingURL=team-move.types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"team-move.types.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/team-move/team-move.types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Types of the team move feature (crewly#1189).
|
|
3
|
+
*
|
|
4
|
+
* The Cloud wire format (statuses, relay payload, preflight) mirrors the
|
|
5
|
+
* shared contract with the Cloud service; the package layout and the import
|
|
6
|
+
* report are owned by this side.
|
|
7
|
+
*
|
|
8
|
+
* @module services/team-move/team-move.types
|
|
9
|
+
*/
|
|
10
|
+
// ---------------------------------------------------------------------------
|
|
11
|
+
// Cloud contract
|
|
12
|
+
// ---------------------------------------------------------------------------
|
|
13
|
+
/** Move states; Cloud is the source of truth. */
|
|
14
|
+
export const TEAM_MOVE_STATUSES = [
|
|
15
|
+
'requested',
|
|
16
|
+
'target_ready',
|
|
17
|
+
'packaging',
|
|
18
|
+
'uploaded',
|
|
19
|
+
'importing',
|
|
20
|
+
'imported',
|
|
21
|
+
'switched',
|
|
22
|
+
'completed',
|
|
23
|
+
'failed',
|
|
24
|
+
'rolled_back',
|
|
25
|
+
];
|
|
26
|
+
// ---------------------------------------------------------------------------
|
|
27
|
+
// Journal and local move state
|
|
28
|
+
// ---------------------------------------------------------------------------
|
|
29
|
+
/** A step of the import; each is idempotent and recorded in the journal. */
|
|
30
|
+
export const IMPORT_STEPS = [
|
|
31
|
+
'download',
|
|
32
|
+
'decrypt',
|
|
33
|
+
'validate',
|
|
34
|
+
'projects',
|
|
35
|
+
'repos',
|
|
36
|
+
'data',
|
|
37
|
+
'records',
|
|
38
|
+
'team',
|
|
39
|
+
'start',
|
|
40
|
+
'report',
|
|
41
|
+
];
|
|
42
|
+
/** A step of the export. */
|
|
43
|
+
export const EXPORT_STEPS = ['collect', 'scan', 'encrypt', 'upload'];
|
|
44
|
+
//# sourceMappingURL=team-move.types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"team-move.types.js","sourceRoot":"","sources":["../../../../../../backend/src/services/team-move/team-move.types.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,8EAA8E;AAC9E,iBAAiB;AACjB,8EAA8E;AAE9E,iDAAiD;AACjD,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,WAAW;IACX,cAAc;IACd,WAAW;IACX,UAAU;IACV,WAAW;IACX,UAAU;IACV,UAAU;IACV,WAAW;IACX,QAAQ;IACR,aAAa;CACL,CAAC;AAgOX,8EAA8E;AAC9E,+BAA+B;AAC/B,8EAA8E;AAE9E,4EAA4E;AAC5E,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,UAAU;IACV,SAAS;IACT,UAAU;IACV,UAAU;IACV,OAAO;IACP,MAAM;IACN,SAAS;IACT,MAAM;IACN,OAAO;IACP,QAAQ;CACA,CAAC;AAGX,4BAA4B;AAC5B,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,CAAU,CAAC"}
|
|
@@ -8012,4 +8012,86 @@ export declare const TEAM_ROSTER_CONSTANTS: {
|
|
|
8012
8012
|
readonly specialties: false;
|
|
8013
8013
|
}];
|
|
8014
8014
|
};
|
|
8015
|
+
/**
|
|
8016
|
+
* Team move (crewly#1189): move a whole team to another machine of the same
|
|
8017
|
+
* account through Crewly Cloud. Cloud only relays an end-to-end encrypted
|
|
8018
|
+
* package; both machines run this code. See specs/2026-10-12-team-move.md.
|
|
8019
|
+
*/
|
|
8020
|
+
export declare const TEAM_MOVE_CONSTANTS: {
|
|
8021
|
+
/** Capability advertised to Cloud in the heartbeat once the driver runs. */
|
|
8022
|
+
readonly CAPABILITY: "teamMove:1";
|
|
8023
|
+
/** Relay message `type` Cloud pushes (`{moveId, role, action}`). */
|
|
8024
|
+
readonly RELAY_MESSAGE_TYPE: "team_move";
|
|
8025
|
+
/** Cloud REST path (under the Cloud base URL). */
|
|
8026
|
+
readonly CLOUD_PATH: "/api/cloud/team-moves";
|
|
8027
|
+
/** Package schema version; bump on any breaking layout change. */
|
|
8028
|
+
readonly SCHEMA_VERSION: 1;
|
|
8029
|
+
/** Package kind written to the manifest. */
|
|
8030
|
+
readonly PACKAGE_KIND: "crewly-team-move";
|
|
8031
|
+
/** Directory under CREWLY_HOME holding per-move state (journal, keys, archive). */
|
|
8032
|
+
readonly HOME_DIR: "team-moves";
|
|
8033
|
+
/** Upload/download chunk size (matches Cloud's 8 MiB chunks). */
|
|
8034
|
+
readonly TRANSFER_CHUNK_BYTES: number;
|
|
8035
|
+
/** Plaintext frame size of the encrypted stream. */
|
|
8036
|
+
readonly CRYPTO_FRAME_BYTES: number;
|
|
8037
|
+
/** The source keeps the archived team this long for rollback. */
|
|
8038
|
+
readonly ARCHIVE_RETENTION_MS: number;
|
|
8039
|
+
/** Per-file cap for project-local `.crewly` files in a package. */
|
|
8040
|
+
readonly PROJECT_FILE_MAX_BYTES: number;
|
|
8041
|
+
/** Total cap for project-local `.crewly` files in a package (all projects). */
|
|
8042
|
+
readonly PROJECT_FILES_MAX_BYTES: number;
|
|
8043
|
+
/** Total cap for the working files of projects that are not git repositories (all such projects). */
|
|
8044
|
+
readonly WORK_FILES_MAX_BYTES: number;
|
|
8045
|
+
/** Per-file cap for those working files. */
|
|
8046
|
+
readonly WORK_FILE_MAX_BYTES: number;
|
|
8047
|
+
/** Env vars (megabytes) overriding the two caps above. */
|
|
8048
|
+
readonly WORK_FILES_MAX_MB_ENV: "CREWLY_TEAM_MOVE_WORK_MAX_MB";
|
|
8049
|
+
readonly WORK_FILE_MAX_MB_ENV: "CREWLY_TEAM_MOVE_WORK_FILE_MAX_MB";
|
|
8050
|
+
/** Directory names never packaged from a non-git project (dependencies and build output). */
|
|
8051
|
+
readonly WORK_EXCLUDED_DIRS: readonly ["node_modules", ".next", "dist", "build", ".cache", ".crewly", ".git"];
|
|
8052
|
+
/** A machine counts as live when its Cloud heartbeat is newer than this. */
|
|
8053
|
+
readonly MACHINE_LIVE_WINDOW_MS: number;
|
|
8054
|
+
/** Cloud instance ids/names that are not machines (virtual instances). */
|
|
8055
|
+
readonly NON_MACHINE_INSTANCE_PATTERN: "^crewly-cloud";
|
|
8056
|
+
/** Newest handover notes kept per agent. */
|
|
8057
|
+
readonly HANDOVERS_PER_AGENT: 10;
|
|
8058
|
+
/** Largest text file that is path-rewritten and secret-scanned in memory. */
|
|
8059
|
+
readonly TEXT_FILE_MAX_BYTES: number;
|
|
8060
|
+
/** Free disk the target needs beyond the package (bytes): 2x package + this. */
|
|
8061
|
+
readonly DISK_HEADROOM_BYTES: number;
|
|
8062
|
+
/** Oldest Crewly version that can take part in a move. */
|
|
8063
|
+
readonly MIN_CREWLY_VERSION: "1.20.304";
|
|
8064
|
+
/** Folder (under the target's home dir) projects are relocated to. */
|
|
8065
|
+
readonly DEFAULT_PROJECTS_DIR_NAME: "crewly-projects";
|
|
8066
|
+
/** Env var that overrides the target's projects root. */
|
|
8067
|
+
readonly PROJECTS_ROOT_ENV: "CREWLY_PROJECTS_ROOT";
|
|
8068
|
+
/** Cloud request timeout (ms). */
|
|
8069
|
+
readonly REQUEST_TIMEOUT_MS: 30000;
|
|
8070
|
+
/** Upload/download retries per chunk. */
|
|
8071
|
+
readonly CHUNK_RETRIES: 4;
|
|
8072
|
+
/** Backoff base between retries (ms). */
|
|
8073
|
+
readonly RETRY_BASE_MS: 1000;
|
|
8074
|
+
/** How often the driver re-reads pending moves from Cloud (ms). */
|
|
8075
|
+
readonly POLL_INTERVAL_MS: number;
|
|
8076
|
+
/** Delay before the first pending-move check after boot (ms). */
|
|
8077
|
+
readonly BOOT_DELAY_MS: 20000;
|
|
8078
|
+
/** `git clone`/`fetch` timeout (ms). */
|
|
8079
|
+
readonly GIT_TIMEOUT_MS: number;
|
|
8080
|
+
/** Tools a package may require; found by name in prompts, norms and SOPs. */
|
|
8081
|
+
readonly KNOWN_TOOLS: readonly ["ffmpeg", "docker", "xcodebuild", "gh", "python3", "node", "git", "jq", "yt-dlp", "imagemagick", "whisper-cli"];
|
|
8082
|
+
/** Binary each known tool is looked up by on PATH. */
|
|
8083
|
+
readonly TOOL_BINARIES: {
|
|
8084
|
+
readonly ffmpeg: "ffmpeg";
|
|
8085
|
+
readonly docker: "docker";
|
|
8086
|
+
readonly xcodebuild: "xcodebuild";
|
|
8087
|
+
readonly gh: "gh";
|
|
8088
|
+
readonly python3: "python3";
|
|
8089
|
+
readonly node: "node";
|
|
8090
|
+
readonly git: "git";
|
|
8091
|
+
readonly jq: "jq";
|
|
8092
|
+
readonly 'yt-dlp': "yt-dlp";
|
|
8093
|
+
readonly imagemagick: "convert";
|
|
8094
|
+
readonly 'whisper-cli': "whisper-cli";
|
|
8095
|
+
};
|
|
8096
|
+
};
|
|
8015
8097
|
//# sourceMappingURL=constants.d.ts.map
|