spidersan 0.20.1 → 0.20.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +8 -0
- package/dist/bin/command-registry.d.ts +25 -0
- package/dist/bin/command-registry.d.ts.map +1 -0
- package/dist/bin/command-registry.js +29 -0
- package/dist/bin/command-registry.js.map +1 -0
- package/dist/bin/spidersan.d.ts +16 -0
- package/dist/bin/spidersan.d.ts.map +1 -0
- package/dist/bin/spidersan.js +98 -0
- package/dist/bin/spidersan.js.map +1 -0
- package/dist/commands/abandon.d.ts +8 -0
- package/dist/commands/abandon.d.ts.map +1 -0
- package/dist/commands/abandon.js +43 -0
- package/dist/commands/abandon.js.map +1 -0
- package/dist/commands/cleanup.d.ts +8 -0
- package/dist/commands/cleanup.d.ts.map +1 -0
- package/dist/commands/cleanup.js +50 -0
- package/dist/commands/cleanup.js.map +1 -0
- package/dist/commands/config.d.ts +15 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +309 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/conflicts.d.ts +34 -0
- package/dist/commands/conflicts.d.ts.map +1 -0
- package/dist/commands/conflicts.js +773 -0
- package/dist/commands/conflicts.js.map +1 -0
- package/dist/commands/context.d.ts +8 -0
- package/dist/commands/context.d.ts.map +1 -0
- package/dist/commands/context.js +104 -0
- package/dist/commands/context.js.map +1 -0
- package/dist/commands/cross-conflicts.d.ts +17 -0
- package/dist/commands/cross-conflicts.d.ts.map +1 -0
- package/dist/commands/cross-conflicts.js +273 -0
- package/dist/commands/cross-conflicts.js.map +1 -0
- package/dist/commands/depends.d.ts +11 -0
- package/dist/commands/depends.d.ts.map +1 -0
- package/dist/commands/depends.js +63 -0
- package/dist/commands/depends.js.map +1 -0
- package/dist/commands/doctor.d.ts +30 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +558 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/git-watch.d.ts +24 -0
- package/dist/commands/git-watch.d.ts.map +1 -0
- package/dist/commands/git-watch.js +84 -0
- package/dist/commands/git-watch.js.map +1 -0
- package/dist/commands/github-sync.d.ts +42 -0
- package/dist/commands/github-sync.d.ts.map +1 -0
- package/dist/commands/github-sync.js +191 -0
- package/dist/commands/github-sync.js.map +1 -0
- package/dist/commands/index.d.ts +25 -0
- package/dist/commands/index.d.ts.map +1 -0
- package/dist/commands/index.js +29 -0
- package/dist/commands/index.js.map +1 -0
- package/dist/commands/init.d.ts +8 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +23 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/list.d.ts +3 -0
- package/dist/commands/list.d.ts.map +1 -0
- package/dist/commands/list.js +45 -0
- package/dist/commands/list.js.map +1 -0
- package/dist/commands/log.d.ts +7 -0
- package/dist/commands/log.d.ts.map +1 -0
- package/dist/commands/log.js +110 -0
- package/dist/commands/log.js.map +1 -0
- package/dist/commands/merge-order.d.ts +9 -0
- package/dist/commands/merge-order.d.ts.map +1 -0
- package/dist/commands/merge-order.js +100 -0
- package/dist/commands/merge-order.js.map +1 -0
- package/dist/commands/merged.d.ts +8 -0
- package/dist/commands/merged.d.ts.map +1 -0
- package/dist/commands/merged.js +37 -0
- package/dist/commands/merged.js.map +1 -0
- package/dist/commands/pr-check.d.ts +24 -0
- package/dist/commands/pr-check.d.ts.map +1 -0
- package/dist/commands/pr-check.js +85 -0
- package/dist/commands/pr-check.js.map +1 -0
- package/dist/commands/ready-check.d.ts +11 -0
- package/dist/commands/ready-check.d.ts.map +1 -0
- package/dist/commands/ready-check.js +150 -0
- package/dist/commands/ready-check.js.map +1 -0
- package/dist/commands/rebase-helper.d.ts +3 -0
- package/dist/commands/rebase-helper.d.ts.map +1 -0
- package/dist/commands/rebase-helper.js +52 -0
- package/dist/commands/rebase-helper.js.map +1 -0
- package/dist/commands/register.d.ts +10 -0
- package/dist/commands/register.d.ts.map +1 -0
- package/dist/commands/register.js +176 -0
- package/dist/commands/register.js.map +1 -0
- package/dist/commands/registry-sync.d.ts +9 -0
- package/dist/commands/registry-sync.d.ts.map +1 -0
- package/dist/commands/registry-sync.js +129 -0
- package/dist/commands/registry-sync.js.map +1 -0
- package/dist/commands/stale.d.ts +17 -0
- package/dist/commands/stale.d.ts.map +1 -0
- package/dist/commands/stale.js +136 -0
- package/dist/commands/stale.js.map +1 -0
- package/dist/commands/sync.d.ts +21 -0
- package/dist/commands/sync.d.ts.map +1 -0
- package/dist/commands/sync.js +78 -0
- package/dist/commands/sync.js.map +1 -0
- package/dist/commands/verify-trunk.d.ts +18 -0
- package/dist/commands/verify-trunk.d.ts.map +1 -0
- package/dist/commands/verify-trunk.js +77 -0
- package/dist/commands/verify-trunk.js.map +1 -0
- package/dist/commands/watch.d.ts +8 -0
- package/dist/commands/watch.d.ts.map +1 -0
- package/dist/commands/watch.js +509 -0
- package/dist/commands/watch.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/activity.d.ts +53 -0
- package/dist/lib/activity.d.ts.map +1 -0
- package/dist/lib/activity.js +271 -0
- package/dist/lib/activity.js.map +1 -0
- package/dist/lib/agent-errors.d.ts +41 -0
- package/dist/lib/agent-errors.d.ts.map +1 -0
- package/dist/lib/agent-errors.js +145 -0
- package/dist/lib/agent-errors.js.map +1 -0
- package/dist/lib/ai/context-builder.d.ts +16 -0
- package/dist/lib/ai/context-builder.d.ts.map +1 -0
- package/dist/lib/ai/context-builder.js +229 -0
- package/dist/lib/ai/context-builder.js.map +1 -0
- package/dist/lib/ai/event-handler.d.ts +21 -0
- package/dist/lib/ai/event-handler.d.ts.map +1 -0
- package/dist/lib/ai/event-handler.js +111 -0
- package/dist/lib/ai/event-handler.js.map +1 -0
- package/dist/lib/ai/index.d.ts +13 -0
- package/dist/lib/ai/index.d.ts.map +1 -0
- package/dist/lib/ai/index.js +11 -0
- package/dist/lib/ai/index.js.map +1 -0
- package/dist/lib/ai/llm-client.d.ts +37 -0
- package/dist/lib/ai/llm-client.d.ts.map +1 -0
- package/dist/lib/ai/llm-client.js +225 -0
- package/dist/lib/ai/llm-client.js.map +1 -0
- package/dist/lib/ai/reasoner.d.ts +11 -0
- package/dist/lib/ai/reasoner.d.ts.map +1 -0
- package/dist/lib/ai/reasoner.js +227 -0
- package/dist/lib/ai/reasoner.js.map +1 -0
- package/dist/lib/ai/setup.d.ts +40 -0
- package/dist/lib/ai/setup.d.ts.map +1 -0
- package/dist/lib/ai/setup.js +154 -0
- package/dist/lib/ai/setup.js.map +1 -0
- package/dist/lib/ai/types.d.ts +135 -0
- package/dist/lib/ai/types.d.ts.map +1 -0
- package/dist/lib/ai/types.js +42 -0
- package/dist/lib/ai/types.js.map +1 -0
- package/dist/lib/ast.d.ts +44 -0
- package/dist/lib/ast.d.ts.map +1 -0
- package/dist/lib/ast.js +160 -0
- package/dist/lib/ast.js.map +1 -0
- package/dist/lib/carries.d.ts +22 -0
- package/dist/lib/carries.d.ts.map +1 -0
- package/dist/lib/carries.js +56 -0
- package/dist/lib/carries.js.map +1 -0
- package/dist/lib/colony-subscriber.d.ts +56 -0
- package/dist/lib/colony-subscriber.d.ts.map +1 -0
- package/dist/lib/colony-subscriber.js +265 -0
- package/dist/lib/colony-subscriber.js.map +1 -0
- package/dist/lib/config.d.ts +62 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +235 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/conflict-analyzer.d.ts +33 -0
- package/dist/lib/conflict-analyzer.d.ts.map +1 -0
- package/dist/lib/conflict-analyzer.js +114 -0
- package/dist/lib/conflict-analyzer.js.map +1 -0
- package/dist/lib/conflict-renderer.d.ts +7 -0
- package/dist/lib/conflict-renderer.d.ts.map +1 -0
- package/dist/lib/conflict-renderer.js +145 -0
- package/dist/lib/conflict-renderer.js.map +1 -0
- package/dist/lib/conflict-tier.d.ts +20 -0
- package/dist/lib/conflict-tier.d.ts.map +1 -0
- package/dist/lib/conflict-tier.js +49 -0
- package/dist/lib/conflict-tier.js.map +1 -0
- package/dist/lib/crypto.d.ts +71 -0
- package/dist/lib/crypto.d.ts.map +1 -0
- package/dist/lib/crypto.js +176 -0
- package/dist/lib/crypto.js.map +1 -0
- package/dist/lib/ecosystem-env.d.ts +33 -0
- package/dist/lib/ecosystem-env.d.ts.map +1 -0
- package/dist/lib/ecosystem-env.js +62 -0
- package/dist/lib/ecosystem-env.js.map +1 -0
- package/dist/lib/errors.d.ts +35 -0
- package/dist/lib/errors.d.ts.map +1 -0
- package/dist/lib/errors.js +71 -0
- package/dist/lib/errors.js.map +1 -0
- package/dist/lib/git-events-subscriber.d.ts +86 -0
- package/dist/lib/git-events-subscriber.d.ts.map +1 -0
- package/dist/lib/git-events-subscriber.js +870 -0
- package/dist/lib/git-events-subscriber.js.map +1 -0
- package/dist/lib/git-merge-analyzer.d.ts +38 -0
- package/dist/lib/git-merge-analyzer.d.ts.map +1 -0
- package/dist/lib/git-merge-analyzer.js +23 -0
- package/dist/lib/git-merge-analyzer.js.map +1 -0
- package/dist/lib/git.d.ts +103 -0
- package/dist/lib/git.d.ts.map +1 -0
- package/dist/lib/git.js +670 -0
- package/dist/lib/git.js.map +1 -0
- package/dist/lib/github.d.ts +151 -0
- package/dist/lib/github.d.ts.map +1 -0
- package/dist/lib/github.js +425 -0
- package/dist/lib/github.js.map +1 -0
- package/dist/lib/graph.d.ts +38 -0
- package/dist/lib/graph.d.ts.map +1 -0
- package/dist/lib/graph.js +165 -0
- package/dist/lib/graph.js.map +1 -0
- package/dist/lib/machine.d.ts +14 -0
- package/dist/lib/machine.d.ts.map +1 -0
- package/dist/lib/machine.js +38 -0
- package/dist/lib/machine.js.map +1 -0
- package/dist/lib/notify.d.ts +68 -0
- package/dist/lib/notify.d.ts.map +1 -0
- package/dist/lib/notify.js +111 -0
- package/dist/lib/notify.js.map +1 -0
- package/dist/lib/outline.d.ts +6 -0
- package/dist/lib/outline.d.ts.map +1 -0
- package/dist/lib/outline.js +60 -0
- package/dist/lib/outline.js.map +1 -0
- package/dist/lib/push-registry.d.ts +22 -0
- package/dist/lib/push-registry.d.ts.map +1 -0
- package/dist/lib/push-registry.js +21 -0
- package/dist/lib/push-registry.js.map +1 -0
- package/dist/lib/reconcile.d.ts +100 -0
- package/dist/lib/reconcile.d.ts.map +1 -0
- package/dist/lib/reconcile.js +121 -0
- package/dist/lib/reconcile.js.map +1 -0
- package/dist/lib/regex-utils.d.ts +6 -0
- package/dist/lib/regex-utils.d.ts.map +1 -0
- package/dist/lib/regex-utils.js +24 -0
- package/dist/lib/regex-utils.js.map +1 -0
- package/dist/lib/register-renderer.d.ts +10 -0
- package/dist/lib/register-renderer.d.ts.map +1 -0
- package/dist/lib/register-renderer.js +19 -0
- package/dist/lib/register-renderer.js.map +1 -0
- package/dist/lib/remote-drift.d.ts +61 -0
- package/dist/lib/remote-drift.d.ts.map +1 -0
- package/dist/lib/remote-drift.js +227 -0
- package/dist/lib/remote-drift.js.map +1 -0
- package/dist/lib/security.d.ts +72 -0
- package/dist/lib/security.d.ts.map +1 -0
- package/dist/lib/security.js +180 -0
- package/dist/lib/security.js.map +1 -0
- package/dist/lib/semantic-analysis.d.ts +31 -0
- package/dist/lib/semantic-analysis.d.ts.map +1 -0
- package/dist/lib/semantic-analysis.js +120 -0
- package/dist/lib/semantic-analysis.js.map +1 -0
- package/dist/lib/supabase-credentials.d.ts +36 -0
- package/dist/lib/supabase-credentials.d.ts.map +1 -0
- package/dist/lib/supabase-credentials.js +43 -0
- package/dist/lib/supabase-credentials.js.map +1 -0
- package/dist/lib/trunk.d.ts +39 -0
- package/dist/lib/trunk.d.ts.map +1 -0
- package/dist/lib/trunk.js +116 -0
- package/dist/lib/trunk.js.map +1 -0
- package/dist/lib/update-check.d.ts +11 -0
- package/dist/lib/update-check.d.ts.map +1 -0
- package/dist/lib/update-check.js +113 -0
- package/dist/lib/update-check.js.map +1 -0
- package/dist/lib/watch-renderer.d.ts +13 -0
- package/dist/lib/watch-renderer.d.ts.map +1 -0
- package/dist/lib/watch-renderer.js +35 -0
- package/dist/lib/watch-renderer.js.map +1 -0
- package/dist/storage/adapter.d.ts +81 -0
- package/dist/storage/adapter.d.ts.map +1 -0
- package/dist/storage/adapter.js +8 -0
- package/dist/storage/adapter.js.map +1 -0
- package/dist/storage/branch-registry-store.d.ts +13 -0
- package/dist/storage/branch-registry-store.d.ts.map +1 -0
- package/dist/storage/branch-registry-store.js +2 -0
- package/dist/storage/branch-registry-store.js.map +1 -0
- package/dist/storage/factory.d.ts +6 -0
- package/dist/storage/factory.d.ts.map +1 -0
- package/dist/storage/factory.js +14 -0
- package/dist/storage/factory.js.map +1 -0
- package/dist/storage/index.d.ts +10 -0
- package/dist/storage/index.d.ts.map +1 -0
- package/dist/storage/index.js +11 -0
- package/dist/storage/index.js.map +1 -0
- package/dist/storage/json-branch-registry-store.d.ts +19 -0
- package/dist/storage/json-branch-registry-store.d.ts.map +1 -0
- package/dist/storage/json-branch-registry-store.js +138 -0
- package/dist/storage/json-branch-registry-store.js.map +1 -0
- package/dist/storage/local.d.ts +20 -0
- package/dist/storage/local.d.ts.map +1 -0
- package/dist/storage/local.js +40 -0
- package/dist/storage/local.js.map +1 -0
- package/dist/storage/memory-branch-registry-store.d.ts +16 -0
- package/dist/storage/memory-branch-registry-store.d.ts.map +1 -0
- package/dist/storage/memory-branch-registry-store.js +68 -0
- package/dist/storage/memory-branch-registry-store.js.map +1 -0
- package/dist/storage/supabase-registry-sync-client-impl.d.ts +40 -0
- package/dist/storage/supabase-registry-sync-client-impl.d.ts.map +1 -0
- package/dist/storage/supabase-registry-sync-client-impl.js +278 -0
- package/dist/storage/supabase-registry-sync-client-impl.js.map +1 -0
- package/dist/storage/supabase-registry-sync-client.d.ts +9 -0
- package/dist/storage/supabase-registry-sync-client.d.ts.map +1 -0
- package/dist/storage/supabase-registry-sync-client.js +2 -0
- package/dist/storage/supabase-registry-sync-client.js.map +1 -0
- package/dist/storage/supabase.d.ts +28 -0
- package/dist/storage/supabase.d.ts.map +1 -0
- package/dist/storage/supabase.js +56 -0
- package/dist/storage/supabase.js.map +1 -0
- package/dist/types/cloud.d.ts +102 -0
- package/dist/types/cloud.d.ts.map +1 -0
- package/dist/types/cloud.js +13 -0
- package/dist/types/cloud.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Trunk branch detection.
|
|
3
|
+
*
|
|
4
|
+
* Centralizes the "which branch is trunk?" question that was previously
|
|
5
|
+
* hardcoded as `main`/`master` in several places.
|
|
6
|
+
*
|
|
7
|
+
* Resolution order (first hit wins):
|
|
8
|
+
* 1. `git symbolic-ref refs/remotes/origin/HEAD` (strip the `origin/` prefix)
|
|
9
|
+
* 2. `.spidersanrc` `trunk` key
|
|
10
|
+
* 3. `main` — if that branch exists
|
|
11
|
+
* 4. `master` — if that branch exists
|
|
12
|
+
* 5. `'main'` — default fallback
|
|
13
|
+
*
|
|
14
|
+
* Pure + cached per `cwd` within a process. Tolerates a missing
|
|
15
|
+
* `origin/HEAD` (fresh clones throw — we catch and fall through).
|
|
16
|
+
*/
|
|
17
|
+
import { existsSync, readFileSync } from 'fs';
|
|
18
|
+
import { join } from 'path';
|
|
19
|
+
import { execGit } from './git.js';
|
|
20
|
+
const CONFIG_FILES = ['.spidersanrc', '.spidersanrc.json', '.spidersan.config.json'];
|
|
21
|
+
// Per-cwd cache so repeated calls within a process don't re-shell out to git.
|
|
22
|
+
const cache = new Map();
|
|
23
|
+
function resolveCwd(opts) {
|
|
24
|
+
return opts?.cwd ?? process.cwd();
|
|
25
|
+
}
|
|
26
|
+
/** origin/HEAD symbolic-ref → branch name, or null if unset / fresh clone. */
|
|
27
|
+
function fromOriginHead(cwd) {
|
|
28
|
+
try {
|
|
29
|
+
const out = execGit(['-C', cwd, 'symbolic-ref', 'refs/remotes/origin/HEAD'], {
|
|
30
|
+
stdio: ['pipe', 'pipe', 'ignore'],
|
|
31
|
+
}).trim();
|
|
32
|
+
// e.g. "refs/remotes/origin/develop" → "develop"
|
|
33
|
+
const prefix = 'refs/remotes/origin/';
|
|
34
|
+
const ref = out.startsWith(prefix) ? out.slice(prefix.length) : out.replace(/^origin\//, '');
|
|
35
|
+
return ref || null;
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
// Fresh clones / no origin/HEAD set: throws — fall through.
|
|
39
|
+
return null;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
/** `.spidersanrc` `trunk` key (project-local), or null if absent/unreadable. */
|
|
43
|
+
function fromConfig(cwd) {
|
|
44
|
+
for (const filename of CONFIG_FILES) {
|
|
45
|
+
const path = join(cwd, filename);
|
|
46
|
+
if (!existsSync(path))
|
|
47
|
+
continue;
|
|
48
|
+
try {
|
|
49
|
+
const parsed = JSON.parse(readFileSync(path, 'utf-8'));
|
|
50
|
+
const trunk = parsed?.trunk;
|
|
51
|
+
if (typeof trunk === 'string' && trunk.trim()) {
|
|
52
|
+
return trunk.trim();
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
catch {
|
|
56
|
+
// Malformed config — ignore and keep looking.
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
return null;
|
|
60
|
+
}
|
|
61
|
+
/** True if a local branch ref exists. */
|
|
62
|
+
function branchExists(cwd, branch) {
|
|
63
|
+
try {
|
|
64
|
+
execGit(['-C', cwd, 'rev-parse', '--verify', `refs/heads/${branch}`], {
|
|
65
|
+
stdio: ['pipe', 'pipe', 'ignore'],
|
|
66
|
+
});
|
|
67
|
+
return true;
|
|
68
|
+
}
|
|
69
|
+
catch {
|
|
70
|
+
return false;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
function resolveTrunk(cwd) {
|
|
74
|
+
const fromHead = fromOriginHead(cwd);
|
|
75
|
+
if (fromHead)
|
|
76
|
+
return fromHead;
|
|
77
|
+
const fromCfg = fromConfig(cwd);
|
|
78
|
+
if (fromCfg)
|
|
79
|
+
return fromCfg;
|
|
80
|
+
if (branchExists(cwd, 'main'))
|
|
81
|
+
return 'main';
|
|
82
|
+
if (branchExists(cwd, 'master'))
|
|
83
|
+
return 'master';
|
|
84
|
+
return 'main';
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Resolve the repo's trunk branch name.
|
|
88
|
+
*
|
|
89
|
+
* @param opts.cwd - Repo directory (defaults to `process.cwd()`).
|
|
90
|
+
* @returns The trunk branch name (e.g. `'main'`, `'master'`, `'develop'`).
|
|
91
|
+
*/
|
|
92
|
+
export function getTrunkBranch(opts) {
|
|
93
|
+
const cwd = resolveCwd(opts);
|
|
94
|
+
const cached = cache.get(cwd);
|
|
95
|
+
if (cached !== undefined)
|
|
96
|
+
return cached;
|
|
97
|
+
const trunk = resolveTrunk(cwd);
|
|
98
|
+
cache.set(cwd, trunk);
|
|
99
|
+
return trunk;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* True if `branch` is the repo's trunk.
|
|
103
|
+
*
|
|
104
|
+
* @param branch - Branch name to test.
|
|
105
|
+
* @param opts.cwd - Repo directory (defaults to `process.cwd()`).
|
|
106
|
+
*/
|
|
107
|
+
export function isTrunk(branch, opts) {
|
|
108
|
+
return branch === getTrunkBranch(opts);
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Clear the per-cwd trunk cache. Intended for tests; harmless in production.
|
|
112
|
+
*/
|
|
113
|
+
export function _clearTrunkCache() {
|
|
114
|
+
cache.clear();
|
|
115
|
+
}
|
|
116
|
+
//# sourceMappingURL=trunk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trunk.js","sourceRoot":"","sources":["../../src/lib/trunk.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Update Check Module
|
|
3
|
+
*
|
|
4
|
+
* Checks npm registry for newer versions and displays update notification.
|
|
5
|
+
* Non-blocking, fails silently.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Check for updates (non-blocking)
|
|
9
|
+
*/
|
|
10
|
+
export declare function checkForUpdates(): Promise<void>;
|
|
11
|
+
//# sourceMappingURL=update-check.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update-check.d.ts","sourceRoot":"","sources":["../../src/lib/update-check.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAuEH;;GAEG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CAkCrD"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Update Check Module
|
|
3
|
+
*
|
|
4
|
+
* Checks npm registry for newer versions and displays update notification.
|
|
5
|
+
* Non-blocking, fails silently.
|
|
6
|
+
*/
|
|
7
|
+
import { readFileSync, writeFileSync, existsSync, mkdirSync } from 'fs';
|
|
8
|
+
import { join } from 'path';
|
|
9
|
+
import { homedir } from 'os';
|
|
10
|
+
const CONFIG_DIR = join(homedir(), '.spidersan');
|
|
11
|
+
const UPDATE_CACHE = join(CONFIG_DIR, 'update-cache.json');
|
|
12
|
+
const PACKAGE_NAME = 'spidersan';
|
|
13
|
+
const CHECK_INTERVAL_MS = 24 * 60 * 60 * 1000; // 24 hours
|
|
14
|
+
/**
|
|
15
|
+
* Get current installed version
|
|
16
|
+
*/
|
|
17
|
+
function getCurrentVersion() {
|
|
18
|
+
try {
|
|
19
|
+
const packagePath = new URL('../../package.json', import.meta.url);
|
|
20
|
+
const pkg = JSON.parse(readFileSync(packagePath, 'utf-8'));
|
|
21
|
+
return pkg.version;
|
|
22
|
+
}
|
|
23
|
+
catch {
|
|
24
|
+
return '0.0.0';
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Load update cache
|
|
29
|
+
*/
|
|
30
|
+
function loadCache() {
|
|
31
|
+
try {
|
|
32
|
+
if (existsSync(UPDATE_CACHE)) {
|
|
33
|
+
return JSON.parse(readFileSync(UPDATE_CACHE, 'utf-8'));
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
// Ignore
|
|
38
|
+
}
|
|
39
|
+
return { lastCheck: 0, latestVersion: null };
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Save update cache
|
|
43
|
+
*/
|
|
44
|
+
function saveCache(cache) {
|
|
45
|
+
try {
|
|
46
|
+
if (!existsSync(CONFIG_DIR)) {
|
|
47
|
+
mkdirSync(CONFIG_DIR, { recursive: true });
|
|
48
|
+
}
|
|
49
|
+
writeFileSync(UPDATE_CACHE, JSON.stringify(cache));
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
// Ignore
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Compare semantic versions
|
|
57
|
+
*/
|
|
58
|
+
function isNewerVersion(current, latest) {
|
|
59
|
+
const currentParts = current.split('.').map(Number);
|
|
60
|
+
const latestParts = latest.split('.').map(Number);
|
|
61
|
+
for (let i = 0; i < 3; i++) {
|
|
62
|
+
if ((latestParts[i] || 0) > (currentParts[i] || 0))
|
|
63
|
+
return true;
|
|
64
|
+
if ((latestParts[i] || 0) < (currentParts[i] || 0))
|
|
65
|
+
return false;
|
|
66
|
+
}
|
|
67
|
+
return false;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Check for updates (non-blocking)
|
|
71
|
+
*/
|
|
72
|
+
export async function checkForUpdates() {
|
|
73
|
+
try {
|
|
74
|
+
const cache = loadCache();
|
|
75
|
+
const now = Date.now();
|
|
76
|
+
// Only check once per day
|
|
77
|
+
if (now - cache.lastCheck < CHECK_INTERVAL_MS && cache.latestVersion) {
|
|
78
|
+
showUpdateNotification(cache.latestVersion);
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
// Fetch latest version from npm (with timeout)
|
|
82
|
+
const controller = new AbortController();
|
|
83
|
+
const timeout = setTimeout(() => controller.abort(), 3000);
|
|
84
|
+
const response = await fetch(`https://registry.npmjs.org/${PACKAGE_NAME}/latest`, { signal: controller.signal });
|
|
85
|
+
clearTimeout(timeout);
|
|
86
|
+
if (!response.ok)
|
|
87
|
+
return;
|
|
88
|
+
const data = await response.json();
|
|
89
|
+
const latestVersion = data.version;
|
|
90
|
+
// Update cache
|
|
91
|
+
saveCache({ lastCheck: now, latestVersion });
|
|
92
|
+
// Show notification if newer
|
|
93
|
+
showUpdateNotification(latestVersion);
|
|
94
|
+
}
|
|
95
|
+
catch {
|
|
96
|
+
// Silent fail - don't interrupt user
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Display update notification if newer version available
|
|
101
|
+
*/
|
|
102
|
+
function showUpdateNotification(latestVersion) {
|
|
103
|
+
const currentVersion = getCurrentVersion();
|
|
104
|
+
if (isNewerVersion(currentVersion, latestVersion)) {
|
|
105
|
+
console.log('');
|
|
106
|
+
console.log('╭─────────────────────────────────────────────╮');
|
|
107
|
+
console.log(`│ 🕷️ Update available: ${currentVersion} → ${latestVersion.padEnd(10)} │`);
|
|
108
|
+
console.log('│ Run: npm install -g spidersan │');
|
|
109
|
+
console.log('╰─────────────────────────────────────────────╯');
|
|
110
|
+
console.log('');
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
//# sourceMappingURL=update-check.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update-check.js","sourceRoot":"","sources":["../../src/lib/update-check.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { DriftResult, DriftSkipped } from './remote-drift.js';
|
|
2
|
+
export interface FetchPollRenderOptions {
|
|
3
|
+
branch: string;
|
|
4
|
+
drift: DriftResult | DriftSkipped;
|
|
5
|
+
timestamp?: string;
|
|
6
|
+
}
|
|
7
|
+
/** Pure. Returns terminal string for --fetch-poll drift warnings and heartbeats. */
|
|
8
|
+
export declare function renderFetchPollHeartbeat(opts: {
|
|
9
|
+
branch: string;
|
|
10
|
+
timestamp?: string;
|
|
11
|
+
}): string;
|
|
12
|
+
export declare function renderFetchPollDrift(opts: FetchPollRenderOptions): string;
|
|
13
|
+
//# sourceMappingURL=watch-renderer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"watch-renderer.d.ts","sourceRoot":"","sources":["../../src/lib/watch-renderer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEnE,MAAM,WAAW,sBAAsB;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,WAAW,GAAG,YAAY,CAAC;IAClC,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,oFAAoF;AACpF,wBAAgB,wBAAwB,CAAC,IAAI,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAM7F;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,sBAAsB,GAAG,MAAM,CAgBzE"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/** Pure. Returns terminal string for --fetch-poll drift warnings and heartbeats. */
|
|
2
|
+
export function renderFetchPollHeartbeat(opts) {
|
|
3
|
+
if (opts.timestamp) {
|
|
4
|
+
return `📡 [FETCH-POLL] Remote unchanged (checked at ${opts.timestamp})`;
|
|
5
|
+
}
|
|
6
|
+
return '📡 [FETCH-POLL] Remote unchanged';
|
|
7
|
+
}
|
|
8
|
+
export function renderFetchPollDrift(opts) {
|
|
9
|
+
if ('skipped' in opts.drift) {
|
|
10
|
+
return `📡 [FETCH-POLL] Skipped: ${opts.drift.reason}`;
|
|
11
|
+
}
|
|
12
|
+
const drift = opts.drift;
|
|
13
|
+
const driftSummary = drift.driftZone.length > 0
|
|
14
|
+
? drift.driftZone.map((file) => formatDriftZoneEntry(file, drift)).join(', ')
|
|
15
|
+
: '(none reported)';
|
|
16
|
+
return [
|
|
17
|
+
'📡 [FETCH-POLL] Remote advanced while you\'re working!',
|
|
18
|
+
` Branch: ${drift.branch} | Remote is ${drift.remoteAhead} commit(s) ahead`,
|
|
19
|
+
` Drift zone: ${driftSummary}`,
|
|
20
|
+
` → Run: git fetch origin && git log --oneline ${drift.remote} -5`,
|
|
21
|
+
].join('\n').trimEnd();
|
|
22
|
+
}
|
|
23
|
+
function formatDriftZoneEntry(file, result) {
|
|
24
|
+
const labels = [];
|
|
25
|
+
const registered = result.registeredInDrift.find((entry) => entry.file === file);
|
|
26
|
+
const unstaged = result.unstagedInDrift.some((entry) => entry.file === file);
|
|
27
|
+
if (registered && registered.tier !== null) {
|
|
28
|
+
labels.push(`registered tier ${registered.tier}`);
|
|
29
|
+
}
|
|
30
|
+
if (unstaged) {
|
|
31
|
+
labels.push('unstaged ⚠');
|
|
32
|
+
}
|
|
33
|
+
return labels.length > 0 ? `${file} [${labels.join(', ')}]` : file;
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=watch-renderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"watch-renderer.js","sourceRoot":"","sources":["../../src/lib/watch-renderer.ts"],"names":[],"mappings":"AAQA,oFAAoF;AACpF,MAAM,UAAU,wBAAwB,CAAC,IAA4C;IACjF,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;QACjB,OAAO,gDAAgD,IAAI,CAAC,SAAS,GAAG,CAAC;IAC7E,CAAC;IAED,OAAO,kCAAkC,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,IAA4B;IAC7D,IAAI,SAAS,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QAC1B,OAAO,4BAA4B,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;IAC3D,CAAC;IAED,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;IACzB,MAAM,YAAY,GAAG,KAAK,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC;QAC3C,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,oBAAoB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QAC7E,CAAC,CAAC,iBAAiB,CAAC;IAExB,OAAO;QACH,wDAAwD;QACxD,cAAc,KAAK,CAAC,MAAM,kBAAkB,KAAK,CAAC,WAAW,kBAAkB;QAC/E,kBAAkB,YAAY,EAAE;QAChC,mDAAmD,KAAK,CAAC,MAAM,KAAK;KACvE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;AAC3B,CAAC;AAED,SAAS,oBAAoB,CAAC,IAAY,EAAE,MAAmB;IAC3D,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,MAAM,UAAU,GAAG,MAAM,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IACjF,MAAM,QAAQ,GAAG,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IAE7E,IAAI,UAAU,IAAI,UAAU,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;QACzC,MAAM,CAAC,IAAI,CAAC,mBAAmB,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC;IACtD,CAAC;IAED,IAAI,QAAQ,EAAE,CAAC;QACX,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAC9B,CAAC;IAED,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,KAAK,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;AACvE,CAAC"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Storage Adapter Interface
|
|
3
|
+
*
|
|
4
|
+
* Abstract interface for branch registry storage.
|
|
5
|
+
* Implementations: LocalStorage (JSON), SupabaseStorage (Pro)
|
|
6
|
+
*/
|
|
7
|
+
export interface Branch {
|
|
8
|
+
name: string;
|
|
9
|
+
files: string[];
|
|
10
|
+
registeredAt: Date;
|
|
11
|
+
agent?: string;
|
|
12
|
+
/**
|
|
13
|
+
* Claude Code session (the id `tbe`/ccsessions lists) that last registered this
|
|
14
|
+
* branch, so a conflict can say WHICH session to resume. Local registry only:
|
|
15
|
+
* meaningless off the machine that owns the session, and not synced to Supabase.
|
|
16
|
+
*/
|
|
17
|
+
sessionId?: string;
|
|
18
|
+
status: 'active' | 'completed' | 'abandoned';
|
|
19
|
+
description?: string;
|
|
20
|
+
/** Branches that must merge BEFORE this one (`spidersan depends`). */
|
|
21
|
+
dependsOn?: string[];
|
|
22
|
+
/** PR that merged this branch (`spidersan merged --pr`). */
|
|
23
|
+
prNumber?: number;
|
|
24
|
+
/**
|
|
25
|
+
* Per-file claims from before 0.20.0, when `watch` and `spidersan
|
|
26
|
+
* claim`/`release` wrote them. Nothing writes this any more; it stays
|
|
27
|
+
* so registries that still carry it keep parsing.
|
|
28
|
+
*/
|
|
29
|
+
claims?: Record<string, {
|
|
30
|
+
agent: string;
|
|
31
|
+
at: string;
|
|
32
|
+
}>;
|
|
33
|
+
}
|
|
34
|
+
export interface BranchRegistry {
|
|
35
|
+
branches: Record<string, Branch>;
|
|
36
|
+
version: string;
|
|
37
|
+
projectId?: string;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* @deprecated Use BranchRegistryStore for local registry access and
|
|
41
|
+
* SupabaseRegistrySyncClient for cross-machine sync.
|
|
42
|
+
*/
|
|
43
|
+
export interface StorageAdapter {
|
|
44
|
+
/**
|
|
45
|
+
* Initialize the storage (create directories, connect to DB, etc.)
|
|
46
|
+
*/
|
|
47
|
+
init(): Promise<void>;
|
|
48
|
+
/**
|
|
49
|
+
* Check if storage is initialized
|
|
50
|
+
*/
|
|
51
|
+
isInitialized(): Promise<boolean>;
|
|
52
|
+
/**
|
|
53
|
+
* Get all registered branches
|
|
54
|
+
*/
|
|
55
|
+
list(): Promise<Branch[]>;
|
|
56
|
+
/**
|
|
57
|
+
* Register a new branch
|
|
58
|
+
*/
|
|
59
|
+
register(branch: Omit<Branch, 'registeredAt'>): Promise<Branch>;
|
|
60
|
+
/**
|
|
61
|
+
* Update an existing branch
|
|
62
|
+
*/
|
|
63
|
+
update(name: string, updates: Partial<Branch>): Promise<Branch | null>;
|
|
64
|
+
/**
|
|
65
|
+
* Unregister a branch
|
|
66
|
+
*/
|
|
67
|
+
unregister(name: string): Promise<boolean>;
|
|
68
|
+
/**
|
|
69
|
+
* Get a specific branch by name
|
|
70
|
+
*/
|
|
71
|
+
get(name: string): Promise<Branch | null>;
|
|
72
|
+
/**
|
|
73
|
+
* Find branches that touch specific files
|
|
74
|
+
*/
|
|
75
|
+
findByFiles(files: string[]): Promise<Branch[]>;
|
|
76
|
+
/**
|
|
77
|
+
* Clean up old branches
|
|
78
|
+
*/
|
|
79
|
+
cleanup(olderThan: Date, includeActive?: boolean): Promise<string[]>;
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../src/storage/adapter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,MAAM;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,YAAY,EAAE,IAAI,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,QAAQ,GAAG,WAAW,GAAG,WAAW,CAAC;IAC7C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,sEAAsE;IACtE,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,4DAA4D;IAC5D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC1D;AAED,MAAM,WAAW,cAAc;IAC3B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC3B;;OAEG;IACH,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEtB;;OAEG;IACH,aAAa,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAElC;;OAEG;IACH,IAAI,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAE1B;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,cAAc,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAEhE;;OAEG;IACH,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAEvE;;OAEG;IACH,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAE3C;;OAEG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAE1C;;OAEG;IACH,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAEhD;;OAEG;IACH,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,aAAa,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;CACxE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../src/storage/adapter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { Branch } from './adapter.js';
|
|
2
|
+
export interface BranchRegistryStore {
|
|
3
|
+
init(): Promise<void>;
|
|
4
|
+
isInitialized(): Promise<boolean>;
|
|
5
|
+
list(): Promise<Branch[]>;
|
|
6
|
+
register(branch: Omit<Branch, 'registeredAt'>): Promise<Branch>;
|
|
7
|
+
update(name: string, updates: Partial<Branch>): Promise<Branch | null>;
|
|
8
|
+
unregister(name: string): Promise<boolean>;
|
|
9
|
+
get(name: string): Promise<Branch | null>;
|
|
10
|
+
findByFiles(files: string[]): Promise<Branch[]>;
|
|
11
|
+
cleanup(olderThan: Date, includeActive?: boolean): Promise<string[]>;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=branch-registry-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"branch-registry-store.d.ts","sourceRoot":"","sources":["../../src/storage/branch-registry-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAE3C,MAAM,WAAW,mBAAmB;IAChC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACtB,aAAa,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAClC,IAAI,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,cAAc,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAChE,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACvE,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC3C,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC1C,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAChD,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,aAAa,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;CACxE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"branch-registry-store.js","sourceRoot":"","sources":["../../src/storage/branch-registry-store.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../src/storage/factory.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAGnD,wBAAsB,UAAU,IAAI,OAAO,CAAC,cAAc,CAAC,CAQ1D"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Storage factory - selects the right storage backend
|
|
3
|
+
*/
|
|
4
|
+
import { LocalStorage } from './local.js';
|
|
5
|
+
import { SupabaseStorage } from './supabase.js';
|
|
6
|
+
import { resolveSupabaseCredentials } from '../lib/supabase-credentials.js';
|
|
7
|
+
export async function getStorage() {
|
|
8
|
+
const supabaseConfig = await resolveSupabaseCredentials();
|
|
9
|
+
if (supabaseConfig) {
|
|
10
|
+
return new SupabaseStorage(supabaseConfig);
|
|
11
|
+
}
|
|
12
|
+
return new LocalStorage();
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=factory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"factory.js","sourceRoot":"","sources":["../../src/storage/factory.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAEhD,OAAO,EAAE,0BAA0B,EAAE,MAAM,gCAAgC,CAAC;AAE5E,MAAM,CAAC,KAAK,UAAU,UAAU;IAC5B,MAAM,cAAc,GAAG,MAAM,0BAA0B,EAAE,CAAC;IAE1D,IAAI,cAAc,EAAE,CAAC;QACjB,OAAO,IAAI,eAAe,CAAC,cAAc,CAAC,CAAC;IAC/C,CAAC;IAED,OAAO,IAAI,YAAY,EAAE,CAAC;AAC9B,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export * from './adapter.js';
|
|
2
|
+
export * from './branch-registry-store.js';
|
|
3
|
+
export * from './local.js';
|
|
4
|
+
export * from './json-branch-registry-store.js';
|
|
5
|
+
export * from './memory-branch-registry-store.js';
|
|
6
|
+
export * from './supabase.js';
|
|
7
|
+
export * from './supabase-registry-sync-client.js';
|
|
8
|
+
export * from './supabase-registry-sync-client-impl.js';
|
|
9
|
+
export * from './factory.js';
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/storage/index.ts"],"names":[],"mappings":"AACA,cAAc,cAAc,CAAC;AAC7B,cAAc,4BAA4B,CAAC;AAC3C,cAAc,YAAY,CAAC;AAC3B,cAAc,iCAAiC,CAAC;AAChD,cAAc,mCAAmC,CAAC;AAClD,cAAc,eAAe,CAAC;AAC9B,cAAc,oCAAoC,CAAC;AACnD,cAAc,yCAAyC,CAAC;AACxD,cAAc,cAAc,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
// Branch storage adapters
|
|
2
|
+
export * from './adapter.js';
|
|
3
|
+
export * from './branch-registry-store.js';
|
|
4
|
+
export * from './local.js';
|
|
5
|
+
export * from './json-branch-registry-store.js';
|
|
6
|
+
export * from './memory-branch-registry-store.js';
|
|
7
|
+
export * from './supabase.js';
|
|
8
|
+
export * from './supabase-registry-sync-client.js';
|
|
9
|
+
export * from './supabase-registry-sync-client-impl.js';
|
|
10
|
+
export * from './factory.js';
|
|
11
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/storage/index.ts"],"names":[],"mappings":"AAAA,0BAA0B;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,4BAA4B,CAAC;AAC3C,cAAc,YAAY,CAAC;AAC3B,cAAc,iCAAiC,CAAC;AAChD,cAAc,mCAAmC,CAAC;AAClD,cAAc,eAAe,CAAC;AAC9B,cAAc,oCAAoC,CAAC;AACnD,cAAc,yCAAyC,CAAC;AACxD,cAAc,cAAc,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { Branch } from './adapter.js';
|
|
2
|
+
import type { BranchRegistryStore } from './branch-registry-store.js';
|
|
3
|
+
export declare class JsonBranchRegistryStore implements BranchRegistryStore {
|
|
4
|
+
private basePath;
|
|
5
|
+
private registryPath;
|
|
6
|
+
constructor(basePath?: string);
|
|
7
|
+
init(): Promise<void>;
|
|
8
|
+
isInitialized(): Promise<boolean>;
|
|
9
|
+
list(): Promise<Branch[]>;
|
|
10
|
+
register(branch: Omit<Branch, 'registeredAt'>): Promise<Branch>;
|
|
11
|
+
update(name: string, updates: Partial<Branch>): Promise<Branch | null>;
|
|
12
|
+
unregister(name: string): Promise<boolean>;
|
|
13
|
+
get(name: string): Promise<Branch | null>;
|
|
14
|
+
findByFiles(files: string[]): Promise<Branch[]>;
|
|
15
|
+
cleanup(olderThan: Date, includeActive?: boolean): Promise<string[]>;
|
|
16
|
+
private load;
|
|
17
|
+
private save;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=json-branch-registry-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json-branch-registry-store.d.ts","sourceRoot":"","sources":["../../src/storage/json-branch-registry-store.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAkB,MAAM,cAAc,CAAC;AAC3D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AA6BtE,qBAAa,uBAAwB,YAAW,mBAAmB;IAC/D,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,YAAY,CAAS;gBAEjB,QAAQ,GAAE,MAAsB;IAKtC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAWrB,aAAa,IAAI,OAAO,CAAC,OAAO,CAAC;IAIjC,IAAI,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAKzB,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,cAAc,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IAY/D,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAetE,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAW1C,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAKzC,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAM/C,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,aAAa,UAAQ,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;YAuB1D,IAAI;YA+BJ,IAAI;CAMrB"}
|