@fml-inc/fml 0.8.7-rc.1 → 0.8.9
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-6BTC3S7C.js → chunk-2DGHAVVR.js} +1 -1
- package/dist/{chunk-LPSZCTTJ.js → chunk-2ZCXGYI5.js} +1 -1
- package/dist/{chunk-LOJPIJZW.js → chunk-GDOXY4W2.js} +2 -2
- package/dist/{chunk-4YLSKFDU.js → chunk-H5LWJ5PH.js} +1 -1
- package/dist/{chunk-B3H2YWPJ.js → chunk-HDAFEHUY.js} +62 -14
- package/dist/{chunk-5JJQWV4G.js → chunk-JPHN4VKM.js} +1 -1
- package/dist/{chunk-ZC2ZXSKC.js → chunk-TWJ62CZX.js} +2 -2
- package/dist/{chunk-PJWMSHHZ.js → chunk-WE7MAWAW.js} +1 -1
- package/dist/cli.js +12 -9
- package/dist/hook-handler.js +4 -4
- package/dist/mcp/server.js +2 -2
- package/dist/observer-server.js +7 -7
- package/dist/pi/extension.js +1427 -1198
- package/dist/sync-cycle.js +3 -3
- package/dist/telemetry-config-HRSNDMTG.js +148 -0
- package/dist/{token-store-ORR5MIJL.js → token-store-GYU3AXBK.js} +1 -1
- package/package.json +4 -4
|
@@ -7,7 +7,7 @@ import {
|
|
|
7
7
|
getSelectedOrg,
|
|
8
8
|
getSiteUrlForConvexUrl,
|
|
9
9
|
getValidToken
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-HDAFEHUY.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-GYU3AXBK.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;
|
|
@@ -193,6 +193,7 @@ function ensureDirs() {
|
|
|
193
193
|
|
|
194
194
|
// src/config.ts
|
|
195
195
|
var DEFAULT_PROD_URL = "https://api.fml.inc";
|
|
196
|
+
var DEFAULT_SYNC_URL = DEFAULT_PROD_URL;
|
|
196
197
|
var DEFAULT_TARGET_NAME = "fml";
|
|
197
198
|
var LEGACY_HOSTED_BACKEND_URLS = [
|
|
198
199
|
"https://trustworthy-chihuahua-382.convex.site"
|
|
@@ -338,9 +339,6 @@ function getSiteUrlForConvexUrl(convexUrl) {
|
|
|
338
339
|
var initialized = false;
|
|
339
340
|
var sentry = null;
|
|
340
341
|
var client = null;
|
|
341
|
-
function isSentryEnabled() {
|
|
342
|
-
return process.env.SENTRY_ENABLED === "true";
|
|
343
|
-
}
|
|
344
342
|
async function loadSentry() {
|
|
345
343
|
if (sentry) return sentry;
|
|
346
344
|
try {
|
|
@@ -350,15 +348,35 @@ async function loadSentry() {
|
|
|
350
348
|
return null;
|
|
351
349
|
}
|
|
352
350
|
}
|
|
353
|
-
async function initSentry() {
|
|
354
|
-
if (initialized) return;
|
|
351
|
+
async function initSentry(forceRefresh = false) {
|
|
352
|
+
if (initialized && !forceRefresh) return;
|
|
355
353
|
initialized = true;
|
|
356
|
-
|
|
354
|
+
let config;
|
|
355
|
+
try {
|
|
356
|
+
const { resolveCliSentryConfig } = await import("./telemetry-config-HRSNDMTG.js");
|
|
357
|
+
config = process.env.SENTRY_ENABLED === "false" ? null : await resolveCliSentryConfig(
|
|
358
|
+
process.env.SENTRY_ENABLED === "true" && true ? "https://4c243521c03917c886d0bf33bc0038c8@o4510167429873664.ingest.us.sentry.io/4511078213156864" : "",
|
|
359
|
+
forceRefresh
|
|
360
|
+
);
|
|
361
|
+
} catch {
|
|
362
|
+
config = null;
|
|
363
|
+
}
|
|
364
|
+
if (client) {
|
|
365
|
+
try {
|
|
366
|
+
await client.close(2e3);
|
|
367
|
+
} catch {
|
|
368
|
+
}
|
|
369
|
+
client = null;
|
|
370
|
+
}
|
|
371
|
+
if (!config?.dsn) {
|
|
372
|
+
sentry?.getCurrentScope().setClient(void 0);
|
|
373
|
+
return;
|
|
374
|
+
}
|
|
357
375
|
const mod = await loadSentry();
|
|
358
376
|
if (!mod) return;
|
|
359
377
|
client = new mod.ServerRuntimeClient({
|
|
360
|
-
dsn:
|
|
361
|
-
environment:
|
|
378
|
+
dsn: config.dsn,
|
|
379
|
+
environment: config.environment,
|
|
362
380
|
tracesSampleRate: 0,
|
|
363
381
|
integrations: [],
|
|
364
382
|
stackParser: mod.createStackParser(mod.nodeStackLineParser()),
|
|
@@ -1378,7 +1396,7 @@ async function getValidToken(opts) {
|
|
|
1378
1396
|
return stored.accessToken;
|
|
1379
1397
|
}
|
|
1380
1398
|
if (stored.tokenType === "service") {
|
|
1381
|
-
|
|
1399
|
+
const accessToken2 = await getOrStartTokenRefresh(
|
|
1382
1400
|
serviceRefreshPromises,
|
|
1383
1401
|
key,
|
|
1384
1402
|
forceRefresh,
|
|
@@ -1424,6 +1442,12 @@ async function getValidToken(opts) {
|
|
|
1424
1442
|
}),
|
|
1425
1443
|
opts?.signal
|
|
1426
1444
|
);
|
|
1445
|
+
await refreshTelemetryConfigAfterTokenRefresh(
|
|
1446
|
+
envName,
|
|
1447
|
+
accessToken2,
|
|
1448
|
+
opts?.signal
|
|
1449
|
+
);
|
|
1450
|
+
return accessToken2;
|
|
1427
1451
|
}
|
|
1428
1452
|
if (stored.refreshInvalidAt) {
|
|
1429
1453
|
console.error(
|
|
@@ -1431,13 +1455,34 @@ async function getValidToken(opts) {
|
|
|
1431
1455
|
);
|
|
1432
1456
|
return null;
|
|
1433
1457
|
}
|
|
1434
|
-
|
|
1458
|
+
const accessToken = await getOrStartTokenRefresh(
|
|
1435
1459
|
oauthRefreshPromises,
|
|
1436
1460
|
key,
|
|
1437
1461
|
forceRefresh,
|
|
1438
1462
|
() => refreshTokenWithLock(envName, forceRefresh, opts?.signal),
|
|
1439
1463
|
opts?.signal
|
|
1440
1464
|
);
|
|
1465
|
+
await refreshTelemetryConfigAfterTokenRefresh(
|
|
1466
|
+
envName,
|
|
1467
|
+
accessToken,
|
|
1468
|
+
opts?.signal
|
|
1469
|
+
);
|
|
1470
|
+
return accessToken;
|
|
1471
|
+
}
|
|
1472
|
+
async function refreshTelemetryConfigAfterTokenRefresh(envName, accessToken, signal) {
|
|
1473
|
+
if (!accessToken || signal?.aborted) return;
|
|
1474
|
+
try {
|
|
1475
|
+
const current = readTokens(envName);
|
|
1476
|
+
if (current?.accessToken !== accessToken) return;
|
|
1477
|
+
const { refreshCliTelemetryConfig } = await import("./telemetry-config-HRSNDMTG.js");
|
|
1478
|
+
await refreshCliTelemetryConfig({
|
|
1479
|
+
envName,
|
|
1480
|
+
accessToken,
|
|
1481
|
+
siteUrl: current.siteUrl,
|
|
1482
|
+
signal
|
|
1483
|
+
});
|
|
1484
|
+
} catch {
|
|
1485
|
+
}
|
|
1441
1486
|
}
|
|
1442
1487
|
async function refreshTokenWithLock(envName, forceRefresh = false, signal) {
|
|
1443
1488
|
const lock = await acquireRefreshLock(envName, signal);
|
|
@@ -1543,7 +1588,9 @@ async function refreshToken(stored, lock, envName, signal) {
|
|
|
1543
1588
|
},
|
|
1544
1589
|
orgId: stored.orgId,
|
|
1545
1590
|
orgSlug: stored.orgSlug,
|
|
1546
|
-
workosClientId: stored.workosClientId
|
|
1591
|
+
workosClientId: stored.workosClientId,
|
|
1592
|
+
// The backend this login belongs to does not change on rotation.
|
|
1593
|
+
...stored.siteUrl ? { siteUrl: stored.siteUrl } : {}
|
|
1547
1594
|
};
|
|
1548
1595
|
const pendingPath = stagePendingOAuthRefresh(
|
|
1549
1596
|
stored.refreshToken,
|
|
@@ -1580,8 +1627,6 @@ async function refreshToken(stored, lock, envName, signal) {
|
|
|
1580
1627
|
}
|
|
1581
1628
|
|
|
1582
1629
|
export {
|
|
1583
|
-
initSentry,
|
|
1584
|
-
Sentry,
|
|
1585
1630
|
resolveFmlDefaultDirectories,
|
|
1586
1631
|
FML_DATA_DIR,
|
|
1587
1632
|
FML_STATE_DIR,
|
|
@@ -1606,6 +1651,7 @@ export {
|
|
|
1606
1651
|
observerOnlyOverrideWarning,
|
|
1607
1652
|
ensureDirs,
|
|
1608
1653
|
DEFAULT_PROD_URL,
|
|
1654
|
+
DEFAULT_SYNC_URL,
|
|
1609
1655
|
DEFAULT_TARGET_NAME,
|
|
1610
1656
|
isHostedBackendUrl,
|
|
1611
1657
|
isValidEnvName,
|
|
@@ -1632,5 +1678,7 @@ export {
|
|
|
1632
1678
|
SERVICE_TOKEN_LOGIN_USER_ID,
|
|
1633
1679
|
clearStoredCredentials,
|
|
1634
1680
|
storeServiceRefreshToken,
|
|
1635
|
-
getValidToken
|
|
1681
|
+
getValidToken,
|
|
1682
|
+
initSentry,
|
|
1683
|
+
Sentry
|
|
1636
1684
|
};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
Sentry
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-HDAFEHUY.js";
|
|
4
4
|
|
|
5
5
|
// src/bin-utils.ts
|
|
6
6
|
import fs from "fs";
|
|
@@ -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.9+6863d154" : "unknown";
|
|
57
57
|
}
|
|
58
58
|
function parseVersion(version) {
|
|
59
59
|
const match = SEMVER_PATTERN.exec(version);
|
package/dist/cli.js
CHANGED
|
@@ -2,19 +2,19 @@
|
|
|
2
2
|
import {
|
|
3
3
|
createFmlClient,
|
|
4
4
|
getAuthenticatedClient
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-GDOXY4W2.js";
|
|
6
6
|
import {
|
|
7
7
|
execBinSync,
|
|
8
8
|
handleUpdate,
|
|
9
9
|
resolveBin
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-TWJ62CZX.js";
|
|
11
11
|
import {
|
|
12
12
|
openObserverLog,
|
|
13
13
|
readJsonFile,
|
|
14
14
|
setHookCaptureDisabled,
|
|
15
15
|
writeJsonFile,
|
|
16
16
|
writeTextFileAtomic
|
|
17
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-2ZCXGYI5.js";
|
|
18
18
|
import {
|
|
19
19
|
CODEX_HOOK_EVENTS,
|
|
20
20
|
GEMINI_HOOK_EVENTS,
|
|
@@ -29,7 +29,7 @@ import {
|
|
|
29
29
|
readObserverAuthToken,
|
|
30
30
|
readObserverStateStatus,
|
|
31
31
|
removeObserverStateIfOwned
|
|
32
|
-
} from "./chunk-
|
|
32
|
+
} from "./chunk-H5LWJ5PH.js";
|
|
33
33
|
import "./chunk-7V7G7NVF.js";
|
|
34
34
|
import {
|
|
35
35
|
claudeConfigDirectory,
|
|
@@ -38,7 +38,7 @@ import {
|
|
|
38
38
|
geminiConfigDirectory,
|
|
39
39
|
initializeSyncSettings,
|
|
40
40
|
runRawSyncOnce
|
|
41
|
-
} from "./chunk-
|
|
41
|
+
} from "./chunk-JPHN4VKM.js";
|
|
42
42
|
import {
|
|
43
43
|
resolvePackageRoot
|
|
44
44
|
} from "./chunk-F57IFY3K.js";
|
|
@@ -86,7 +86,7 @@ import {
|
|
|
86
86
|
storeServiceRefreshToken,
|
|
87
87
|
writeEnvConfig,
|
|
88
88
|
writeTokens
|
|
89
|
-
} from "./chunk-
|
|
89
|
+
} from "./chunk-HDAFEHUY.js";
|
|
90
90
|
import "./chunk-MLKGABMK.js";
|
|
91
91
|
|
|
92
92
|
// src/cli.ts
|
|
@@ -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.9+6863d154" : "dev";
|
|
136
136
|
}
|
|
137
137
|
function delay(ms) {
|
|
138
138
|
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
@@ -7438,6 +7438,7 @@ async function runServiceTokenLogin(refreshToken, backendUrl) {
|
|
|
7438
7438
|
throw new Error("Service token login failed.");
|
|
7439
7439
|
}
|
|
7440
7440
|
commitLoginEnvironment(environment);
|
|
7441
|
+
await initSentry(true);
|
|
7441
7442
|
await selectOrg(environment);
|
|
7442
7443
|
console.log("Logged in with FML service token.");
|
|
7443
7444
|
console.log(
|
|
@@ -7478,6 +7479,7 @@ async function runInteractiveLogin(opts = {}) {
|
|
|
7478
7479
|
);
|
|
7479
7480
|
}
|
|
7480
7481
|
await linkGitHubIdentity(environment);
|
|
7482
|
+
await initSentry(true);
|
|
7481
7483
|
await selectOrg(environment);
|
|
7482
7484
|
return;
|
|
7483
7485
|
}
|
|
@@ -7492,6 +7494,7 @@ async function runInteractiveLogin(opts = {}) {
|
|
|
7492
7494
|
commitLoginEnvironment(environment);
|
|
7493
7495
|
console.log(`Logged in as ${result.name} (${result.email})`);
|
|
7494
7496
|
await linkGitHubIdentity(environment);
|
|
7497
|
+
await initSentry(true);
|
|
7495
7498
|
await selectOrg(environment);
|
|
7496
7499
|
}
|
|
7497
7500
|
async function handleLogin(opts) {
|
|
@@ -8997,7 +9000,7 @@ async function handleConfigDetail(opts) {
|
|
|
8997
9000
|
// src/commands/tools.ts
|
|
8998
9001
|
import { readFileSync } from "fs";
|
|
8999
9002
|
import path29 from "path";
|
|
9000
|
-
var pluginVersion = true ? "0.8.
|
|
9003
|
+
var pluginVersion = true ? "0.8.9+6863d154" : void 0;
|
|
9001
9004
|
async function getApi() {
|
|
9002
9005
|
const api = await getAuthenticatedClient();
|
|
9003
9006
|
if (!api) {
|
|
@@ -9154,7 +9157,7 @@ if (process.argv.length <= 2 || process.argv.includes("--help") || process.argv.
|
|
|
9154
9157
|
printBanner();
|
|
9155
9158
|
}
|
|
9156
9159
|
var program = new Command().name("fml").description("FML CLI and agent tools").version(
|
|
9157
|
-
true ? "0.8.
|
|
9160
|
+
true ? "0.8.9+6863d154" : "dev"
|
|
9158
9161
|
);
|
|
9159
9162
|
function formatCommandInventory(cmd, prefix = "") {
|
|
9160
9163
|
const name = prefix ? `${prefix} ${cmd.name()}` : cmd.name();
|
package/dist/hook-handler.js
CHANGED
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
import {
|
|
3
3
|
hookCaptureIsDisabled,
|
|
4
4
|
openObserverLog
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-2ZCXGYI5.js";
|
|
6
6
|
import {
|
|
7
7
|
getActiveHookDestinationBinding
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-WE7MAWAW.js";
|
|
9
9
|
import {
|
|
10
10
|
HookInboxCapacityError,
|
|
11
11
|
OBSERVER_HEARTBEAT_STALE_MS,
|
|
@@ -19,7 +19,7 @@ import {
|
|
|
19
19
|
readObserverAuthToken,
|
|
20
20
|
readObserverState,
|
|
21
21
|
recordHookInboxLoss
|
|
22
|
-
} from "./chunk-
|
|
22
|
+
} from "./chunk-H5LWJ5PH.js";
|
|
23
23
|
import {
|
|
24
24
|
resolveRepositoryRootFromCwd,
|
|
25
25
|
resolveRepositorySlugFromCwd
|
|
@@ -35,7 +35,7 @@ import {
|
|
|
35
35
|
FML_OBSERVER_ENDPOINT_FILE,
|
|
36
36
|
FML_OBSERVER_STATE_FILE,
|
|
37
37
|
getValidToken
|
|
38
|
-
} from "./chunk-
|
|
38
|
+
} from "./chunk-HDAFEHUY.js";
|
|
39
39
|
import "./chunk-MLKGABMK.js";
|
|
40
40
|
|
|
41
41
|
// src/hooks/handler.ts
|
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-GDOXY4W2.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-HDAFEHUY.js";
|
|
21
21
|
import "../chunk-MLKGABMK.js";
|
|
22
22
|
|
|
23
23
|
// src/mcp/server.ts
|
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-TWJ62CZX.js";
|
|
9
9
|
import {
|
|
10
10
|
createHookSyncLoop,
|
|
11
11
|
getActiveHookDestinationBinding
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-WE7MAWAW.js";
|
|
13
13
|
import {
|
|
14
14
|
OBSERVER_PROTOCOL_VERSION,
|
|
15
15
|
OBSERVER_SERVICE_NAME,
|
|
@@ -30,16 +30,16 @@ import {
|
|
|
30
30
|
removeObserverStateIfOwned,
|
|
31
31
|
retireHookInboxEntry,
|
|
32
32
|
updateObserverState
|
|
33
|
-
} from "./chunk-
|
|
33
|
+
} from "./chunk-H5LWJ5PH.js";
|
|
34
34
|
import "./chunk-7V7G7NVF.js";
|
|
35
35
|
import {
|
|
36
36
|
ObserverSyncCycleAbortedError,
|
|
37
37
|
runObserverSyncCycleSubprocess
|
|
38
|
-
} from "./chunk-
|
|
38
|
+
} from "./chunk-2DGHAVVR.js";
|
|
39
39
|
import {
|
|
40
40
|
createCliRawSync,
|
|
41
41
|
invalidateCliRawSyncDiscoveryCache
|
|
42
|
-
} from "./chunk-
|
|
42
|
+
} from "./chunk-JPHN4VKM.js";
|
|
43
43
|
import "./chunk-F57IFY3K.js";
|
|
44
44
|
import {
|
|
45
45
|
FML_OBSERVER_AUTH_TOKEN_FILE,
|
|
@@ -58,7 +58,7 @@ import {
|
|
|
58
58
|
getSyncDestinationAuthBinding,
|
|
59
59
|
getValidToken,
|
|
60
60
|
observerOnlyOverrideWarning
|
|
61
|
-
} from "./chunk-
|
|
61
|
+
} from "./chunk-HDAFEHUY.js";
|
|
62
62
|
import "./chunk-MLKGABMK.js";
|
|
63
63
|
|
|
64
64
|
// src/observer-server.ts
|
|
@@ -1546,7 +1546,7 @@ var hookRejectionStatus = () => ({
|
|
|
1546
1546
|
...lastRejectedReason !== void 0 ? { lastRejectedReason } : {},
|
|
1547
1547
|
...lastRejectedTarget !== void 0 ? { lastRejectedTarget } : {}
|
|
1548
1548
|
});
|
|
1549
|
-
var packageVersion = true ? "0.8.
|
|
1549
|
+
var packageVersion = true ? "0.8.9+6863d154" : "dev";
|
|
1550
1550
|
var health = () => ({
|
|
1551
1551
|
status: "ok",
|
|
1552
1552
|
service: OBSERVER_SERVICE_NAME,
|