@agentteams/runner 0.0.100 → 0.0.102

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. package/dist/api-client.d.ts +3 -1
  2. package/dist/api-client.js +26 -0
  3. package/dist/api-client.js.map +1 -1
  4. package/dist/autostart.js +45 -4
  5. package/dist/autostart.js.map +1 -1
  6. package/dist/autostart.test.js +27 -2
  7. package/dist/autostart.test.js.map +1 -1
  8. package/dist/executable.js +22 -16
  9. package/dist/executable.js.map +1 -1
  10. package/dist/executable.test.js +55 -0
  11. package/dist/executable.test.js.map +1 -1
  12. package/dist/handlers/trigger-handler.d.ts +4 -0
  13. package/dist/handlers/trigger-handler.js +51 -1
  14. package/dist/handlers/trigger-handler.js.map +1 -1
  15. package/dist/handlers/trigger-handler.test.js +175 -0
  16. package/dist/handlers/trigger-handler.test.js.map +1 -1
  17. package/dist/poller.d.ts +3 -1
  18. package/dist/poller.js +37 -0
  19. package/dist/poller.js.map +1 -1
  20. package/dist/types.d.ts +17 -0
  21. package/dist/utils/discovered-worktree-store.d.ts +5 -0
  22. package/dist/utils/discovered-worktree-store.js +38 -0
  23. package/dist/utils/discovered-worktree-store.js.map +1 -0
  24. package/dist/utils/discovered-worktree-store.test.d.ts +1 -0
  25. package/dist/utils/discovered-worktree-store.test.js +34 -0
  26. package/dist/utils/discovered-worktree-store.test.js.map +1 -0
  27. package/dist/utils/worktree-discovery.d.ts +66 -0
  28. package/dist/utils/worktree-discovery.js +227 -0
  29. package/dist/utils/worktree-discovery.js.map +1 -0
  30. package/dist/utils/worktree-discovery.test.d.ts +1 -0
  31. package/dist/utils/worktree-discovery.test.js +193 -0
  32. package/dist/utils/worktree-discovery.test.js.map +1 -0
  33. package/package.json +1 -1
package/dist/poller.js CHANGED
@@ -4,16 +4,20 @@ import { runCleanup } from './utils/runner-cleanup.js';
4
4
  import { runConventionSync } from './utils/convention-sync.js';
5
5
  import { loadAuthPaths, saveAuthPath } from './utils/auth-path-store.js';
6
6
  import { removeWorktree, resolveWorktreePath } from './utils/git-worktree.js';
7
+ import { reconcileDiscoveredWorktrees } from './utils/worktree-discovery.js';
7
8
  import { existsSync } from 'node:fs';
8
9
  import { maybeAutoUpdate } from './utils/auto-update.js';
9
10
  import { executeRestartRequest } from './daemon-control.js';
10
11
  import { createPowerSaveBlocker } from './utils/power-save-blocker.js';
11
12
  const CLEANUP_INTERVAL_MS = 24 * 60 * 60 * 1000;
12
13
  const CONVENTION_SYNC_INTERVAL_MS = 6 * 60 * 60 * 1000;
14
+ // 발견 worktree 정합화 주기. 신규 linked worktree가 곧 등록되도록 짧게 두되, 매 30s 폴마다 git을 돌리지는 않는다.
15
+ const WORKTREE_DISCOVERY_INTERVAL_MS = 60 * 1000;
13
16
  export const startPolling = async (config, createHandler, dependencies = {}) => {
14
17
  const client = dependencies.createClient?.(config) ?? new DaemonApiClient(config.apiUrl, config.daemonToken);
15
18
  const cleanupRunner = dependencies.runCleanup ?? runCleanup;
16
19
  const conventionSync = dependencies.runConventionSync ?? runConventionSync;
20
+ const reconcileWorktrees = dependencies.reconcileDiscoveredWorktrees ?? reconcileDiscoveredWorktrees;
17
21
  const removeWorktreeFn = dependencies.removeWorktree ?? removeWorktree;
18
22
  const autoUpdate = dependencies.maybeAutoUpdate ?? maybeAutoUpdate;
19
23
  const performRestart = dependencies.executeRestartRequest ?? executeRestartRequest;
@@ -34,6 +38,8 @@ export const startPolling = async (config, createHandler, dependencies = {}) =>
34
38
  let isPolling = false;
35
39
  const knownAuthPaths = new Set(loadPersistedAuthPaths());
36
40
  let lastCleanupAt = 0;
41
+ let lastWorktreeDiscoveryAt = 0;
42
+ let isDiscoveringWorktrees = false;
37
43
  const lastConventionSyncAt = new Map();
38
44
  const onAuthPathDiscovered = (authPath) => {
39
45
  if (knownAuthPaths.has(authPath)) {
@@ -82,6 +88,36 @@ export const startPolling = async (config, createHandler, dependencies = {}) =>
82
88
  });
83
89
  }
84
90
  };
91
+ // 연결 저장소의 발견 worktree를 주기적으로 정합화한다. git 실행은 fire-and-forget으로 폴링을 막지 않는다.
92
+ const maybeRunWorktreeDiscovery = () => {
93
+ const currentTime = now();
94
+ if (currentTime - lastWorktreeDiscoveryAt < WORKTREE_DISCOVERY_INTERVAL_MS) {
95
+ return;
96
+ }
97
+ const fetchDiscoveryRepositories = client.fetchDiscoveryRepositories?.bind(client);
98
+ const syncDiscoveredWorktrees = client.syncDiscoveredWorktrees?.bind(client);
99
+ if (isDiscoveringWorktrees ||
100
+ knownAuthPaths.size === 0 ||
101
+ !fetchDiscoveryRepositories ||
102
+ !syncDiscoveredWorktrees) {
103
+ return;
104
+ }
105
+ lastWorktreeDiscoveryAt = currentTime;
106
+ isDiscoveringWorktrees = true;
107
+ void reconcileWorktrees({
108
+ fetchDiscoveryRepositories,
109
+ syncDiscoveredWorktrees,
110
+ authPaths: Array.from(knownAuthPaths),
111
+ })
112
+ .catch((error) => {
113
+ logger.warn('Worktree discovery failed', {
114
+ error: error instanceof Error ? error.message : String(error),
115
+ });
116
+ })
117
+ .finally(() => {
118
+ isDiscoveringWorktrees = false;
119
+ });
120
+ };
85
121
  // 통합 snapshot에서 받은 고아 취소 대상 ID들을 개별 mutation으로 처리한다.
86
122
  const autoCancelOrphanedTriggers = async (triggerIds) => {
87
123
  for (const triggerId of triggerIds) {
@@ -157,6 +193,7 @@ export const startPolling = async (config, createHandler, dependencies = {}) =>
157
193
  try {
158
194
  maybeRunCleanup();
159
195
  maybeRunConventionSync();
196
+ maybeRunWorktreeDiscovery();
160
197
  // 한 polling cycle의 세 read(고아 취소 대상 / 워크트리 제거 대상 / pending)를 통합
161
198
  // snapshot 1회 조회로 가져온다. 실패 시 아래 catch에서 polling cycle 전체가 실패
162
199
  // 처리되어 명확한 로그를 남긴다(조용히 pending 확인만 생략하지 않는다).
@@ -1 +1 @@
1
- {"version":3,"file":"poller.js","sourceRoot":"","sources":["../src/poller.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"poller.js","sourceRoot":"","sources":["../src/poller.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -96,6 +96,7 @@ export type TriggerRuntime = {
96
96
  repositoryRemoteUrl?: string | null;
97
97
  baseBranch: string | null;
98
98
  worktreeId: string | null;
99
+ discoveredWorktreeLocalKey?: string | null;
99
100
  conventions?: ConventionMeta[];
100
101
  planType?: string | null;
101
102
  userConventionIds?: string[];
@@ -113,3 +114,19 @@ export type TriggerLogInput = {
113
114
  level: TriggerLogLevel;
114
115
  message: string;
115
116
  };
117
+ export type DiscoveryRepository = {
118
+ id: string;
119
+ projectId: string;
120
+ remoteUrl: string | null;
121
+ };
122
+ export type DiscoveredWorktreeSyncItem = {
123
+ localKey: string;
124
+ branch: string | null;
125
+ headSha: string | null;
126
+ displayName: string | null;
127
+ };
128
+ export type DiscoveredWorktreeSyncRepository = {
129
+ repositoryId: string;
130
+ ok: boolean;
131
+ worktrees: DiscoveredWorktreeSyncItem[];
132
+ };
@@ -0,0 +1,5 @@
1
+ export declare const getDiscoveredWorktreeStorePath: () => string;
2
+ export declare const loadDiscoveredWorktreeMappings: (filePath?: string) => Record<string, string>;
3
+ export declare const saveDiscoveredWorktreeMappings: (mappings: Record<string, string>, filePath?: string) => string;
4
+ /** 저장된 매핑에서 localKey에 해당하는 canonical 경로를 조회한다. */
5
+ export declare const resolveDiscoveredWorktreePath: (localKey: string, filePath?: string) => string | null;
@@ -0,0 +1,38 @@
1
+ import { existsSync, mkdirSync, readFileSync, renameSync, writeFileSync } from 'node:fs';
2
+ import { homedir } from 'node:os';
3
+ import { dirname, join } from 'node:path';
4
+ export const getDiscoveredWorktreeStorePath = () => join(homedir(), '.agentteams', 'discovered-worktrees.json');
5
+ export const loadDiscoveredWorktreeMappings = (filePath = getDiscoveredWorktreeStorePath()) => {
6
+ if (!existsSync(filePath)) {
7
+ return {};
8
+ }
9
+ try {
10
+ const parsed = JSON.parse(readFileSync(filePath, 'utf8'));
11
+ if (parsed && typeof parsed === 'object' && parsed.mappings && typeof parsed.mappings === 'object') {
12
+ const result = {};
13
+ for (const [key, value] of Object.entries(parsed.mappings)) {
14
+ if (typeof key === 'string' && typeof value === 'string' && key.length > 0 && value.length > 0) {
15
+ result[key] = value;
16
+ }
17
+ }
18
+ return result;
19
+ }
20
+ return {};
21
+ }
22
+ catch {
23
+ return {};
24
+ }
25
+ };
26
+ export const saveDiscoveredWorktreeMappings = (mappings, filePath = getDiscoveredWorktreeStorePath()) => {
27
+ mkdirSync(dirname(filePath), { recursive: true });
28
+ const tempPath = `${filePath}.tmp`;
29
+ writeFileSync(tempPath, JSON.stringify({ mappings }, null, 2), 'utf8');
30
+ renameSync(tempPath, filePath);
31
+ return filePath;
32
+ };
33
+ /** 저장된 매핑에서 localKey에 해당하는 canonical 경로를 조회한다. */
34
+ export const resolveDiscoveredWorktreePath = (localKey, filePath = getDiscoveredWorktreeStorePath()) => {
35
+ const mappings = loadDiscoveredWorktreeMappings(filePath);
36
+ return mappings[localKey] ?? null;
37
+ };
38
+ //# sourceMappingURL=discovered-worktree-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discovered-worktree-store.js","sourceRoot":"","sources":["../../src/utils/discovered-worktree-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACzF,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAY1C,MAAM,CAAC,MAAM,8BAA8B,GAAG,GAAW,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,aAAa,EAAE,2BAA2B,CAAC,CAAC;AAExH,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAC5C,WAAmB,8BAA8B,EAAE,EAC3B,EAAE;IAC1B,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1B,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAA4B,CAAC;QACrF,IAAI,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,IAAI,OAAO,MAAM,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;YACnG,MAAM,MAAM,GAA2B,EAAE,CAAC;YAC1C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC3D,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC/F,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;gBACtB,CAAC;YACH,CAAC;YACD,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAC5C,QAAgC,EAChC,WAAmB,8BAA8B,EAAE,EAC3C,EAAE;IACV,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAClD,MAAM,QAAQ,GAAG,GAAG,QAAQ,MAAM,CAAC;IACnC,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IACvE,UAAU,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC/B,OAAO,QAAQ,CAAC;AAClB,CAAC,CAAC;AAEF,kDAAkD;AAClD,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAC3C,QAAgB,EAChB,WAAmB,8BAA8B,EAAE,EACpC,EAAE;IACjB,MAAM,QAAQ,GAAG,8BAA8B,CAAC,QAAQ,CAAC,CAAC;IAC1D,OAAO,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC;AACpC,CAAC,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,34 @@
1
+ import assert from 'node:assert/strict';
2
+ import { mkdtempSync, rmSync, writeFileSync } from 'node:fs';
3
+ import { join } from 'node:path';
4
+ import { tmpdir } from 'node:os';
5
+ import test from 'node:test';
6
+ import { loadDiscoveredWorktreeMappings, resolveDiscoveredWorktreePath, saveDiscoveredWorktreeMappings, } from './discovered-worktree-store.js';
7
+ test('discovered worktree store: save/load round-trip and path resolution', () => {
8
+ const dir = mkdtempSync(join(tmpdir(), 'dw-store-'));
9
+ try {
10
+ const file = join(dir, 'discovered-worktrees.json');
11
+ saveDiscoveredWorktreeMappings({ 'key-1': '/repo/.wt/a', 'key-2': '/repo/.wt/b' }, file);
12
+ const loaded = loadDiscoveredWorktreeMappings(file);
13
+ assert.deepEqual(loaded, { 'key-1': '/repo/.wt/a', 'key-2': '/repo/.wt/b' });
14
+ assert.equal(resolveDiscoveredWorktreePath('key-1', file), '/repo/.wt/a');
15
+ assert.equal(resolveDiscoveredWorktreePath('missing', file), null);
16
+ }
17
+ finally {
18
+ rmSync(dir, { recursive: true, force: true });
19
+ }
20
+ });
21
+ test('discovered worktree store: missing file and malformed JSON degrade to empty map', () => {
22
+ const dir = mkdtempSync(join(tmpdir(), 'dw-store-'));
23
+ try {
24
+ const missing = join(dir, 'nope.json');
25
+ assert.deepEqual(loadDiscoveredWorktreeMappings(missing), {});
26
+ const bad = join(dir, 'bad.json');
27
+ writeFileSync(bad, '{ not valid json', 'utf8');
28
+ assert.deepEqual(loadDiscoveredWorktreeMappings(bad), {});
29
+ }
30
+ finally {
31
+ rmSync(dir, { recursive: true, force: true });
32
+ }
33
+ });
34
+ //# sourceMappingURL=discovered-worktree-store.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discovered-worktree-store.test.js","sourceRoot":"","sources":["../../src/utils/discovered-worktree-store.test.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EACL,8BAA8B,EAC9B,6BAA6B,EAC7B,8BAA8B,GAC/B,MAAM,gCAAgC,CAAC;AAExC,IAAI,CAAC,qEAAqE,EAAE,GAAG,EAAE;IAC/E,MAAM,GAAG,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,WAAW,CAAC,CAAC,CAAC;IACrD,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,2BAA2B,CAAC,CAAC;QACpD,8BAA8B,CAAC,EAAE,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,aAAa,EAAE,EAAE,IAAI,CAAC,CAAC;QAEzF,MAAM,MAAM,GAAG,8BAA8B,CAAC,IAAI,CAAC,CAAC;QACpD,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC,CAAC;QAC7E,MAAM,CAAC,KAAK,CAAC,6BAA6B,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,aAAa,CAAC,CAAC;QAC1E,MAAM,CAAC,KAAK,CAAC,6BAA6B,CAAC,SAAS,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;IACrE,CAAC;YAAS,CAAC;QACT,MAAM,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAChD,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,iFAAiF,EAAE,GAAG,EAAE;IAC3F,MAAM,GAAG,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,WAAW,CAAC,CAAC,CAAC;IACrD,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;QACvC,MAAM,CAAC,SAAS,CAAC,8BAA8B,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;QAE9D,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;QAClC,aAAa,CAAC,GAAG,EAAE,kBAAkB,EAAE,MAAM,CAAC,CAAC;QAC/C,MAAM,CAAC,SAAS,CAAC,8BAA8B,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;IAC5D,CAAC;YAAS,CAAC;QACT,MAAM,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAChD,CAAC;AACH,CAAC,CAAC,CAAC"}
@@ -0,0 +1,66 @@
1
+ import type { DiscoveredWorktreeSyncItem, DiscoveredWorktreeSyncRepository, DiscoveryRepository } from '../types.js';
2
+ /**
3
+ * AgentRunner의 Git worktree 자동 발견·정합성 복구.
4
+ *
5
+ * `git worktree list --porcelain -z`를 파싱해 linked worktree만 골라 서버에 full snapshot으로 보고한다.
6
+ * 핵심 계약:
7
+ * - 머신 전체를 검색하지 않는다. 연결된(discovery 대상) repository로만 범위를 제한한다.
8
+ * - `git worktree prune/remove`를 호출하지 않는다. 오직 읽기(list)만 한다.
9
+ * - Git 명령 실패/malformed 출력은 해당 repository를 ok=false로 보고해 서버가 기존 상태를 보존하게 한다.
10
+ * 빈 성공 snapshot으로 오인 보고하지 않는다.
11
+ * - localKey는 canonical 경로의 해시로, 절대 경로를 서버 payload에 노출하지 않으면서 재시작 후에도 안정적으로 매칭된다.
12
+ */
13
+ export type WorktreeRecord = {
14
+ path: string;
15
+ head: string | null;
16
+ branch: string | null;
17
+ detached: boolean;
18
+ bare: boolean;
19
+ locked: boolean;
20
+ prunable: boolean;
21
+ };
22
+ /**
23
+ * `git worktree list --porcelain -z` 출력을 파싱한다.
24
+ *
25
+ * `-z`에서 각 attribute는 NUL로 종료되고, record는 빈 attribute(연속 NUL)로 구분된다.
26
+ * 첫 record는 항상 main worktree다(git이 보장). 호출자가 필요 시 제외한다.
27
+ */
28
+ export declare const parseWorktreePorcelain: (output: string) => WorktreeRecord[];
29
+ /** canonical 경로를 서버에 노출하지 않는 daemon-scoped opaque 안정 키로 변환한다. */
30
+ export declare const computeLocalKey: (canonicalPath: string) => string;
31
+ export type RepositoryDiscovery = {
32
+ ok: boolean;
33
+ items: DiscoveredWorktreeSyncItem[];
34
+ mappings: Record<string, string>;
35
+ };
36
+ /**
37
+ * 한 로컬 저장소의 linked worktree를 발견한다.
38
+ *
39
+ * main worktree(첫 record), bare, prunable은 제외한다. prunable/부재는 서버에서 보고 누락으로 MISSING 처리된다.
40
+ * Git 명령이 실패하면 ok=false로 반환해 서버가 기존 상태를 보존하게 한다.
41
+ *
42
+ * @param runGit 테스트 주입용 git 실행기. 기본은 실제 `git` 호출.
43
+ */
44
+ export declare const discoverRepositoryWorktrees: (repoPath: string, runGit?: (args: string[], cwd: string) => string) => RepositoryDiscovery;
45
+ /** 로컬 저장소의 origin remote를 정규화 신원으로 변환한다. 매칭 실패 시 null. */
46
+ export declare const resolveRepositoryOrigin: (repoPath: string, runGit?: (args: string[], cwd: string) => string) => string | null;
47
+ export type ReconcileDiscoveryDeps = {
48
+ fetchDiscoveryRepositories: () => Promise<DiscoveryRepository[]>;
49
+ syncDiscoveredWorktrees: (repositories: DiscoveredWorktreeSyncRepository[]) => Promise<void>;
50
+ authPaths: string[];
51
+ isGitRepo?: (dirPath: string) => boolean;
52
+ findMemberRepoCandidates?: (root: string) => string[];
53
+ resolveRepositoryOrigin?: (repoPath: string) => string | null;
54
+ discoverRepositoryWorktrees?: (repoPath: string) => RepositoryDiscovery;
55
+ loadMappings?: () => Record<string, string>;
56
+ saveMappings?: (mappings: Record<string, string>) => void;
57
+ };
58
+ /**
59
+ * 연결 저장소 범위에서 발견 worktree를 정합화하고 서버에 full snapshot을 보고한다.
60
+ *
61
+ * - discovery 대상 repository(remoteUrl)만 로컬 저장소 origin과 매칭한다. scope 밖은 Git 명령·payload 모두에서 제외한다.
62
+ * - 로컬에서 매칭되지 않은 repository는 보고 목록에서 아예 제외한다(빈 성공 snapshot으로 MISSING 오탐 방지).
63
+ * - 매칭됐지만 Git 조회 실패면 ok=false로 보고해 서버가 기존 상태를 보존하게 한다.
64
+ * - localKey↔경로 매핑을 원자적으로 저장한다(민감 경로는 서버로 전송하지 않는다).
65
+ */
66
+ export declare const reconcileDiscoveredWorktrees: (deps: ReconcileDiscoveryDeps) => Promise<void>;
@@ -0,0 +1,227 @@
1
+ import { execFileSync } from 'node:child_process';
2
+ import { createHash } from 'node:crypto';
3
+ import { realpathSync } from 'node:fs';
4
+ import path from 'node:path';
5
+ import { findMemberRepoCandidates, normalizeRemoteUrl } from './resolve-member-repo.js';
6
+ import { isGitRepo } from './git-worktree.js';
7
+ import { loadDiscoveredWorktreeMappings, saveDiscoveredWorktreeMappings } from './discovered-worktree-store.js';
8
+ /**
9
+ * `git worktree list --porcelain -z` 출력을 파싱한다.
10
+ *
11
+ * `-z`에서 각 attribute는 NUL로 종료되고, record는 빈 attribute(연속 NUL)로 구분된다.
12
+ * 첫 record는 항상 main worktree다(git이 보장). 호출자가 필요 시 제외한다.
13
+ */
14
+ export const parseWorktreePorcelain = (output) => {
15
+ if (!output || !output.endsWith('\0\0')) {
16
+ throw new Error('Malformed git worktree porcelain output: missing complete record terminator');
17
+ }
18
+ const records = [];
19
+ // NUL 구분 토큰. 마지막 빈 토큰(trailing NUL)은 무시된다.
20
+ const tokens = output.split('\0');
21
+ let current = null;
22
+ const flush = () => {
23
+ if (current) {
24
+ records.push(current);
25
+ current = null;
26
+ }
27
+ };
28
+ for (const token of tokens) {
29
+ if (token === '') {
30
+ // record 경계.
31
+ flush();
32
+ continue;
33
+ }
34
+ const spaceIndex = token.indexOf(' ');
35
+ const key = spaceIndex === -1 ? token : token.slice(0, spaceIndex);
36
+ const value = spaceIndex === -1 ? '' : token.slice(spaceIndex + 1);
37
+ if (key === 'worktree') {
38
+ flush();
39
+ current = { path: value, head: null, branch: null, detached: false, bare: false, locked: false, prunable: false };
40
+ continue;
41
+ }
42
+ if (!current) {
43
+ throw new Error(`Malformed git worktree porcelain output: attribute before worktree (${key})`);
44
+ }
45
+ switch (key) {
46
+ case 'HEAD':
47
+ current.head = value || null;
48
+ break;
49
+ case 'branch':
50
+ // refs/heads/<name> → <name>
51
+ current.branch = value.replace(/^refs\/heads\//, '') || null;
52
+ break;
53
+ case 'detached':
54
+ current.detached = true;
55
+ break;
56
+ case 'bare':
57
+ current.bare = true;
58
+ break;
59
+ case 'locked':
60
+ current.locked = true;
61
+ break;
62
+ case 'prunable':
63
+ current.prunable = true;
64
+ break;
65
+ default:
66
+ break;
67
+ }
68
+ }
69
+ flush();
70
+ if (records.length === 0 ||
71
+ records.some((record) => record.path.trim().length === 0 ||
72
+ (!record.bare && !record.prunable && record.head === null) ||
73
+ (!record.bare && !record.prunable && !record.detached && record.branch === null))) {
74
+ throw new Error('Malformed git worktree porcelain output: incomplete worktree record');
75
+ }
76
+ return records;
77
+ };
78
+ /** canonical 경로를 서버에 노출하지 않는 daemon-scoped opaque 안정 키로 변환한다. */
79
+ export const computeLocalKey = (canonicalPath) => createHash('sha256').update(canonicalPath).digest('hex');
80
+ const runGitCapture = (args, cwd) => execFileSync('git', args, { cwd, encoding: 'utf8', stdio: ['ignore', 'pipe', 'ignore'], windowsHide: true });
81
+ const canonicalize = (p) => {
82
+ try {
83
+ return realpathSync(p);
84
+ }
85
+ catch {
86
+ return path.resolve(p);
87
+ }
88
+ };
89
+ /**
90
+ * 한 로컬 저장소의 linked worktree를 발견한다.
91
+ *
92
+ * main worktree(첫 record), bare, prunable은 제외한다. prunable/부재는 서버에서 보고 누락으로 MISSING 처리된다.
93
+ * Git 명령이 실패하면 ok=false로 반환해 서버가 기존 상태를 보존하게 한다.
94
+ *
95
+ * @param runGit 테스트 주입용 git 실행기. 기본은 실제 `git` 호출.
96
+ */
97
+ export const discoverRepositoryWorktrees = (repoPath, runGit = runGitCapture) => {
98
+ let output;
99
+ try {
100
+ output = runGit(['worktree', 'list', '--porcelain', '-z'], repoPath);
101
+ }
102
+ catch {
103
+ // Git 명령 실패: 기존 상태 보존을 위해 ok=false.
104
+ return { ok: false, items: [], mappings: {} };
105
+ }
106
+ let records;
107
+ try {
108
+ records = parseWorktreePorcelain(output);
109
+ }
110
+ catch {
111
+ return { ok: false, items: [], mappings: {} };
112
+ }
113
+ const items = [];
114
+ const mappings = {};
115
+ // 첫 record는 main worktree → 제외(기존 AgentConfig 실행 경로와 중복).
116
+ for (const record of records.slice(1)) {
117
+ if (record.bare || record.prunable) {
118
+ continue;
119
+ }
120
+ const canonical = canonicalize(record.path);
121
+ const localKey = computeLocalKey(canonical);
122
+ items.push({
123
+ localKey,
124
+ branch: record.branch,
125
+ headSha: record.head,
126
+ displayName: record.branch ?? path.basename(canonical),
127
+ });
128
+ mappings[localKey] = canonical;
129
+ }
130
+ return { ok: true, items, mappings };
131
+ };
132
+ /** 로컬 저장소의 origin remote를 정규화 신원으로 변환한다. 매칭 실패 시 null. */
133
+ export const resolveRepositoryOrigin = (repoPath, runGit = runGitCapture) => {
134
+ try {
135
+ const origin = runGit(['remote', 'get-url', 'origin'], repoPath).trim();
136
+ return origin ? normalizeRemoteUrl(origin) : null;
137
+ }
138
+ catch {
139
+ return null;
140
+ }
141
+ };
142
+ /**
143
+ * 연결 저장소 범위에서 발견 worktree를 정합화하고 서버에 full snapshot을 보고한다.
144
+ *
145
+ * - discovery 대상 repository(remoteUrl)만 로컬 저장소 origin과 매칭한다. scope 밖은 Git 명령·payload 모두에서 제외한다.
146
+ * - 로컬에서 매칭되지 않은 repository는 보고 목록에서 아예 제외한다(빈 성공 snapshot으로 MISSING 오탐 방지).
147
+ * - 매칭됐지만 Git 조회 실패면 ok=false로 보고해 서버가 기존 상태를 보존하게 한다.
148
+ * - localKey↔경로 매핑을 원자적으로 저장한다(민감 경로는 서버로 전송하지 않는다).
149
+ */
150
+ export const reconcileDiscoveredWorktrees = async (deps) => {
151
+ const detectGitRepo = deps.isGitRepo ?? isGitRepo;
152
+ const findCandidates = deps.findMemberRepoCandidates ?? findMemberRepoCandidates;
153
+ const resolveOrigin = deps.resolveRepositoryOrigin ?? ((repoPath) => resolveRepositoryOrigin(repoPath));
154
+ const discover = deps.discoverRepositoryWorktrees ?? ((repoPath) => discoverRepositoryWorktrees(repoPath));
155
+ const loadMappings = deps.loadMappings ?? (() => loadDiscoveredWorktreeMappings());
156
+ const saveMappings = deps.saveMappings ?? ((m) => void saveDiscoveredWorktreeMappings(m));
157
+ const repositories = await deps.fetchDiscoveryRepositories();
158
+ // 정규화된 remote 신원 → repositoryId (연결 범위).
159
+ const remoteToRepoIds = new Map();
160
+ for (const repo of repositories) {
161
+ if (!repo.remoteUrl) {
162
+ continue;
163
+ }
164
+ const normalized = normalizeRemoteUrl(repo.remoteUrl);
165
+ if (normalized) {
166
+ const ids = remoteToRepoIds.get(normalized) ?? [];
167
+ ids.push(repo.id);
168
+ remoteToRepoIds.set(normalized, ids);
169
+ }
170
+ }
171
+ const perRepo = new Map();
172
+ for (const authPath of deps.authPaths) {
173
+ let candidates;
174
+ try {
175
+ candidates = detectGitRepo(authPath) ? [authPath] : findCandidates(authPath);
176
+ }
177
+ catch {
178
+ continue;
179
+ }
180
+ for (const candidate of candidates) {
181
+ const normalized = resolveOrigin(candidate);
182
+ if (!normalized) {
183
+ continue;
184
+ }
185
+ const repositoryIds = remoteToRepoIds.get(normalized);
186
+ if (!repositoryIds || repositoryIds.length === 0) {
187
+ // discovery scope 밖 → 명령/보고 대상에서 제외.
188
+ continue;
189
+ }
190
+ const discovery = discover(candidate);
191
+ for (const repositoryId of repositoryIds) {
192
+ const acc = perRepo.get(repositoryId) ?? { ok: false, items: new Map(), mappings: {} };
193
+ // 여러 checkout이 같은 repository를 가리키면 ok는 AND(하나라도 실패면 보존), item/mapping은 localKey로 dedupe.
194
+ acc.ok = perRepo.has(repositoryId) ? acc.ok && discovery.ok : discovery.ok;
195
+ if (discovery.ok) {
196
+ for (const item of discovery.items) {
197
+ acc.items.set(item.localKey, item);
198
+ }
199
+ Object.assign(acc.mappings, discovery.mappings);
200
+ }
201
+ perRepo.set(repositoryId, acc);
202
+ }
203
+ }
204
+ }
205
+ if (perRepo.size === 0) {
206
+ return;
207
+ }
208
+ const syncRepositories = [];
209
+ const freshMappings = {};
210
+ for (const [repositoryId, acc] of perRepo) {
211
+ Object.assign(freshMappings, acc.mappings);
212
+ syncRepositories.push({
213
+ repositoryId,
214
+ ok: acc.ok,
215
+ worktrees: acc.ok ? Array.from(acc.items.values()) : [],
216
+ });
217
+ }
218
+ // 스캔되지 않은 repository의 매핑은 실행을 위해 보존하고, 이번 cycle의 매핑을 합친다.
219
+ try {
220
+ saveMappings({ ...loadMappings(), ...freshMappings });
221
+ }
222
+ catch {
223
+ // 매핑 저장 실패는 보고를 막지 않는다.
224
+ }
225
+ await deps.syncDiscoveredWorktrees(syncRepositories);
226
+ };
227
+ //# sourceMappingURL=worktree-discovery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worktree-discovery.js","sourceRoot":"","sources":["../../src/utils/worktree-discovery.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};