@clef-sh/agent 0.1.9 → 0.1.10
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/dist/agent.cjs +115 -9
- package/dist/agent.cjs.map +3 -3
- package/dist/lifecycle/lambda-extension.d.ts +2 -0
- package/dist/lifecycle/lambda-extension.d.ts.map +1 -1
- package/dist/lifecycle/lambda-extension.js +9 -7
- package/dist/lifecycle/lambda-extension.js.map +1 -1
- package/dist/main.js +30 -9
- package/dist/main.js.map +1 -1
- package/package.json +1 -1
package/dist/agent.cjs
CHANGED
|
@@ -184795,10 +184795,100 @@ var Daemon = class {
|
|
|
184795
184795
|
}
|
|
184796
184796
|
};
|
|
184797
184797
|
|
|
184798
|
+
// src/lifecycle/lambda-extension.ts
|
|
184799
|
+
var LambdaExtension = class {
|
|
184800
|
+
lastRefresh = 0;
|
|
184801
|
+
options;
|
|
184802
|
+
startedAt;
|
|
184803
|
+
constructor(options) {
|
|
184804
|
+
this.options = options;
|
|
184805
|
+
this.startedAt = Date.now();
|
|
184806
|
+
}
|
|
184807
|
+
/** Run the Lambda Extension lifecycle. */
|
|
184808
|
+
async start() {
|
|
184809
|
+
const { poller, server, onLog, refreshTtl, telemetry } = this.options;
|
|
184810
|
+
const extensionId = await this.register();
|
|
184811
|
+
onLog?.(`Registered with Lambda Extensions API (id: ${extensionId})`);
|
|
184812
|
+
onLog?.(`Agent server listening at ${server.url}`);
|
|
184813
|
+
if (!this.options.skipInitialFetch) {
|
|
184814
|
+
if (refreshTtl === 0) {
|
|
184815
|
+
await poller.fetchAndValidate();
|
|
184816
|
+
} else {
|
|
184817
|
+
await poller.fetchAndDecrypt();
|
|
184818
|
+
}
|
|
184819
|
+
onLog?.("Initial secrets loaded.");
|
|
184820
|
+
}
|
|
184821
|
+
this.lastRefresh = Date.now();
|
|
184822
|
+
while (true) {
|
|
184823
|
+
const event = await this.nextEvent(extensionId);
|
|
184824
|
+
if (event.eventType === "SHUTDOWN") {
|
|
184825
|
+
onLog?.("SHUTDOWN event received.");
|
|
184826
|
+
poller.stop();
|
|
184827
|
+
telemetry?.agentStopped({
|
|
184828
|
+
reason: "lambda_shutdown",
|
|
184829
|
+
uptimeSeconds: Math.round((Date.now() - this.startedAt) / 1e3)
|
|
184830
|
+
});
|
|
184831
|
+
try {
|
|
184832
|
+
await telemetry?.stopAsync();
|
|
184833
|
+
} catch {
|
|
184834
|
+
}
|
|
184835
|
+
await server.stop();
|
|
184836
|
+
break;
|
|
184837
|
+
}
|
|
184838
|
+
if (event.eventType === "INVOKE") {
|
|
184839
|
+
if (refreshTtl === 0) {
|
|
184840
|
+
try {
|
|
184841
|
+
await poller.fetchAndValidate();
|
|
184842
|
+
this.lastRefresh = Date.now();
|
|
184843
|
+
} catch (err) {
|
|
184844
|
+
onLog?.(`Refresh failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
184845
|
+
}
|
|
184846
|
+
} else {
|
|
184847
|
+
const elapsed = (Date.now() - this.lastRefresh) / 1e3;
|
|
184848
|
+
if (elapsed >= refreshTtl) {
|
|
184849
|
+
try {
|
|
184850
|
+
await poller.fetchAndDecrypt();
|
|
184851
|
+
this.lastRefresh = Date.now();
|
|
184852
|
+
} catch (err) {
|
|
184853
|
+
onLog?.(`Refresh failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
184854
|
+
}
|
|
184855
|
+
}
|
|
184856
|
+
}
|
|
184857
|
+
}
|
|
184858
|
+
}
|
|
184859
|
+
}
|
|
184860
|
+
async register() {
|
|
184861
|
+
const res = await fetch("http://127.0.0.1:9001/2020-01-01/extension/register", {
|
|
184862
|
+
method: "POST",
|
|
184863
|
+
headers: { "Lambda-Extension-Name": "clef-agent" },
|
|
184864
|
+
body: JSON.stringify({ events: ["INVOKE", "SHUTDOWN"] })
|
|
184865
|
+
});
|
|
184866
|
+
if (!res.ok) {
|
|
184867
|
+
throw new Error(`Lambda Extensions API register failed: ${res.status}`);
|
|
184868
|
+
}
|
|
184869
|
+
const extensionId = res.headers.get("Lambda-Extension-Identifier");
|
|
184870
|
+
if (!extensionId) {
|
|
184871
|
+
throw new Error("Lambda Extensions API did not return an extension ID.");
|
|
184872
|
+
}
|
|
184873
|
+
return extensionId;
|
|
184874
|
+
}
|
|
184875
|
+
async nextEvent(extensionId) {
|
|
184876
|
+
const res = await fetch("http://127.0.0.1:9001/2020-01-01/extension/event/next", {
|
|
184877
|
+
method: "GET",
|
|
184878
|
+
headers: { "Lambda-Extension-Identifier": extensionId }
|
|
184879
|
+
});
|
|
184880
|
+
if (!res.ok) {
|
|
184881
|
+
throw new Error(`Lambda Extensions API event/next failed: ${res.status}`);
|
|
184882
|
+
}
|
|
184883
|
+
return await res.json();
|
|
184884
|
+
}
|
|
184885
|
+
};
|
|
184886
|
+
|
|
184798
184887
|
// package.json
|
|
184799
|
-
var version5 = "0.1.
|
|
184888
|
+
var version5 = "0.1.10";
|
|
184800
184889
|
|
|
184801
184890
|
// src/main.ts
|
|
184891
|
+
var isLambda = !!process.env.AWS_LAMBDA_RUNTIME_API;
|
|
184802
184892
|
async function main() {
|
|
184803
184893
|
const config = resolveConfig();
|
|
184804
184894
|
const jitMode = config.cacheTtl === 0;
|
|
@@ -184879,16 +184969,32 @@ async function main() {
|
|
|
184879
184969
|
cacheTtl: config.cacheTtl,
|
|
184880
184970
|
...jitMode ? { decryptor: poller.getDecryptor(), encryptedStore } : {}
|
|
184881
184971
|
});
|
|
184882
|
-
const
|
|
184883
|
-
poller,
|
|
184884
|
-
server,
|
|
184885
|
-
telemetry,
|
|
184886
|
-
onLog: (msg) => console.log(`[clef-agent] ${msg}`)
|
|
184887
|
-
});
|
|
184972
|
+
const onLog = (msg) => console.log(`[clef-agent] ${msg}`);
|
|
184888
184973
|
telemetry?.agentStarted({ version: version5 });
|
|
184889
|
-
|
|
184974
|
+
const modeLabel = jitMode ? "jit" : "cached";
|
|
184975
|
+
console.log(`[clef-agent] mode: ${modeLabel}`);
|
|
184890
184976
|
console.log(`[clef-agent] token: [set]`);
|
|
184891
|
-
|
|
184977
|
+
if (isLambda) {
|
|
184978
|
+
console.log("[clef-agent] lifecycle: lambda-extension");
|
|
184979
|
+
const extension = new LambdaExtension({
|
|
184980
|
+
poller,
|
|
184981
|
+
server,
|
|
184982
|
+
refreshTtl: config.cacheTtl,
|
|
184983
|
+
telemetry,
|
|
184984
|
+
onLog,
|
|
184985
|
+
skipInitialFetch: true
|
|
184986
|
+
});
|
|
184987
|
+
await extension.start();
|
|
184988
|
+
} else {
|
|
184989
|
+
console.log("[clef-agent] lifecycle: daemon");
|
|
184990
|
+
const daemon = new Daemon({
|
|
184991
|
+
poller,
|
|
184992
|
+
server,
|
|
184993
|
+
telemetry,
|
|
184994
|
+
onLog
|
|
184995
|
+
});
|
|
184996
|
+
await daemon.start();
|
|
184997
|
+
}
|
|
184892
184998
|
}
|
|
184893
184999
|
main().catch((err) => {
|
|
184894
185000
|
if (err instanceof ConfigError) {
|