@fml-inc/fml 0.8.1 → 0.8.2-rc.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/.claude-plugin/plugin.json +1 -1
- package/README.md +3 -2
- package/dist/{chunk-R45CWWZO.js → chunk-26RJC76L.js} +2 -2
- package/dist/{chunk-7DWFJENY.js → chunk-3WDAKM5B.js} +2 -2
- package/dist/{chunk-DZKYW327.js → chunk-E6YIJCIE.js} +1 -1
- package/dist/{chunk-KBT5RMAU.js → chunk-F4A2POJX.js} +1 -1
- package/dist/{chunk-3KISRT57.js → chunk-IZH4MDS4.js} +1 -1
- package/dist/{chunk-A6HAEVJX.js → chunk-TNJVAET3.js} +5 -0
- package/dist/{chunk-YSU5CS2V.js → chunk-UGUYQVUW.js} +1 -1
- package/dist/{chunk-ENW2GJNO.js → chunk-UZG65JUB.js} +1 -1
- package/dist/cli.js +132 -24
- package/dist/hook-handler.js +11 -4
- package/dist/mcp/server.js +2 -2
- package/dist/observer-server.js +7 -7
- package/dist/sync-cycle.js +3 -3
- package/dist/{token-store-BT5THIAJ.js → token-store-7OI3CMM4.js} +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -25,8 +25,9 @@ npm install --global @fml-inc/fml
|
|
|
25
25
|
fml setup
|
|
26
26
|
```
|
|
27
27
|
|
|
28
|
-
Run `fml update` to
|
|
29
|
-
|
|
28
|
+
Run `fml update` to check for and install a newer global package with npm. It
|
|
29
|
+
reports the version installed and refreshes FML setup automatically. Stable
|
|
30
|
+
releases stay on npm's `latest` channel; prerelease versions stay on `next`.
|
|
30
31
|
|
|
31
32
|
Installing the package does not change agent configuration. Run `fml install`
|
|
32
33
|
to register the FML Claude Code plugin, install the agent-native FML skill,
|
|
@@ -7,7 +7,7 @@ import {
|
|
|
7
7
|
getSelectedOrg,
|
|
8
8
|
getSiteUrlForConvexUrl,
|
|
9
9
|
getValidToken
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-TNJVAET3.js";
|
|
11
11
|
|
|
12
12
|
// src/fml-client.ts
|
|
13
13
|
var LOGIN_EXPIRED_MESSAGE = "Authentication expired. Run `fml login` to sign in again, then restart Claude Code.";
|
|
@@ -79,7 +79,7 @@ function createFmlClient(token, options = {}) {
|
|
|
79
79
|
const repo = resolveRepoFromCwd(process.cwd());
|
|
80
80
|
if (repo) body.repo = repo.repo;
|
|
81
81
|
if (isServiceToken) {
|
|
82
|
-
const { readTokens, SERVICE_TOKEN_LOGIN_USER_ID } = await import("./token-store-
|
|
82
|
+
const { readTokens, SERVICE_TOKEN_LOGIN_USER_ID } = await import("./token-store-7OI3CMM4.js");
|
|
83
83
|
const stored = readTokens(options.envName);
|
|
84
84
|
const storedUserExternalId = stored?.tokenType === "service" && stored.user.id !== SERVICE_TOKEN_LOGIN_USER_ID ? stored.user.id : void 0;
|
|
85
85
|
const userExternalId = process.env.FML_USER_EXTERNAL_ID ?? storedUserExternalId;
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import {
|
|
2
2
|
OBSERVER_SERVICE_NAME
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-F4A2POJX.js";
|
|
4
4
|
import {
|
|
5
5
|
FML_OBSERVER_LOCK_FILE,
|
|
6
6
|
FML_OBSERVER_PORT,
|
|
7
7
|
FML_OBSERVER_STATE_FILE
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-TNJVAET3.js";
|
|
9
9
|
|
|
10
10
|
// src/observer/state.ts
|
|
11
11
|
import { randomUUID } from "crypto";
|
|
@@ -317,6 +317,9 @@ function getSiteUrlForConvexUrl(convexUrl) {
|
|
|
317
317
|
var initialized = false;
|
|
318
318
|
var sentry = null;
|
|
319
319
|
var client = null;
|
|
320
|
+
function isSentryEnabled() {
|
|
321
|
+
return process.env.SENTRY_ENABLED === "true";
|
|
322
|
+
}
|
|
320
323
|
async function loadSentry() {
|
|
321
324
|
if (sentry) return sentry;
|
|
322
325
|
try {
|
|
@@ -329,10 +332,12 @@ async function loadSentry() {
|
|
|
329
332
|
async function initSentry() {
|
|
330
333
|
if (initialized) return;
|
|
331
334
|
initialized = true;
|
|
335
|
+
if (!isSentryEnabled()) return;
|
|
332
336
|
const mod = await loadSentry();
|
|
333
337
|
if (!mod) return;
|
|
334
338
|
client = new mod.ServerRuntimeClient({
|
|
335
339
|
dsn: "https://4c243521c03917c886d0bf33bc0038c8@o4510167429873664.ingest.us.sentry.io/4511078213156864",
|
|
340
|
+
environment: process.env.DEPLOYMENT_ENV ?? process.env.NODE_ENV ?? "production",
|
|
336
341
|
tracesSampleRate: 0,
|
|
337
342
|
integrations: [],
|
|
338
343
|
stackParser: mod.createStackParser(mod.nodeStackLineParser()),
|
package/dist/cli.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import {
|
|
3
3
|
createFmlClient,
|
|
4
4
|
getAuthenticatedClient
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-26RJC76L.js";
|
|
6
6
|
import {
|
|
7
7
|
OBSERVER_HEARTBEAT_STALE_MS,
|
|
8
8
|
getProcessIdentity,
|
|
@@ -10,13 +10,13 @@ import {
|
|
|
10
10
|
isPidAlive,
|
|
11
11
|
readObserverStateStatus,
|
|
12
12
|
removeObserverStateIfOwned
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-3WDAKM5B.js";
|
|
14
14
|
import {
|
|
15
15
|
readJsonFile,
|
|
16
16
|
setHookCaptureDisabled,
|
|
17
17
|
writeJsonFile,
|
|
18
18
|
writeTextFileAtomic
|
|
19
|
-
} from "./chunk-
|
|
19
|
+
} from "./chunk-UZG65JUB.js";
|
|
20
20
|
import {
|
|
21
21
|
CODEX_HOOK_EVENTS,
|
|
22
22
|
GEMINI_HOOK_EVENTS,
|
|
@@ -24,7 +24,7 @@ import {
|
|
|
24
24
|
isObserverHealth,
|
|
25
25
|
readHookInboxStatus,
|
|
26
26
|
readObserverAuthToken
|
|
27
|
-
} from "./chunk-
|
|
27
|
+
} from "./chunk-F4A2POJX.js";
|
|
28
28
|
import "./chunk-7V7G7NVF.js";
|
|
29
29
|
import {
|
|
30
30
|
claudeConfigDirectory,
|
|
@@ -34,7 +34,7 @@ import {
|
|
|
34
34
|
initializeSyncSettings,
|
|
35
35
|
resolvePackageRoot,
|
|
36
36
|
runRawSyncOnce
|
|
37
|
-
} from "./chunk-
|
|
37
|
+
} from "./chunk-UGUYQVUW.js";
|
|
38
38
|
import {
|
|
39
39
|
DEFAULT_PROD_URL,
|
|
40
40
|
DEFAULT_TARGET_NAME,
|
|
@@ -76,7 +76,7 @@ import {
|
|
|
76
76
|
storeServiceRefreshToken,
|
|
77
77
|
writeEnvConfig,
|
|
78
78
|
writeTokens
|
|
79
|
-
} from "./chunk-
|
|
79
|
+
} from "./chunk-TNJVAET3.js";
|
|
80
80
|
import "./chunk-MLKGABMK.js";
|
|
81
81
|
|
|
82
82
|
// src/cli.ts
|
|
@@ -124,7 +124,7 @@ var POLL_INTERVAL_MS = 50;
|
|
|
124
124
|
var LOG_ROTATE_BYTES = 10 * 1024 * 1024;
|
|
125
125
|
var LOG_ROTATE_FILES = 3;
|
|
126
126
|
function expectedObserverVersion() {
|
|
127
|
-
return true ? "0.8.
|
|
127
|
+
return true ? "0.8.2-rc.2+e2bf128f" : "dev";
|
|
128
128
|
}
|
|
129
129
|
function delay(ms) {
|
|
130
130
|
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
@@ -7370,7 +7370,7 @@ async function runInteractiveLogin(opts = {}) {
|
|
|
7370
7370
|
const envName = environment.envName;
|
|
7371
7371
|
const existingToken = await getValidToken({ env: envName });
|
|
7372
7372
|
if (existingToken) {
|
|
7373
|
-
const { readTokens: readTokens2 } = await import("./token-store-
|
|
7373
|
+
const { readTokens: readTokens2 } = await import("./token-store-7OI3CMM4.js");
|
|
7374
7374
|
const stored = readTokens2(envName);
|
|
7375
7375
|
if (stored?.tokenType === "service") {
|
|
7376
7376
|
const label = stored.user.id === SERVICE_TOKEN_LOGIN_USER_ID ? "a service token" : `${stored.user.name} (${stored.user.email})`;
|
|
@@ -7893,21 +7893,82 @@ async function handleUninstall(opts) {
|
|
|
7893
7893
|
}
|
|
7894
7894
|
|
|
7895
7895
|
// src/commands/update.ts
|
|
7896
|
-
var SEMVER_PATTERN = /^(
|
|
7896
|
+
var SEMVER_PATTERN = /^(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)(?:-((?:0|[1-9][0-9]*|[0-9A-Za-z-]*[A-Za-z-][0-9A-Za-z-]*)(?:\.(?:0|[1-9][0-9]*|[0-9A-Za-z-]*[A-Za-z-][0-9A-Za-z-]*))*))?(?:\+[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?$/;
|
|
7897
|
+
var PACKAGE_NAME = "@fml-inc/fml";
|
|
7898
|
+
var UPDATE_TIMEOUT_MS = 12e4;
|
|
7899
|
+
var SETUP_TIMEOUT_MS = 3e5;
|
|
7897
7900
|
function getCurrentVersion() {
|
|
7898
|
-
return true ? "0.8.
|
|
7901
|
+
return true ? "0.8.2-rc.2+e2bf128f" : "unknown";
|
|
7902
|
+
}
|
|
7903
|
+
function parseVersion(version) {
|
|
7904
|
+
const match = SEMVER_PATTERN.exec(version);
|
|
7905
|
+
if (!match) return null;
|
|
7906
|
+
return {
|
|
7907
|
+
major: match[1],
|
|
7908
|
+
minor: match[2],
|
|
7909
|
+
patch: match[3],
|
|
7910
|
+
prerelease: match[4]?.split(".") ?? []
|
|
7911
|
+
};
|
|
7912
|
+
}
|
|
7913
|
+
function compareNumericIdentifiers(left, right) {
|
|
7914
|
+
if (left.length !== right.length) return left.length - right.length;
|
|
7915
|
+
if (left === right) return 0;
|
|
7916
|
+
return left < right ? -1 : 1;
|
|
7917
|
+
}
|
|
7918
|
+
function compareIdentifiers(left, right) {
|
|
7919
|
+
const leftIsNumeric = /^[0-9]+$/u.test(left);
|
|
7920
|
+
const rightIsNumeric = /^[0-9]+$/u.test(right);
|
|
7921
|
+
if (leftIsNumeric && rightIsNumeric) {
|
|
7922
|
+
return compareNumericIdentifiers(left, right);
|
|
7923
|
+
}
|
|
7924
|
+
if (leftIsNumeric) return -1;
|
|
7925
|
+
if (rightIsNumeric) return 1;
|
|
7926
|
+
if (left === right) return 0;
|
|
7927
|
+
return left < right ? -1 : 1;
|
|
7928
|
+
}
|
|
7929
|
+
function compareVersions(left, right) {
|
|
7930
|
+
const leftVersion = parseVersion(left);
|
|
7931
|
+
const rightVersion = parseVersion(right);
|
|
7932
|
+
if (!leftVersion || !rightVersion) {
|
|
7933
|
+
throw new Error("FML update requires valid semantic versions.");
|
|
7934
|
+
}
|
|
7935
|
+
for (const part of ["major", "minor", "patch"]) {
|
|
7936
|
+
const difference = compareNumericIdentifiers(
|
|
7937
|
+
leftVersion[part],
|
|
7938
|
+
rightVersion[part]
|
|
7939
|
+
);
|
|
7940
|
+
if (difference) return difference;
|
|
7941
|
+
}
|
|
7942
|
+
if (!leftVersion.prerelease.length && !rightVersion.prerelease.length) {
|
|
7943
|
+
return 0;
|
|
7944
|
+
}
|
|
7945
|
+
if (!leftVersion.prerelease.length) return 1;
|
|
7946
|
+
if (!rightVersion.prerelease.length) return -1;
|
|
7947
|
+
const length = Math.max(
|
|
7948
|
+
leftVersion.prerelease.length,
|
|
7949
|
+
rightVersion.prerelease.length
|
|
7950
|
+
);
|
|
7951
|
+
for (let index = 0; index < length; index += 1) {
|
|
7952
|
+
const leftIdentifier = leftVersion.prerelease[index];
|
|
7953
|
+
const rightIdentifier = rightVersion.prerelease[index];
|
|
7954
|
+
if (leftIdentifier === void 0) return -1;
|
|
7955
|
+
if (rightIdentifier === void 0) return 1;
|
|
7956
|
+
const difference = compareIdentifiers(leftIdentifier, rightIdentifier);
|
|
7957
|
+
if (difference) return difference;
|
|
7958
|
+
}
|
|
7959
|
+
return 0;
|
|
7899
7960
|
}
|
|
7900
7961
|
function resolveUpdateChannel(version) {
|
|
7901
7962
|
const match = SEMVER_PATTERN.exec(version);
|
|
7902
7963
|
if (!match) return "latest";
|
|
7903
|
-
const prerelease = match[
|
|
7964
|
+
const prerelease = match[4];
|
|
7904
7965
|
if (!prerelease) return "latest";
|
|
7905
7966
|
return prerelease.split(".").every((identifier) => {
|
|
7906
7967
|
return !(identifier.length > 1 && identifier.startsWith("0") && /^[0-9]+$/u.test(identifier));
|
|
7907
7968
|
}) ? "next" : "latest";
|
|
7908
7969
|
}
|
|
7909
7970
|
function resolveUpdateTarget(version) {
|
|
7910
|
-
return
|
|
7971
|
+
return `${PACKAGE_NAME}@${resolveUpdateChannel(version)}`;
|
|
7911
7972
|
}
|
|
7912
7973
|
function createUpdateEnvironment(env) {
|
|
7913
7974
|
const updateEnv = { ...env };
|
|
@@ -7918,6 +7979,19 @@ function createUpdateEnvironment(env) {
|
|
|
7918
7979
|
}
|
|
7919
7980
|
return updateEnv;
|
|
7920
7981
|
}
|
|
7982
|
+
function parseAvailableVersion(output) {
|
|
7983
|
+
let response;
|
|
7984
|
+
try {
|
|
7985
|
+
response = JSON.parse(output);
|
|
7986
|
+
} catch {
|
|
7987
|
+
throw new Error("Could not read the available FML version from npm.");
|
|
7988
|
+
}
|
|
7989
|
+
const version = Array.isArray(response) && response.length === 1 ? response[0] : response;
|
|
7990
|
+
if (typeof version !== "string" || !parseVersion(version)) {
|
|
7991
|
+
throw new Error("Could not read the available FML version from npm.");
|
|
7992
|
+
}
|
|
7993
|
+
return version;
|
|
7994
|
+
}
|
|
7921
7995
|
function formatUpdateError(err) {
|
|
7922
7996
|
if (!(err instanceof Error)) return String(err);
|
|
7923
7997
|
const stderr = err.stderr;
|
|
@@ -7940,18 +8014,52 @@ async function handleUpdate(overrides = {}) {
|
|
|
7940
8014
|
const channel = resolveUpdateChannel(dependencies.currentVersion);
|
|
7941
8015
|
const target2 = resolveUpdateTarget(dependencies.currentVersion);
|
|
7942
8016
|
dependencies.log(`Current version: ${dependencies.currentVersion}`);
|
|
7943
|
-
dependencies.log(`Updating FML from the ${channel} channel...
|
|
7944
|
-
`);
|
|
7945
8017
|
try {
|
|
7946
8018
|
const npm = dependencies.resolveBin("npm");
|
|
7947
8019
|
if (!npm) throw new Error("npm was not found on PATH");
|
|
7948
|
-
|
|
7949
|
-
|
|
7950
|
-
|
|
7951
|
-
|
|
7952
|
-
|
|
7953
|
-
|
|
7954
|
-
|
|
8020
|
+
const updateEnv = createUpdateEnvironment(dependencies.env);
|
|
8021
|
+
const availableVersion = parseAvailableVersion(
|
|
8022
|
+
dependencies.execBinSync(npm, ["view", target2, "version", "--json"], {
|
|
8023
|
+
timeout: UPDATE_TIMEOUT_MS,
|
|
8024
|
+
env: updateEnv
|
|
8025
|
+
})
|
|
8026
|
+
);
|
|
8027
|
+
if (compareVersions(availableVersion, dependencies.currentVersion) <= 0) {
|
|
8028
|
+
dependencies.log(
|
|
8029
|
+
`FML is already up to date (${dependencies.currentVersion}).`
|
|
8030
|
+
);
|
|
8031
|
+
return;
|
|
8032
|
+
}
|
|
8033
|
+
dependencies.log(
|
|
8034
|
+
`Updating FML from ${dependencies.currentVersion} to ${availableVersion} on the ${channel} channel...
|
|
8035
|
+
`
|
|
8036
|
+
);
|
|
8037
|
+
dependencies.execBinSync(
|
|
8038
|
+
npm,
|
|
8039
|
+
["install", "--global", `${PACKAGE_NAME}@${availableVersion}`],
|
|
8040
|
+
{ timeout: UPDATE_TIMEOUT_MS, env: updateEnv }
|
|
8041
|
+
);
|
|
8042
|
+
dependencies.log(
|
|
8043
|
+
`
|
|
8044
|
+
FML updated from ${dependencies.currentVersion} to ${availableVersion}. Refreshing setup...`
|
|
8045
|
+
);
|
|
8046
|
+
try {
|
|
8047
|
+
const fml = dependencies.resolveBin("fml");
|
|
8048
|
+
if (!fml) throw new Error("Updated FML was not found on PATH");
|
|
8049
|
+
dependencies.execBinSync(fml, ["setup"], {
|
|
8050
|
+
timeout: SETUP_TIMEOUT_MS,
|
|
8051
|
+
stdio: "inherit"
|
|
8052
|
+
});
|
|
8053
|
+
dependencies.log("FML setup complete.");
|
|
8054
|
+
} catch (err) {
|
|
8055
|
+
dependencies.captureException(err);
|
|
8056
|
+
dependencies.error(
|
|
8057
|
+
"FML updated, but setup failed:",
|
|
8058
|
+
formatUpdateError(err)
|
|
8059
|
+
);
|
|
8060
|
+
dependencies.error("Run `fml setup` to finish refreshing FML.");
|
|
8061
|
+
dependencies.exit(1);
|
|
8062
|
+
}
|
|
7955
8063
|
} catch (err) {
|
|
7956
8064
|
dependencies.captureException(err);
|
|
7957
8065
|
dependencies.error("Update failed:", formatUpdateError(err));
|
|
@@ -8929,7 +9037,7 @@ async function handleConfigDetail(opts) {
|
|
|
8929
9037
|
// src/commands/tools.ts
|
|
8930
9038
|
import { readFileSync } from "fs";
|
|
8931
9039
|
import path29 from "path";
|
|
8932
|
-
var pluginVersion = true ? "0.8.
|
|
9040
|
+
var pluginVersion = true ? "0.8.2-rc.2+e2bf128f" : void 0;
|
|
8933
9041
|
async function getApi() {
|
|
8934
9042
|
const api = await getAuthenticatedClient();
|
|
8935
9043
|
if (!api) {
|
|
@@ -9086,7 +9194,7 @@ if (process.argv.length <= 2 || process.argv.includes("--help") || process.argv.
|
|
|
9086
9194
|
printBanner();
|
|
9087
9195
|
}
|
|
9088
9196
|
var program = new Command().name("fml").description("FML CLI and agent tools").version(
|
|
9089
|
-
true ? "0.8.
|
|
9197
|
+
true ? "0.8.2-rc.2+e2bf128f" : "dev"
|
|
9090
9198
|
);
|
|
9091
9199
|
function formatCommandInventory(cmd, prefix = "") {
|
|
9092
9200
|
const name = prefix ? `${prefix} ${cmd.name()}` : cmd.name();
|
|
@@ -9120,7 +9228,7 @@ program.command("install").description("Register FML agent integrations and the
|
|
|
9120
9228
|
program.command("uninstall").description("Remove FML agent integrations and optionally local data").option("--purge", "Also remove all data, logs, and auth tokens").option("-y, --yes", "Skip the purge confirmation prompt").action(
|
|
9121
9229
|
(opts) => handleUninstall({ purge: opts.purge, assumeYes: opts.yes })
|
|
9122
9230
|
);
|
|
9123
|
-
program.command("update").description("Update fml
|
|
9231
|
+
program.command("update").description("Update fml when a newer release is available and refresh setup").action(() => handleUpdate());
|
|
9124
9232
|
program.command("login").description("Sign in to your FML account").option("--device", "Use device authorization flow (no browser needed)").option(
|
|
9125
9233
|
"--service-token",
|
|
9126
9234
|
"Sign in with an org service refresh token (prompts for fml_srt_*)"
|
package/dist/hook-handler.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
hookCaptureIsDisabled
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-UZG65JUB.js";
|
|
5
5
|
import {
|
|
6
6
|
getActiveHookDestinationBinding
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-E6YIJCIE.js";
|
|
8
8
|
import {
|
|
9
9
|
SHELL_TOOL_NAMES,
|
|
10
10
|
createHookInboxEntry,
|
|
@@ -12,7 +12,7 @@ import {
|
|
|
12
12
|
normalizeObserverHookCapture,
|
|
13
13
|
persistHookInboxEntry,
|
|
14
14
|
readObserverAuthToken
|
|
15
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-F4A2POJX.js";
|
|
16
16
|
import {
|
|
17
17
|
resolveRepositoryRootFromCwd,
|
|
18
18
|
resolveRepositorySlugFromCwd
|
|
@@ -23,7 +23,7 @@ import {
|
|
|
23
23
|
FML_OBSERVER_AUTH_TOKEN_FILE,
|
|
24
24
|
FML_OBSERVER_ENDPOINT_FILE,
|
|
25
25
|
getValidToken
|
|
26
|
-
} from "./chunk-
|
|
26
|
+
} from "./chunk-TNJVAET3.js";
|
|
27
27
|
import "./chunk-MLKGABMK.js";
|
|
28
28
|
|
|
29
29
|
// src/hooks/handler.ts
|
|
@@ -46,6 +46,7 @@ var MODEL_CONTEXT_GUIDANCE = "If this FML context materially informs your work,
|
|
|
46
46
|
var CONTEXT_GUIDANCE_SEPARATOR = "\n\n";
|
|
47
47
|
var MAX_PROMPT_CHARS = 2e4;
|
|
48
48
|
var STATE_MAX_AGE_MS = 30 * 24 * 60 * 60 * 1e3;
|
|
49
|
+
var INJECTION_ID_VERSION = "v1";
|
|
49
50
|
var EDIT_TOOL_NAMES = /* @__PURE__ */ new Set([
|
|
50
51
|
"apply_patch",
|
|
51
52
|
"edit",
|
|
@@ -58,6 +59,10 @@ var READ_TOOL_NAMES = /* @__PURE__ */ new Set(["read", "read_file"]);
|
|
|
58
59
|
function sameDestination(left, right) {
|
|
59
60
|
return left.environment === right.environment && left.targetUrl === right.targetUrl && left.destinationIdentity === right.destinationIdentity;
|
|
60
61
|
}
|
|
62
|
+
function hookContextInjectionId(target2, syncId) {
|
|
63
|
+
const digest = createHash("sha256").update(`${INJECTION_ID_VERSION}\0${target2}\0${syncId}`).digest("base64url");
|
|
64
|
+
return `${INJECTION_ID_VERSION}_${digest}`;
|
|
65
|
+
}
|
|
61
66
|
function markerPath(stateDir, kind, value) {
|
|
62
67
|
const digest = createHash("sha256").update(value).digest("hex");
|
|
63
68
|
return path.join(stateDir, kind, digest);
|
|
@@ -160,6 +165,8 @@ function buildServerHookContextRequest(target2, event, stateDir = FML_HOOK_CONTE
|
|
|
160
165
|
const base = {
|
|
161
166
|
repository: event.repository,
|
|
162
167
|
sessionId: event.sessionId,
|
|
168
|
+
target: target2,
|
|
169
|
+
injectionId: hookContextInjectionId(target2, event.syncId),
|
|
163
170
|
nowMs: event.timestampMs
|
|
164
171
|
};
|
|
165
172
|
if (event.eventType === "SessionStart") {
|
package/dist/mcp/server.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import {
|
|
3
3
|
createFmlClient,
|
|
4
4
|
getAuthenticatedClient
|
|
5
|
-
} from "../chunk-
|
|
5
|
+
} from "../chunk-26RJC76L.js";
|
|
6
6
|
import {
|
|
7
7
|
resolveRepoFromCwd
|
|
8
8
|
} from "../chunk-7V7G7NVF.js";
|
|
@@ -17,7 +17,7 @@ import {
|
|
|
17
17
|
getValidToken,
|
|
18
18
|
initSentry,
|
|
19
19
|
readTokens
|
|
20
|
-
} from "../chunk-
|
|
20
|
+
} from "../chunk-TNJVAET3.js";
|
|
21
21
|
import "../chunk-MLKGABMK.js";
|
|
22
22
|
|
|
23
23
|
// src/mcp/server.ts
|
package/dist/observer-server.js
CHANGED
|
@@ -6,11 +6,11 @@ import {
|
|
|
6
6
|
observerLeaseIsOwned,
|
|
7
7
|
removeObserverStateIfOwned,
|
|
8
8
|
updateObserverState
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-3WDAKM5B.js";
|
|
10
10
|
import {
|
|
11
11
|
createHookSyncLoop,
|
|
12
12
|
getActiveHookDestinationBinding
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-E6YIJCIE.js";
|
|
14
14
|
import {
|
|
15
15
|
OBSERVER_PROTOCOL_VERSION,
|
|
16
16
|
OBSERVER_SERVICE_NAME,
|
|
@@ -25,15 +25,15 @@ import {
|
|
|
25
25
|
parseHookInboxMetadata,
|
|
26
26
|
readHookInboxStatusAsync,
|
|
27
27
|
retireHookInboxEntry
|
|
28
|
-
} from "./chunk-
|
|
28
|
+
} from "./chunk-F4A2POJX.js";
|
|
29
29
|
import "./chunk-7V7G7NVF.js";
|
|
30
30
|
import {
|
|
31
31
|
ObserverSyncCycleAbortedError,
|
|
32
32
|
runObserverSyncCycleSubprocess
|
|
33
|
-
} from "./chunk-
|
|
33
|
+
} from "./chunk-IZH4MDS4.js";
|
|
34
34
|
import {
|
|
35
35
|
createCliRawSync
|
|
36
|
-
} from "./chunk-
|
|
36
|
+
} from "./chunk-UGUYQVUW.js";
|
|
37
37
|
import {
|
|
38
38
|
FML_OBSERVER_AUTH_TOKEN_FILE,
|
|
39
39
|
FML_OBSERVER_ENDPOINT_FILE,
|
|
@@ -50,7 +50,7 @@ import {
|
|
|
50
50
|
getSyncDestinationAuthBinding,
|
|
51
51
|
getValidToken,
|
|
52
52
|
observerOnlyOverrideWarning
|
|
53
|
-
} from "./chunk-
|
|
53
|
+
} from "./chunk-TNJVAET3.js";
|
|
54
54
|
import "./chunk-MLKGABMK.js";
|
|
55
55
|
|
|
56
56
|
// src/observer-server.ts
|
|
@@ -1239,7 +1239,7 @@ var hookRejectionStatus = () => ({
|
|
|
1239
1239
|
...lastRejectedReason !== void 0 ? { lastRejectedReason } : {},
|
|
1240
1240
|
...lastRejectedTarget !== void 0 ? { lastRejectedTarget } : {}
|
|
1241
1241
|
});
|
|
1242
|
-
var packageVersion = true ? "0.8.
|
|
1242
|
+
var packageVersion = true ? "0.8.2-rc.2+e2bf128f" : "dev";
|
|
1243
1243
|
var health = () => ({
|
|
1244
1244
|
status: "ok",
|
|
1245
1245
|
service: OBSERVER_SERVICE_NAME,
|
package/dist/sync-cycle.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
runObserverSyncCycle
|
|
4
|
-
} from "./chunk-
|
|
5
|
-
import "./chunk-
|
|
6
|
-
import "./chunk-
|
|
4
|
+
} from "./chunk-IZH4MDS4.js";
|
|
5
|
+
import "./chunk-UGUYQVUW.js";
|
|
6
|
+
import "./chunk-TNJVAET3.js";
|
|
7
7
|
import "./chunk-MLKGABMK.js";
|
|
8
8
|
|
|
9
9
|
// src/sync-cycle.ts
|