@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 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.9";
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 daemon = new Daemon({
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
- console.log(`[clef-agent] mode: ${jitMode ? "jit" : "cached"}`);
184974
+ const modeLabel = jitMode ? "jit" : "cached";
184975
+ console.log(`[clef-agent] mode: ${modeLabel}`);
184890
184976
  console.log(`[clef-agent] token: [set]`);
184891
- await daemon.start();
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) {