preclaim 0.3.2 → 0.3.3
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.
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
// PreToolUse hook — the gatekeeper
|
|
3
|
-
// Intercepts Edit/Write/MultiEdit
|
|
3
|
+
// Intercepts Read for soft signals, Edit/Write/MultiEdit for hard locks
|
|
4
4
|
import { resolve, relative, dirname, join } from 'node:path';
|
|
5
5
|
import { writeFile } from 'node:fs/promises';
|
|
6
6
|
import { PreclaimClient, findConfig, loadCredentials, refreshCredentials } from '@preclaim/core';
|
|
7
7
|
import { readHookInput, writeHookOutput } from '../lib/hook-io.js';
|
|
8
8
|
import { minimatch } from 'minimatch';
|
|
9
9
|
const WRITE_TOOLS = new Set(['Edit', 'Write', 'MultiEdit']);
|
|
10
|
+
const READ_TOOLS = new Set(['Read']);
|
|
10
11
|
async function main() {
|
|
11
12
|
try {
|
|
12
13
|
const input = await readHookInput();
|
|
@@ -17,9 +18,10 @@ async function main() {
|
|
|
17
18
|
catch {
|
|
18
19
|
// Non-critical — don't block on activity tracking
|
|
19
20
|
}
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
21
|
+
const isWrite = input.tool_name && WRITE_TOOLS.has(input.tool_name);
|
|
22
|
+
const isRead = input.tool_name && READ_TOOLS.has(input.tool_name);
|
|
23
|
+
if (!isWrite && !isRead) {
|
|
24
|
+
return; // Not a file tool = allow
|
|
23
25
|
}
|
|
24
26
|
// Extract file path from tool input
|
|
25
27
|
const filePath = input.tool_input?.file_path;
|
|
@@ -32,13 +34,39 @@ async function main() {
|
|
|
32
34
|
return; // No config = allow (not a preclaim project)
|
|
33
35
|
}
|
|
34
36
|
// Normalize path: always relative to project root
|
|
35
|
-
// /Users/paul/project/src/file.ts en src/file.ts worden dezelfde lock
|
|
36
37
|
const projectRoot = dirname(found.configPath);
|
|
37
38
|
const absolutePath = resolve(projectRoot, filePath);
|
|
38
39
|
const relativePath = relative(projectRoot, absolutePath);
|
|
39
40
|
if (found.config.ignore.some(pattern => minimatch(relativePath, pattern))) {
|
|
40
41
|
return; // Ignored file = allow
|
|
41
42
|
}
|
|
43
|
+
// ─── READ TOOL: register interest (soft signal) ───
|
|
44
|
+
if (isRead) {
|
|
45
|
+
let creds = await loadCredentials();
|
|
46
|
+
if (!creds)
|
|
47
|
+
return; // No creds = skip silently
|
|
48
|
+
const expiresAt = new Date(creds.expiresAt).getTime();
|
|
49
|
+
if (Date.now() >= expiresAt - 60_000) {
|
|
50
|
+
const refreshed = await refreshCredentials();
|
|
51
|
+
if (refreshed)
|
|
52
|
+
creds = refreshed;
|
|
53
|
+
}
|
|
54
|
+
const client = new PreclaimClient({
|
|
55
|
+
baseUrl: found.config.backend,
|
|
56
|
+
accessToken: creds.accessToken,
|
|
57
|
+
timeoutMs: 200, // 200ms cap — worst case latency for reads
|
|
58
|
+
});
|
|
59
|
+
// Fire and forget with timeout cap — don't block on interest registration
|
|
60
|
+
await client.registerInterest({
|
|
61
|
+
project_id: found.config.projectId,
|
|
62
|
+
file_path: relativePath,
|
|
63
|
+
session_id: input.session_id,
|
|
64
|
+
}).catch(() => {
|
|
65
|
+
// Fail silently — interest registration is best-effort
|
|
66
|
+
});
|
|
67
|
+
return; // No output = allow
|
|
68
|
+
}
|
|
69
|
+
// ─── WRITE TOOL: claim lock + check interests ───
|
|
42
70
|
// Load credentials, refresh if expired
|
|
43
71
|
let creds = await loadCredentials();
|
|
44
72
|
if (!creds) {
|
|
@@ -50,53 +78,63 @@ async function main() {
|
|
|
50
78
|
});
|
|
51
79
|
return;
|
|
52
80
|
}
|
|
53
|
-
// Refresh token if within 60s of expiry
|
|
54
81
|
const expiresAt = new Date(creds.expiresAt).getTime();
|
|
55
82
|
if (Date.now() >= expiresAt - 60_000) {
|
|
56
83
|
const refreshed = await refreshCredentials();
|
|
57
|
-
if (refreshed)
|
|
84
|
+
if (refreshed)
|
|
58
85
|
creds = refreshed;
|
|
59
|
-
}
|
|
60
|
-
// If refresh fails, try with old token anyway
|
|
61
86
|
}
|
|
62
|
-
// Claim file
|
|
63
87
|
const client = new PreclaimClient({
|
|
64
88
|
baseUrl: found.config.backend,
|
|
65
89
|
accessToken: creds.accessToken,
|
|
66
90
|
timeoutMs: 2000, // Must be fast
|
|
67
91
|
});
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
92
|
+
// Claim lock + check interests in parallel — no extra latency
|
|
93
|
+
const [claimResult, interestsResult] = await Promise.all([
|
|
94
|
+
client.claimFile({
|
|
95
|
+
project_id: found.config.projectId,
|
|
96
|
+
file_path: relativePath,
|
|
97
|
+
session_id: input.session_id,
|
|
98
|
+
ttl_minutes: found.config.ttl,
|
|
99
|
+
}),
|
|
100
|
+
client.checkInterests({
|
|
101
|
+
project_id: found.config.projectId,
|
|
102
|
+
file_path: relativePath,
|
|
103
|
+
exclude_session_id: input.session_id,
|
|
104
|
+
}).catch(() => null), // Interest check is best-effort
|
|
105
|
+
]);
|
|
106
|
+
// Build interest warning if other sessions are reading this file
|
|
107
|
+
let interestWarning = '';
|
|
108
|
+
if (interestsResult?.data?.interests && interestsResult.data.interests.length > 0) {
|
|
109
|
+
const count = interestsResult.data.interests.length;
|
|
110
|
+
interestWarning = `[Preclaim] Heads up: ${count} other session${count > 1 ? 's are' : ' is'} reading this file. Proceed with caution.\n`;
|
|
111
|
+
}
|
|
74
112
|
// Network error — fail open
|
|
75
|
-
if (
|
|
113
|
+
if (claimResult.error) {
|
|
76
114
|
if (found.config.failOpen) {
|
|
77
115
|
writeHookOutput({
|
|
78
116
|
permissionDecision: 'allow',
|
|
79
|
-
systemMessage:
|
|
117
|
+
systemMessage: `${interestWarning}[Preclaim] Warning: could not reach server (${claimResult.error}). Proceeding without lock.`,
|
|
80
118
|
});
|
|
81
119
|
return;
|
|
82
120
|
}
|
|
83
121
|
writeHookOutput({
|
|
84
122
|
permissionDecision: 'deny',
|
|
85
|
-
reason: `Preclaim: server error — ${
|
|
123
|
+
reason: `Preclaim: server error — ${claimResult.error}`,
|
|
86
124
|
});
|
|
87
125
|
return;
|
|
88
126
|
}
|
|
89
|
-
const data =
|
|
127
|
+
const data = claimResult.data;
|
|
90
128
|
if (data.status === 'acquired') {
|
|
91
129
|
writeHookOutput({
|
|
92
130
|
permissionDecision: 'allow',
|
|
93
|
-
systemMessage:
|
|
131
|
+
systemMessage: `${interestWarning}[Preclaim] Locked: ${relativePath} (expires: ${data.expires_at})`,
|
|
94
132
|
});
|
|
95
133
|
}
|
|
96
134
|
else if (data.status === 'already_held') {
|
|
97
135
|
writeHookOutput({
|
|
98
136
|
permissionDecision: 'allow',
|
|
99
|
-
systemMessage:
|
|
137
|
+
systemMessage: `${interestWarning}[Preclaim] Lock extended: ${relativePath} (expires: ${data.expires_at})`,
|
|
100
138
|
});
|
|
101
139
|
}
|
|
102
140
|
else if (data.status === 'conflict') {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pre-tool-use.js","sourceRoot":"","sources":["../../src/hooks/pre-tool-use.ts"],"names":[],"mappings":";AACA,mCAAmC;AACnC,
|
|
1
|
+
{"version":3,"file":"pre-tool-use.js","sourceRoot":"","sources":["../../src/hooks/pre-tool-use.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/output.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../../src/lib/output.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../../src/lib/output.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAE9E,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAMjD;AAED,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAQjD;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,CAI7C;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,kBAAkB,GAAG,MAAM,CAKjE;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,kBAAkB,EAAE,GAAG,MAAM,CAWzE;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,MAAM,CAWrD;AASD,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,aAAa,EAAE,GAAG,MAAM,CAcpE"}
|
package/dist/lib/output.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"output.js","sourceRoot":"","sources":["../../src/lib/output.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"output.js","sourceRoot":"","sources":["../../src/lib/output.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "preclaim",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.3",
|
|
4
4
|
"description": "AI File Coordination Layer — predictive file locking for AI coding agents",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
"dependencies": {
|
|
13
13
|
"commander": "^13.1.0",
|
|
14
14
|
"minimatch": "^10.0.0",
|
|
15
|
-
"@preclaim/core": "0.2.
|
|
15
|
+
"@preclaim/core": "0.2.3"
|
|
16
16
|
},
|
|
17
17
|
"repository": {
|
|
18
18
|
"type": "git",
|