@phigon/observer 8.1.0 → 8.3.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.
- package/README.md +244 -18
- package/dist/bin/guardian-runner-darwin-amd64 +0 -0
- package/dist/bin/guardian-runner-darwin-arm64 +0 -0
- package/dist/bin/guardian-runner-linux-amd64 +0 -0
- package/dist/bin/guardian-runner-linux-arm64 +0 -0
- package/dist/bin/guardian-runner-windows-amd64.exe +0 -0
- package/dist/bin/guardian-runner-windows-arm64.exe +0 -0
- package/dist/src/abortable-delay.d.ts +10 -0
- package/dist/src/abortable-delay.d.ts.map +1 -0
- package/dist/src/abortable-delay.js +21 -0
- package/dist/src/abortable-delay.js.map +1 -0
- package/dist/src/action-policy.d.ts.map +1 -1
- package/dist/src/action-policy.js +4 -2
- package/dist/src/action-policy.js.map +1 -1
- package/dist/src/activity/adapters/claude.d.ts.map +1 -1
- package/dist/src/activity/adapters/claude.js +28 -2
- package/dist/src/activity/adapters/claude.js.map +1 -1
- package/dist/src/activity/adapters/cline-task.d.ts +7 -0
- package/dist/src/activity/adapters/cline-task.d.ts.map +1 -0
- package/dist/src/activity/adapters/cline-task.js +197 -0
- package/dist/src/activity/adapters/cline-task.js.map +1 -0
- package/dist/src/activity/adapters/cline.d.ts +3 -0
- package/dist/src/activity/adapters/cline.d.ts.map +1 -0
- package/dist/src/activity/adapters/cline.js +102 -0
- package/dist/src/activity/adapters/cline.js.map +1 -0
- package/dist/src/activity/adapters/codex.d.ts.map +1 -1
- package/dist/src/activity/adapters/codex.js +76 -0
- package/dist/src/activity/adapters/codex.js.map +1 -1
- package/dist/src/activity/adapters/copilot-chat.d.ts +3 -0
- package/dist/src/activity/adapters/copilot-chat.d.ts.map +1 -0
- package/dist/src/activity/adapters/copilot-chat.js +176 -0
- package/dist/src/activity/adapters/copilot-chat.js.map +1 -0
- package/dist/src/activity/adapters/copilot.d.ts +2 -1
- package/dist/src/activity/adapters/copilot.d.ts.map +1 -1
- package/dist/src/activity/adapters/copilot.js +173 -2
- package/dist/src/activity/adapters/copilot.js.map +1 -1
- package/dist/src/activity/adapters/cursor.d.ts +3 -0
- package/dist/src/activity/adapters/cursor.d.ts.map +1 -0
- package/dist/src/activity/adapters/cursor.js +86 -0
- package/dist/src/activity/adapters/cursor.js.map +1 -0
- package/dist/src/activity/adapters/factory-droid.d.ts +3 -0
- package/dist/src/activity/adapters/factory-droid.d.ts.map +1 -0
- package/dist/src/activity/adapters/factory-droid.js +126 -0
- package/dist/src/activity/adapters/factory-droid.js.map +1 -0
- package/dist/src/activity/adapters/gemini.d.ts +3 -0
- package/dist/src/activity/adapters/gemini.d.ts.map +1 -0
- package/dist/src/activity/adapters/gemini.js +177 -0
- package/dist/src/activity/adapters/gemini.js.map +1 -0
- package/dist/src/activity/adapters/goose.d.ts +3 -0
- package/dist/src/activity/adapters/goose.d.ts.map +1 -0
- package/dist/src/activity/adapters/goose.js +116 -0
- package/dist/src/activity/adapters/goose.js.map +1 -0
- package/dist/src/activity/adapters/kiro.d.ts +3 -0
- package/dist/src/activity/adapters/kiro.d.ts.map +1 -0
- package/dist/src/activity/adapters/kiro.js +47 -0
- package/dist/src/activity/adapters/kiro.js.map +1 -0
- package/dist/src/activity/adapters/openai-compatible.d.ts.map +1 -1
- package/dist/src/activity/adapters/openai-compatible.js +9 -1
- package/dist/src/activity/adapters/openai-compatible.js.map +1 -1
- package/dist/src/activity/adapters/opencode.d.ts.map +1 -1
- package/dist/src/activity/adapters/opencode.js +108 -1
- package/dist/src/activity/adapters/opencode.js.map +1 -1
- package/dist/src/activity/adapters/zed.d.ts +3 -0
- package/dist/src/activity/adapters/zed.d.ts.map +1 -0
- package/dist/src/activity/adapters/zed.js +134 -0
- package/dist/src/activity/adapters/zed.js.map +1 -0
- package/dist/src/activity/collector.d.ts +43 -1
- package/dist/src/activity/collector.d.ts.map +1 -1
- package/dist/src/activity/collector.js +490 -77
- package/dist/src/activity/collector.js.map +1 -1
- package/dist/src/activity/goose-sqlite-source.d.ts +33 -0
- package/dist/src/activity/goose-sqlite-source.d.ts.map +1 -0
- package/dist/src/activity/goose-sqlite-source.js +274 -0
- package/dist/src/activity/goose-sqlite-source.js.map +1 -0
- package/dist/src/activity/index.d.ts +3 -0
- package/dist/src/activity/index.d.ts.map +1 -1
- package/dist/src/activity/index.js +3 -0
- package/dist/src/activity/index.js.map +1 -1
- package/dist/src/activity/ingest.d.ts +9 -0
- package/dist/src/activity/ingest.d.ts.map +1 -1
- package/dist/src/activity/ingest.js +94 -4
- package/dist/src/activity/ingest.js.map +1 -1
- package/dist/src/activity/json-document-source.d.ts +151 -0
- package/dist/src/activity/json-document-source.d.ts.map +1 -0
- package/dist/src/activity/json-document-source.js +586 -0
- package/dist/src/activity/json-document-source.js.map +1 -0
- package/dist/src/activity/native-capabilities.d.ts.map +1 -1
- package/dist/src/activity/native-capabilities.js +8 -12
- package/dist/src/activity/native-capabilities.js.map +1 -1
- package/dist/src/activity/normalize.d.ts.map +1 -1
- package/dist/src/activity/normalize.js +64 -6
- package/dist/src/activity/normalize.js.map +1 -1
- package/dist/src/activity/opencode-message-tables.d.ts +87 -0
- package/dist/src/activity/opencode-message-tables.d.ts.map +1 -0
- package/dist/src/activity/opencode-message-tables.js +546 -0
- package/dist/src/activity/opencode-message-tables.js.map +1 -0
- package/dist/src/activity/opencode-sqlite-source.d.ts +7 -0
- package/dist/src/activity/opencode-sqlite-source.d.ts.map +1 -1
- package/dist/src/activity/opencode-sqlite-source.js +154 -63
- package/dist/src/activity/opencode-sqlite-source.js.map +1 -1
- package/dist/src/activity/source-reader.d.ts +60 -4
- package/dist/src/activity/source-reader.d.ts.map +1 -1
- package/dist/src/activity/source-reader.js +593 -75
- package/dist/src/activity/source-reader.js.map +1 -1
- package/dist/src/activity/sqlite-connections.d.ts +77 -0
- package/dist/src/activity/sqlite-connections.d.ts.map +1 -0
- package/dist/src/activity/sqlite-connections.js +220 -0
- package/dist/src/activity/sqlite-connections.js.map +1 -0
- package/dist/src/activity/zed-sqlite-source.d.ts +65 -0
- package/dist/src/activity/zed-sqlite-source.d.ts.map +1 -0
- package/dist/src/activity/zed-sqlite-source.js +547 -0
- package/dist/src/activity/zed-sqlite-source.js.map +1 -0
- package/dist/src/agent-action-executor.d.ts +18 -1
- package/dist/src/agent-action-executor.d.ts.map +1 -1
- package/dist/src/agent-action-executor.js +113 -58
- package/dist/src/agent-action-executor.js.map +1 -1
- package/dist/src/agentic-guardian.d.ts.map +1 -1
- package/dist/src/agentic-guardian.js +6 -5
- package/dist/src/agentic-guardian.js.map +1 -1
- package/dist/src/atomic-replace.d.ts +7 -0
- package/dist/src/atomic-replace.d.ts.map +1 -1
- package/dist/src/atomic-replace.js +28 -3
- package/dist/src/atomic-replace.js.map +1 -1
- package/dist/src/bridge-journal.d.ts +32 -0
- package/dist/src/bridge-journal.d.ts.map +1 -0
- package/dist/src/bridge-journal.js +113 -0
- package/dist/src/bridge-journal.js.map +1 -0
- package/dist/src/cli.d.ts +7 -1
- package/dist/src/cli.d.ts.map +1 -1
- package/dist/src/cli.js +534 -50
- package/dist/src/cli.js.map +1 -1
- package/dist/src/collection-notice.d.ts +34 -0
- package/dist/src/collection-notice.d.ts.map +1 -0
- package/dist/src/collection-notice.js +73 -0
- package/dist/src/collection-notice.js.map +1 -0
- package/dist/src/config.d.ts +39 -0
- package/dist/src/config.d.ts.map +1 -1
- package/dist/src/config.js +187 -36
- package/dist/src/config.js.map +1 -1
- package/dist/src/connection-config.d.ts.map +1 -1
- package/dist/src/connection-config.js +5 -0
- package/dist/src/connection-config.js.map +1 -1
- package/dist/src/content-redaction.d.ts +17 -1
- package/dist/src/content-redaction.d.ts.map +1 -1
- package/dist/src/content-redaction.js +51 -3
- package/dist/src/content-redaction.js.map +1 -1
- package/dist/src/credential-store.d.ts +20 -1
- package/dist/src/credential-store.d.ts.map +1 -1
- package/dist/src/credential-store.js +29 -4
- package/dist/src/credential-store.js.map +1 -1
- package/dist/src/custom-agent-registry.d.ts.map +1 -1
- package/dist/src/custom-agent-registry.js +2 -1
- package/dist/src/custom-agent-registry.js.map +1 -1
- package/dist/src/discovery/adapters/generic.d.ts.map +1 -1
- package/dist/src/discovery/adapters/generic.js +160 -2
- package/dist/src/discovery/adapters/generic.js.map +1 -1
- package/dist/src/discovery/engine.d.ts +7 -1
- package/dist/src/discovery/engine.d.ts.map +1 -1
- package/dist/src/discovery/engine.js +21 -16
- package/dist/src/discovery/engine.js.map +1 -1
- package/dist/src/discovery/known-agent.d.ts +7 -0
- package/dist/src/discovery/known-agent.d.ts.map +1 -1
- package/dist/src/discovery/known-agent.js +9 -4
- package/dist/src/discovery/known-agent.js.map +1 -1
- package/dist/src/discovery/system-evidence.d.ts +40 -1
- package/dist/src/discovery/system-evidence.d.ts.map +1 -1
- package/dist/src/discovery/system-evidence.js +189 -16
- package/dist/src/discovery/system-evidence.js.map +1 -1
- package/dist/src/doctor-check.d.ts +51 -0
- package/dist/src/doctor-check.d.ts.map +1 -0
- package/dist/src/doctor-check.js +174 -0
- package/dist/src/doctor-check.js.map +1 -0
- package/dist/src/enroll.d.ts +86 -0
- package/dist/src/enroll.d.ts.map +1 -0
- package/dist/src/enroll.js +245 -0
- package/dist/src/enroll.js.map +1 -0
- package/dist/src/entry.d.ts +3 -0
- package/dist/src/entry.d.ts.map +1 -0
- package/dist/src/entry.js +14 -0
- package/dist/src/entry.js.map +1 -0
- package/dist/src/event-queue.d.ts +13 -1
- package/dist/src/event-queue.d.ts.map +1 -1
- package/dist/src/event-queue.js +137 -42
- package/dist/src/event-queue.js.map +1 -1
- package/dist/src/event-spool.d.ts +61 -3
- package/dist/src/event-spool.d.ts.map +1 -1
- package/dist/src/event-spool.js +341 -44
- package/dist/src/event-spool.js.map +1 -1
- package/dist/src/generated/phigon/v1/identity_pb.d.ts +7 -0
- package/dist/src/generated/phigon/v1/identity_pb.d.ts.map +1 -1
- package/dist/src/generated/phigon/v1/identity_pb.js +1 -1
- package/dist/src/generated/phigon/v1/identity_pb.js.map +1 -1
- package/dist/src/guardian-containment.d.ts +2 -6
- package/dist/src/guardian-containment.d.ts.map +1 -1
- package/dist/src/guardian-containment.js +12 -63
- package/dist/src/guardian-containment.js.map +1 -1
- package/dist/src/guardian-decision-journal.d.ts.map +1 -1
- package/dist/src/guardian-decision-journal.js +4 -19
- package/dist/src/guardian-decision-journal.js.map +1 -1
- package/dist/src/guardian-managed-exec.d.ts.map +1 -1
- package/dist/src/guardian-managed-exec.js +6 -18
- package/dist/src/guardian-managed-exec.js.map +1 -1
- package/dist/src/guardian-model-bridge.d.ts.map +1 -1
- package/dist/src/guardian-model-bridge.js +2 -1
- package/dist/src/guardian-model-bridge.js.map +1 -1
- package/dist/src/guardian-native.d.ts +0 -1
- package/dist/src/guardian-native.d.ts.map +1 -1
- package/dist/src/guardian-native.js +0 -6
- package/dist/src/guardian-native.js.map +1 -1
- package/dist/src/guardian-process-monitor.d.ts +4 -0
- package/dist/src/guardian-process-monitor.d.ts.map +1 -1
- package/dist/src/guardian-process-monitor.js +82 -26
- package/dist/src/guardian-process-monitor.js.map +1 -1
- package/dist/src/health.d.ts +19 -1
- package/dist/src/health.d.ts.map +1 -1
- package/dist/src/health.js +22 -1
- package/dist/src/health.js.map +1 -1
- package/dist/src/historical-identity-store.d.ts +8 -1
- package/dist/src/historical-identity-store.d.ts.map +1 -1
- package/dist/src/historical-identity-store.js +28 -10
- package/dist/src/historical-identity-store.js.map +1 -1
- package/dist/src/index.d.ts +2 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +2 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/installation.d.ts +2 -0
- package/dist/src/installation.d.ts.map +1 -1
- package/dist/src/installation.js +6 -3
- package/dist/src/installation.js.map +1 -1
- package/dist/src/instance-lock.d.ts +45 -0
- package/dist/src/instance-lock.d.ts.map +1 -0
- package/dist/src/instance-lock.js +243 -0
- package/dist/src/instance-lock.js.map +1 -0
- package/dist/src/machine-command-executor.d.ts +22 -7
- package/dist/src/machine-command-executor.d.ts.map +1 -1
- package/dist/src/machine-command-executor.js +80 -19
- package/dist/src/machine-command-executor.js.map +1 -1
- package/dist/src/node-version.d.ts +8 -0
- package/dist/src/node-version.d.ts.map +1 -0
- package/dist/src/node-version.js +17 -0
- package/dist/src/node-version.js.map +1 -0
- package/dist/src/observer-log.d.ts +50 -0
- package/dist/src/observer-log.d.ts.map +1 -0
- package/dist/src/observer-log.js +141 -0
- package/dist/src/observer-log.js.map +1 -0
- package/dist/src/pair.d.ts +68 -1
- package/dist/src/pair.d.ts.map +1 -1
- package/dist/src/pair.js +204 -65
- package/dist/src/pair.js.map +1 -1
- package/dist/src/private-directory.d.ts +10 -0
- package/dist/src/private-directory.d.ts.map +1 -0
- package/dist/src/private-directory.js +66 -0
- package/dist/src/private-directory.js.map +1 -0
- package/dist/src/process-tree.d.ts +73 -0
- package/dist/src/process-tree.d.ts.map +1 -0
- package/dist/src/process-tree.js +256 -0
- package/dist/src/process-tree.js.map +1 -0
- package/dist/src/proxy.d.ts +68 -0
- package/dist/src/proxy.d.ts.map +1 -0
- package/dist/src/proxy.js +209 -0
- package/dist/src/proxy.js.map +1 -0
- package/dist/src/purge.d.ts +17 -0
- package/dist/src/purge.d.ts.map +1 -0
- package/dist/src/purge.js +84 -0
- package/dist/src/purge.js.map +1 -0
- package/dist/src/remove-machine.d.ts +5 -1
- package/dist/src/remove-machine.d.ts.map +1 -1
- package/dist/src/remove-machine.js +28 -14
- package/dist/src/remove-machine.js.map +1 -1
- package/dist/src/server-authority.d.ts +29 -0
- package/dist/src/server-authority.d.ts.map +1 -0
- package/dist/src/server-authority.js +106 -0
- package/dist/src/server-authority.js.map +1 -0
- package/dist/src/server-clock.d.ts +32 -0
- package/dist/src/server-clock.d.ts.map +1 -0
- package/dist/src/server-clock.js +72 -0
- package/dist/src/server-clock.js.map +1 -0
- package/dist/src/service-command.d.ts +20 -0
- package/dist/src/service-command.d.ts.map +1 -0
- package/dist/src/service-command.js +136 -0
- package/dist/src/service-command.js.map +1 -0
- package/dist/src/service.d.ts +98 -0
- package/dist/src/service.d.ts.map +1 -0
- package/dist/src/service.js +472 -0
- package/dist/src/service.js.map +1 -0
- package/dist/src/stream-client.d.ts +21 -1
- package/dist/src/stream-client.d.ts.map +1 -1
- package/dist/src/stream-client.js +137 -24
- package/dist/src/stream-client.js.map +1 -1
- package/dist/src/stream-state.d.ts +2 -0
- package/dist/src/stream-state.d.ts.map +1 -1
- package/dist/src/stream-state.js +5 -2
- package/dist/src/stream-state.js.map +1 -1
- package/dist/src/system-inspection.d.ts +78 -0
- package/dist/src/system-inspection.d.ts.map +1 -0
- package/dist/src/system-inspection.js +281 -0
- package/dist/src/system-inspection.js.map +1 -0
- package/dist/src/update.d.ts.map +1 -1
- package/dist/src/update.js +9 -3
- package/dist/src/update.js.map +1 -1
- package/dist/src/user-notices.d.ts +64 -0
- package/dist/src/user-notices.d.ts.map +1 -0
- package/dist/src/user-notices.js +141 -0
- package/dist/src/user-notices.js.map +1 -0
- package/package.json +7 -7
- package/dist/src/windows-process.d.ts +0 -7
- package/dist/src/windows-process.d.ts.map +0 -1
- package/dist/src/windows-process.js +0 -18
- package/dist/src/windows-process.js.map +0 -1
|
@@ -0,0 +1,586 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import { readFile, readdir, realpath, stat } from "node:fs/promises";
|
|
3
|
+
import { join, relative, resolve, sep } from "node:path";
|
|
4
|
+
const maxDocumentBytes = 32 << 20;
|
|
5
|
+
const maxLiveDocuments = 256;
|
|
6
|
+
const maxTrackedDocuments = 1_024;
|
|
7
|
+
const maxDirectoryDepth = 6;
|
|
8
|
+
// A cursor packs the delivered message count (17 bits) and a 36-bit
|
|
9
|
+
// fingerprint of the last delivered message into one safe integer.
|
|
10
|
+
const maxMessagesPerDocument = (1 << 17) - 1;
|
|
11
|
+
const fingerprintSpace = 2 ** 36;
|
|
12
|
+
// A document unchanged for this long is settled: its final message is
|
|
13
|
+
// complete even without a completion marker (the agent stopped or crashed).
|
|
14
|
+
const settleMilliseconds = 10 * 60_000;
|
|
15
|
+
/**
|
|
16
|
+
* Whether a file was created after `time`. It must also have been modified
|
|
17
|
+
* after it; where the file system records creation times, an older file
|
|
18
|
+
* that was only written to does not count, so it is not uploaded again.
|
|
19
|
+
*/
|
|
20
|
+
export function startedAfter(metadata, time) {
|
|
21
|
+
return metadata.mtimeMs > time &&
|
|
22
|
+
(metadata.birthtimeMs <= 0 || metadata.birthtimeMs > time);
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Reads agents that keep each conversation as one JSON document rewritten
|
|
26
|
+
* in place (for example `{ messages: [...] }`). A document's cursor holds
|
|
27
|
+
* the number of messages already delivered and a fingerprint of the last
|
|
28
|
+
* one, so new messages are emitted once although the whole file is
|
|
29
|
+
* rewritten. A document whose delivered prefix changed (compaction or a
|
|
30
|
+
* rewind) resumes after the remembered message, or is re-baselined when
|
|
31
|
+
* that message is gone. Unchanged documents are not parsed again.
|
|
32
|
+
*/
|
|
33
|
+
export async function scanJSONDocumentSource(source, options) {
|
|
34
|
+
const pattern = new RegExp(source.pathPattern, "u");
|
|
35
|
+
const directoryPattern = source.directoryPattern === undefined
|
|
36
|
+
? undefined
|
|
37
|
+
: new RegExp(source.directoryPattern, "u");
|
|
38
|
+
const files = [];
|
|
39
|
+
for (const root of source.roots) {
|
|
40
|
+
files.push(...await listDocuments(root, pattern, directoryPattern, options.listings, options.historical));
|
|
41
|
+
}
|
|
42
|
+
files.sort((left, right) => right.modifiedMs - left.modifiedMs || left.path.localeCompare(right.path));
|
|
43
|
+
// The first live scan baselines every tracked document so an old
|
|
44
|
+
// conversation that is resumed later continues from its last message.
|
|
45
|
+
const selected = files.slice(0, options.historical || options.initialScan
|
|
46
|
+
? maxTrackedDocuments
|
|
47
|
+
: maxLiveDocuments);
|
|
48
|
+
const replayPaths = new Set(options.initialScan && options.replayOnFirstStart && !options.historical
|
|
49
|
+
? selected.slice(0, options.replaySessions).map((file) => file.path)
|
|
50
|
+
: []);
|
|
51
|
+
const records = [];
|
|
52
|
+
let malformed = 0;
|
|
53
|
+
let oversized = 0;
|
|
54
|
+
let complete = true;
|
|
55
|
+
let remaining = options.maxRecords;
|
|
56
|
+
for (const file of selected) {
|
|
57
|
+
const cursorKey = digest(`json-document-cursor\u0000${file.path}`);
|
|
58
|
+
const versionKey = digest(`json-document-version\u0000${file.path}`);
|
|
59
|
+
const pendingKey = digest(`json-document-pending\u0000${file.path}`);
|
|
60
|
+
const cursor = options.cursors.get(cursorKey);
|
|
61
|
+
const version = documentVersion(file);
|
|
62
|
+
const settled = Date.now() - file.modifiedMs >= settleMilliseconds;
|
|
63
|
+
if (cursor !== undefined &&
|
|
64
|
+
options.cursors.get(versionKey) === version &&
|
|
65
|
+
!(settled && options.cursors.has(pendingKey))) {
|
|
66
|
+
continue;
|
|
67
|
+
}
|
|
68
|
+
if (file.size > maxDocumentBytes) {
|
|
69
|
+
options.cursors.set(versionKey, version);
|
|
70
|
+
oversized++;
|
|
71
|
+
continue;
|
|
72
|
+
}
|
|
73
|
+
// A conversation that began while the observer was stopped is new work.
|
|
74
|
+
const startedWhileStopped = cursor === undefined &&
|
|
75
|
+
options.initialScan &&
|
|
76
|
+
!options.historical &&
|
|
77
|
+
options.newSince !== undefined &&
|
|
78
|
+
file.modifiedMs > options.newSince &&
|
|
79
|
+
await stat(file.path).then((metadata) => startedAfter(metadata, options.newSince ?? 0), () => false);
|
|
80
|
+
const baselineOnly = cursor === undefined &&
|
|
81
|
+
options.initialScan &&
|
|
82
|
+
!options.historical &&
|
|
83
|
+
!replayPaths.has(file.path) &&
|
|
84
|
+
!startedWhileStopped;
|
|
85
|
+
if (remaining <= 0 && !baselineOnly) {
|
|
86
|
+
complete = false;
|
|
87
|
+
continue;
|
|
88
|
+
}
|
|
89
|
+
let messages;
|
|
90
|
+
let identity = file.path;
|
|
91
|
+
try {
|
|
92
|
+
const rootReal = await realpath(file.root);
|
|
93
|
+
const pathReal = await realpath(file.path);
|
|
94
|
+
if (!isWithin(rootReal, pathReal))
|
|
95
|
+
continue;
|
|
96
|
+
const document = readMessages(await readFile(pathReal, "utf8"), source);
|
|
97
|
+
if (document === undefined) {
|
|
98
|
+
options.cursors.set(versionKey, version);
|
|
99
|
+
malformed++;
|
|
100
|
+
continue;
|
|
101
|
+
}
|
|
102
|
+
messages = document.messages.slice(0, maxMessagesPerDocument);
|
|
103
|
+
if (document.sessionId !== undefined) {
|
|
104
|
+
identity = `session\u0000${source.adapterId}\u0000${document.sessionId}`;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
catch (error) {
|
|
108
|
+
if (isTransientError(error))
|
|
109
|
+
continue;
|
|
110
|
+
// The agent rewrites the document in place, so a read can observe a
|
|
111
|
+
// partial write. Its next modification is read again.
|
|
112
|
+
if (error instanceof SyntaxError)
|
|
113
|
+
continue;
|
|
114
|
+
throw error;
|
|
115
|
+
}
|
|
116
|
+
const idField = source.messageIdField;
|
|
117
|
+
// A final message that is still being written is held back and is
|
|
118
|
+
// delivered once it is finished.
|
|
119
|
+
const available = settled
|
|
120
|
+
? messages.length
|
|
121
|
+
: finishedMessageCount(messages, source.completeFields, source.pendingField);
|
|
122
|
+
let start;
|
|
123
|
+
if (cursor === undefined) {
|
|
124
|
+
if (options.historical || startedWhileStopped)
|
|
125
|
+
start = 0;
|
|
126
|
+
else if (replayPaths.has(file.path)) {
|
|
127
|
+
start = Math.max(0, available - options.maxReplayRecords);
|
|
128
|
+
}
|
|
129
|
+
else if (options.initialScan)
|
|
130
|
+
start = available;
|
|
131
|
+
else
|
|
132
|
+
start = 0;
|
|
133
|
+
}
|
|
134
|
+
else {
|
|
135
|
+
start = resumeIndex(messages, cursor, idField);
|
|
136
|
+
}
|
|
137
|
+
const end = Math.max(start, Math.min(available, start + Math.max(0, remaining)));
|
|
138
|
+
const sourceID = `ses_${digest(identity).slice(0, 32)}`;
|
|
139
|
+
for (let index = start; index < end; index++) {
|
|
140
|
+
records.push({
|
|
141
|
+
adapterId: source.adapterId,
|
|
142
|
+
sourceId: sourceID,
|
|
143
|
+
sourceRecordId: digest(`${identity}\u0000${messageKey(messages[index], index, idField)}`),
|
|
144
|
+
// The document is rewritten as the conversation grows, so its
|
|
145
|
+
// modification time is the newest message's time. Each record keeps
|
|
146
|
+
// its own message time so the raw source record and the events
|
|
147
|
+
// normalized from it carry the same timestamp.
|
|
148
|
+
observedAt: messageTime(messages[index]) ??
|
|
149
|
+
new Date(file.modifiedMs),
|
|
150
|
+
initialReplay: options.historical || replayPaths.has(file.path),
|
|
151
|
+
value: index === 0 && source.firstMessageField !== undefined && isRecord(messages[0])
|
|
152
|
+
? { ...messages[0], [source.firstMessageField]: true }
|
|
153
|
+
: messages[index],
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
remaining -= end - start;
|
|
157
|
+
options.cursors.set(cursorKey, packCursor(messages, end, idField));
|
|
158
|
+
if (end < available) {
|
|
159
|
+
complete = false;
|
|
160
|
+
options.cursors.delete(versionKey);
|
|
161
|
+
}
|
|
162
|
+
else {
|
|
163
|
+
// A held-back unfinished message is read again when the file changes
|
|
164
|
+
// or once the document has settled.
|
|
165
|
+
options.cursors.set(versionKey, version);
|
|
166
|
+
}
|
|
167
|
+
if (available < messages.length)
|
|
168
|
+
options.cursors.set(pendingKey, 1);
|
|
169
|
+
else
|
|
170
|
+
options.cursors.delete(pendingKey);
|
|
171
|
+
}
|
|
172
|
+
return { records, files: selected.length, malformed, oversized, complete };
|
|
173
|
+
}
|
|
174
|
+
export function packCursor(messages, count, idField) {
|
|
175
|
+
return count === 0
|
|
176
|
+
? 0
|
|
177
|
+
: count * fingerprintSpace +
|
|
178
|
+
fingerprint(messages[count - 1], count - 1, idField);
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Index of the first undelivered message. The delivered prefix must still
|
|
182
|
+
* end with the remembered message; if it moved, resume after it; if it is
|
|
183
|
+
* gone the document was rewritten and everything present is treated as
|
|
184
|
+
* already delivered.
|
|
185
|
+
*/
|
|
186
|
+
export function resumeIndex(messages, cursor, idField) {
|
|
187
|
+
const count = Math.floor(cursor / fingerprintSpace);
|
|
188
|
+
const last = cursor % fingerprintSpace;
|
|
189
|
+
if (count === 0)
|
|
190
|
+
return 0;
|
|
191
|
+
if (count <= messages.length &&
|
|
192
|
+
fingerprint(messages[count - 1], count - 1, idField) === last) {
|
|
193
|
+
return count;
|
|
194
|
+
}
|
|
195
|
+
for (let index = messages.length - 1; index >= 0; index--) {
|
|
196
|
+
if (fingerprint(messages[index], index, idField) === last)
|
|
197
|
+
return index + 1;
|
|
198
|
+
}
|
|
199
|
+
return messages.length;
|
|
200
|
+
}
|
|
201
|
+
// 2001-09-09 .. 2286-11-20 in epoch milliseconds. Smaller numbers are
|
|
202
|
+
// seconds or counters, not message times.
|
|
203
|
+
const minimumEpochMilliseconds = 1e12;
|
|
204
|
+
const maximumEpochMilliseconds = 1e13;
|
|
205
|
+
/**
|
|
206
|
+
* A message's own time: an epoch-milliseconds `ts` or `timestamp` number
|
|
207
|
+
* (Cline, VS Code chat) or an ISO `timestamp` string.
|
|
208
|
+
*/
|
|
209
|
+
function messageTime(message) {
|
|
210
|
+
if (typeof message !== "object" || message === null)
|
|
211
|
+
return undefined;
|
|
212
|
+
const object = message;
|
|
213
|
+
for (const field of ["ts", "timestamp"]) {
|
|
214
|
+
const value = object[field];
|
|
215
|
+
let time;
|
|
216
|
+
if (typeof value === "number" &&
|
|
217
|
+
value >= minimumEpochMilliseconds &&
|
|
218
|
+
value < maximumEpochMilliseconds) {
|
|
219
|
+
time = value;
|
|
220
|
+
}
|
|
221
|
+
else if (typeof value === "string" && value.length <= 64) {
|
|
222
|
+
const parsed = Date.parse(value);
|
|
223
|
+
if (Number.isFinite(parsed))
|
|
224
|
+
time = parsed;
|
|
225
|
+
}
|
|
226
|
+
if (time !== undefined)
|
|
227
|
+
return new Date(time);
|
|
228
|
+
}
|
|
229
|
+
return undefined;
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* The document's messages, or undefined when the document does not hold a
|
|
233
|
+
* message list. A JSON document that is still being written throws a
|
|
234
|
+
* SyntaxError and is read again after its next change.
|
|
235
|
+
*/
|
|
236
|
+
function readMessages(text, source) {
|
|
237
|
+
if (source.documentFormat === "jsonl")
|
|
238
|
+
return { messages: jsonLines(text) };
|
|
239
|
+
const document = source.documentFormat === "mutation-log"
|
|
240
|
+
? replayMutationLog(text)
|
|
241
|
+
: JSON.parse(text);
|
|
242
|
+
if (source.messagesField === "") {
|
|
243
|
+
return Array.isArray(document) ? { messages: document } : undefined;
|
|
244
|
+
}
|
|
245
|
+
if (!isRecord(document))
|
|
246
|
+
return undefined;
|
|
247
|
+
const messages = document[source.messagesField];
|
|
248
|
+
if (!Array.isArray(messages))
|
|
249
|
+
return undefined;
|
|
250
|
+
const sessionId = source.sessionIdField === undefined
|
|
251
|
+
? undefined
|
|
252
|
+
: document[source.sessionIdField];
|
|
253
|
+
return typeof sessionId === "string" &&
|
|
254
|
+
sessionId !== "" &&
|
|
255
|
+
sessionId.length <= 128 &&
|
|
256
|
+
!/[\u0000-\u001f\u007f]/u.test(sessionId)
|
|
257
|
+
? { messages, sessionId }
|
|
258
|
+
: { messages };
|
|
259
|
+
}
|
|
260
|
+
/**
|
|
261
|
+
* One value per line. A final line without its newline is included once it
|
|
262
|
+
* parses: some agents write the separator before each record, not after.
|
|
263
|
+
*/
|
|
264
|
+
function jsonLines(text) {
|
|
265
|
+
const lines = text.split("\n");
|
|
266
|
+
const values = [];
|
|
267
|
+
for (const [index, line] of lines.entries()) {
|
|
268
|
+
if (line.trim() === "")
|
|
269
|
+
continue;
|
|
270
|
+
try {
|
|
271
|
+
values.push(JSON.parse(line));
|
|
272
|
+
}
|
|
273
|
+
catch {
|
|
274
|
+
// The final line may still be being written. An earlier damaged line
|
|
275
|
+
// is skipped so it cannot block the rest of the conversation.
|
|
276
|
+
if (index === lines.length - 1)
|
|
277
|
+
break;
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
return values;
|
|
281
|
+
}
|
|
282
|
+
const forbiddenPathKeys = new Set(["__proto__", "constructor", "prototype"]);
|
|
283
|
+
/**
|
|
284
|
+
* Rebuilds a VS Code chat session from its operation log: kind 0 is the
|
|
285
|
+
* initial state, 1 sets the value at path `k`, 2 appends `v` to the array
|
|
286
|
+
* at `k` after truncating it to `i`, and 3 deletes the value at `k`. A final
|
|
287
|
+
* line that is still being written ends the replay. Returns undefined for a
|
|
288
|
+
* log that cannot be replayed.
|
|
289
|
+
*/
|
|
290
|
+
function replayMutationLog(text) {
|
|
291
|
+
const lines = text.split("\n");
|
|
292
|
+
let state;
|
|
293
|
+
for (const [index, line] of lines.entries()) {
|
|
294
|
+
if (line.trim() === "")
|
|
295
|
+
continue;
|
|
296
|
+
let entry;
|
|
297
|
+
try {
|
|
298
|
+
entry = JSON.parse(line);
|
|
299
|
+
}
|
|
300
|
+
catch {
|
|
301
|
+
if (index === lines.length - 1)
|
|
302
|
+
break;
|
|
303
|
+
return undefined;
|
|
304
|
+
}
|
|
305
|
+
if (!isRecord(entry))
|
|
306
|
+
return undefined;
|
|
307
|
+
if (entry["kind"] === 0) {
|
|
308
|
+
state = entry["v"];
|
|
309
|
+
continue;
|
|
310
|
+
}
|
|
311
|
+
const path = entry["k"];
|
|
312
|
+
if (state === undefined ||
|
|
313
|
+
!Array.isArray(path) ||
|
|
314
|
+
path.length === 0 ||
|
|
315
|
+
path.length > 64 ||
|
|
316
|
+
!path.every((key) => (typeof key === "string" && !forbiddenPathKeys.has(key)) ||
|
|
317
|
+
(typeof key === "number" && Number.isSafeInteger(key) && key >= 0))) {
|
|
318
|
+
return undefined;
|
|
319
|
+
}
|
|
320
|
+
const keys = path;
|
|
321
|
+
const parent = containerAt(state, keys.slice(0, -1));
|
|
322
|
+
const last = keys[keys.length - 1];
|
|
323
|
+
if (parent === undefined || last === undefined)
|
|
324
|
+
return undefined;
|
|
325
|
+
if (entry["kind"] === 1) {
|
|
326
|
+
parent[last] = entry["v"];
|
|
327
|
+
}
|
|
328
|
+
else if (entry["kind"] === 3) {
|
|
329
|
+
delete parent[last];
|
|
330
|
+
}
|
|
331
|
+
else if (entry["kind"] === 2) {
|
|
332
|
+
const current = parent[last] ?? [];
|
|
333
|
+
const values = entry["v"] ?? [];
|
|
334
|
+
const truncate = entry["i"];
|
|
335
|
+
if (!Array.isArray(current) || !Array.isArray(values))
|
|
336
|
+
return undefined;
|
|
337
|
+
if (truncate !== undefined) {
|
|
338
|
+
if (typeof truncate !== "number" ||
|
|
339
|
+
!Number.isSafeInteger(truncate) ||
|
|
340
|
+
truncate < 0) {
|
|
341
|
+
return undefined;
|
|
342
|
+
}
|
|
343
|
+
if (truncate < current.length)
|
|
344
|
+
current.length = truncate;
|
|
345
|
+
}
|
|
346
|
+
for (const value of values)
|
|
347
|
+
current.push(value);
|
|
348
|
+
parent[last] = current;
|
|
349
|
+
}
|
|
350
|
+
else {
|
|
351
|
+
return undefined;
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
return state;
|
|
355
|
+
}
|
|
356
|
+
function containerAt(value, path) {
|
|
357
|
+
let current = value;
|
|
358
|
+
for (const key of path) {
|
|
359
|
+
if (typeof current !== "object" || current === null)
|
|
360
|
+
return undefined;
|
|
361
|
+
current = current[key];
|
|
362
|
+
}
|
|
363
|
+
return typeof current === "object" && current !== null
|
|
364
|
+
? current
|
|
365
|
+
: undefined;
|
|
366
|
+
}
|
|
367
|
+
function finishedMessageCount(messages, completeFields, pendingField) {
|
|
368
|
+
if (pendingField !== undefined &&
|
|
369
|
+
messages.length > 0 &&
|
|
370
|
+
fieldAt(messages.at(-1), pendingField) === true) {
|
|
371
|
+
return messages.length - 1;
|
|
372
|
+
}
|
|
373
|
+
if (completeFields === undefined || completeFields.length === 0) {
|
|
374
|
+
return messages.length;
|
|
375
|
+
}
|
|
376
|
+
const last = messages.at(-1);
|
|
377
|
+
const finished = last === undefined || completeFields.some((field) => {
|
|
378
|
+
const value = fieldAt(last, field);
|
|
379
|
+
return value !== undefined && value !== null && value !== false;
|
|
380
|
+
});
|
|
381
|
+
return finished ? messages.length : messages.length - 1;
|
|
382
|
+
}
|
|
383
|
+
function fieldAt(value, path) {
|
|
384
|
+
let current = value;
|
|
385
|
+
for (const key of path.split(".")) {
|
|
386
|
+
if (!isRecord(current))
|
|
387
|
+
return undefined;
|
|
388
|
+
current = current[key];
|
|
389
|
+
}
|
|
390
|
+
return current;
|
|
391
|
+
}
|
|
392
|
+
function isRecord(value) {
|
|
393
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
394
|
+
}
|
|
395
|
+
function messageKey(message, index, idField = "id") {
|
|
396
|
+
const id = fieldAt(message, idField);
|
|
397
|
+
if (typeof id === "number" && Number.isSafeInteger(id))
|
|
398
|
+
return `id:${id}`;
|
|
399
|
+
return typeof id === "string" && id !== "" && id.length <= 256
|
|
400
|
+
? `id:${id}`
|
|
401
|
+
: `index:${index}`;
|
|
402
|
+
}
|
|
403
|
+
function fingerprint(message, index, idField) {
|
|
404
|
+
const key = messageKey(message, index, idField);
|
|
405
|
+
return Number.parseInt(digest(key.startsWith("id:") ? key : `${key}:${safeJSON(message)}`)
|
|
406
|
+
.slice(0, 9), 16);
|
|
407
|
+
}
|
|
408
|
+
function documentVersion(file) {
|
|
409
|
+
return Number.parseInt(digest(`${file.size}:${file.modifiedMs}`).slice(0, 13), 16);
|
|
410
|
+
}
|
|
411
|
+
function safeJSON(value) {
|
|
412
|
+
try {
|
|
413
|
+
return JSON.stringify(value) ?? "";
|
|
414
|
+
}
|
|
415
|
+
catch {
|
|
416
|
+
return "";
|
|
417
|
+
}
|
|
418
|
+
}
|
|
419
|
+
const nodeListingFileSystem = {
|
|
420
|
+
readdir: async (directory) => (await readdir(directory, { withFileTypes: true }))
|
|
421
|
+
.map((entry) => ({ name: entry.name, directory: entry.isDirectory(), file: entry.isFile() })),
|
|
422
|
+
modifiedMs: async (directory) => (await stat(directory)).mtimeMs,
|
|
423
|
+
metadata: async (file) => {
|
|
424
|
+
const metadata = await stat(file);
|
|
425
|
+
return { modifiedMs: metadata.mtimeMs, size: metadata.size };
|
|
426
|
+
},
|
|
427
|
+
now: () => Date.now(),
|
|
428
|
+
};
|
|
429
|
+
/**
|
|
430
|
+
* Folder listings reused across scans. Adding, removing or renaming an entry
|
|
431
|
+
* changes its folder's modified time, so a folder is listed again only when
|
|
432
|
+
* that time moved. Checking a folder costs about half of listing it, and
|
|
433
|
+
* most folders under an agent's session store never change. A folder that
|
|
434
|
+
* changed within the last two seconds is listed again on the next scan,
|
|
435
|
+
* because coarse file-system clocks can hide a second change in the same
|
|
436
|
+
* tick, and every folder is listed afresh at least every 30 seconds.
|
|
437
|
+
*
|
|
438
|
+
* Folders and documents untouched for ten minutes are cold: they are checked
|
|
439
|
+
* every ten seconds instead of on every scan, so a conversation resumed in a
|
|
440
|
+
* quiet project is noticed within ten seconds while active ones stay live.
|
|
441
|
+
*/
|
|
442
|
+
export class DirectoryListingCache {
|
|
443
|
+
static relistAfterMs = 30_000;
|
|
444
|
+
static settleMs = 2_000;
|
|
445
|
+
static coldAfterMs = 10 * 60_000;
|
|
446
|
+
static coldCheckMs = 10_000;
|
|
447
|
+
static maxFolders = 8_192;
|
|
448
|
+
#listings = new Map();
|
|
449
|
+
#files = new Map();
|
|
450
|
+
#fs;
|
|
451
|
+
constructor(fileSystem = nodeListingFileSystem) {
|
|
452
|
+
this.#fs = fileSystem;
|
|
453
|
+
}
|
|
454
|
+
/**
|
|
455
|
+
* The folder's entries. `trustMs` skips even the folder check while the
|
|
456
|
+
* listing is younger than that; history imports use it, since live
|
|
457
|
+
* collection already follows new conversations.
|
|
458
|
+
*/
|
|
459
|
+
async list(directory, trustMs = 0) {
|
|
460
|
+
const now = this.#fs.now();
|
|
461
|
+
const cached = this.#listings.get(directory);
|
|
462
|
+
const age = cached === undefined ? Number.POSITIVE_INFINITY : now - cached.listedAt;
|
|
463
|
+
if (cached !== undefined && age < DirectoryListingCache.relistAfterMs) {
|
|
464
|
+
if (age < trustMs)
|
|
465
|
+
return cached.entries;
|
|
466
|
+
if (cached.settled && now - cached.modifiedMs >= DirectoryListingCache.coldAfterMs &&
|
|
467
|
+
now - cached.checkedAt < DirectoryListingCache.coldCheckMs)
|
|
468
|
+
return cached.entries;
|
|
469
|
+
}
|
|
470
|
+
let modifiedMs;
|
|
471
|
+
try {
|
|
472
|
+
modifiedMs = await this.#fs.modifiedMs(directory);
|
|
473
|
+
}
|
|
474
|
+
catch (error) {
|
|
475
|
+
this.#listings.delete(directory);
|
|
476
|
+
throw error;
|
|
477
|
+
}
|
|
478
|
+
if (cached !== undefined && cached.settled && cached.modifiedMs === modifiedMs &&
|
|
479
|
+
age < DirectoryListingCache.relistAfterMs) {
|
|
480
|
+
this.#listings.set(directory, { ...cached, checkedAt: now });
|
|
481
|
+
return cached.entries;
|
|
482
|
+
}
|
|
483
|
+
// Checked before listing: an entry added while listing moves the time on.
|
|
484
|
+
const entries = await this.#fs.readdir(directory);
|
|
485
|
+
this.#listings.delete(directory);
|
|
486
|
+
this.#listings.set(directory, {
|
|
487
|
+
entries,
|
|
488
|
+
modifiedMs,
|
|
489
|
+
listedAt: now,
|
|
490
|
+
checkedAt: now,
|
|
491
|
+
settled: now - modifiedMs >= DirectoryListingCache.settleMs,
|
|
492
|
+
});
|
|
493
|
+
evictOldest(this.#listings);
|
|
494
|
+
return entries;
|
|
495
|
+
}
|
|
496
|
+
/** A document's time and size; a cold document is checked every ten seconds. */
|
|
497
|
+
async metadata(file) {
|
|
498
|
+
const now = this.#fs.now();
|
|
499
|
+
const cached = this.#files.get(file);
|
|
500
|
+
if (cached !== undefined && now - cached.modifiedMs >= DirectoryListingCache.coldAfterMs &&
|
|
501
|
+
now - cached.checkedAt < DirectoryListingCache.coldCheckMs)
|
|
502
|
+
return cached;
|
|
503
|
+
let metadata;
|
|
504
|
+
try {
|
|
505
|
+
metadata = await this.#fs.metadata(file);
|
|
506
|
+
}
|
|
507
|
+
catch (error) {
|
|
508
|
+
this.#files.delete(file);
|
|
509
|
+
throw error;
|
|
510
|
+
}
|
|
511
|
+
this.#files.delete(file);
|
|
512
|
+
this.#files.set(file, { ...metadata, checkedAt: now });
|
|
513
|
+
evictOldest(this.#files);
|
|
514
|
+
return metadata;
|
|
515
|
+
}
|
|
516
|
+
}
|
|
517
|
+
function evictOldest(map) {
|
|
518
|
+
if (map.size <= DirectoryListingCache.maxFolders)
|
|
519
|
+
return;
|
|
520
|
+
const oldest = map.keys().next().value;
|
|
521
|
+
if (oldest !== undefined)
|
|
522
|
+
map.delete(oldest);
|
|
523
|
+
}
|
|
524
|
+
const historyListingTrustMs = DirectoryListingCache.relistAfterMs;
|
|
525
|
+
async function listDocuments(root, pattern, directoryPattern, listings, historical) {
|
|
526
|
+
const result = [];
|
|
527
|
+
// `inRoot` is the folder's `/`-separated path below root, built as the walk
|
|
528
|
+
// descends instead of with path.relative for every entry on every scan.
|
|
529
|
+
const walk = async (directory, inRoot, depth) => {
|
|
530
|
+
if (depth > maxDirectoryDepth)
|
|
531
|
+
return;
|
|
532
|
+
let entries;
|
|
533
|
+
try {
|
|
534
|
+
entries = listings === undefined
|
|
535
|
+
? await nodeListingFileSystem.readdir(directory)
|
|
536
|
+
: await listings.list(directory, historical ? historyListingTrustMs : 0);
|
|
537
|
+
}
|
|
538
|
+
catch (error) {
|
|
539
|
+
if (isTransientError(error))
|
|
540
|
+
return;
|
|
541
|
+
throw error;
|
|
542
|
+
}
|
|
543
|
+
for (const entry of entries) {
|
|
544
|
+
const relativePath = inRoot === "" ? entry.name : `${inRoot}/${entry.name}`;
|
|
545
|
+
if (entry.directory) {
|
|
546
|
+
if (directoryPattern === undefined || directoryPattern.test(relativePath)) {
|
|
547
|
+
await walk(join(directory, entry.name), relativePath, depth + 1);
|
|
548
|
+
}
|
|
549
|
+
continue;
|
|
550
|
+
}
|
|
551
|
+
if (!entry.file || !pattern.test(relativePath))
|
|
552
|
+
continue;
|
|
553
|
+
const path = join(directory, entry.name);
|
|
554
|
+
try {
|
|
555
|
+
const metadata = listings === undefined
|
|
556
|
+
? await nodeListingFileSystem.metadata(path)
|
|
557
|
+
: await listings.metadata(path);
|
|
558
|
+
result.push({
|
|
559
|
+
root,
|
|
560
|
+
path,
|
|
561
|
+
modifiedMs: metadata.modifiedMs,
|
|
562
|
+
size: metadata.size,
|
|
563
|
+
});
|
|
564
|
+
}
|
|
565
|
+
catch (error) {
|
|
566
|
+
if (!isTransientError(error))
|
|
567
|
+
throw error;
|
|
568
|
+
}
|
|
569
|
+
}
|
|
570
|
+
};
|
|
571
|
+
await walk(root, "", 0);
|
|
572
|
+
return result;
|
|
573
|
+
}
|
|
574
|
+
function isWithin(root, candidate) {
|
|
575
|
+
const path = relative(resolve(root), resolve(candidate));
|
|
576
|
+
return path === "" || (!path.startsWith(`..${sep}`) && path !== "..");
|
|
577
|
+
}
|
|
578
|
+
function digest(value) {
|
|
579
|
+
return createHash("sha256").update(value).digest("hex");
|
|
580
|
+
}
|
|
581
|
+
function isTransientError(error) {
|
|
582
|
+
return error instanceof Error &&
|
|
583
|
+
"code" in error &&
|
|
584
|
+
["ENOENT", "EACCES", "EPERM", "ENOTDIR", "EBUSY", "ESTALE"].includes(String(error.code));
|
|
585
|
+
}
|
|
586
|
+
//# sourceMappingURL=json-document-source.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json-document-source.js","sourceRoot":"","sources":["../../../src/activity/json-document-source.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"native-capabilities.d.ts","sourceRoot":"","sources":["../../../src/activity/native-capabilities.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,gBAAgB,GAAG,QAAQ,CAAC;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC,CAAC;AAEH,MAAM,MAAM,sBAAsB,GAAG,QAAQ,CAAC;IAC5C,YAAY,EAAE,OAAO,CAAC;IACtB,YAAY,EAAE,SAAS,gBAAgB,EAAE,CAAC;CAC3C,CAAC,CAAC;AAQH,KAAK,cAAc,GAAG,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;AAE9D,wBAAsB,2BAA2B,CAC/C,SAAS,EAAE,SAAS,MAAM,EAAE,EAC5B,QAAQ,GAAE,cAAgC,GACzC,OAAO,CAAC,sBAAsB,CAAC,
|
|
1
|
+
{"version":3,"file":"native-capabilities.d.ts","sourceRoot":"","sources":["../../../src/activity/native-capabilities.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,gBAAgB,GAAG,QAAQ,CAAC;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC,CAAC;AAEH,MAAM,MAAM,sBAAsB,GAAG,QAAQ,CAAC;IAC5C,YAAY,EAAE,OAAO,CAAC;IACtB,YAAY,EAAE,SAAS,gBAAgB,EAAE,CAAC;CAC3C,CAAC,CAAC;AAQH,KAAK,cAAc,GAAG,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;AAE9D,wBAAsB,2BAA2B,CAC/C,SAAS,EAAE,SAAS,MAAM,EAAE,EAC5B,QAAQ,GAAE,cAAgC,GACzC,OAAO,CAAC,sBAAsB,CAAC,CA2BjC"}
|
|
@@ -2,24 +2,20 @@ export async function negotiateNativeCapabilities(requested, importer = defaultI
|
|
|
2
2
|
const bounded = requested
|
|
3
3
|
.slice(0, 64)
|
|
4
4
|
.map((name) => normalizeName(name));
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
const loaded = await importer(specifier);
|
|
11
|
-
const module = nativeModule(loaded);
|
|
12
|
-
if (module === null)
|
|
13
|
-
continue;
|
|
5
|
+
// Only by package name: the observer is published on its own, and a
|
|
6
|
+
// development checkout links the package in (see verify-adapters).
|
|
7
|
+
try {
|
|
8
|
+
const module = nativeModule(await importer("@phigon/native"));
|
|
9
|
+
if (module !== null) {
|
|
14
10
|
const capabilities = module
|
|
15
11
|
.negotiateCapabilities(bounded)
|
|
16
12
|
.slice(0, 64)
|
|
17
13
|
.map(validateCapability);
|
|
18
14
|
return { nativeLoaded: true, capabilities };
|
|
19
15
|
}
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
16
|
+
}
|
|
17
|
+
catch {
|
|
18
|
+
// Not installed, or not built for this platform.
|
|
23
19
|
}
|
|
24
20
|
return {
|
|
25
21
|
nativeLoaded: false,
|