spidersan 0.4.5 → 0.6.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 (189) hide show
  1. package/CHANGELOG.md +67 -0
  2. package/README.md +60 -5
  3. package/dist/bin/spidersan.d.ts.map +1 -1
  4. package/dist/bin/spidersan.js +12 -1
  5. package/dist/bin/spidersan.js.map +1 -1
  6. package/dist/commands/abandon.d.ts.map +1 -1
  7. package/dist/commands/abandon.js +4 -2
  8. package/dist/commands/abandon.js.map +1 -1
  9. package/dist/commands/auto.js +6 -6
  10. package/dist/commands/auto.js.map +1 -1
  11. package/dist/commands/cleanup.d.ts.map +1 -1
  12. package/dist/commands/cleanup.js +3 -8
  13. package/dist/commands/cleanup.js.map +1 -1
  14. package/dist/commands/config.js +1 -1
  15. package/dist/commands/config.js.map +1 -1
  16. package/dist/commands/conflicts.d.ts.map +1 -1
  17. package/dist/commands/conflicts.js +209 -56
  18. package/dist/commands/conflicts.js.map +1 -1
  19. package/dist/commands/cross-conflicts.d.ts +17 -0
  20. package/dist/commands/cross-conflicts.d.ts.map +1 -0
  21. package/dist/commands/cross-conflicts.js +308 -0
  22. package/dist/commands/cross-conflicts.js.map +1 -0
  23. package/dist/commands/daily.d.ts +7 -0
  24. package/dist/commands/daily.d.ts.map +1 -0
  25. package/dist/commands/daily.js +171 -0
  26. package/dist/commands/daily.js.map +1 -0
  27. package/dist/commands/dashboard.d.ts +22 -0
  28. package/dist/commands/dashboard.d.ts.map +1 -0
  29. package/dist/commands/dashboard.js +401 -0
  30. package/dist/commands/dashboard.js.map +1 -0
  31. package/dist/commands/depends.js +2 -2
  32. package/dist/commands/depends.js.map +1 -1
  33. package/dist/commands/doctor.d.ts +22 -0
  34. package/dist/commands/doctor.d.ts.map +1 -1
  35. package/dist/commands/doctor.js +320 -61
  36. package/dist/commands/doctor.js.map +1 -1
  37. package/dist/commands/github-sync.d.ts +9 -0
  38. package/dist/commands/github-sync.d.ts.map +1 -0
  39. package/dist/commands/github-sync.js +180 -0
  40. package/dist/commands/github-sync.js.map +1 -0
  41. package/dist/commands/index.d.ts +10 -0
  42. package/dist/commands/index.d.ts.map +1 -1
  43. package/dist/commands/index.js +16 -0
  44. package/dist/commands/index.js.map +1 -1
  45. package/dist/commands/log.d.ts +3 -4
  46. package/dist/commands/log.d.ts.map +1 -1
  47. package/dist/commands/log.js +102 -87
  48. package/dist/commands/log.js.map +1 -1
  49. package/dist/commands/merge-order.js +8 -1
  50. package/dist/commands/merge-order.js.map +1 -1
  51. package/dist/commands/merged.d.ts.map +1 -1
  52. package/dist/commands/merged.js +4 -2
  53. package/dist/commands/merged.js.map +1 -1
  54. package/dist/commands/pulse.d.ts +6 -2
  55. package/dist/commands/pulse.d.ts.map +1 -1
  56. package/dist/commands/pulse.js +144 -202
  57. package/dist/commands/pulse.js.map +1 -1
  58. package/dist/commands/queen.d.ts +25 -0
  59. package/dist/commands/queen.d.ts.map +1 -0
  60. package/dist/commands/queen.js +322 -0
  61. package/dist/commands/queen.js.map +1 -0
  62. package/dist/commands/ready-check.d.ts.map +1 -1
  63. package/dist/commands/ready-check.js +42 -27
  64. package/dist/commands/ready-check.js.map +1 -1
  65. package/dist/commands/rebase-helper.d.ts.map +1 -1
  66. package/dist/commands/rebase-helper.js +13 -5
  67. package/dist/commands/rebase-helper.js.map +1 -1
  68. package/dist/commands/register.d.ts +1 -0
  69. package/dist/commands/register.d.ts.map +1 -1
  70. package/dist/commands/register.js +46 -19
  71. package/dist/commands/register.js.map +1 -1
  72. package/dist/commands/registry-sync.d.ts +9 -0
  73. package/dist/commands/registry-sync.d.ts.map +1 -0
  74. package/dist/commands/registry-sync.js +163 -0
  75. package/dist/commands/registry-sync.js.map +1 -0
  76. package/dist/commands/rescue.d.ts.map +1 -1
  77. package/dist/commands/rescue.js +42 -6
  78. package/dist/commands/rescue.js.map +1 -1
  79. package/dist/commands/stale.d.ts +9 -1
  80. package/dist/commands/stale.d.ts.map +1 -1
  81. package/dist/commands/stale.js +38 -45
  82. package/dist/commands/stale.js.map +1 -1
  83. package/dist/commands/sync-advisor.d.ts +14 -0
  84. package/dist/commands/sync-advisor.d.ts.map +1 -0
  85. package/dist/commands/sync-advisor.js +110 -0
  86. package/dist/commands/sync-advisor.js.map +1 -0
  87. package/dist/commands/sync.d.ts.map +1 -1
  88. package/dist/commands/sync.js +16 -5
  89. package/dist/commands/sync.js.map +1 -1
  90. package/dist/commands/torrent.d.ts.map +1 -1
  91. package/dist/commands/torrent.js +16 -14
  92. package/dist/commands/torrent.js.map +1 -1
  93. package/dist/commands/watch.d.ts.map +1 -1
  94. package/dist/commands/watch.js +197 -6
  95. package/dist/commands/watch.js.map +1 -1
  96. package/dist/lib/activity.d.ts +53 -0
  97. package/dist/lib/activity.d.ts.map +1 -0
  98. package/dist/lib/activity.js +267 -0
  99. package/dist/lib/activity.js.map +1 -0
  100. package/dist/lib/agent-errors.d.ts.map +1 -1
  101. package/dist/lib/agent-errors.js +5 -3
  102. package/dist/lib/agent-errors.js.map +1 -1
  103. package/dist/lib/ast.d.ts.map +1 -1
  104. package/dist/lib/ast.js +66 -19
  105. package/dist/lib/ast.js.map +1 -1
  106. package/dist/lib/colony-subscriber.d.ts +53 -0
  107. package/dist/lib/colony-subscriber.d.ts.map +1 -0
  108. package/dist/lib/colony-subscriber.js +184 -0
  109. package/dist/lib/colony-subscriber.js.map +1 -0
  110. package/dist/lib/config.d.ts.map +1 -1
  111. package/dist/lib/config.js +5 -4
  112. package/dist/lib/config.js.map +1 -1
  113. package/dist/lib/crypto.d.ts.map +1 -1
  114. package/dist/lib/crypto.js +7 -3
  115. package/dist/lib/crypto.js.map +1 -1
  116. package/dist/lib/daily-bridge.d.ts +41 -0
  117. package/dist/lib/daily-bridge.d.ts.map +1 -0
  118. package/dist/lib/daily-bridge.js +186 -0
  119. package/dist/lib/daily-bridge.js.map +1 -0
  120. package/dist/lib/github.d.ts +83 -0
  121. package/dist/lib/github.d.ts.map +1 -0
  122. package/dist/lib/github.js +206 -0
  123. package/dist/lib/github.js.map +1 -0
  124. package/dist/lib/regex-utils.d.ts +6 -0
  125. package/dist/lib/regex-utils.d.ts.map +1 -0
  126. package/dist/lib/regex-utils.js +24 -0
  127. package/dist/lib/regex-utils.js.map +1 -0
  128. package/dist/lib/repo-scanner.d.ts +32 -0
  129. package/dist/lib/repo-scanner.d.ts.map +1 -0
  130. package/dist/lib/repo-scanner.js +160 -0
  131. package/dist/lib/repo-scanner.js.map +1 -0
  132. package/dist/lib/salvage-analyzer.d.ts +29 -0
  133. package/dist/lib/salvage-analyzer.d.ts.map +1 -0
  134. package/dist/lib/salvage-analyzer.js +122 -0
  135. package/dist/lib/salvage-analyzer.js.map +1 -0
  136. package/dist/lib/security.d.ts +11 -0
  137. package/dist/lib/security.d.ts.map +1 -1
  138. package/dist/lib/security.js +20 -0
  139. package/dist/lib/security.js.map +1 -1
  140. package/dist/lib/symbol-extractor.d.ts +41 -0
  141. package/dist/lib/symbol-extractor.d.ts.map +1 -0
  142. package/dist/lib/symbol-extractor.js +78 -0
  143. package/dist/lib/symbol-extractor.js.map +1 -0
  144. package/dist/storage/adapter.d.ts +1 -1
  145. package/dist/storage/adapter.d.ts.map +1 -1
  146. package/dist/storage/index.d.ts +0 -5
  147. package/dist/storage/index.d.ts.map +1 -1
  148. package/dist/storage/index.js +0 -6
  149. package/dist/storage/index.js.map +1 -1
  150. package/dist/storage/local.d.ts +1 -1
  151. package/dist/storage/local.d.ts.map +1 -1
  152. package/dist/storage/local.js +7 -5
  153. package/dist/storage/local.js.map +1 -1
  154. package/dist/storage/supabase.d.ts +21 -1
  155. package/dist/storage/supabase.d.ts.map +1 -1
  156. package/dist/storage/supabase.js +171 -6
  157. package/dist/storage/supabase.js.map +1 -1
  158. package/dist/tui/dashboard.d.ts.map +1 -1
  159. package/dist/tui/dashboard.js +15 -6
  160. package/dist/tui/dashboard.js.map +1 -1
  161. package/dist/types/cloud.d.ts +101 -0
  162. package/dist/types/cloud.d.ts.map +1 -0
  163. package/dist/types/cloud.js +13 -0
  164. package/dist/types/cloud.js.map +1 -0
  165. package/package.json +90 -91
  166. package/dist/commands/sync-all.d.ts +0 -9
  167. package/dist/commands/sync-all.d.ts.map +0 -1
  168. package/dist/commands/sync-all.js +0 -180
  169. package/dist/commands/sync-all.js.map +0 -1
  170. package/dist/storage/git-messages.d.ts +0 -53
  171. package/dist/storage/git-messages.d.ts.map +0 -1
  172. package/dist/storage/git-messages.js +0 -374
  173. package/dist/storage/git-messages.js.map +0 -1
  174. package/dist/storage/local-messages.d.ts +0 -37
  175. package/dist/storage/local-messages.d.ts.map +0 -1
  176. package/dist/storage/local-messages.js +0 -151
  177. package/dist/storage/local-messages.js.map +0 -1
  178. package/dist/storage/message-adapter.d.ts +0 -86
  179. package/dist/storage/message-adapter.d.ts.map +0 -1
  180. package/dist/storage/message-adapter.js +0 -28
  181. package/dist/storage/message-adapter.js.map +0 -1
  182. package/dist/storage/message-factory.d.ts +0 -36
  183. package/dist/storage/message-factory.d.ts.map +0 -1
  184. package/dist/storage/message-factory.js +0 -99
  185. package/dist/storage/message-factory.js.map +0 -1
  186. package/dist/storage/mycmail-adapter.d.ts +0 -38
  187. package/dist/storage/mycmail-adapter.d.ts.map +0 -1
  188. package/dist/storage/mycmail-adapter.js +0 -297
  189. package/dist/storage/mycmail-adapter.js.map +0 -1
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Colony Subscriber — reads Colony work_claim/work_release signals
3
+ * and keeps the local Spidersan branch registry in sync.
4
+ *
5
+ * Design notes:
6
+ * - Queries the `colony_state` VIEW (not raw `colony_signals`) so that
7
+ * `is_stale` is already computed server-side.
8
+ * - Credentials come from COLONY_SUPABASE_URL + COLONY_SUPABASE_KEY env vars
9
+ * (the MycToak Supabase project, separate from Spidersan's own project).
10
+ * - Full offline fallback: any network/auth error returns offline=true and
11
+ * the caller falls back to the local registry. Never throws.
12
+ * - Agent label resolution: fetches all colony_state rows first to build a
13
+ * agentKeyId → agentLabel map, so labels are available even when the
14
+ * work_claim row itself doesn't carry agent_label.
15
+ *
16
+ * 🍄 hey tsan — the mycelium remembers. migration 025 opened the gradient.
17
+ * your spiders can smell the pheromones now. — mycsan
18
+ */
19
+ export interface ConflictReport {
20
+ branch: string;
21
+ conflictsWith: string;
22
+ files: string[];
23
+ agent?: string;
24
+ }
25
+ export interface SyncResult {
26
+ conflicts: ConflictReport[];
27
+ synced: number;
28
+ offline: boolean;
29
+ }
30
+ /**
31
+ * Resolve a human-readable agent name from a Colony agent key ID.
32
+ *
33
+ * Uses the `agent_label` field already present on `colony_state` rows — no
34
+ * UUID lookup table needed. Falls back to a truncated UUID when no label is
35
+ * available.
36
+ */
37
+ export declare function resolveAgentName(agentKeyId: string, agentLabel?: string): string;
38
+ /**
39
+ * Sync the local Spidersan branch registry from Colony signals.
40
+ *
41
+ * Steps:
42
+ * 0. Build an agentKeyId → agentLabel map from all current colony_state rows
43
+ * (unfiltered) so labels are available even when work_claim rows lack them.
44
+ * 1. Query `colony_state` for non-stale `work_claim` rows.
45
+ * 2. Upsert each claimed branch into the local registry.
46
+ * 3. Query `colony_state` for `work_release` rows and remove released branches.
47
+ * 4. Detect conflicts in the updated registry and return them.
48
+ *
49
+ * Returns `offline: true` and an empty conflicts list on any error so callers
50
+ * can display a warning and continue with existing local data.
51
+ */
52
+ export declare function syncFromColony(): Promise<SyncResult>;
53
+ //# sourceMappingURL=colony-subscriber.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"colony-subscriber.d.ts","sourceRoot":"","sources":["../../src/lib/colony-subscriber.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAMH,MAAM,WAAW,cAAc;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,UAAU;IACvB,SAAS,EAAE,cAAc,EAAE,CAAC;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;CACpB;AAgBD;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAGhF;AAyCD;;;;;;;;;;;;;GAaG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,UAAU,CAAC,CAkI1D"}
@@ -0,0 +1,184 @@
1
+ /**
2
+ * Colony Subscriber — reads Colony work_claim/work_release signals
3
+ * and keeps the local Spidersan branch registry in sync.
4
+ *
5
+ * Design notes:
6
+ * - Queries the `colony_state` VIEW (not raw `colony_signals`) so that
7
+ * `is_stale` is already computed server-side.
8
+ * - Credentials come from COLONY_SUPABASE_URL + COLONY_SUPABASE_KEY env vars
9
+ * (the MycToak Supabase project, separate from Spidersan's own project).
10
+ * - Full offline fallback: any network/auth error returns offline=true and
11
+ * the caller falls back to the local registry. Never throws.
12
+ * - Agent label resolution: fetches all colony_state rows first to build a
13
+ * agentKeyId → agentLabel map, so labels are available even when the
14
+ * work_claim row itself doesn't carry agent_label.
15
+ *
16
+ * 🍄 hey tsan — the mycelium remembers. migration 025 opened the gradient.
17
+ * your spiders can smell the pheromones now. — mycsan
18
+ */
19
+ import { getStorage } from '../storage/index.js';
20
+ // ─── Agent name resolution ────────────────────────────────────────────────────
21
+ /**
22
+ * Resolve a human-readable agent name from a Colony agent key ID.
23
+ *
24
+ * Uses the `agent_label` field already present on `colony_state` rows — no
25
+ * UUID lookup table needed. Falls back to a truncated UUID when no label is
26
+ * available.
27
+ */
28
+ export function resolveAgentName(agentKeyId, agentLabel) {
29
+ if (agentLabel)
30
+ return agentLabel;
31
+ return `agent:${agentKeyId.slice(0, 8)}`;
32
+ }
33
+ // ─── Supabase REST helpers ────────────────────────────────────────────────────
34
+ function getColonyCredentials() {
35
+ const url = process.env.COLONY_SUPABASE_URL || process.env.SUPABASE_URL;
36
+ const key = process.env.COLONY_SUPABASE_KEY || process.env.SUPABASE_KEY;
37
+ if (!url || !key)
38
+ return null;
39
+ return { url, key };
40
+ }
41
+ async function fetchColonySignals(url, key, query) {
42
+ const endpoint = `${url}/rest/v1/${query}`;
43
+ const response = await fetch(endpoint, {
44
+ headers: {
45
+ apikey: key,
46
+ Authorization: `Bearer ${key}`,
47
+ 'Content-Type': 'application/json',
48
+ },
49
+ });
50
+ if (!response.ok) {
51
+ const text = await response.text();
52
+ throw new Error(`Colony query failed (${response.status}): ${text}`);
53
+ }
54
+ return (await response.json());
55
+ }
56
+ function isStale(row) {
57
+ if (!row.stale_after_ms)
58
+ return false;
59
+ const age = Date.now() - new Date(row.updated_at).getTime();
60
+ return age > row.stale_after_ms;
61
+ }
62
+ // ─── Core sync logic ──────────────────────────────────────────────────────────
63
+ /**
64
+ * Sync the local Spidersan branch registry from Colony signals.
65
+ *
66
+ * Steps:
67
+ * 0. Build an agentKeyId → agentLabel map from all current colony_state rows
68
+ * (unfiltered) so labels are available even when work_claim rows lack them.
69
+ * 1. Query `colony_state` for non-stale `work_claim` rows.
70
+ * 2. Upsert each claimed branch into the local registry.
71
+ * 3. Query `colony_state` for `work_release` rows and remove released branches.
72
+ * 4. Detect conflicts in the updated registry and return them.
73
+ *
74
+ * Returns `offline: true` and an empty conflicts list on any error so callers
75
+ * can display a warning and continue with existing local data.
76
+ */
77
+ export async function syncFromColony() {
78
+ const creds = getColonyCredentials();
79
+ if (!creds) {
80
+ // Credentials not configured — treat as offline (not an error)
81
+ return { conflicts: [], synced: 0, offline: true };
82
+ }
83
+ try {
84
+ const storage = await getStorage();
85
+ // ── 1. Fetch active work_claim signals from colony_signals (raw table) ─
86
+ //
87
+ // Query the raw table instead of the colony_state VIEW because the
88
+ // anon key can only see agent_key_id from the view (agent_label and
89
+ // payload are hidden by RLS on the agent_keys join). colony_signals
90
+ // exposes type + payload to anon. We compute staleness ourselves.
91
+ //
92
+ // Order by updated_at desc, limit to recent signals to avoid scanning
93
+ // the full history. Dedup by branch name — latest signal wins.
94
+ const claimRows = await fetchColonySignals(creds.url, creds.key, 'colony_signals?type=eq.work_claim&order=updated_at.desc&limit=200&select=*');
95
+ // Dedup: keep only the latest work_claim per agent_key_id
96
+ const latestByAgent = new Map();
97
+ for (const row of claimRows) {
98
+ if (!latestByAgent.has(row.agent_key_id)) {
99
+ latestByAgent.set(row.agent_key_id, row);
100
+ }
101
+ }
102
+ let synced = 0;
103
+ // ── 2. Upsert claimed branches into local registry ────────────────────
104
+ for (const row of latestByAgent.values()) {
105
+ if (isStale(row))
106
+ continue;
107
+ const rawPayload = typeof row.payload === 'string' ? JSON.parse(row.payload) : row.payload;
108
+ const payload = rawPayload;
109
+ if (!payload.branch)
110
+ continue;
111
+ // Resolve label: prefer row.agent_label (authoritative database field),
112
+ // then fall back to payload.agent (self-reported, always available),
113
+ // then fall back to UUID prefix.
114
+ const agentName = resolveAgentName(row.agent_key_id, row.agent_label ?? payload.agent ?? undefined);
115
+ const files = Array.isArray(payload.files) ? payload.files : [];
116
+ const existing = await storage.get(payload.branch);
117
+ if (existing) {
118
+ // Merge files (additive) and update agent name if better info available
119
+ const merged = [...new Set([...existing.files, ...files])];
120
+ const updatedAgent = (existing.agent?.startsWith('agent:') && agentName && !agentName.startsWith('agent:'))
121
+ ? agentName
122
+ : existing.agent;
123
+ await storage.update(payload.branch, {
124
+ files: merged,
125
+ agent: updatedAgent,
126
+ status: 'active',
127
+ });
128
+ }
129
+ else {
130
+ await storage.register({
131
+ name: payload.branch,
132
+ files,
133
+ agent: agentName,
134
+ status: 'active',
135
+ description: `Colony claim by ${agentName}`,
136
+ });
137
+ }
138
+ synced++;
139
+ }
140
+ // ── 3. Sweep released branches ────────────────────────────────────────
141
+ const releaseRows = await fetchColonySignals(creds.url, creds.key, 'colony_signals?type=eq.work_release&order=updated_at.desc&limit=200&select=*');
142
+ for (const row of releaseRows) {
143
+ const rawPayload = typeof row.payload === 'string' ? JSON.parse(row.payload) : row.payload;
144
+ const payload = rawPayload;
145
+ if (!payload.branch)
146
+ continue;
147
+ const existing = await storage.get(payload.branch);
148
+ if (existing && existing.status === 'active') {
149
+ await storage.unregister(payload.branch);
150
+ }
151
+ }
152
+ // ── 4. Detect conflicts in the updated registry ───────────────────────
153
+ const allBranches = await storage.list();
154
+ const activeBranches = allBranches.filter(b => b.status === 'active');
155
+ const conflicts = [];
156
+ for (let i = 0; i < activeBranches.length; i++) {
157
+ for (let j = i + 1; j < activeBranches.length; j++) {
158
+ const a = activeBranches[i];
159
+ const b = activeBranches[j];
160
+ const aFiles = new Set(a.files);
161
+ const overlapping = b.files.filter(f => aFiles.has(f));
162
+ if (overlapping.length > 0) {
163
+ conflicts.push({
164
+ branch: a.name,
165
+ conflictsWith: b.name,
166
+ files: overlapping,
167
+ agent: a.agent,
168
+ });
169
+ }
170
+ }
171
+ }
172
+ return { conflicts, synced, offline: false };
173
+ }
174
+ catch (err) {
175
+ // Any network/auth/parse error → offline fallback
176
+ const message = err instanceof Error ? err.message : String(err);
177
+ console.warn(`⚠ Colony unreachable — conflict detection using local registry only (may be incomplete)`);
178
+ if (process.env.DEBUG_COLONY) {
179
+ console.warn(` Colony error: ${message}`);
180
+ }
181
+ return { conflicts: [], synced: 0, offline: true };
182
+ }
183
+ }
184
+ //# sourceMappingURL=colony-subscriber.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"colony-subscriber.js","sourceRoot":"","sources":["../../src/lib/colony-subscriber.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH,MAAM,WAAW,eAAe;IAC5B,SAAS,EAAE;QACP,OAAO,EAAE,OAAO,CAAC;KACpB,CAAC;IACF,KAAK,EAAE;QACH,IAAI,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,SAAS,EAAE;QACP,OAAO,EAAE,OAAO,CAAC;QACjB,KAAK,EAAE,MAAM,EAAE,CAAC;QAChB,GAAG,EAAE,OAAO,CAAC;QACb,OAAO,EAAE,OAAO,CAAC;QACjB,KAAK,EAAE,OAAO,CAAC;QACf,MAAM,EAAE,OAAO,CAAC;KACnB,CAAC;IACF,UAAU,EAAE;QACR,kBAAkB,EAAE,OAAO,CAAC;QAC5B,WAAW,EAAE,MAAM,EAAE,CAAC;QACtB,YAAY,EAAE,MAAM,EAAE,CAAC;QACvB,2BAA2B,EAAE,OAAO,CAAC;QACrC,oBAAoB,EAAE,MAAM,EAAE,CAAC;QAC/B,gBAAgB,EAAE,OAAO,CAAC;KAC7B,CAAC;IACF,SAAS,EAAE;QACP,oBAAoB,EAAE,MAAM,EAAE,CAAC;QAC/B,sBAAsB,EAAE,MAAM,EAAE,CAAC;KACpC,CAAC;IACF,OAAO,EAAE;QACL,IAAI,EAAE,OAAO,GAAG,UAAU,CAAC;QAC3B,WAAW,CAAC,EAAE,YAAY,GAAG,SAAS,GAAG,OAAO,CAAC;QACjD,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,kBAAkB,CAAC,EAAE,MAAM,CAAC;QAC5B,kBAAkB,CAAC,EAAE,MAAM,CAAC;KAC/B,CAAC;CACL;AAmCD,eAAO,MAAM,YAAY,UAAkE,CAAC;AAE5F,UAAU,eAAe;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACnB;AAqGD,wBAAgB,cAAc,CAAC,QAAQ,GAAE,MAAsB,EAAE,aAAa,GAAE,OAAc,GAAG,MAAM,EAAE,CAUxG;AAED,wBAAsB,qBAAqB,CACvC,QAAQ,GAAE,MAAsB,EAChC,OAAO,GAAE;IAAE,aAAa,CAAC,EAAE,OAAO,CAAA;CAAO,GAC1C,OAAO,CAAC;IAAE,MAAM,EAAE,eAAe,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAC;IAAC,MAAM,EAAE,eAAe,EAAE,CAAA;CAAE,CAAC,CA8BpF;AAED,wBAAsB,UAAU,CAAC,QAAQ,GAAE,MAAsB,GAAG,OAAO,CAAC,eAAe,CAAC,CAO3F;AAGD,wBAAgB,SAAS,CAAC,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,GAAG,GAAG,CAiBvD;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,eAAe,GAAG,MAAM,EAAE,CAEhE;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,eAAe,GAAG,MAAM,EAAE,CAEpE;AAED,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,eAAe,GAAG,MAAM,EAAE,CAEzE;AAED,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,eAAe,GAAG,MAAM,EAAE,CAE3E"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH,MAAM,WAAW,eAAe;IAC5B,SAAS,EAAE;QACP,OAAO,EAAE,OAAO,CAAC;KACpB,CAAC;IACF,KAAK,EAAE;QACH,IAAI,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,SAAS,EAAE;QACP,OAAO,EAAE,OAAO,CAAC;QACjB,KAAK,EAAE,MAAM,EAAE,CAAC;QAChB,GAAG,EAAE,OAAO,CAAC;QACb,OAAO,EAAE,OAAO,CAAC;QACjB,KAAK,EAAE,OAAO,CAAC;QACf,MAAM,EAAE,OAAO,CAAC;KACnB,CAAC;IACF,UAAU,EAAE;QACR,kBAAkB,EAAE,OAAO,CAAC;QAC5B,WAAW,EAAE,MAAM,EAAE,CAAC;QACtB,YAAY,EAAE,MAAM,EAAE,CAAC;QACvB,2BAA2B,EAAE,OAAO,CAAC;QACrC,oBAAoB,EAAE,MAAM,EAAE,CAAC;QAC/B,gBAAgB,EAAE,OAAO,CAAC;KAC7B,CAAC;IACF,SAAS,EAAE;QACP,oBAAoB,EAAE,MAAM,EAAE,CAAC;QAC/B,sBAAsB,EAAE,MAAM,EAAE,CAAC;KACpC,CAAC;IACF,OAAO,EAAE;QACL,IAAI,EAAE,OAAO,GAAG,UAAU,CAAC;QAC3B,WAAW,CAAC,EAAE,YAAY,GAAG,SAAS,GAAG,OAAO,CAAC;QACjD,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,kBAAkB,CAAC,EAAE,MAAM,CAAC;QAC5B,kBAAkB,CAAC,EAAE,MAAM,CAAC;KAC/B,CAAC;CACL;AAmCD,eAAO,MAAM,YAAY,UAAkE,CAAC;AAE5F,UAAU,eAAe;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACnB;AAqGD,wBAAgB,cAAc,CAAC,QAAQ,GAAE,MAAsB,EAAE,aAAa,GAAE,OAAc,GAAG,MAAM,EAAE,CAUxG;AAED,wBAAsB,qBAAqB,CACvC,QAAQ,GAAE,MAAsB,EAChC,OAAO,GAAE;IAAE,aAAa,CAAC,EAAE,OAAO,CAAA;CAAO,GAC1C,OAAO,CAAC;IAAE,MAAM,EAAE,eAAe,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAC;IAAC,MAAM,EAAE,eAAe,EAAE,CAAA;CAAE,CAAC,CA8BpF;AAED,wBAAsB,UAAU,CAAC,QAAQ,GAAE,MAAsB,GAAG,OAAO,CAAC,eAAe,CAAC,CAO3F;AAGD,wBAAgB,SAAS,CAAC,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,GAAG,GAAG,CAmBvD;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,eAAe,GAAG,MAAM,EAAE,CAEhE;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,eAAe,GAAG,MAAM,EAAE,CAEpE;AAED,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,eAAe,GAAG,MAAM,EAAE,CAEzE;AAED,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,eAAe,GAAG,MAAM,EAAE,CAE3E"}
@@ -25,7 +25,7 @@ const DEFAULT_CONFIG = {
25
25
  readyCheck: {
26
26
  enableWipDetection: true,
27
27
  wipPatterns: ['TODO', 'FIXME', 'WIP', 'HACK', 'XXX'],
28
- excludeFiles: ['tests/**', '*.test.js', '*.test.ts', '*.md', '**/docs/**', '**/package-lock.json', '**/yarn.lock', '**/pnpm-lock.yaml'],
28
+ excludeFiles: ['tests/**', '*.test.js', '*.test.ts', '**/*.md', '**/docs/**', '**/package-lock.json', '**/yarn.lock', '**/pnpm-lock.yaml'],
29
29
  enableExperimentalDetection: false,
30
30
  experimentalPatterns: ['experimental/', 'test-'],
31
31
  enableBuildCheck: true,
@@ -187,8 +187,9 @@ export function deepMerge(target, source) {
187
187
  const result = { ...target };
188
188
  for (const key in source) {
189
189
  // Security: Prevent prototype pollution
190
- if (key === '__proto__' || key === 'constructor' || key === 'prototype')
191
- continue;
190
+ if (key === '__proto__' || key === 'constructor' || key === 'prototype') {
191
+ throw new Error(`Invalid config key: ${key}`);
192
+ }
192
193
  if (source[key] !== undefined) {
193
194
  if (typeof source[key] === 'object' && !Array.isArray(source[key]) && source[key] !== null) {
194
195
  result[key] = deepMerge(result[key] || {}, source[key]);
@@ -201,7 +202,7 @@ export function deepMerge(target, source) {
201
202
  return result;
202
203
  }
203
204
  export function getWipPatterns(config) {
204
- return config.readyCheck.wipPatterns.map(p => new RegExp(p, 'i'));
205
+ return config.readyCheck.wipPatterns.map(p => new RegExp(`\\b${p}\\b`, 'i'));
205
206
  }
206
207
  export function getExcludePatterns(config) {
207
208
  return config.readyCheck.excludeFiles;
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAuC7B,MAAM,cAAc,GAAoB;IACpC,SAAS,EAAE;QACP,OAAO,EAAE,IAAI;KAChB;IACD,KAAK,EAAE;QACH,IAAI,EAAE,EAAE;KACX;IACD,SAAS,EAAE;QACP,OAAO,EAAE,KAAK;QACd,KAAK,EAAE,EAAE;QACT,GAAG,EAAE,KAAK;QACV,OAAO,EAAE,KAAK;QACd,KAAK,EAAE,KAAK;QACZ,MAAM,EAAE,KAAK;KAChB;IACD,UAAU,EAAE;QACR,kBAAkB,EAAE,IAAI;QACxB,WAAW,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC;QACpD,YAAY,EAAE,CAAC,UAAU,EAAE,WAAW,EAAE,WAAW,EAAE,SAAS,EAAE,YAAY,EAAE,sBAAsB,EAAE,cAAc,EAAE,mBAAmB,CAAC;QAC1I,2BAA2B,EAAE,KAAK;QAClC,oBAAoB,EAAE,CAAC,eAAe,EAAE,OAAO,CAAC;QAChD,gBAAgB,EAAE,IAAI;KACzB;IACD,SAAS,EAAE;QACP,oBAAoB,EAAE,CAAC,iBAAiB,EAAE,aAAa,EAAE,QAAQ,EAAE,eAAe,EAAE,aAAa,CAAC;QAClG,sBAAsB,EAAE,CAAC,gBAAgB,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC;KACzE;IACD,OAAO,EAAE;QACL,IAAI,EAAE,OAAO;QACb,WAAW,EAAE,YAAY;KAC5B;CACJ,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,cAAc,EAAE,mBAAmB,EAAE,wBAAwB,CAAC,CAAC;AAO5F,SAAS,cAAc,CAAC,MAAe;IACnC,MAAM,MAAM,GAAsB,EAAE,CAAC;IAErC,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QAChD,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,0BAA0B,EAAE,CAAC,CAAC;QAC/D,OAAO,MAAM,CAAC;IAClB,CAAC;IAED,MAAM,GAAG,GAAG,MAAiC,CAAC;IAE9C,qBAAqB;IACrB,IAAI,GAAG,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;QAC9B,IAAI,OAAO,GAAG,CAAC,SAAS,KAAK,QAAQ,IAAI,GAAG,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;YAC9D,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,mBAAmB,EAAE,CAAC,CAAC;QACrE,CAAC;aAAM,CAAC;YACJ,MAAM,GAAG,GAAG,GAAG,CAAC,SAAoC,CAAC;YACrD,IAAI,GAAG,CAAC,OAAO,KAAK,SAAS,IAAI,OAAO,GAAG,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;gBAChE,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,mBAAmB,EAAE,OAAO,EAAE,mBAAmB,EAAE,CAAC,CAAC;YAC7E,CAAC;QACL,CAAC;IACL,CAAC;IAED,sBAAsB;IACtB,IAAI,GAAG,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;QAC/B,IAAI,OAAO,GAAG,CAAC,UAAU,KAAK,QAAQ,IAAI,GAAG,CAAC,UAAU,KAAK,IAAI,EAAE,CAAC;YAChE,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,mBAAmB,EAAE,CAAC,CAAC;QACtE,CAAC;aAAM,CAAC;YACJ,MAAM,EAAE,GAAG,GAAG,CAAC,UAAqC,CAAC;YACrD,IAAI,EAAE,CAAC,WAAW,KAAK,SAAS,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC;gBACjE,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,wBAAwB,EAAE,OAAO,EAAE,6BAA6B,EAAE,CAAC,CAAC;YAC5F,CAAC;YACD,IAAI,EAAE,CAAC,YAAY,KAAK,SAAS,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC;gBACnE,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,yBAAyB,EAAE,OAAO,EAAE,6BAA6B,EAAE,CAAC,CAAC;YAC7F,CAAC;YACD,IAAI,EAAE,CAAC,kBAAkB,KAAK,SAAS,IAAI,OAAO,EAAE,CAAC,kBAAkB,KAAK,SAAS,EAAE,CAAC;gBACpF,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,+BAA+B,EAAE,OAAO,EAAE,mBAAmB,EAAE,CAAC,CAAC;YACzF,CAAC;QACL,CAAC;IACL,CAAC;IAED,iBAAiB;IACjB,IAAI,GAAG,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QAC1B,IAAI,OAAO,GAAG,CAAC,KAAK,KAAK,QAAQ,IAAI,GAAG,CAAC,KAAK,KAAK,IAAI,EAAE,CAAC;YACtD,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,mBAAmB,EAAE,CAAC,CAAC;QACjE,CAAC;aAAM,CAAC;YACJ,MAAM,KAAK,GAAG,GAAG,CAAC,KAAgC,CAAC;YACnD,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC7D,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,kBAAkB,EAAE,CAAC,CAAC;YACrE,CAAC;QACL,CAAC;IACL,CAAC;IAED,qBAAqB;IACrB,IAAI,GAAG,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;QAC9B,IAAI,OAAO,GAAG,CAAC,SAAS,KAAK,QAAQ,IAAI,GAAG,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;YAC9D,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,mBAAmB,EAAE,CAAC,CAAC;QACrE,CAAC;aAAM,CAAC;YACJ,MAAM,EAAE,GAAG,GAAG,CAAC,SAAoC,CAAC;YACpD,IAAI,EAAE,CAAC,OAAO,KAAK,SAAS,IAAI,OAAO,EAAE,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;gBAC9D,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,mBAAmB,EAAE,OAAO,EAAE,mBAAmB,EAAE,CAAC,CAAC;YAC7E,CAAC;YACD,IAAI,EAAE,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;gBACzB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,EAAE,CAAC;oBAC5E,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,6BAA6B,EAAE,CAAC,CAAC;gBACrF,CAAC;YACL,CAAC;YACD,IAAI,EAAE,CAAC,GAAG,KAAK,SAAS,IAAI,OAAO,EAAE,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;gBACtD,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,mBAAmB,EAAE,CAAC,CAAC;YACzE,CAAC;YACD,IAAI,EAAE,CAAC,OAAO,KAAK,SAAS,IAAI,OAAO,EAAE,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;gBAC9D,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,mBAAmB,EAAE,OAAO,EAAE,mBAAmB,EAAE,CAAC,CAAC;YAC7E,CAAC;YACD,IAAI,EAAE,CAAC,KAAK,KAAK,SAAS,IAAI,OAAO,EAAE,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;gBAC1D,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,mBAAmB,EAAE,CAAC,CAAC;YAC3E,CAAC;YACD,IAAI,EAAE,CAAC,MAAM,KAAK,SAAS,IAAI,OAAO,EAAE,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBAC5D,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,kBAAkB,EAAE,OAAO,EAAE,mBAAmB,EAAE,CAAC,CAAC;YAC5E,CAAC;QACL,CAAC;IACL,CAAC;IAED,mBAAmB;IACnB,IAAI,GAAG,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QAC5B,IAAI,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,IAAI,GAAG,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;YAC1D,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,mBAAmB,EAAE,CAAC,CAAC;QACnE,CAAC;aAAM,CAAC;YACJ,MAAM,EAAE,GAAG,GAAG,CAAC,OAAkC,CAAC;YAClD,IAAI,EAAE,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAc,CAAC,EAAE,CAAC;gBAC9E,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,+BAA+B,EAAE,CAAC,CAAC;YACpF,CAAC;YACD,IAAI,EAAE,CAAC,WAAW,KAAK,SAAS,IAAI,CAAC,CAAC,YAAY,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,WAAqB,CAAC,EAAE,CAAC;gBACzG,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,qBAAqB,EAAE,OAAO,EAAE,6CAA6C,EAAE,CAAC,CAAC;YACzG,CAAC;QACL,CAAC;IACL,CAAC;IAED,OAAO,MAAM,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,WAAmB,OAAO,CAAC,GAAG,EAAE,EAAE,gBAAyB,IAAI;IAC1F,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,IAAI,aAAa,EAAE,CAAC;QAChB,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;QACvB,YAAY,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;IACzE,CAAC;IAED,YAAY,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;IACzE,OAAO,KAAK,CAAC;AACjB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACvC,WAAmB,OAAO,CAAC,GAAG,EAAE,EAChC,UAAuC,EAAE;IAEzC,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,KAAK,KAAK,CAAC;IACtD,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,MAAM,GAAsB,EAAE,CAAC;IACrC,IAAI,MAAM,GAAoB,cAAc,CAAC;IAE7C,MAAM,WAAW,GAAG,cAAc,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;IAC5D,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;QACnC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;YAAE,SAAS;QACtC,IAAI,CAAC;YACD,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YACpD,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAEvC,MAAM,gBAAgB,GAAG,cAAc,CAAC,UAAU,CAAC,CAAC;YACpD,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC9B,MAAM,CAAC,IAAI,CAAC,GAAG,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,GAAG,EAAE,IAAI,EAAE,GAAG,UAAU,IAAI,GAAG,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACzH,CAAC;YAED,MAAM,GAAG,SAAS,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;YACvC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC7B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,IAAI,KAAK,YAAY,WAAW,EAAE,CAAC;gBAC/B,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,iBAAiB,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YACjF,CAAC;iBAAM,CAAC;gBACJ,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,4BAA4B,EAAE,CAAC,CAAC;YAC7E,CAAC;QACL,CAAC;IACL,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;AAC/C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,WAAmB,OAAO,CAAC,GAAG,EAAE;IAC7D,MAAM,MAAM,GAAG,MAAM,qBAAqB,CAAC,QAAQ,CAAC,CAAC;IACrD,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3B,OAAO,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;QAChD,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IAC3E,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC;AACzB,CAAC;AAED,8DAA8D;AAC9D,MAAM,UAAU,SAAS,CAAC,MAAW,EAAE,MAAW;IAC9C,MAAM,MAAM,GAAG,EAAE,GAAG,MAAM,EAAE,CAAC;IAE7B,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;QACvB,wCAAwC;QACxC,IAAI,GAAG,KAAK,WAAW,IAAI,GAAG,KAAK,aAAa,IAAI,GAAG,KAAK,WAAW,EAAE,CAAC;YACtE,MAAM,IAAI,KAAK,CAAC,uBAAuB,GAAG,EAAE,CAAC,CAAC;QAClD,CAAC;QAED,IAAI,MAAM,CAAC,GAAG,CAAC,KAAK,SAAS,EAAE,CAAC;YAC5B,IAAI,OAAO,MAAM,CAAC,GAAG,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC;gBACzF,MAAM,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;YAC5D,CAAC;iBAAM,CAAC;gBACJ,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;YAC9B,CAAC;QACL,CAAC;IACL,CAAC;IAED,OAAO,MAAM,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,MAAuB;IAClD,OAAO,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;AACjF,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,MAAuB;IACtD,OAAO,MAAM,CAAC,UAAU,CAAC,YAAY,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,MAAuB;IAC3D,OAAO,MAAM,CAAC,SAAS,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AACzE,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,MAAuB;IAC7D,OAAO,MAAM,CAAC,SAAS,CAAC,sBAAsB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3E,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"crypto.d.ts","sourceRoot":"","sources":["../../src/lib/crypto.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAWH,MAAM,WAAW,OAAO;IACpB,SAAS,EAAE,UAAU,CAAC;IACtB,SAAS,EAAE,UAAU,CAAC;CACzB;AAED,MAAM,WAAW,iBAAiB;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,EAAE,MAAM,CAAC;CAC3B;AAyBD;;GAEG;AACH,wBAAgB,eAAe,IAAI,OAAO,CAEzC;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CAOnE;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CAa3D;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAEnD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAIjE;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAQtD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,IAAI,CAK3E;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAK9D;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC1B,OAAO,EAAE,MAAM,EACf,kBAAkB,EAAE,UAAU,EAC9B,aAAa,EAAE,OAAO,GACvB,gBAAgB,CAgBlB;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC1B,SAAS,EAAE,gBAAgB,EAC3B,gBAAgB,EAAE,OAAO,GAC1B,MAAM,GAAG,IAAI,CAkBf;AAED;;GAEG;AACH,wBAAgB,aAAa,CACzB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,kBAAkB,EAAE,UAAU,EAC9B,aAAa,EAAE,OAAO,GACvB;IAAE,SAAS,EAAE,gBAAgB,CAAC;IAAC,UAAU,EAAE,MAAM,EAAE,CAAA;CAAE,CAOvD;AAED;;GAEG;AACH,wBAAgB,aAAa,CACzB,SAAS,EAAE,gBAAgB,EAC3B,gBAAgB,EAAE,OAAO,GAC1B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAQhC"}
1
+ {"version":3,"file":"crypto.d.ts","sourceRoot":"","sources":["../../src/lib/crypto.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAYH,MAAM,WAAW,OAAO;IACpB,SAAS,EAAE,UAAU,CAAC;IACtB,SAAS,EAAE,UAAU,CAAC;CACzB;AAED,MAAM,WAAW,iBAAiB;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,EAAE,MAAM,CAAC;CAC3B;AA0BD;;GAEG;AACH,wBAAgB,eAAe,IAAI,OAAO,CAEzC;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CAOnE;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CAa3D;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAEnD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAIjE;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAQtD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,IAAI,CAM3E;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAM9D;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC1B,OAAO,EAAE,MAAM,EACf,kBAAkB,EAAE,UAAU,EAC9B,aAAa,EAAE,OAAO,GACvB,gBAAgB,CAgBlB;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC1B,SAAS,EAAE,gBAAgB,EAC3B,gBAAgB,EAAE,OAAO,GAC1B,MAAM,GAAG,IAAI,CAkBf;AAED;;GAEG;AACH,wBAAgB,aAAa,CACzB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,kBAAkB,EAAE,UAAU,EAC9B,aAAa,EAAE,OAAO,GACvB;IAAE,SAAS,EAAE,gBAAgB,CAAC;IAAC,UAAU,EAAE,MAAM,EAAE,CAAA;CAAE,CAOvD;AAED;;GAEG;AACH,wBAAgB,aAAa,CACzB,SAAS,EAAE,gBAAgB,EAC3B,gBAAgB,EAAE,OAAO,GAC1B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAQhC"}
@@ -9,6 +9,7 @@ import util from 'tweetnacl-util';
9
9
  import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'fs';
10
10
  import { join } from 'path';
11
11
  import { homedir } from 'os';
12
+ import { validateAgentId } from './security.js';
12
13
  // Key storage location
13
14
  const KEYS_DIR = join(homedir(), '.spidersan', 'keys');
14
15
  /**
@@ -23,7 +24,8 @@ function ensureKeysDir() {
23
24
  * Get path to agent's keypair file
24
25
  */
25
26
  function getKeyPath(agentId) {
26
- return join(KEYS_DIR, `${agentId}.key.json`);
27
+ const safeAgentId = validateAgentId(agentId);
28
+ return join(KEYS_DIR, `${safeAgentId}.key.json`);
27
29
  }
28
30
  /**
29
31
  * Get path to known public keys registry
@@ -100,16 +102,18 @@ export function loadKnownKeys() {
100
102
  */
101
103
  export function saveKnownKey(agentId, publicKeyBase64) {
102
104
  ensureKeysDir();
105
+ const safeAgentId = validateAgentId(agentId);
103
106
  const keys = loadKnownKeys();
104
- keys[agentId] = publicKeyBase64;
107
+ keys[safeAgentId] = publicKeyBase64;
105
108
  writeFileSync(getPublicKeysPath(), JSON.stringify(keys, null, 2));
106
109
  }
107
110
  /**
108
111
  * Get public key for an agent (from known keys)
109
112
  */
110
113
  export function getKnownKey(agentId) {
114
+ const safeAgentId = validateAgentId(agentId);
111
115
  const keys = loadKnownKeys();
112
- const keyBase64 = keys[agentId];
116
+ const keyBase64 = keys[safeAgentId];
113
117
  if (!keyBase64)
114
118
  return null;
115
119
  return util.decodeBase64(keyBase64);
@@ -1 +1 @@
1
- {"version":3,"file":"crypto.js","sourceRoot":"","sources":["../../src/lib/crypto.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,IAAI,MAAM,gBAAgB,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AACxE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAE7B,uBAAuB;AACvB,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC;AAkBvD;;GAEG;AACH,SAAS,aAAa;IAClB,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QACxB,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7C,CAAC;AACL,CAAC;AAED;;GAEG;AACH,SAAS,UAAU,CAAC,OAAe;IAC/B,OAAO,IAAI,CAAC,QAAQ,EAAE,GAAG,OAAO,WAAW,CAAC,CAAC;AACjD,CAAC;AAED;;GAEG;AACH,SAAS,iBAAiB;IACtB,OAAO,IAAI,CAAC,QAAQ,EAAE,iBAAiB,CAAC,CAAC;AAC7C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe;IAC3B,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;AAC9B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,OAAe,EAAE,OAAgB;IACzD,aAAa,EAAE,CAAC;IAChB,MAAM,UAAU,GAAsB;QAClC,SAAS,EAAE,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,SAAS,CAAC;QAC/C,SAAS,EAAE,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,SAAS,CAAC;KAClD,CAAC;IACF,aAAa,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;AAC7F,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,OAAe;IACvC,MAAM,IAAI,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;IACjC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IAEnC,IAAI,CAAC;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAsB,CAAC;QAC1E,OAAO;YACH,SAAS,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC;YAC5C,SAAS,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC;SAC/C,CAAC;IACN,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,IAAI,CAAC;IAChB,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,OAAe;IACtC,OAAO,UAAU,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;AAC3C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,OAAe;IAC9C,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;IACrC,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAC1B,OAAO,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AAChD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa;IACzB,MAAM,IAAI,GAAG,iBAAiB,EAAE,CAAC;IACjC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,CAAC;IACjC,IAAI,CAAC;QACD,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;IACnD,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,EAAE,CAAC;IACd,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,OAAe,EAAE,eAAuB;IACjE,aAAa,EAAE,CAAC;IAChB,MAAM,IAAI,GAAG,aAAa,EAAE,CAAC;IAC7B,IAAI,CAAC,OAAO,CAAC,GAAG,eAAe,CAAC;IAChC,aAAa,CAAC,iBAAiB,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AACtE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,OAAe;IACvC,MAAM,IAAI,GAAG,aAAa,EAAE,CAAC;IAC7B,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;IAChC,IAAI,CAAC,SAAS;QAAE,OAAO,IAAI,CAAC;IAC5B,OAAO,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;AACxC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAC1B,OAAe,EACf,kBAA8B,EAC9B,aAAsB;IAEtB,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IAC9C,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAErD,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CACvB,YAAY,EACZ,KAAK,EACL,kBAAkB,EAClB,aAAa,CAAC,SAAS,CAC1B,CAAC;IAEF,OAAO;QACH,UAAU,EAAE,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC;QACzC,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;QAC/B,eAAe,EAAE,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,SAAS,CAAC;KAC9D,CAAC;AACN,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAC1B,SAA2B,EAC3B,gBAAyB;IAEzB,IAAI,CAAC;QACD,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QAC3D,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACjD,MAAM,eAAe,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;QAErE,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAC3B,UAAU,EACV,KAAK,EACL,eAAe,EACf,gBAAgB,CAAC,SAAS,CAC7B,CAAC;QAEF,IAAI,CAAC,SAAS;YAAE,OAAO,IAAI,CAAC;QAC5B,OAAO,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;IACtC,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,IAAI,CAAC;IAChB,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CACzB,MAA+B,EAC/B,kBAA8B,EAC9B,aAAsB;IAEtB,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAC1C,MAAM,SAAS,GAAG,cAAc,CAAC,UAAU,EAAE,kBAAkB,EAAE,aAAa,CAAC,CAAC;IAChF,OAAO;QACH,SAAS;QACT,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;KAClC,CAAC;AACN,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CACzB,SAA2B,EAC3B,gBAAyB;IAEzB,MAAM,SAAS,GAAG,cAAc,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC;IAC9D,IAAI,CAAC,SAAS;QAAE,OAAO,IAAI,CAAC;IAC5B,IAAI,CAAC;QACD,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IACjC,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,IAAI,CAAC;IAChB,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"crypto.js","sourceRoot":"","sources":["../../src/lib/crypto.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Daily Bridge — L2
3
+ * Reads treebird-internal daily collab files and filters for branch-relevant entries.
4
+ * Read-only: never writes to collab (toak owns writes).
5
+ */
6
+ export interface DailyEntry {
7
+ date: string;
8
+ time: string;
9
+ agent: string;
10
+ agentId: string;
11
+ content: string;
12
+ excerpt: string;
13
+ matchedTerms: string[];
14
+ }
15
+ export interface DailyBridgeOptions {
16
+ /** Path to daily collab directory. Defaults to TREEBIRD_DAILY or ~/Dev/treebird-internal/collab/daily */
17
+ dailyDir?: string;
18
+ /** Only parse this specific date (YYYY-MM-DD) */
19
+ date?: string;
20
+ /** How many days back to scan (default 14) */
21
+ lookback?: number;
22
+ /** Extra terms to match (branch names, file paths, etc.) */
23
+ terms?: string[];
24
+ /** Agent IDs to filter by */
25
+ agents?: string[];
26
+ /** If true, only return entries that matched at least one term */
27
+ requireMatch?: boolean;
28
+ }
29
+ /**
30
+ * Query daily collab files for branch-relevant entries.
31
+ */
32
+ export declare function queryDaily(options?: DailyBridgeOptions): DailyEntry[];
33
+ /**
34
+ * Get today's date string YYYY-MM-DD
35
+ */
36
+ export declare function todayStr(): string;
37
+ /**
38
+ * List all available daily dates (newest first)
39
+ */
40
+ export declare function listDailyDates(dailyDir?: string): string[];
41
+ //# sourceMappingURL=daily-bridge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daily-bridge.d.ts","sourceRoot":"","sources":["../../src/lib/daily-bridge.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,MAAM,WAAW,UAAU;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED,MAAM,WAAW,kBAAkB;IAC/B,yGAAyG;IACzG,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iDAAiD;IACjD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,8CAA8C;IAC9C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,4DAA4D;IAC5D,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,6BAA6B;IAC7B,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,kEAAkE;IAClE,YAAY,CAAC,EAAE,OAAO,CAAC;CAC1B;AAqID;;GAEG;AACH,wBAAgB,UAAU,CAAC,OAAO,GAAE,kBAAuB,GAAG,UAAU,EAAE,CA2CzE;AAED;;GAEG;AACH,wBAAgB,QAAQ,IAAI,MAAM,CAEjC;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAQ1D"}
@@ -0,0 +1,186 @@
1
+ /**
2
+ * Daily Bridge — L2
3
+ * Reads treebird-internal daily collab files and filters for branch-relevant entries.
4
+ * Read-only: never writes to collab (toak owns writes).
5
+ */
6
+ import { existsSync, readdirSync, readFileSync } from 'fs';
7
+ import { join } from 'path';
8
+ import { homedir } from 'os';
9
+ const BRANCH_KEYWORDS = [
10
+ 'merge', 'cherry-pick', 'cherry pick', 'rebase', 'conflict',
11
+ 'branch', 'abandon', 'stale', 'pr', 'pull request', 'push', 'worktree',
12
+ 'tidy', 'cleanup', 'register',
13
+ ];
14
+ const DAILY_FILE_REGEX = /^\d{4}-\d{2}-\d{2}-daily\.md$/;
15
+ const AGENT_EMOJI_MAP = {
16
+ '🌳': 'treesan',
17
+ '🐦': 'birdsan',
18
+ '🔍': 'sherlocksan',
19
+ '🍄': 'mycsan',
20
+ '🕷️': 'spidersan',
21
+ '🤖': 'codex',
22
+ '📚': 'teachersan',
23
+ '🗺️': 'mappersan',
24
+ '🌊': 'watsan',
25
+ '🦅': 'artisan',
26
+ '🐛': 'birdsan',
27
+ '💎': 'nanoclaw',
28
+ };
29
+ function getDailyDir() {
30
+ if (process.env.TREEBIRD_DAILY)
31
+ return process.env.TREEBIRD_DAILY;
32
+ const internal = process.env.TREEBIRD_INTERNAL
33
+ || join(homedir(), 'Dev', 'treebird-internal');
34
+ return join(internal, 'collab', 'daily');
35
+ }
36
+ function normaliseAgent(raw) {
37
+ // Try emoji map first
38
+ for (const [emoji, id] of Object.entries(AGENT_EMOJI_MAP)) {
39
+ if (raw.includes(emoji))
40
+ return id;
41
+ }
42
+ // Strip emoji + trim
43
+ return raw.replace(/[\p{Emoji_Presentation}\p{Extended_Pictographic}]/gu, '').trim().toLowerCase();
44
+ }
45
+ // Known non-entry table headers (Start/Stop/Continue, etc.)
46
+ const NON_ENTRY_HEADERS = new Set(['start', 'stop', 'continue', 'time', 'agent', 'entry', 'summary', 'what', 'when', 'why', 'branch', 'status', 'repo', 'owner', 'blockedby', '#']);
47
+ function looksLikeTimeOrAgent(s) {
48
+ // Time-like: HH:MM, "dawn", "today", "morning", "closing", "late", "evening", "--", "session", "afternoon"
49
+ if (/^\d{2}:\d{2}/.test(s))
50
+ return true;
51
+ if (/^(dawn|today|morning|closing|late|evening|afternoon|session|--|\d+:\d+|`\d+:\d+`)$/i.test(s))
52
+ return true;
53
+ // Agent-like: contains emoji or known agent name
54
+ if (/[\p{Emoji_Presentation}\p{Extended_Pictographic}]/u.test(s))
55
+ return true;
56
+ if (/\b(treesan|birdsan|sherlocksan|mycsan|spidersan|codex|artisan|watsan|nanoclaw|sasusan|mappersan|teachersan|copilot)\b/i.test(s))
57
+ return true;
58
+ return false;
59
+ }
60
+ function parseTableEntries(content, date) {
61
+ const entries = [];
62
+ const lines = content.split('\n');
63
+ for (const line of lines) {
64
+ // Match 3-column table rows: | col1 | col2 | col3 |
65
+ const m = line.match(/^\|\s*([^|]+?)\s*\|\s*([^|]+?)\s*\|\s*(.+?)\s*\|?\s*$/);
66
+ if (!m)
67
+ continue;
68
+ const time = m[1].trim();
69
+ const agentRaw = m[2].trim();
70
+ const entryContent = m[3].trim();
71
+ // Skip separator rows
72
+ if (time === '---' || agentRaw === '---' || entryContent === '---')
73
+ continue;
74
+ // Skip known non-entry table headers
75
+ if (NON_ENTRY_HEADERS.has(time.toLowerCase()) && NON_ENTRY_HEADERS.has(agentRaw.toLowerCase()))
76
+ continue;
77
+ // Must look like a time/agent pattern
78
+ if (!looksLikeTimeOrAgent(time) && !looksLikeTimeOrAgent(agentRaw))
79
+ continue;
80
+ // Content must be substantial (>20 chars) to be a real entry
81
+ if (!entryContent || entryContent.length < 20)
82
+ continue;
83
+ const agentId = normaliseAgent(agentRaw);
84
+ const excerpt = entryContent.replace(/\*\*/g, '').slice(0, 120) + (entryContent.length > 120 ? '…' : '');
85
+ entries.push({
86
+ date,
87
+ time,
88
+ agent: agentRaw,
89
+ agentId,
90
+ content: entryContent,
91
+ excerpt,
92
+ matchedTerms: [],
93
+ });
94
+ }
95
+ return entries;
96
+ }
97
+ function scoreEntry(entry, terms, _agents) {
98
+ const text = entry.content.toLowerCase();
99
+ const matched = [];
100
+ for (const term of terms) {
101
+ if (text.includes(term.toLowerCase())) {
102
+ matched.push(term);
103
+ }
104
+ }
105
+ // Always match branch keywords
106
+ for (const kw of BRANCH_KEYWORDS) {
107
+ if (text.includes(kw) && !matched.includes(kw)) {
108
+ matched.push(kw);
109
+ }
110
+ }
111
+ return matched;
112
+ }
113
+ function listDailyFiles(dailyDir, lookback) {
114
+ if (!existsSync(dailyDir))
115
+ return [];
116
+ const files = readdirSync(dailyDir)
117
+ .filter(f => DAILY_FILE_REGEX.test(f))
118
+ .sort()
119
+ .reverse();
120
+ const cutoff = new Date();
121
+ cutoff.setDate(cutoff.getDate() - lookback);
122
+ const cutoffStr = cutoff.toISOString().split('T')[0];
123
+ return files
124
+ .map(f => ({ date: f.slice(0, 10), path: join(dailyDir, f) }))
125
+ .filter(f => f.date >= cutoffStr);
126
+ }
127
+ /**
128
+ * Query daily collab files for branch-relevant entries.
129
+ */
130
+ export function queryDaily(options = {}) {
131
+ const dailyDir = options.dailyDir || getDailyDir();
132
+ const lookback = options.lookback ?? 14;
133
+ const requireMatch = options.requireMatch ?? true;
134
+ const terms = options.terms ?? [];
135
+ const agents = options.agents ?? [];
136
+ let files;
137
+ if (options.date) {
138
+ const p = join(dailyDir, `${options.date}-daily.md`);
139
+ files = existsSync(p) ? [{ date: options.date, path: p }] : [];
140
+ }
141
+ else {
142
+ files = listDailyFiles(dailyDir, lookback);
143
+ }
144
+ const results = [];
145
+ for (const { date, path } of files) {
146
+ let content;
147
+ try {
148
+ content = readFileSync(path, 'utf-8');
149
+ }
150
+ catch {
151
+ continue;
152
+ }
153
+ const entries = parseTableEntries(content, date);
154
+ for (const entry of entries) {
155
+ // Agent filter
156
+ if (agents.length > 0 && !agents.some(a => entry.agentId.includes(a.toLowerCase()))) {
157
+ continue;
158
+ }
159
+ entry.matchedTerms = scoreEntry(entry, terms, agents);
160
+ if (requireMatch && entry.matchedTerms.length === 0)
161
+ continue;
162
+ results.push(entry);
163
+ }
164
+ }
165
+ return results;
166
+ }
167
+ /**
168
+ * Get today's date string YYYY-MM-DD
169
+ */
170
+ export function todayStr() {
171
+ return new Date().toISOString().split('T')[0];
172
+ }
173
+ /**
174
+ * List all available daily dates (newest first)
175
+ */
176
+ export function listDailyDates(dailyDir) {
177
+ const dir = dailyDir || getDailyDir();
178
+ if (!existsSync(dir))
179
+ return [];
180
+ return readdirSync(dir)
181
+ .filter(f => DAILY_FILE_REGEX.test(f))
182
+ .map(f => f.slice(0, 10))
183
+ .sort()
184
+ .reverse();
185
+ }
186
+ //# sourceMappingURL=daily-bridge.js.map