@fml-inc/fml 0.8.10 → 0.8.11-rc.1
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/.claude-plugin/plugin.json +1 -1
- package/dist/{chunk-WE7MAWAW.js → chunk-4YLCUJ6C.js} +4 -3
- package/dist/{chunk-XB7EIDWY.js → chunk-5VP4C72Z.js} +8 -2
- package/dist/{chunk-U4BM27VN.js → chunk-B46WIVL7.js} +1 -1
- package/dist/chunk-CSOFP7MT.js +67 -0
- package/dist/{chunk-7V7G7NVF.js → chunk-EX5J3MPG.js} +2 -2
- package/dist/{chunk-GDOXY4W2.js → chunk-IUFDFBU7.js} +1 -1
- package/dist/{chunk-OUXFHL3I.js → chunk-JK5JGPUN.js} +2 -2
- package/dist/{chunk-PTDADW47.js → chunk-VFZWTVPD.js} +61 -79
- package/dist/cli.js +9 -9
- package/dist/hook-handler.js +4 -4
- package/dist/mcp/server.js +2 -2
- package/dist/observer-server.js +8 -8
- package/dist/pi/extension.js +13720 -393
- package/dist/sync-cycle.js +3 -3
- package/package.json +2 -2
- package/dist/chunk-F57IFY3K.js +0 -21
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
resolveRepoFromCwdAsync
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-EX5J3MPG.js";
|
|
4
4
|
import {
|
|
5
5
|
getActiveEnv,
|
|
6
6
|
getSiteUrlForConvexUrl,
|
|
@@ -373,8 +373,9 @@ async function prepareHookEvent(record, signal) {
|
|
|
373
373
|
return { record, repositoryInfo, ...bounded };
|
|
374
374
|
}
|
|
375
375
|
async function repositoryForRecord(record, signal) {
|
|
376
|
-
if (record.
|
|
377
|
-
|
|
376
|
+
if (record.target === "pi" && !record.repository) return null;
|
|
377
|
+
const liveRepository = record.cwd ? await abortable(resolveRepoFromCwdAsync(record.cwd, signal), signal) : null;
|
|
378
|
+
return record.repository ? { repo: record.repository, branch: liveRepository?.branch ?? null } : liveRepository;
|
|
378
379
|
}
|
|
379
380
|
function hookSessionRow(events) {
|
|
380
381
|
const records = events.map((event) => event.record);
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
import {
|
|
2
|
+
canonicalGitHubRepository
|
|
3
|
+
} from "./chunk-CSOFP7MT.js";
|
|
1
4
|
import {
|
|
2
5
|
FML_HOOK_INBOX_DIR,
|
|
3
6
|
FML_OBSERVER_LOCK_FILE,
|
|
@@ -623,10 +626,12 @@ var HOOK_NORMALIZATION_CAPABILITIES = Object.freeze([
|
|
|
623
626
|
function parseHookCaptureRequest(value) {
|
|
624
627
|
if (!isRecord(value) || !isHookTarget(value.target)) return null;
|
|
625
628
|
if (!isRecord(value.payload)) return null;
|
|
629
|
+
const repository = typeof value.repository === "string" && /^[A-Za-z0-9_.-]+\/[A-Za-z0-9_.-]+$/u.test(value.repository) ? canonicalGitHubRepository(`https://github.com/${value.repository}`) : null;
|
|
626
630
|
return {
|
|
627
631
|
target: value.target,
|
|
628
632
|
payload: value.payload,
|
|
629
|
-
...typeof value.cwd === "string" && value.cwd.length > 0 ? { cwd: value.cwd } : {}
|
|
633
|
+
...typeof value.cwd === "string" && value.cwd.length > 0 ? { cwd: value.cwd } : {},
|
|
634
|
+
...repository ? { repository } : {}
|
|
630
635
|
};
|
|
631
636
|
}
|
|
632
637
|
function normalizeTargetHookCapture(request, context) {
|
|
@@ -653,6 +658,7 @@ function normalizeObserverHookCapture(request, options = {}) {
|
|
|
653
658
|
cwd: request.cwd
|
|
654
659
|
});
|
|
655
660
|
if (!normalized) return null;
|
|
661
|
+
const repository = options.repository ?? request.repository;
|
|
656
662
|
return {
|
|
657
663
|
syncId: options.syncId?.() ?? hookSyncId(
|
|
658
664
|
request,
|
|
@@ -666,7 +672,7 @@ function normalizeObserverHookCapture(request, options = {}) {
|
|
|
666
672
|
target: request.target,
|
|
667
673
|
payload: request.payload,
|
|
668
674
|
...normalized.cwd ? { cwd: normalized.cwd } : {},
|
|
669
|
-
...
|
|
675
|
+
...repository ? { repository } : {},
|
|
670
676
|
...normalized.toolName ? { toolName: normalized.toolName } : {},
|
|
671
677
|
...normalized.userPrompt ? { userPrompt: normalized.userPrompt } : {},
|
|
672
678
|
...normalized.filePath ? { filePath: normalized.filePath } : {},
|
|
@@ -53,7 +53,7 @@ var PACKAGE_NAME = "@fml-inc/fml";
|
|
|
53
53
|
var UPDATE_TIMEOUT_MS = 12e4;
|
|
54
54
|
var SETUP_TIMEOUT_MS = 3e5;
|
|
55
55
|
function getCurrentVersion() {
|
|
56
|
-
return true ? "0.8.
|
|
56
|
+
return true ? "0.8.11-rc.1+80d59e99" : "unknown";
|
|
57
57
|
}
|
|
58
58
|
function parseVersion(version) {
|
|
59
59
|
const match = SEMVER_PATTERN.exec(version);
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
// ../../packages/shared/src/github-repository.ts
|
|
2
|
+
var MAX_REPOSITORY_BYTES = 201;
|
|
3
|
+
var UTF8_ENCODER = new TextEncoder();
|
|
4
|
+
function utf8Bytes(value) {
|
|
5
|
+
return UTF8_ENCODER.encode(value).byteLength;
|
|
6
|
+
}
|
|
7
|
+
function githubRepositoryPath(pathname) {
|
|
8
|
+
const parts = pathname.replace(/^\/+|\/+$/g, "").split("/");
|
|
9
|
+
if (parts.length !== 2) return null;
|
|
10
|
+
const owner = parts[0];
|
|
11
|
+
const repository = parts[1]?.replace(/\.git$/i, "");
|
|
12
|
+
if (!owner || !repository) return null;
|
|
13
|
+
const segmentPattern = /^[A-Za-z0-9_.-]+$/;
|
|
14
|
+
if (!segmentPattern.test(owner) || !segmentPattern.test(repository)) {
|
|
15
|
+
return null;
|
|
16
|
+
}
|
|
17
|
+
const canonical = `${owner.toLowerCase()}/${repository.toLowerCase()}`;
|
|
18
|
+
if (canonical.startsWith("./") || canonical.startsWith("../") || repository === "." || repository === ".." || repository.toLowerCase().endsWith(".git")) {
|
|
19
|
+
return null;
|
|
20
|
+
}
|
|
21
|
+
return utf8Bytes(canonical) <= MAX_REPOSITORY_BYTES ? canonical : null;
|
|
22
|
+
}
|
|
23
|
+
function canonicalGitHubRepository(remote) {
|
|
24
|
+
const trimmed = remote.trim();
|
|
25
|
+
if (!trimmed || trimmed.includes("\0")) return null;
|
|
26
|
+
const scp = trimmed.match(/^git@github\.com:([^?#]+)$/i);
|
|
27
|
+
if (scp?.[1]) return githubRepositoryPath(scp[1]);
|
|
28
|
+
let url;
|
|
29
|
+
try {
|
|
30
|
+
url = new URL(trimmed);
|
|
31
|
+
} catch {
|
|
32
|
+
return null;
|
|
33
|
+
}
|
|
34
|
+
if (url.hostname.toLowerCase() !== "github.com") return null;
|
|
35
|
+
if (url.search || url.hash || url.password || url.port) return null;
|
|
36
|
+
if (url.protocol === "https:" || url.protocol === "http:") {
|
|
37
|
+
if (url.username) return null;
|
|
38
|
+
} else if (url.protocol === "ssh:") {
|
|
39
|
+
if (url.username && url.username !== "git") return null;
|
|
40
|
+
} else {
|
|
41
|
+
return null;
|
|
42
|
+
}
|
|
43
|
+
return githubRepositoryPath(url.pathname);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
// src/package-root.ts
|
|
47
|
+
import fs from "fs";
|
|
48
|
+
import path from "path";
|
|
49
|
+
import { fileURLToPath } from "url";
|
|
50
|
+
function resolvePackageRoot(startDir = path.dirname(fileURLToPath(import.meta.url))) {
|
|
51
|
+
let directory = startDir;
|
|
52
|
+
while (true) {
|
|
53
|
+
if (fs.existsSync(path.join(directory, "package.json")) && fs.existsSync(path.join(directory, "bin"))) {
|
|
54
|
+
return directory;
|
|
55
|
+
}
|
|
56
|
+
const parent = path.dirname(directory);
|
|
57
|
+
if (parent === directory) {
|
|
58
|
+
throw new Error(`Could not resolve FML package root from ${startDir}`);
|
|
59
|
+
}
|
|
60
|
+
directory = parent;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
export {
|
|
65
|
+
canonicalGitHubRepository,
|
|
66
|
+
resolvePackageRoot
|
|
67
|
+
};
|
|
@@ -72,11 +72,11 @@ function gitAsync(cwd, args, signal) {
|
|
|
72
72
|
}
|
|
73
73
|
function repositorySlug(remote) {
|
|
74
74
|
const ssh = remote.match(/^[^@]+@[^:]+:([^/]+\/[^/]+?)(?:\.git)?$/);
|
|
75
|
-
if (ssh?.[1]) return ssh[1];
|
|
75
|
+
if (ssh?.[1]) return ssh[1].toLowerCase();
|
|
76
76
|
try {
|
|
77
77
|
const url = new URL(remote);
|
|
78
78
|
const slug = url.pathname.replace(/^\/+|\/+$/g, "").replace(/\.git$/, "");
|
|
79
|
-
return /^[A-Za-z0-9_.-]+\/[A-Za-z0-9_.-]+$/.test(slug) ? slug : null;
|
|
79
|
+
return /^[A-Za-z0-9_.-]+\/[A-Za-z0-9_.-]+$/.test(slug) ? slug.toLowerCase() : null;
|
|
80
80
|
} catch {
|
|
81
81
|
return null;
|
|
82
82
|
}
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
import {
|
|
2
|
+
canonicalGitHubRepository
|
|
3
|
+
} from "./chunk-CSOFP7MT.js";
|
|
1
4
|
import {
|
|
2
5
|
FML_INSTALLATION_ID_FILE,
|
|
3
6
|
FML_OBSERVER_DIR,
|
|
@@ -326,65 +329,18 @@ function readClaudeMachineId(configFile) {
|
|
|
326
329
|
// ../../packages/agent-targets/src/artifacts/repository-context.ts
|
|
327
330
|
import { createHash as createHash2 } from "crypto";
|
|
328
331
|
import fs5 from "fs";
|
|
329
|
-
|
|
330
|
-
// ../../packages/shared/src/github-repository.ts
|
|
331
|
-
var MAX_REPOSITORY_BYTES = 201;
|
|
332
|
-
var UTF8_ENCODER = new TextEncoder();
|
|
333
|
-
function utf8Bytes(value) {
|
|
334
|
-
return UTF8_ENCODER.encode(value).byteLength;
|
|
335
|
-
}
|
|
336
|
-
function githubRepositoryPath(pathname) {
|
|
337
|
-
const parts = pathname.replace(/^\/+|\/+$/g, "").split("/");
|
|
338
|
-
if (parts.length !== 2) return null;
|
|
339
|
-
const owner = parts[0];
|
|
340
|
-
const repository = parts[1]?.replace(/\.git$/i, "");
|
|
341
|
-
if (!owner || !repository) return null;
|
|
342
|
-
const segmentPattern = /^[A-Za-z0-9_.-]+$/;
|
|
343
|
-
if (!segmentPattern.test(owner) || !segmentPattern.test(repository)) {
|
|
344
|
-
return null;
|
|
345
|
-
}
|
|
346
|
-
const canonical = `${owner.toLowerCase()}/${repository.toLowerCase()}`;
|
|
347
|
-
if (canonical.startsWith("./") || canonical.startsWith("../") || repository === "." || repository === ".." || repository.toLowerCase().endsWith(".git")) {
|
|
348
|
-
return null;
|
|
349
|
-
}
|
|
350
|
-
return utf8Bytes(canonical) <= MAX_REPOSITORY_BYTES ? canonical : null;
|
|
351
|
-
}
|
|
352
|
-
function canonicalGitHubRepository(remote) {
|
|
353
|
-
const trimmed = remote.trim();
|
|
354
|
-
if (!trimmed || trimmed.includes("\0")) return null;
|
|
355
|
-
const scp = trimmed.match(/^git@github\.com:([^?#]+)$/i);
|
|
356
|
-
if (scp?.[1]) return githubRepositoryPath(scp[1]);
|
|
357
|
-
let url;
|
|
358
|
-
try {
|
|
359
|
-
url = new URL(trimmed);
|
|
360
|
-
} catch {
|
|
361
|
-
return null;
|
|
362
|
-
}
|
|
363
|
-
if (url.hostname.toLowerCase() !== "github.com") return null;
|
|
364
|
-
if (url.search || url.hash || url.password || url.port) return null;
|
|
365
|
-
if (url.protocol === "https:" || url.protocol === "http:") {
|
|
366
|
-
if (url.username) return null;
|
|
367
|
-
} else if (url.protocol === "ssh:") {
|
|
368
|
-
if (url.username && url.username !== "git") return null;
|
|
369
|
-
} else {
|
|
370
|
-
return null;
|
|
371
|
-
}
|
|
372
|
-
return githubRepositoryPath(url.pathname);
|
|
373
|
-
}
|
|
374
|
-
|
|
375
|
-
// ../../packages/agent-targets/src/artifacts/repository-context.ts
|
|
376
332
|
var MAX_ARTIFACT_CONTEXT_PREFIX_BYTES = 256 * 1024;
|
|
377
333
|
var MAX_ARTIFACT_CONTEXT_RECORDS = 64;
|
|
378
334
|
var ARTIFACT_CONTEXT_READ_CHUNK_BYTES = 32 * 1024;
|
|
379
335
|
var MAX_CWD_BYTES = 4096;
|
|
380
336
|
var MAX_BRANCH_BYTES = 1024;
|
|
381
|
-
function
|
|
337
|
+
function utf8Bytes(value) {
|
|
382
338
|
return Buffer.byteLength(value, "utf8");
|
|
383
339
|
}
|
|
384
340
|
function boundedOptionalString(value, maxBytes) {
|
|
385
341
|
if (typeof value !== "string") return void 0;
|
|
386
342
|
const trimmed = value.trim();
|
|
387
|
-
if (!trimmed || new RegExp("\\p{Cc}", "u").test(trimmed) ||
|
|
343
|
+
if (!trimmed || new RegExp("\\p{Cc}", "u").test(trimmed) || utf8Bytes(trimmed) > maxBytes) {
|
|
388
344
|
return void 0;
|
|
389
345
|
}
|
|
390
346
|
return trimmed;
|
|
@@ -849,37 +805,63 @@ var miniSweAgentArtifactDiscovery = Object.freeze({
|
|
|
849
805
|
|
|
850
806
|
// ../../packages/agent-targets/src/artifacts/targets/pi.ts
|
|
851
807
|
import path16 from "path";
|
|
852
|
-
|
|
853
|
-
|
|
854
|
-
|
|
855
|
-
|
|
856
|
-
|
|
857
|
-
|
|
858
|
-
|
|
859
|
-
|
|
860
|
-
|
|
861
|
-
|
|
862
|
-
|
|
863
|
-
|
|
808
|
+
|
|
809
|
+
// ../../packages/agent-targets/src/artifacts/pi-repository-origin.ts
|
|
810
|
+
import { z } from "zod";
|
|
811
|
+
var PI_REPOSITORY_ORIGIN_ENTRY_TYPE = "fml-repository-origin";
|
|
812
|
+
var RepositorySlugSchema = z.string().regex(/^[A-Za-z0-9_.-]+\/[A-Za-z0-9_.-]+$/u).transform((slug) => canonicalGitHubRepository(`https://github.com/${slug}`)).pipe(z.string());
|
|
813
|
+
var PiRepositoryOriginDataSchema = z.object({
|
|
814
|
+
version: z.literal(1),
|
|
815
|
+
repository: RepositorySlugSchema.nullable(),
|
|
816
|
+
cwd: z.string().min(1).refine(
|
|
817
|
+
(cwd) => cwd.trim().length > 0 && !new RegExp("\\p{Cc}", "u").test(cwd) && Buffer.byteLength(cwd, "utf8") <= 4096
|
|
818
|
+
)
|
|
819
|
+
});
|
|
820
|
+
var NativeOriginMarkerSchema = z.object({
|
|
821
|
+
customType: z.literal(PI_REPOSITORY_ORIGIN_ENTRY_TYPE)
|
|
822
|
+
});
|
|
823
|
+
var NativeOriginEntrySchema = z.object({
|
|
824
|
+
type: z.literal("custom"),
|
|
825
|
+
customType: z.literal(PI_REPOSITORY_ORIGIN_ENTRY_TYPE),
|
|
826
|
+
timestamp: z.iso.datetime({ offset: true }).transform((value) => Date.parse(value)).pipe(z.number().int().nonnegative()),
|
|
827
|
+
data: PiRepositoryOriginDataSchema
|
|
828
|
+
});
|
|
829
|
+
function readPiRepositoryOrigin(entries) {
|
|
830
|
+
let snapshot;
|
|
831
|
+
for (const entry of entries) {
|
|
832
|
+
if (!NativeOriginMarkerSchema.safeParse(entry).success) continue;
|
|
833
|
+
const parsed = NativeOriginEntrySchema.safeParse(entry);
|
|
834
|
+
if (!parsed.success) return { status: "invalid" };
|
|
835
|
+
const next = { ...parsed.data.data, observedAtMs: parsed.data.timestamp };
|
|
836
|
+
if (snapshot && (snapshot.repository !== next.repository || snapshot.cwd !== next.cwd || snapshot.observedAtMs !== next.observedAtMs)) {
|
|
837
|
+
return { status: "invalid" };
|
|
864
838
|
}
|
|
865
|
-
|
|
866
|
-
return transcriptCandidate({
|
|
867
|
-
targetId: "pi",
|
|
868
|
-
sourcePath,
|
|
869
|
-
sessionId,
|
|
870
|
-
repositoryObservations: origin ? [
|
|
871
|
-
repositoryObservation({
|
|
872
|
-
repository: origin.repository,
|
|
873
|
-
source: "git_origin",
|
|
874
|
-
observedAtMs: fallbackObservedAtMs,
|
|
875
|
-
cwd: record.cwd,
|
|
876
|
-
branch: origin.branch,
|
|
877
|
-
commitHash: origin.commitHash
|
|
878
|
-
})
|
|
879
|
-
] : []
|
|
880
|
-
});
|
|
839
|
+
snapshot = next;
|
|
881
840
|
}
|
|
882
|
-
return
|
|
841
|
+
return snapshot ? { status: "captured", snapshot } : { status: "absent" };
|
|
842
|
+
}
|
|
843
|
+
|
|
844
|
+
// ../../packages/agent-targets/src/artifacts/targets/pi.ts
|
|
845
|
+
var PI_SKIP_DIRS = /* @__PURE__ */ new Set(["subagent-artifacts"]);
|
|
846
|
+
function piTranscriptCandidate(sourcePath) {
|
|
847
|
+
const records = readJsonlContextRecords(sourcePath);
|
|
848
|
+
const header = records.find((record) => record.type === "session");
|
|
849
|
+
const sessionId = typeof header?.id === "string" && header.id.trim() ? header.id.trim() : null;
|
|
850
|
+
const evidence = readPiRepositoryOrigin(records);
|
|
851
|
+
const snapshot = evidence.status === "captured" ? evidence.snapshot : null;
|
|
852
|
+
return transcriptCandidate({
|
|
853
|
+
targetId: "pi",
|
|
854
|
+
sourcePath,
|
|
855
|
+
sessionId,
|
|
856
|
+
repositoryObservations: snapshot?.repository ? [
|
|
857
|
+
repositoryObservation({
|
|
858
|
+
repository: snapshot.repository,
|
|
859
|
+
source: "git_origin",
|
|
860
|
+
observedAtMs: snapshot.observedAtMs,
|
|
861
|
+
cwd: snapshot.cwd
|
|
862
|
+
})
|
|
863
|
+
] : []
|
|
864
|
+
});
|
|
883
865
|
}
|
|
884
866
|
var piArtifactDiscovery = Object.freeze({
|
|
885
867
|
targetId: "pi",
|
|
@@ -890,7 +872,7 @@ var piArtifactDiscovery = Object.freeze({
|
|
|
890
872
|
maxDepth: 8,
|
|
891
873
|
includeFile: (filePath) => filePath.endsWith(".jsonl"),
|
|
892
874
|
skipDirs: PI_SKIP_DIRS
|
|
893
|
-
}).map((sourcePath) => piTranscriptCandidate(sourcePath
|
|
875
|
+
}).map((sourcePath) => piTranscriptCandidate(sourcePath));
|
|
894
876
|
}
|
|
895
877
|
});
|
|
896
878
|
|
package/dist/cli.js
CHANGED
|
@@ -2,12 +2,12 @@
|
|
|
2
2
|
import {
|
|
3
3
|
createFmlClient,
|
|
4
4
|
getAuthenticatedClient
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-IUFDFBU7.js";
|
|
6
6
|
import {
|
|
7
7
|
execBinSync,
|
|
8
8
|
handleUpdate,
|
|
9
9
|
resolveBin
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-B46WIVL7.js";
|
|
11
11
|
import {
|
|
12
12
|
openObserverLog,
|
|
13
13
|
readJsonFile,
|
|
@@ -29,8 +29,8 @@ import {
|
|
|
29
29
|
readObserverAuthToken,
|
|
30
30
|
readObserverStateStatus,
|
|
31
31
|
removeObserverStateIfOwned
|
|
32
|
-
} from "./chunk-
|
|
33
|
-
import "./chunk-
|
|
32
|
+
} from "./chunk-5VP4C72Z.js";
|
|
33
|
+
import "./chunk-EX5J3MPG.js";
|
|
34
34
|
import {
|
|
35
35
|
claudeConfigDirectory,
|
|
36
36
|
createCliRawSync,
|
|
@@ -38,10 +38,10 @@ import {
|
|
|
38
38
|
geminiConfigDirectory,
|
|
39
39
|
initializeSyncSettings,
|
|
40
40
|
runRawSyncOnce
|
|
41
|
-
} from "./chunk-
|
|
41
|
+
} from "./chunk-VFZWTVPD.js";
|
|
42
42
|
import {
|
|
43
43
|
resolvePackageRoot
|
|
44
|
-
} from "./chunk-
|
|
44
|
+
} from "./chunk-CSOFP7MT.js";
|
|
45
45
|
import {
|
|
46
46
|
DEFAULT_PROD_URL,
|
|
47
47
|
DEFAULT_TARGET_NAME,
|
|
@@ -132,7 +132,7 @@ var STOP_TIMEOUT_MS = 5e3;
|
|
|
132
132
|
var FORCE_STOP_TIMEOUT_MS = 2e3;
|
|
133
133
|
var POLL_INTERVAL_MS = 50;
|
|
134
134
|
function expectedObserverVersion() {
|
|
135
|
-
return true ? "0.8.
|
|
135
|
+
return true ? "0.8.11-rc.1+80d59e99" : "dev";
|
|
136
136
|
}
|
|
137
137
|
function delay(ms) {
|
|
138
138
|
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
@@ -9725,7 +9725,7 @@ async function handleConfigDetail(opts) {
|
|
|
9725
9725
|
// src/commands/tools.ts
|
|
9726
9726
|
import { readFileSync } from "fs";
|
|
9727
9727
|
import path31 from "path";
|
|
9728
|
-
var pluginVersion = true ? "0.8.
|
|
9728
|
+
var pluginVersion = true ? "0.8.11-rc.1+80d59e99" : void 0;
|
|
9729
9729
|
async function getApi() {
|
|
9730
9730
|
const api = await getAuthenticatedClient();
|
|
9731
9731
|
if (!api) {
|
|
@@ -9882,7 +9882,7 @@ if (process.argv.length <= 2 || process.argv.includes("--help") || process.argv.
|
|
|
9882
9882
|
printBanner();
|
|
9883
9883
|
}
|
|
9884
9884
|
var program = new Command().name("fml").description("FML CLI and agent tools").version(
|
|
9885
|
-
true ? "0.8.
|
|
9885
|
+
true ? "0.8.11-rc.1+80d59e99" : "dev"
|
|
9886
9886
|
);
|
|
9887
9887
|
function formatCommandInventory(cmd, prefix = "") {
|
|
9888
9888
|
const name = prefix ? `${prefix} ${cmd.name()}` : cmd.name();
|
package/dist/hook-handler.js
CHANGED
|
@@ -5,7 +5,7 @@ import {
|
|
|
5
5
|
} from "./chunk-2ZCXGYI5.js";
|
|
6
6
|
import {
|
|
7
7
|
getActiveHookDestinationBinding
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-4YLCUJ6C.js";
|
|
9
9
|
import {
|
|
10
10
|
HookInboxCapacityError,
|
|
11
11
|
OBSERVER_HEARTBEAT_STALE_MS,
|
|
@@ -19,14 +19,14 @@ import {
|
|
|
19
19
|
readObserverAuthToken,
|
|
20
20
|
readObserverState,
|
|
21
21
|
recordHookInboxLoss
|
|
22
|
-
} from "./chunk-
|
|
22
|
+
} from "./chunk-5VP4C72Z.js";
|
|
23
23
|
import {
|
|
24
24
|
resolveRepositoryRootFromCwd,
|
|
25
25
|
resolveRepositorySlugFromCwd
|
|
26
|
-
} from "./chunk-
|
|
26
|
+
} from "./chunk-EX5J3MPG.js";
|
|
27
27
|
import {
|
|
28
28
|
resolvePackageRoot
|
|
29
|
-
} from "./chunk-
|
|
29
|
+
} from "./chunk-CSOFP7MT.js";
|
|
30
30
|
import {
|
|
31
31
|
FML_HOOK_CONTEXT_STATE_DIR,
|
|
32
32
|
FML_HOOK_INBOX_DIR,
|
package/dist/mcp/server.js
CHANGED
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
import {
|
|
3
3
|
createFmlClient,
|
|
4
4
|
getAuthenticatedClient
|
|
5
|
-
} from "../chunk-
|
|
5
|
+
} from "../chunk-IUFDFBU7.js";
|
|
6
6
|
import {
|
|
7
7
|
resolveRepoFromCwd
|
|
8
|
-
} from "../chunk-
|
|
8
|
+
} from "../chunk-EX5J3MPG.js";
|
|
9
9
|
import {
|
|
10
10
|
FML_DATA_DIR,
|
|
11
11
|
FML_LOG_DIR,
|
package/dist/observer-server.js
CHANGED
|
@@ -5,11 +5,11 @@ import {
|
|
|
5
5
|
isWinShim,
|
|
6
6
|
quoteWinArg,
|
|
7
7
|
resolveBin
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-B46WIVL7.js";
|
|
9
9
|
import {
|
|
10
10
|
createHookSyncLoop,
|
|
11
11
|
getActiveHookDestinationBinding
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-4YLCUJ6C.js";
|
|
13
13
|
import {
|
|
14
14
|
OBSERVER_PROTOCOL_VERSION,
|
|
15
15
|
OBSERVER_SERVICE_NAME,
|
|
@@ -30,17 +30,17 @@ import {
|
|
|
30
30
|
removeObserverStateIfOwned,
|
|
31
31
|
retireHookInboxEntry,
|
|
32
32
|
updateObserverState
|
|
33
|
-
} from "./chunk-
|
|
34
|
-
import "./chunk-
|
|
33
|
+
} from "./chunk-5VP4C72Z.js";
|
|
34
|
+
import "./chunk-EX5J3MPG.js";
|
|
35
35
|
import {
|
|
36
36
|
ObserverSyncCycleAbortedError,
|
|
37
37
|
runObserverSyncCycleSubprocess
|
|
38
|
-
} from "./chunk-
|
|
38
|
+
} from "./chunk-JK5JGPUN.js";
|
|
39
39
|
import {
|
|
40
40
|
createCliRawSync,
|
|
41
41
|
invalidateCliRawSyncDiscoveryCache
|
|
42
|
-
} from "./chunk-
|
|
43
|
-
import "./chunk-
|
|
42
|
+
} from "./chunk-VFZWTVPD.js";
|
|
43
|
+
import "./chunk-CSOFP7MT.js";
|
|
44
44
|
import {
|
|
45
45
|
FML_OBSERVER_AUTH_TOKEN_FILE,
|
|
46
46
|
FML_OBSERVER_ENDPOINT_FILE,
|
|
@@ -1563,7 +1563,7 @@ var hookRejectionStatus = () => ({
|
|
|
1563
1563
|
...lastRejectedReason !== void 0 ? { lastRejectedReason } : {},
|
|
1564
1564
|
...lastRejectedTarget !== void 0 ? { lastRejectedTarget } : {}
|
|
1565
1565
|
});
|
|
1566
|
-
var packageVersion = true ? "0.8.
|
|
1566
|
+
var packageVersion = true ? "0.8.11-rc.1+80d59e99" : "dev";
|
|
1567
1567
|
var health = () => ({
|
|
1568
1568
|
status: "ok",
|
|
1569
1569
|
service: OBSERVER_SERVICE_NAME,
|