@tienne/gestalt 0.108.0 → 0.110.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (113) hide show
  1. package/CLAUDE.md +1 -0
  2. package/dist/package.json +1 -1
  3. package/dist/src/cli/commands/peer.d.ts +49 -0
  4. package/dist/src/cli/commands/peer.d.ts.map +1 -0
  5. package/dist/src/cli/commands/peer.js +302 -0
  6. package/dist/src/cli/commands/peer.js.map +1 -0
  7. package/dist/src/cli/index.d.ts.map +1 -1
  8. package/dist/src/cli/index.js +81 -2
  9. package/dist/src/cli/index.js.map +1 -1
  10. package/dist/src/peer/client.d.ts +9 -0
  11. package/dist/src/peer/client.d.ts.map +1 -0
  12. package/dist/src/peer/client.js +51 -0
  13. package/dist/src/peer/client.js.map +1 -0
  14. package/dist/src/peer/daemon.d.ts +83 -0
  15. package/dist/src/peer/daemon.d.ts.map +1 -0
  16. package/dist/src/peer/daemon.js +516 -0
  17. package/dist/src/peer/daemon.js.map +1 -0
  18. package/dist/src/peer/errors.d.ts +2 -0
  19. package/dist/src/peer/errors.d.ts.map +1 -0
  20. package/dist/src/peer/errors.js +4 -0
  21. package/dist/src/peer/errors.js.map +1 -0
  22. package/dist/src/peer/feed.d.ts +103 -0
  23. package/dist/src/peer/feed.d.ts.map +1 -0
  24. package/dist/src/peer/feed.js +167 -0
  25. package/dist/src/peer/feed.js.map +1 -0
  26. package/dist/src/peer/index.d.ts +24 -0
  27. package/dist/src/peer/index.d.ts.map +1 -0
  28. package/dist/src/peer/index.js +14 -0
  29. package/dist/src/peer/index.js.map +1 -0
  30. package/dist/src/peer/keys.d.ts +26 -0
  31. package/dist/src/peer/keys.d.ts.map +1 -0
  32. package/dist/src/peer/keys.js +95 -0
  33. package/dist/src/peer/keys.js.map +1 -0
  34. package/dist/src/peer/locate.d.ts +44 -0
  35. package/dist/src/peer/locate.d.ts.map +1 -0
  36. package/dist/src/peer/locate.js +116 -0
  37. package/dist/src/peer/locate.js.map +1 -0
  38. package/dist/src/peer/lock.d.ts +32 -0
  39. package/dist/src/peer/lock.d.ts.map +1 -0
  40. package/dist/src/peer/lock.js +147 -0
  41. package/dist/src/peer/lock.js.map +1 -0
  42. package/dist/src/peer/mirror.d.ts +21 -0
  43. package/dist/src/peer/mirror.d.ts.map +1 -0
  44. package/dist/src/peer/mirror.js +68 -0
  45. package/dist/src/peer/mirror.js.map +1 -0
  46. package/dist/src/peer/network.d.ts +148 -0
  47. package/dist/src/peer/network.d.ts.map +1 -0
  48. package/dist/src/peer/network.js +809 -0
  49. package/dist/src/peer/network.js.map +1 -0
  50. package/dist/src/peer/paths.d.ts +23 -0
  51. package/dist/src/peer/paths.d.ts.map +1 -0
  52. package/dist/src/peer/paths.js +50 -0
  53. package/dist/src/peer/paths.js.map +1 -0
  54. package/dist/src/peer/protocol.d.ts +112 -0
  55. package/dist/src/peer/protocol.d.ts.map +1 -0
  56. package/dist/src/peer/protocol.js +8 -0
  57. package/dist/src/peer/protocol.js.map +1 -0
  58. package/dist/src/peer/redact.d.ts +30 -0
  59. package/dist/src/peer/redact.d.ts.map +1 -0
  60. package/dist/src/peer/redact.js +214 -0
  61. package/dist/src/peer/redact.js.map +1 -0
  62. package/dist/src/peer/relay.d.ts +70 -0
  63. package/dist/src/peer/relay.d.ts.map +1 -0
  64. package/dist/src/peer/relay.js +410 -0
  65. package/dist/src/peer/relay.js.map +1 -0
  66. package/dist/src/peer/roster.d.ts +89 -0
  67. package/dist/src/peer/roster.d.ts.map +1 -0
  68. package/dist/src/peer/roster.js +160 -0
  69. package/dist/src/peer/roster.js.map +1 -0
  70. package/dist/src/peer/seal.d.ts +37 -0
  71. package/dist/src/peer/seal.d.ts.map +1 -0
  72. package/dist/src/peer/seal.js +115 -0
  73. package/dist/src/peer/seal.js.map +1 -0
  74. package/dist/src/peer/share.d.ts +41 -0
  75. package/dist/src/peer/share.d.ts.map +1 -0
  76. package/dist/src/peer/share.js +70 -0
  77. package/dist/src/peer/share.js.map +1 -0
  78. package/dist/src/peer/state.d.ts +68 -0
  79. package/dist/src/peer/state.d.ts.map +1 -0
  80. package/dist/src/peer/state.js +161 -0
  81. package/dist/src/peer/state.js.map +1 -0
  82. package/dist/src/peer/tail.d.ts +55 -0
  83. package/dist/src/peer/tail.d.ts.map +1 -0
  84. package/dist/src/peer/tail.js +148 -0
  85. package/dist/src/peer/tail.js.map +1 -0
  86. package/dist/src/peer/transform.d.ts +79 -0
  87. package/dist/src/peer/transform.d.ts.map +1 -0
  88. package/dist/src/peer/transform.js +237 -0
  89. package/dist/src/peer/transform.js.map +1 -0
  90. package/dist/src/peer/transport.d.ts +89 -0
  91. package/dist/src/peer/transport.d.ts.map +1 -0
  92. package/dist/src/peer/transport.js +345 -0
  93. package/dist/src/peer/transport.js.map +1 -0
  94. package/dist/src/peer/viewer-html.d.ts +10 -0
  95. package/dist/src/peer/viewer-html.d.ts.map +1 -0
  96. package/dist/src/peer/viewer-html.js +165 -0
  97. package/dist/src/peer/viewer-html.js.map +1 -0
  98. package/dist/src/peer/viewer.d.ts +58 -0
  99. package/dist/src/peer/viewer.d.ts.map +1 -0
  100. package/dist/src/peer/viewer.js +249 -0
  101. package/dist/src/peer/viewer.js.map +1 -0
  102. package/dist/src/peer/wire.d.ts +90 -0
  103. package/dist/src/peer/wire.d.ts.map +1 -0
  104. package/dist/src/peer/wire.js +10 -0
  105. package/dist/src/peer/wire.js.map +1 -0
  106. package/dist/src/peer/ws.d.ts +47 -0
  107. package/dist/src/peer/ws.d.ts.map +1 -0
  108. package/dist/src/peer/ws.js +308 -0
  109. package/dist/src/peer/ws.js.map +1 -0
  110. package/package.json +1 -1
  111. package/plugin/.codex-plugin/plugin.json +1 -1
  112. package/plugin/.mcp.json +1 -1
  113. package/plugin/mcp.json +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daemon.js","sourceRoot":"","sources":["../../../src/peer/daemon.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function errMessage(err: unknown): string;
2
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../src/peer/errors.ts"],"names":[],"mappings":"AAAA,wBAAgB,UAAU,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAE/C"}
@@ -0,0 +1,4 @@
1
+ export function errMessage(err) {
2
+ return err instanceof Error ? err.message : String(err);
3
+ }
4
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/peer/errors.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,UAAU,CAAC,GAAY;IACrC,OAAO,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AAC1D,CAAC"}
@@ -0,0 +1,103 @@
1
+ /**
2
+ * 뷰어 하나가 받는 것. seq는 SSE id로 써서 다시 붙었을 때 이어 받게 한다. 이벤트는
3
+ * 쌓을 때 한 번 직렬화한 글자를 그대로 넘긴다. 뷰어마다 다시 직렬화하지 않는다.
4
+ */
5
+ export type ShareFrame = {
6
+ type: 'event';
7
+ seq: number;
8
+ json: string;
9
+ }
10
+ /** 붙은 뷰어가 받을 앞부분 중 메모리 상한에 밀려 버려진 이벤트 수 */
11
+ | {
12
+ type: 'trimmed';
13
+ dropped: number;
14
+ } | {
15
+ type: 'stats';
16
+ unknownLines: number;
17
+ } | {
18
+ type: 'state';
19
+ status: ShareStatus;
20
+ }
21
+ /**
22
+ * 공유 종료. 앞부분을 따라잡는 중에 종료되면 아직 못 보낸 이벤트는 사라지므로 그 개수를
23
+ * missed에 싣는다. 붙어 있던 뷰어는 다 받은 뒤라 안 싣는다
24
+ */
25
+ | {
26
+ type: 'closed';
27
+ reason: string;
28
+ missed?: number;
29
+ };
30
+ /** offline은 원격 공유에서 주인 데몬이 릴레이에서 빠졌을 때다 */
31
+ export type ShareStatus = 'live' | 'missing' | 'truncated' | 'offline';
32
+ export type ShareListener = (frame: ShareFrame) => void;
33
+ /**
34
+ * 새 뷰어에게 다시 보낼 앞부분의 상한. 넘으면 오래된 것부터 버린다. 공유는 최대 7일
35
+ * 열려 있고 도구 출력이 크면 events가 끝없이 는다.
36
+ */
37
+ export declare const DEFAULT_MAX_BACKLOG_BYTES: number;
38
+ export interface BacklogSlice {
39
+ /** `afterSeq` 뒤로 상한에 밀려 버려진 이벤트 수 */
40
+ dropped: number;
41
+ items: {
42
+ seq: number;
43
+ json: string;
44
+ }[];
45
+ }
46
+ /**
47
+ * 바꾼 이벤트를 직렬화한 글자로 상한까지 들고 붙은 뷰어에 흘린다. 뷰어 서버는 이것만 안다.
48
+ * 내 대화 기록을 읽는 ShareStream과 원격 공유를 받아 옮기는 MirrorFeed가 이걸 물려받는다.
49
+ *
50
+ * seq는 공유가 연 뒤로 나온 이벤트의 번호다. 앞부분을 버려도 번호는 안 당긴다.
51
+ * 배열 위치로 매기면 버린 만큼 번호가 밀려 Last-Event-ID로 이어 받을 때 겹치거나 빠진다.
52
+ */
53
+ export declare class ShareFeed {
54
+ readonly id: string;
55
+ /**
56
+ * `events[head]`부터가 살아 있다. 앞에서 하나씩 shift하면 큰 배열에서 매번 다 옮긴다.
57
+ * head 앞 칸은 버릴 때 비워 둔다. 압축은 head가 1024를 넘어야 돌아서 칸에 참조를
58
+ * 남기면 버린 이벤트를 GC가 못 가져간다.
59
+ */
60
+ private events;
61
+ private head;
62
+ /** `events[0]` 앞에서 잘라 낸 이벤트 수. `events[i]`의 seq는 `base + i + 1`이다 */
63
+ private base;
64
+ private backlogBytes;
65
+ private readonly maxBacklogBytes;
66
+ private listeners;
67
+ protected status: ShareStatus;
68
+ private closedReason;
69
+ constructor(id: string, maxBacklogBytes?: number);
70
+ get currentStatus(): ShareStatus;
71
+ get unknownLines(): number;
72
+ get eventCount(): number;
73
+ /** 상한에 밀려 버린 이벤트 수 */
74
+ get droppedEvents(): number;
75
+ get viewerCount(): number;
76
+ get isClosed(): boolean;
77
+ get closeReason(): string | undefined;
78
+ /**
79
+ * 쌓인 것 중 `afterSeq` 뒤를 `maxBytes`쯤까지 꺼낸다. 이벤트 하나가 상한보다 커도 하나는
80
+ * 꺼낸다. 뷰어가 소켓이 비는 만큼씩 앞부분을 보내려고 쓴다. 한 번에 다 넘기면 안 읽는
81
+ * 뷰어마다 앞부분 전체가 소켓 버퍼에 쌓인다.
82
+ */
83
+ backlogAfter(afterSeq: number, maxBytes: number): BacklogSlice;
84
+ /**
85
+ * 뷰어를 붙인다. 지금 상태와 `afterSeq` 뒤 앞부분을 한 번에 보내고 이후는 생기는 대로.
86
+ * 떼어내는 함수를 돌려준다. 앞부분이 큰 뷰어는 backlogAfter로 먼저 따라잡은 뒤 이벤트
87
+ * 루프로 돌아가기 전에 바로 붙어야 사이에 poll이 끼어 이벤트가 빠지지 않는다.
88
+ */
89
+ subscribe(listener: ShareListener, afterSeq?: number): () => void;
90
+ close(reason: string): void;
91
+ /** 이벤트 하나를 쌓고 흘린다. 상한 정리는 부른 쪽이 trim으로 한 번에 한다 */
92
+ protected pushEvent(json: string): void;
93
+ /**
94
+ * 들고 있던 걸 다 버리고 다음 이벤트 번호를 `seq + 1`부터 잇는다. 원격 공유에서 주인
95
+ * 쪽이 버린 구간을 건너뛸 때 쓴다. 버린 개수는 droppedEvents에 들어간다.
96
+ */
97
+ protected skipTo(seq: number): void;
98
+ /** 가장 최근 이벤트 하나는 상한을 넘어도 남긴다. 다 버리면 새 뷰어가 지금 상태를 못 본다 */
99
+ protected trim(): void;
100
+ protected setStatus(next: ShareStatus): void;
101
+ protected emit(frame: ShareFrame): void;
102
+ }
103
+ //# sourceMappingURL=feed.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feed.d.ts","sourceRoot":"","sources":["../../../src/peer/feed.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,MAAM,UAAU,GAClB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE;AAC9C,2CAA2C;GACzC;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACpC;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,GACvC;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,WAAW,CAAA;CAAE;AACxC;;;GAGG;GACD;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAExD,2CAA2C;AAC3C,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,SAAS,GAAG,WAAW,GAAG,SAAS,CAAC;AAEvE,MAAM,MAAM,aAAa,GAAG,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;AAExD;;;GAGG;AACH,eAAO,MAAM,yBAAyB,QAAmB,CAAC;AAO1D,MAAM,WAAW,YAAY;IAC3B,qCAAqC;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CACxC;AAED;;;;;;GAMG;AACH,qBAAa,SAAS;IACpB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IAEpB;;;;OAIG;IACH,OAAO,CAAC,MAAM,CAA4B;IAC1C,OAAO,CAAC,IAAI,CAAK;IACjB,qEAAqE;IACrE,OAAO,CAAC,IAAI,CAAK;IACjB,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;IACzC,OAAO,CAAC,SAAS,CAA4B;IAC7C,SAAS,CAAC,MAAM,EAAE,WAAW,CAAU;IACvC,OAAO,CAAC,YAAY,CAAqB;gBAE7B,EAAE,EAAE,MAAM,EAAE,eAAe,SAA4B;IAKnE,IAAI,aAAa,IAAI,WAAW,CAE/B;IAED,IAAI,YAAY,IAAI,MAAM,CAEzB;IAED,IAAI,UAAU,IAAI,MAAM,CAEvB;IAED,sBAAsB;IACtB,IAAI,aAAa,IAAI,MAAM,CAE1B;IAED,IAAI,WAAW,IAAI,MAAM,CAExB;IAED,IAAI,QAAQ,IAAI,OAAO,CAEtB;IAED,IAAI,WAAW,IAAI,MAAM,GAAG,SAAS,CAEpC;IAED;;;;OAIG;IACH,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,YAAY;IAe9D;;;;OAIG;IACH,SAAS,CAAC,QAAQ,EAAE,aAAa,EAAE,QAAQ,SAAI,GAAG,MAAM,IAAI;IAqB5D,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAY3B,kDAAkD;IAClD,SAAS,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAOvC;;;OAGG;IACH,SAAS,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAQnC,yDAAyD;IACzD,SAAS,CAAC,IAAI,IAAI,IAAI;IAatB,SAAS,CAAC,SAAS,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI;IAM5C,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;CAWxC"}
@@ -0,0 +1,167 @@
1
+ import { errMessage } from './errors.js';
2
+ /**
3
+ * 새 뷰어에게 다시 보낼 앞부분의 상한. 넘으면 오래된 것부터 버린다. 공유는 최대 7일
4
+ * 열려 있고 도구 출력이 크면 events가 끝없이 는다.
5
+ */
6
+ export const DEFAULT_MAX_BACKLOG_BYTES = 32 * 1024 * 1024;
7
+ /**
8
+ * 바꾼 이벤트를 직렬화한 글자로 상한까지 들고 붙은 뷰어에 흘린다. 뷰어 서버는 이것만 안다.
9
+ * 내 대화 기록을 읽는 ShareStream과 원격 공유를 받아 옮기는 MirrorFeed가 이걸 물려받는다.
10
+ *
11
+ * seq는 공유가 연 뒤로 나온 이벤트의 번호다. 앞부분을 버려도 번호는 안 당긴다.
12
+ * 배열 위치로 매기면 버린 만큼 번호가 밀려 Last-Event-ID로 이어 받을 때 겹치거나 빠진다.
13
+ */
14
+ export class ShareFeed {
15
+ id;
16
+ /**
17
+ * `events[head]`부터가 살아 있다. 앞에서 하나씩 shift하면 큰 배열에서 매번 다 옮긴다.
18
+ * head 앞 칸은 버릴 때 비워 둔다. 압축은 head가 1024를 넘어야 돌아서 칸에 참조를
19
+ * 남기면 버린 이벤트를 GC가 못 가져간다.
20
+ */
21
+ events = [];
22
+ head = 0;
23
+ /** `events[0]` 앞에서 잘라 낸 이벤트 수. `events[i]`의 seq는 `base + i + 1`이다 */
24
+ base = 0;
25
+ backlogBytes = 0;
26
+ maxBacklogBytes;
27
+ listeners = new Set();
28
+ status = 'live';
29
+ closedReason;
30
+ constructor(id, maxBacklogBytes = DEFAULT_MAX_BACKLOG_BYTES) {
31
+ this.id = id;
32
+ this.maxBacklogBytes = maxBacklogBytes;
33
+ }
34
+ get currentStatus() {
35
+ return this.status;
36
+ }
37
+ get unknownLines() {
38
+ return 0;
39
+ }
40
+ get eventCount() {
41
+ return this.base + this.events.length;
42
+ }
43
+ /** 상한에 밀려 버린 이벤트 수 */
44
+ get droppedEvents() {
45
+ return this.base + this.head;
46
+ }
47
+ get viewerCount() {
48
+ return this.listeners.size;
49
+ }
50
+ get isClosed() {
51
+ return this.closedReason !== undefined;
52
+ }
53
+ get closeReason() {
54
+ return this.closedReason;
55
+ }
56
+ /**
57
+ * 쌓인 것 중 `afterSeq` 뒤를 `maxBytes`쯤까지 꺼낸다. 이벤트 하나가 상한보다 커도 하나는
58
+ * 꺼낸다. 뷰어가 소켓이 비는 만큼씩 앞부분을 보내려고 쓴다. 한 번에 다 넘기면 안 읽는
59
+ * 뷰어마다 앞부분 전체가 소켓 버퍼에 쌓인다.
60
+ */
61
+ backlogAfter(afterSeq, maxBytes) {
62
+ if (this.closedReason !== undefined)
63
+ return { dropped: 0, items: [] };
64
+ const droppedTotal = this.droppedEvents;
65
+ const after = Math.max(0, afterSeq);
66
+ const items = [];
67
+ let bytes = 0;
68
+ for (let i = Math.max(after, droppedTotal) - this.base; i < this.events.length; i++) {
69
+ const held = this.events[i];
70
+ if (items.length > 0 && bytes + held.bytes > maxBytes)
71
+ break;
72
+ items.push({ seq: this.base + i + 1, json: held.json });
73
+ bytes += held.bytes;
74
+ }
75
+ return { dropped: after < droppedTotal ? droppedTotal - after : 0, items };
76
+ }
77
+ /**
78
+ * 뷰어를 붙인다. 지금 상태와 `afterSeq` 뒤 앞부분을 한 번에 보내고 이후는 생기는 대로.
79
+ * 떼어내는 함수를 돌려준다. 앞부분이 큰 뷰어는 backlogAfter로 먼저 따라잡은 뒤 이벤트
80
+ * 루프로 돌아가기 전에 바로 붙어야 사이에 poll이 끼어 이벤트가 빠지지 않는다.
81
+ */
82
+ subscribe(listener, afterSeq = 0) {
83
+ listener({ type: 'state', status: this.status });
84
+ listener({ type: 'stats', unknownLines: this.unknownLines });
85
+ const { dropped, items } = this.backlogAfter(afterSeq, Infinity);
86
+ if (dropped > 0)
87
+ listener({ type: 'trimmed', dropped });
88
+ for (const item of items)
89
+ listener({ type: 'event', ...item });
90
+ if (this.closedReason !== undefined) {
91
+ // close가 events를 비워도 base를 늘려 두므로 eventCount는 그때까지 나온 전체 개수다
92
+ listener({
93
+ type: 'closed',
94
+ reason: this.closedReason,
95
+ missed: Math.max(0, this.eventCount - afterSeq),
96
+ });
97
+ return () => { };
98
+ }
99
+ this.listeners.add(listener);
100
+ return () => {
101
+ this.listeners.delete(listener);
102
+ };
103
+ }
104
+ close(reason) {
105
+ if (this.closedReason !== undefined)
106
+ return;
107
+ this.closedReason = reason;
108
+ this.emit({ type: 'closed', reason });
109
+ this.listeners.clear();
110
+ // 종료된 공유의 내용을 메모리에 붙잡아 둘 이유가 없다
111
+ this.base += this.events.length;
112
+ this.events = [];
113
+ this.head = 0;
114
+ this.backlogBytes = 0;
115
+ }
116
+ /** 이벤트 하나를 쌓고 흘린다. 상한 정리는 부른 쪽이 trim으로 한 번에 한다 */
117
+ pushEvent(json) {
118
+ const bytes = Buffer.byteLength(json);
119
+ this.events.push({ json, bytes });
120
+ this.backlogBytes += bytes;
121
+ this.emit({ type: 'event', seq: this.eventCount, json });
122
+ }
123
+ /**
124
+ * 들고 있던 걸 다 버리고 다음 이벤트 번호를 `seq + 1`부터 잇는다. 원격 공유에서 주인
125
+ * 쪽이 버린 구간을 건너뛸 때 쓴다. 버린 개수는 droppedEvents에 들어간다.
126
+ */
127
+ skipTo(seq) {
128
+ if (seq <= this.eventCount)
129
+ return;
130
+ this.base = seq;
131
+ this.events = [];
132
+ this.head = 0;
133
+ this.backlogBytes = 0;
134
+ }
135
+ /** 가장 최근 이벤트 하나는 상한을 넘어도 남긴다. 다 버리면 새 뷰어가 지금 상태를 못 본다 */
136
+ trim() {
137
+ while (this.backlogBytes > this.maxBacklogBytes && this.events.length - this.head > 1) {
138
+ this.backlogBytes -= this.events[this.head].bytes;
139
+ this.events[this.head] = undefined;
140
+ this.head++;
141
+ }
142
+ if (this.head > 1024 && this.head * 2 > this.events.length) {
143
+ this.base += this.head;
144
+ this.events = this.events.slice(this.head);
145
+ this.head = 0;
146
+ }
147
+ }
148
+ setStatus(next) {
149
+ if (next === this.status)
150
+ return;
151
+ this.status = next;
152
+ this.emit({ type: 'state', status: next });
153
+ }
154
+ emit(frame) {
155
+ for (const listener of [...this.listeners]) {
156
+ try {
157
+ listener(frame);
158
+ }
159
+ catch (err) {
160
+ // 뷰어 하나가 끊겨 쓰기에 실패해도 다른 뷰어와 데몬은 계속 돈다
161
+ this.listeners.delete(listener);
162
+ process.stderr.write(`[peer] viewer listener failed: ${errMessage(err)}\n`);
163
+ }
164
+ }
165
+ }
166
+ }
167
+ //# sourceMappingURL=feed.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feed.js","sourceRoot":"","sources":["../../../src/peer/feed.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ export { PeerDaemon } from './daemon.js';
2
+ export type { PeerDaemonOptions } from './daemon.js';
3
+ export { request, DaemonUnavailableError, DAEMON_NOT_RUNNING } from './client.js';
4
+ export { claudeConfigDir, cwdSlug, findSessionByPid, locateTranscript, readSessionFile, } from './locate.js';
5
+ export type { LocateResult, SessionRecord } from './locate.js';
6
+ export { peerRoot, socketPath, statePath } from './paths.js';
7
+ export { redactText, redactValue, truncateBytes, isToolsLevel, REDACTED } from './redact.js';
8
+ export type { ToolsLevel } from './redact.js';
9
+ export { TranscriptTail } from './tail.js';
10
+ export { TranscriptTransformer, stripSystemReminders } from './transform.js';
11
+ export type { PeerEvent } from './transform.js';
12
+ export { PeerState } from './state.js';
13
+ export type { DaemonStatus, PeerRequest, PeerResponse, ShareInfo } from './protocol.js';
14
+ export { RelayServer } from './relay.js';
15
+ export type { RelayServerOptions } from './relay.js';
16
+ export { RelayTransport, RelaySendError } from './transport.js';
17
+ export type { PeerTransport, TransportState } from './transport.js';
18
+ export { PeerNetwork } from './network.js';
19
+ export type { MemberInfo, TeamStatus } from './network.js';
20
+ export { loadOrCreateMachineKey, machineKeyPath } from './keys.js';
21
+ export type { MachineKey } from './keys.js';
22
+ export { checkRosterUpdate, formatShareLink, parseShareLink } from './roster.js';
23
+ export type { Roster, RosterMember, SignedRoster } from './roster.js';
24
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/peer/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,YAAY,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAClF,OAAO,EACL,eAAe,EACf,OAAO,EACP,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,GAChB,MAAM,aAAa,CAAC;AACrB,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,aAAa,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC7F,YAAY,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAC7E,YAAY,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AACxF,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,YAAY,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChE,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACpE,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC3D,OAAO,EAAE,sBAAsB,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AACnE,YAAY,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AACjF,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,14 @@
1
+ export { PeerDaemon } from './daemon.js';
2
+ export { request, DaemonUnavailableError, DAEMON_NOT_RUNNING } from './client.js';
3
+ export { claudeConfigDir, cwdSlug, findSessionByPid, locateTranscript, readSessionFile, } from './locate.js';
4
+ export { peerRoot, socketPath, statePath } from './paths.js';
5
+ export { redactText, redactValue, truncateBytes, isToolsLevel, REDACTED } from './redact.js';
6
+ export { TranscriptTail } from './tail.js';
7
+ export { TranscriptTransformer, stripSystemReminders } from './transform.js';
8
+ export { PeerState } from './state.js';
9
+ export { RelayServer } from './relay.js';
10
+ export { RelayTransport, RelaySendError } from './transport.js';
11
+ export { PeerNetwork } from './network.js';
12
+ export { loadOrCreateMachineKey, machineKeyPath } from './keys.js';
13
+ export { checkRosterUpdate, formatShareLink, parseShareLink } from './roster.js';
14
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/peer/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,EAAE,OAAO,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAClF,OAAO,EACL,eAAe,EACf,OAAO,EACP,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,GAChB,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,aAAa,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE7F,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAE7E,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvC,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAEhE,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C,OAAO,EAAE,sBAAsB,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAEnE,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,26 @@
1
+ import type { KeyObject } from 'node:crypto';
2
+ /**
3
+ * 기기 키. Ed25519로 서명하고 X25519로 봉인을 연다. 이 기기를 가리키는 이름(`id`)은
4
+ * Ed25519 공개키 32바이트를 base64url로 쓴 43자다.
5
+ */
6
+ export interface MachineKey {
7
+ id: string;
8
+ /** X25519 공개키 32바이트 base64url */
9
+ boxKey: string;
10
+ signPrivate: KeyObject;
11
+ boxPrivate: KeyObject;
12
+ }
13
+ export declare function machineKeyPath(root: string): string;
14
+ /**
15
+ * 키 파일을 읽고 없으면 만든다. 파일은 만드는 순간부터 0600이다 — 쓰고 나서 chmod하면
16
+ * 그 사이에 기본 권한(umask)으로 열려 있다.
17
+ *
18
+ * 권한이 넓거나 심링크거나 남의 파일이면 읽지 않고 던진다. 고치는 건 사람 몫이다.
19
+ */
20
+ export declare function loadOrCreateMachineKey(root: string): MachineKey;
21
+ export declare function loadMachineKey(path: string): MachineKey;
22
+ /** 32바이트 공개키를 base64url로 쓴 꼴인지 */
23
+ export declare function isRawKey(value: unknown): value is string;
24
+ export declare function signPublicKey(id: string): KeyObject;
25
+ export declare function boxPublicKey(raw: string): KeyObject;
26
+ //# sourceMappingURL=keys.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keys.d.ts","sourceRoot":"","sources":["../../../src/peer/keys.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAc,SAAS,EAAE,MAAM,aAAa,CAAC;AAIzD;;;GAGG;AACH,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,iCAAiC;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,SAAS,CAAC;IACvB,UAAU,EAAE,SAAS,CAAC;CACvB;AAQD,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,CAyB/D;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,CAmBvD;AAwBD,kCAAkC;AAClC,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAExD;AAED,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,CAEnD;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAEnD"}
@@ -0,0 +1,95 @@
1
+ import { createPrivateKey, createPublicKey, generateKeyPairSync } from 'node:crypto';
2
+ import { closeSync, fsyncSync, lstatSync, openSync, readFileSync, writeSync } from 'node:fs';
3
+ import { join } from 'node:path';
4
+ export function machineKeyPath(root) {
5
+ return join(root, 'machine.key');
6
+ }
7
+ /**
8
+ * 키 파일을 읽고 없으면 만든다. 파일은 만드는 순간부터 0600이다 — 쓰고 나서 chmod하면
9
+ * 그 사이에 기본 권한(umask)으로 열려 있다.
10
+ *
11
+ * 권한이 넓거나 심링크거나 남의 파일이면 읽지 않고 던진다. 고치는 건 사람 몫이다.
12
+ */
13
+ export function loadOrCreateMachineKey(root) {
14
+ const path = machineKeyPath(root);
15
+ try {
16
+ return loadMachineKey(path);
17
+ }
18
+ catch (err) {
19
+ if (err.code !== 'ENOENT')
20
+ throw err;
21
+ }
22
+ const sign = generateKeyPairSync('ed25519').privateKey.export({ format: 'jwk' });
23
+ const box = generateKeyPairSync('x25519').privateKey.export({ format: 'jwk' });
24
+ const body = { v: 1, sign, box };
25
+ let fd;
26
+ try {
27
+ fd = openSync(path, 'wx', 0o600);
28
+ }
29
+ catch (err) {
30
+ // 다른 데몬이 먼저 만들었다. 그쪽 키를 쓴다
31
+ if (err.code === 'EEXIST')
32
+ return loadMachineKey(path);
33
+ throw err;
34
+ }
35
+ try {
36
+ writeSync(fd, JSON.stringify(body) + '\n');
37
+ fsyncSync(fd);
38
+ }
39
+ finally {
40
+ closeSync(fd);
41
+ }
42
+ return fromFile(body, path);
43
+ }
44
+ export function loadMachineKey(path) {
45
+ const st = lstatSync(path);
46
+ if (st.isSymbolicLink())
47
+ throw new Error(`기기 키가 심링크예요: ${path}`);
48
+ if (!st.isFile())
49
+ throw new Error(`기기 키 자리에 다른 파일이 있어요: ${path}`);
50
+ const uid = process.getuid?.();
51
+ if (uid !== undefined && st.uid !== uid)
52
+ throw new Error(`기기 키의 주인이 내가 아니에요: ${path}`);
53
+ if ((st.mode & 0o077) !== 0) {
54
+ throw new Error(`기기 키 권한이 넓어요(${(st.mode & 0o777).toString(8)}). chmod 600 ${path} 뒤에 다시 띄워 주세요`);
55
+ }
56
+ let body;
57
+ try {
58
+ body = JSON.parse(readFileSync(path, 'utf8'));
59
+ }
60
+ catch {
61
+ throw new Error(`기기 키 파일을 못 읽었어요: ${path}`);
62
+ }
63
+ return fromFile(body, path);
64
+ }
65
+ function fromFile(body, path) {
66
+ if (body.v !== 1 || body.sign?.crv !== 'Ed25519' || body.box?.crv !== 'X25519') {
67
+ throw new Error(`기기 키 형식이 아니에요: ${path}`);
68
+ }
69
+ const signPrivate = createPrivateKey({ key: body.sign, format: 'jwk' });
70
+ const boxPrivate = createPrivateKey({ key: body.box, format: 'jwk' });
71
+ return {
72
+ id: rawPublic(signPrivate),
73
+ boxKey: rawPublic(boxPrivate),
74
+ signPrivate,
75
+ boxPrivate,
76
+ };
77
+ }
78
+ function rawPublic(priv) {
79
+ const jwk = createPublicKey(priv).export({ format: 'jwk' });
80
+ if (typeof jwk.x !== 'string')
81
+ throw new Error('공개키를 못 꺼냈어요');
82
+ return jwk.x;
83
+ }
84
+ const RAW_KEY = /^[A-Za-z0-9_-]{43}$/;
85
+ /** 32바이트 공개키를 base64url로 쓴 꼴인지 */
86
+ export function isRawKey(value) {
87
+ return typeof value === 'string' && RAW_KEY.test(value);
88
+ }
89
+ export function signPublicKey(id) {
90
+ return createPublicKey({ key: { kty: 'OKP', crv: 'Ed25519', x: id }, format: 'jwk' });
91
+ }
92
+ export function boxPublicKey(raw) {
93
+ return createPublicKey({ key: { kty: 'OKP', crv: 'X25519', x: raw }, format: 'jwk' });
94
+ }
95
+ //# sourceMappingURL=keys.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keys.js","sourceRoot":"","sources":["../../../src/peer/keys.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Claude Code 대화 기록 위치 찾기.
3
+ *
4
+ * `sessions/<pid>.json`과 `projects/<슬러그>/<sessionId>.jsonl` 둘 다 문서화되지 않은
5
+ * 형식이다. 그래서 형식이 예상과 다르면 던지지 않고 이유를 담아 돌려준다 — 부르는 쪽이
6
+ * "어디서 무엇을 찾다 못 찾았는지"를 사람에게 그대로 보여줄 수 있어야 한다.
7
+ */
8
+ export type LocateResult = {
9
+ ok: true;
10
+ path: string;
11
+ sessionId: string;
12
+ configDir: string;
13
+ cwd?: string;
14
+ } | {
15
+ ok: false;
16
+ reason: string;
17
+ configDir: string;
18
+ sessionId?: string;
19
+ };
20
+ export interface SessionRecord {
21
+ sessionId: string;
22
+ cwd: string;
23
+ pid?: number;
24
+ }
25
+ /** 설정 디렉토리. Orca 프로필처럼 `CLAUDE_CONFIG_DIR`로 옮겨 둔 경우가 있다 */
26
+ export declare function claudeConfigDir(env?: NodeJS.ProcessEnv): string;
27
+ /**
28
+ * cwd를 `projects/` 아래 디렉토리 이름으로 바꾼다. 실제 이름을 보면 영숫자와 `-`
29
+ * 말고는 전부 `-`가 된다(`/Users/a/.x` → `-Users-a--x`, 한글도 `-`).
30
+ */
31
+ export declare function cwdSlug(cwd: string): string;
32
+ export declare function isSessionId(value: string): boolean;
33
+ /** `sessions/<pid>.json` 하나를 읽는다. 형식이 다르면 null */
34
+ export declare function readSessionFile(path: string): SessionRecord | null;
35
+ /** 부모 pid로 세션을 찾는다. MCP 서버처럼 세션의 자식이 쓴다 */
36
+ export declare function findSessionByPid(pid: number, configDir?: string): SessionRecord | null;
37
+ /**
38
+ * sessionId로 대화 기록 경로를 찾는다.
39
+ *
40
+ * 1. `sessions/*.json`에서 그 세션의 cwd를 찾아 슬러그 경로를 본다
41
+ * 2. 없으면(세션이 끝났거나 슬러그 규칙이 다르면) `projects/*` 아래를 훑는다
42
+ */
43
+ export declare function locateTranscript(sessionId: string, configDir?: string): LocateResult;
44
+ //# sourceMappingURL=locate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"locate.d.ts","sourceRoot":"","sources":["../../../src/peer/locate.ts"],"names":[],"mappings":"AAIA;;;;;;GAMG;AAEH,MAAM,MAAM,YAAY,GACpB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,GAC9E;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAEzE,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,2DAA2D;AAC3D,wBAAgB,eAAe,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CAI5E;AAED;;;GAGG;AACH,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE3C;AAKD,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAElD;AAED,kDAAkD;AAClD,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAclE;AAED,2CAA2C;AAC3C,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,SAAoB,GAAG,aAAa,GAAG,IAAI,CAGjG;AA0BD;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,SAAoB,GAAG,YAAY,CAoC/F"}