jules-ink 0.1.0 → 0.2.0

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/cli.js CHANGED
@@ -1,6 +1,5 @@
1
1
  #!/usr/bin/env node
2
2
  import { Command } from 'commander';
3
- import { streamSession } from './session-stream.js';
4
3
  import { generateLabel } from './label-generator.js';
5
4
  import thermal from './print.js';
6
5
  import fs from 'fs';
@@ -55,6 +54,7 @@ program
55
54
  if (!fs.existsSync(outDir))
56
55
  fs.mkdirSync(outDir, { recursive: true });
57
56
  let repo = 'unknown/repo';
57
+ const { streamSession } = await import('./session-stream.js');
58
58
  try {
59
59
  for await (const event of streamSession(sessionId, { model, tone })) {
60
60
  if (event.type === 'session:info') {
package/dist/pipeline.js CHANGED
@@ -3,7 +3,6 @@
3
3
  * This module couples streaming, file I/O, and printing in a single generator.
4
4
  * The new `streamSession` yields portable typed events without I/O side effects.
5
5
  */
6
- import { jules } from '@google/jules-sdk';
7
6
  import { SessionSummarizer } from './summarizer.js';
8
7
  import { generateLabel } from './label-generator.js';
9
8
  import fs from 'fs';
@@ -32,6 +31,8 @@ export async function* processSessionAndPrint(sessionId, options = {}) {
32
31
  else if (!options.printer) {
33
32
  console.warn('⚠️ No printer found. Labels will be saved to disk only.');
34
33
  }
34
+ const { connect } = await import('@google/jules-sdk');
35
+ const jules = connect();
35
36
  const summarizer = new SessionSummarizer({
36
37
  backend: 'cloud',
37
38
  apiKey: process.env.GEMINI_API_KEY,
@@ -1,4 +1,4 @@
1
- import { type Activity } from '@google/jules-sdk';
1
+ import type { Activity } from '@google/jules-sdk';
2
2
  import { ChangeSetSummary } from './types.js';
3
3
  export interface ProcessedActivity {
4
4
  activityId: string;
package/dist/processor.js CHANGED
@@ -1,4 +1,3 @@
1
- import { jules } from '@google/jules-sdk';
2
1
  import { analyzeChangeSet } from './analyzer.js';
3
2
  /**
4
3
  * Streams activities from a Jules session and yields parsed metrics
@@ -6,6 +5,8 @@ import { analyzeChangeSet } from './analyzer.js';
6
5
  */
7
6
  export async function* streamChangeMetrics(sessionId, options = {}) {
8
7
  const { live = true } = options;
8
+ const { connect } = await import('@google/jules-sdk');
9
+ const jules = connect();
9
10
  const session = jules.session(sessionId);
10
11
  // Choose between the infinite stream or the finite history
11
12
  const activityStream = live ? session.stream() : session.history();
package/dist/server.js CHANGED
@@ -13,13 +13,13 @@ const allowedOrigins = process.env.ALLOWED_ORIGINS
13
13
  app.use('/*', cors({
14
14
  origin: allowedOrigins,
15
15
  }));
16
- const apiKey = process.env["GEMINI_API_KEY"];
17
- const ai = apiKey ? new GoogleGenAI({ apiKey }) : null;
18
16
  const model = "imagen-4.0-generate-001";
19
17
  app.post('/api/generate', async (c) => {
20
- if (!ai) {
18
+ const apiKey = process.env["GEMINI_API_KEY"];
19
+ if (!apiKey) {
21
20
  return c.json({ error: "GEMINI_API_KEY environment variable is required" }, 500);
22
21
  }
22
+ const ai = new GoogleGenAI({ apiKey });
23
23
  const { prompt } = await c.req.json();
24
24
  if (!prompt)
25
25
  return c.json({ error: 'prompt required' }, 400);
@@ -55,7 +55,7 @@ app.post('/api/generate', async (c) => {
55
55
  export default app;
56
56
  const isMain = process.argv[1] === fileURLToPath(import.meta.url) || process.argv[1]?.endsWith('server.ts');
57
57
  if (isMain) {
58
- if (!apiKey) {
58
+ if (!process.env["GEMINI_API_KEY"]) {
59
59
  throw new Error("GEMINI_API_KEY environment variable is required");
60
60
  }
61
61
  const controller = new AbortController();
@@ -1,4 +1,3 @@
1
- import { jules } from '@google/jules-sdk';
2
1
  import { SessionSummarizer } from './summarizer.js';
3
2
  /**
4
3
  * Portable session streaming core.
@@ -13,6 +12,8 @@ export async function* streamSession(sessionId, options = {}) {
13
12
  cloudModelName: model,
14
13
  tone,
15
14
  });
15
+ const { connect } = await import('@google/jules-sdk');
16
+ const jules = connect();
16
17
  let rollingSummary = '';
17
18
  const session = jules.session(sessionId);
18
19
  // Emit session metadata
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "jules-ink",
3
- "version": "0.1.0",
3
+ "version": "0.2.0",
4
4
  "private": false,
5
5
  "description": "Print physical labels of your AI coding sessions with Jules",
6
6
  "type": "module",
@@ -1,4 +1,3 @@
1
- import { jules } from '@google/jules-sdk';
2
1
  import { GoogleGenAI } from '@google/genai';
3
2
  import { Ollama } from 'ollama';
4
3
  import parseDiff from 'parse-diff';
@@ -256,6 +255,8 @@ async function* streamSession(sessionId, options = {}) {
256
255
  cloudModelName: model,
257
256
  tone,
258
257
  });
258
+ const { connect } = await import('@google/jules-sdk');
259
+ const jules = connect();
259
260
  let rollingSummary = '';
260
261
  const session = jules.session(sessionId);
261
262
  // Emit session metadata
@@ -1,6 +1,6 @@
1
1
  import { renderers } from './renderers.mjs';
2
2
  import { c as createExports, s as serverEntrypointModule } from './chunks/_@astrojs-ssr-adapter_DPVBl9mS.mjs';
3
- import { manifest } from './manifest_DOEjyU_g.mjs';
3
+ import { manifest } from './manifest_Us9s2mbf.mjs';
4
4
 
5
5
  const serverIslandMap = new Map();;
6
6
 
@@ -95,7 +95,7 @@ function deserializeManifest(serializedManifest) {
95
95
  };
96
96
  }
97
97
 
98
- const manifest = deserializeManifest({"hrefRoot":"file:///Users/davideast/Code/jules.ink/ui/","cacheDir":"file:///Users/davideast/Code/jules.ink/ui/node_modules/.astro/","outDir":"file:///Users/davideast/Code/jules.ink/ui/dist/","srcDir":"file:///Users/davideast/Code/jules.ink/ui/src/","publicDir":"file:///Users/davideast/Code/jules.ink/ui/public/","buildClientDir":"file:///Users/davideast/Code/jules.ink/ui/dist/client/","buildServerDir":"file:///Users/davideast/Code/jules.ink/ui/dist/server/","adapterName":"@astrojs/node","routes":[{"file":"","links":[],"scripts":[],"styles":[],"routeData":{"type":"page","component":"_server-islands.astro","params":["name"],"segments":[[{"content":"_server-islands","dynamic":false,"spread":false}],[{"content":"name","dynamic":true,"spread":false}]],"pattern":"^\\/_server-islands\\/([^/]+?)\\/?$","prerender":false,"isIndex":false,"fallbackRoutes":[],"route":"/_server-islands/[name]","origin":"internal","_meta":{"trailingSlash":"ignore"}}},{"file":"","links":[],"scripts":[],"styles":[],"routeData":{"type":"endpoint","isIndex":false,"route":"/_image","pattern":"^\\/_image\\/?$","segments":[[{"content":"_image","dynamic":false,"spread":false}]],"params":[],"component":"../node_modules/astro/dist/assets/endpoint/node.js","pathname":"/_image","prerender":false,"fallbackRoutes":[],"origin":"internal","_meta":{"trailingSlash":"ignore"}}},{"file":"","links":[],"scripts":[],"styles":[],"routeData":{"route":"/api/keys","isIndex":false,"type":"endpoint","pattern":"^\\/api\\/keys\\/?$","segments":[[{"content":"api","dynamic":false,"spread":false}],[{"content":"keys","dynamic":false,"spread":false}]],"params":[],"component":"src/pages/api/keys.ts","pathname":"/api/keys","prerender":false,"fallbackRoutes":[],"distURL":[],"origin":"project","_meta":{"trailingSlash":"ignore"}}},{"file":"","links":[],"scripts":[],"styles":[],"routeData":{"route":"/api/label/image","isIndex":false,"type":"endpoint","pattern":"^\\/api\\/label\\/image\\/?$","segments":[[{"content":"api","dynamic":false,"spread":false}],[{"content":"label","dynamic":false,"spread":false}],[{"content":"image","dynamic":false,"spread":false}]],"params":[],"component":"src/pages/api/label/image.ts","pathname":"/api/label/image","prerender":false,"fallbackRoutes":[],"distURL":[],"origin":"project","_meta":{"trailingSlash":"ignore"}}},{"file":"","links":[],"scripts":[],"styles":[],"routeData":{"route":"/api/print","isIndex":false,"type":"endpoint","pattern":"^\\/api\\/print\\/?$","segments":[[{"content":"api","dynamic":false,"spread":false}],[{"content":"print","dynamic":false,"spread":false}]],"params":[],"component":"src/pages/api/print.ts","pathname":"/api/print","prerender":false,"fallbackRoutes":[],"distURL":[],"origin":"project","_meta":{"trailingSlash":"ignore"}}},{"file":"","links":[],"scripts":[],"styles":[],"routeData":{"route":"/api/print-stack/[id]","isIndex":false,"type":"endpoint","pattern":"^\\/api\\/print-stack\\/([^/]+?)\\/?$","segments":[[{"content":"api","dynamic":false,"spread":false}],[{"content":"print-stack","dynamic":false,"spread":false}],[{"content":"id","dynamic":true,"spread":false}]],"params":["id"],"component":"src/pages/api/print-stack/[id].ts","prerender":false,"fallbackRoutes":[],"distURL":[],"origin":"project","_meta":{"trailingSlash":"ignore"}}},{"file":"","links":[],"scripts":[],"styles":[],"routeData":{"route":"/api/print-stack","isIndex":true,"type":"endpoint","pattern":"^\\/api\\/print-stack\\/?$","segments":[[{"content":"api","dynamic":false,"spread":false}],[{"content":"print-stack","dynamic":false,"spread":false}]],"params":[],"component":"src/pages/api/print-stack/index.ts","pathname":"/api/print-stack","prerender":false,"fallbackRoutes":[],"distURL":[],"origin":"project","_meta":{"trailingSlash":"ignore"}}},{"file":"","links":[],"scripts":[],"styles":[],"routeData":{"route":"/api/printers","isIndex":false,"type":"endpoint","pattern":"^\\/api\\/printers\\/?$","segments":[[{"content":"api","dynamic":false,"spread":false}],[{"content":"printers","dynamic":false,"spread":false}]],"params":[],"component":"src/pages/api/printers.ts","pathname":"/api/printers","prerender":false,"fallbackRoutes":[],"distURL":[],"origin":"project","_meta":{"trailingSlash":"ignore"}}},{"file":"","links":[],"scripts":[],"styles":[],"routeData":{"route":"/api/session/[id]/pause","isIndex":false,"type":"endpoint","pattern":"^\\/api\\/session\\/([^/]+?)\\/pause\\/?$","segments":[[{"content":"api","dynamic":false,"spread":false}],[{"content":"session","dynamic":false,"spread":false}],[{"content":"id","dynamic":true,"spread":false}],[{"content":"pause","dynamic":false,"spread":false}]],"params":["id"],"component":"src/pages/api/session/[id]/pause.ts","prerender":false,"fallbackRoutes":[],"distURL":[],"origin":"project","_meta":{"trailingSlash":"ignore"}}},{"file":"","links":[],"scripts":[],"styles":[],"routeData":{"route":"/api/session/[id]/stream","isIndex":false,"type":"endpoint","pattern":"^\\/api\\/session\\/([^/]+?)\\/stream\\/?$","segments":[[{"content":"api","dynamic":false,"spread":false}],[{"content":"session","dynamic":false,"spread":false}],[{"content":"id","dynamic":true,"spread":false}],[{"content":"stream","dynamic":false,"spread":false}]],"params":["id"],"component":"src/pages/api/session/[id]/stream.ts","prerender":false,"fallbackRoutes":[],"distURL":[],"origin":"project","_meta":{"trailingSlash":"ignore"}}},{"file":"","links":[],"scripts":[],"styles":[],"routeData":{"route":"/api/sessions","isIndex":false,"type":"endpoint","pattern":"^\\/api\\/sessions\\/?$","segments":[[{"content":"api","dynamic":false,"spread":false}],[{"content":"sessions","dynamic":false,"spread":false}]],"params":[],"component":"src/pages/api/sessions.ts","pathname":"/api/sessions","prerender":false,"fallbackRoutes":[],"distURL":[],"origin":"project","_meta":{"trailingSlash":"ignore"}}},{"file":"","links":[],"scripts":[],"styles":[],"routeData":{"route":"/api/tones/[name]","isIndex":false,"type":"endpoint","pattern":"^\\/api\\/tones\\/([^/]+?)\\/?$","segments":[[{"content":"api","dynamic":false,"spread":false}],[{"content":"tones","dynamic":false,"spread":false}],[{"content":"name","dynamic":true,"spread":false}]],"params":["name"],"component":"src/pages/api/tones/[name].ts","prerender":false,"fallbackRoutes":[],"distURL":[],"origin":"project","_meta":{"trailingSlash":"ignore"}}},{"file":"","links":[],"scripts":[],"styles":[],"routeData":{"route":"/api/tones","isIndex":true,"type":"endpoint","pattern":"^\\/api\\/tones\\/?$","segments":[[{"content":"api","dynamic":false,"spread":false}],[{"content":"tones","dynamic":false,"spread":false}]],"params":[],"component":"src/pages/api/tones/index.ts","pathname":"/api/tones","prerender":false,"fallbackRoutes":[],"distURL":[],"origin":"project","_meta":{"trailingSlash":"ignore"}}},{"file":"","links":[],"scripts":[],"styles":[{"type":"external","src":"/_astro/index.CwgqzyKA.css"}],"routeData":{"route":"/session","isIndex":false,"type":"page","pattern":"^\\/session\\/?$","segments":[[{"content":"session","dynamic":false,"spread":false}]],"params":[],"component":"src/pages/session.astro","pathname":"/session","prerender":false,"fallbackRoutes":[],"distURL":[],"origin":"project","_meta":{"trailingSlash":"ignore"}}},{"file":"","links":[],"scripts":[],"styles":[{"type":"external","src":"/_astro/index.CwgqzyKA.css"}],"routeData":{"route":"/settings","isIndex":false,"type":"page","pattern":"^\\/settings\\/?$","segments":[[{"content":"settings","dynamic":false,"spread":false}]],"params":[],"component":"src/pages/settings.astro","pathname":"/settings","prerender":false,"fallbackRoutes":[],"distURL":[],"origin":"project","_meta":{"trailingSlash":"ignore"}}},{"file":"","links":[],"scripts":[],"styles":[{"type":"external","src":"/_astro/index.CwgqzyKA.css"}],"routeData":{"route":"/","isIndex":true,"type":"page","pattern":"^\\/$","segments":[],"params":[],"component":"src/pages/index.astro","pathname":"/","prerender":false,"fallbackRoutes":[],"distURL":[],"origin":"project","_meta":{"trailingSlash":"ignore"}}}],"base":"/","trailingSlash":"ignore","compressHTML":true,"componentMetadata":[["/Users/davideast/Code/jules.ink/ui/src/pages/index.astro",{"propagation":"none","containsHead":true}],["/Users/davideast/Code/jules.ink/ui/src/pages/session.astro",{"propagation":"none","containsHead":true}],["/Users/davideast/Code/jules.ink/ui/src/pages/settings.astro",{"propagation":"none","containsHead":true}]],"renderers":[],"clientDirectives":[["idle","(()=>{var l=(n,t)=>{let i=async()=>{await(await n())()},e=typeof t.value==\"object\"?t.value:void 0,s={timeout:e==null?void 0:e.timeout};\"requestIdleCallback\"in window?window.requestIdleCallback(i,s):setTimeout(i,s.timeout||200)};(self.Astro||(self.Astro={})).idle=l;window.dispatchEvent(new Event(\"astro:idle\"));})();"],["load","(()=>{var e=async t=>{await(await t())()};(self.Astro||(self.Astro={})).load=e;window.dispatchEvent(new Event(\"astro:load\"));})();"],["media","(()=>{var n=(a,t)=>{let i=async()=>{await(await a())()};if(t.value){let e=matchMedia(t.value);e.matches?i():e.addEventListener(\"change\",i,{once:!0})}};(self.Astro||(self.Astro={})).media=n;window.dispatchEvent(new Event(\"astro:media\"));})();"],["only","(()=>{var e=async t=>{await(await t())()};(self.Astro||(self.Astro={})).only=e;window.dispatchEvent(new Event(\"astro:only\"));})();"],["visible","(()=>{var a=(s,i,o)=>{let r=async()=>{await(await s())()},t=typeof i.value==\"object\"?i.value:void 0,c={rootMargin:t==null?void 0:t.rootMargin},n=new IntersectionObserver(e=>{for(let l of e)if(l.isIntersecting){n.disconnect(),r();break}},c);for(let e of o.children)n.observe(e)};(self.Astro||(self.Astro={})).visible=a;window.dispatchEvent(new Event(\"astro:visible\"));})();"]],"entryModules":{"\u0000noop-middleware":"_noop-middleware.mjs","\u0000virtual:astro:actions/noop-entrypoint":"noop-entrypoint.mjs","\u0000@astro-page:src/pages/api/keys@_@ts":"pages/api/keys.astro.mjs","\u0000@astro-page:src/pages/api/label/image@_@ts":"pages/api/label/image.astro.mjs","\u0000@astro-page:src/pages/api/print@_@ts":"pages/api/print.astro.mjs","\u0000@astro-page:src/pages/api/print-stack/[id]@_@ts":"pages/api/print-stack/_id_.astro.mjs","\u0000@astro-page:src/pages/api/print-stack/index@_@ts":"pages/api/print-stack.astro.mjs","\u0000@astro-page:src/pages/api/printers@_@ts":"pages/api/printers.astro.mjs","\u0000@astro-page:src/pages/api/session/[id]/pause@_@ts":"pages/api/session/_id_/pause.astro.mjs","\u0000@astro-page:src/pages/api/session/[id]/stream@_@ts":"pages/api/session/_id_/stream.astro.mjs","\u0000@astro-page:src/pages/api/sessions@_@ts":"pages/api/sessions.astro.mjs","\u0000@astro-page:src/pages/api/tones/[name]@_@ts":"pages/api/tones/_name_.astro.mjs","\u0000@astro-page:src/pages/api/tones/index@_@ts":"pages/api/tones.astro.mjs","\u0000@astro-page:src/pages/session@_@astro":"pages/session.astro.mjs","\u0000@astro-page:src/pages/settings@_@astro":"pages/settings.astro.mjs","\u0000@astro-page:src/pages/index@_@astro":"pages/index.astro.mjs","\u0000@astrojs-ssr-virtual-entry":"entry.mjs","\u0000@astro-renderers":"renderers.mjs","\u0000@astro-page:../node_modules/astro/dist/assets/endpoint/node@_@js":"pages/_image.astro.mjs","\u0000@astrojs-ssr-adapter":"_@astrojs-ssr-adapter.mjs","\u0000@astrojs-manifest":"manifest_DOEjyU_g.mjs","/Users/davideast/Code/jules.ink/node_modules/unstorage/drivers/fs-lite.mjs":"chunks/fs-lite_COtHaKzy.mjs","/Users/davideast/Code/jules.ink/node_modules/astro/dist/assets/services/sharp.js":"chunks/sharp_C1PLyHjw.mjs","/Users/davideast/Code/jules.ink/dist/index.js":"chunks/index_DJ2vRdKd.mjs","/Users/davideast/Code/jules.ink/ui/src/components/pages/SessionPage":"_astro/SessionPage.BVAKjd5H.js","/Users/davideast/Code/jules.ink/ui/src/components/pages/SettingsPage":"_astro/SettingsPage.Dxak0E-b.js","/Users/davideast/Code/jules.ink/ui/src/components/pages/SessionListPage":"_astro/SessionListPage.BvVZqYsX.js","/Users/davideast/Code/jules.ink/ui/src/components/pages/SetupPage":"_astro/SetupPage.DYREvJ4u.js","@astrojs/react/client.js":"_astro/client.Dc9Vh3na.js","astro:scripts/before-hydration.js":""},"inlinedScripts":[],"assets":["/_astro/index.CwgqzyKA.css","/_astro/ApiKeyForm.DLtrDqK2.js","/_astro/SessionListPage.BvVZqYsX.js","/_astro/SessionPage.BVAKjd5H.js","/_astro/SettingsPage.Dxak0E-b.js","/_astro/SetupPage.DYREvJ4u.js","/_astro/TopBar.CC2bbZSl.js","/_astro/client.Dc9Vh3na.js","/_astro/index.DiEladB3.js","/assets/03ba5d9f9e95fc3599acebcbe7e5fb9a.js","/assets/a39f5c6fcbb87b419667ec984d2e579a.css","/assets/c290bebe757d80dba414d37aba776275.css","/assets/logo.svg"],"buildFormat":"directory","checkOrigin":true,"allowedDomains":[],"serverIslandNameMap":[],"key":"AiyZHfR0k+7EUwQwOkhQtKTwg2TcLnratBzzZQp1P2c=","sessionConfig":{"driver":"fs-lite","options":{"base":"/Users/davideast/Code/jules.ink/ui/node_modules/.astro/sessions"}}});
98
+ const manifest = deserializeManifest({"hrefRoot":"file:///Users/davideast/Code/jules.ink/ui/","cacheDir":"file:///Users/davideast/Code/jules.ink/ui/node_modules/.astro/","outDir":"file:///Users/davideast/Code/jules.ink/ui/dist/","srcDir":"file:///Users/davideast/Code/jules.ink/ui/src/","publicDir":"file:///Users/davideast/Code/jules.ink/ui/public/","buildClientDir":"file:///Users/davideast/Code/jules.ink/ui/dist/client/","buildServerDir":"file:///Users/davideast/Code/jules.ink/ui/dist/server/","adapterName":"@astrojs/node","routes":[{"file":"","links":[],"scripts":[],"styles":[],"routeData":{"type":"page","component":"_server-islands.astro","params":["name"],"segments":[[{"content":"_server-islands","dynamic":false,"spread":false}],[{"content":"name","dynamic":true,"spread":false}]],"pattern":"^\\/_server-islands\\/([^/]+?)\\/?$","prerender":false,"isIndex":false,"fallbackRoutes":[],"route":"/_server-islands/[name]","origin":"internal","_meta":{"trailingSlash":"ignore"}}},{"file":"","links":[],"scripts":[],"styles":[],"routeData":{"type":"endpoint","isIndex":false,"route":"/_image","pattern":"^\\/_image\\/?$","segments":[[{"content":"_image","dynamic":false,"spread":false}]],"params":[],"component":"../node_modules/astro/dist/assets/endpoint/node.js","pathname":"/_image","prerender":false,"fallbackRoutes":[],"origin":"internal","_meta":{"trailingSlash":"ignore"}}},{"file":"","links":[],"scripts":[],"styles":[],"routeData":{"route":"/api/keys","isIndex":false,"type":"endpoint","pattern":"^\\/api\\/keys\\/?$","segments":[[{"content":"api","dynamic":false,"spread":false}],[{"content":"keys","dynamic":false,"spread":false}]],"params":[],"component":"src/pages/api/keys.ts","pathname":"/api/keys","prerender":false,"fallbackRoutes":[],"distURL":[],"origin":"project","_meta":{"trailingSlash":"ignore"}}},{"file":"","links":[],"scripts":[],"styles":[],"routeData":{"route":"/api/label/image","isIndex":false,"type":"endpoint","pattern":"^\\/api\\/label\\/image\\/?$","segments":[[{"content":"api","dynamic":false,"spread":false}],[{"content":"label","dynamic":false,"spread":false}],[{"content":"image","dynamic":false,"spread":false}]],"params":[],"component":"src/pages/api/label/image.ts","pathname":"/api/label/image","prerender":false,"fallbackRoutes":[],"distURL":[],"origin":"project","_meta":{"trailingSlash":"ignore"}}},{"file":"","links":[],"scripts":[],"styles":[],"routeData":{"route":"/api/print","isIndex":false,"type":"endpoint","pattern":"^\\/api\\/print\\/?$","segments":[[{"content":"api","dynamic":false,"spread":false}],[{"content":"print","dynamic":false,"spread":false}]],"params":[],"component":"src/pages/api/print.ts","pathname":"/api/print","prerender":false,"fallbackRoutes":[],"distURL":[],"origin":"project","_meta":{"trailingSlash":"ignore"}}},{"file":"","links":[],"scripts":[],"styles":[],"routeData":{"route":"/api/print-stack/[id]","isIndex":false,"type":"endpoint","pattern":"^\\/api\\/print-stack\\/([^/]+?)\\/?$","segments":[[{"content":"api","dynamic":false,"spread":false}],[{"content":"print-stack","dynamic":false,"spread":false}],[{"content":"id","dynamic":true,"spread":false}]],"params":["id"],"component":"src/pages/api/print-stack/[id].ts","prerender":false,"fallbackRoutes":[],"distURL":[],"origin":"project","_meta":{"trailingSlash":"ignore"}}},{"file":"","links":[],"scripts":[],"styles":[],"routeData":{"route":"/api/print-stack","isIndex":true,"type":"endpoint","pattern":"^\\/api\\/print-stack\\/?$","segments":[[{"content":"api","dynamic":false,"spread":false}],[{"content":"print-stack","dynamic":false,"spread":false}]],"params":[],"component":"src/pages/api/print-stack/index.ts","pathname":"/api/print-stack","prerender":false,"fallbackRoutes":[],"distURL":[],"origin":"project","_meta":{"trailingSlash":"ignore"}}},{"file":"","links":[],"scripts":[],"styles":[],"routeData":{"route":"/api/printers","isIndex":false,"type":"endpoint","pattern":"^\\/api\\/printers\\/?$","segments":[[{"content":"api","dynamic":false,"spread":false}],[{"content":"printers","dynamic":false,"spread":false}]],"params":[],"component":"src/pages/api/printers.ts","pathname":"/api/printers","prerender":false,"fallbackRoutes":[],"distURL":[],"origin":"project","_meta":{"trailingSlash":"ignore"}}},{"file":"","links":[],"scripts":[],"styles":[],"routeData":{"route":"/api/session/[id]/pause","isIndex":false,"type":"endpoint","pattern":"^\\/api\\/session\\/([^/]+?)\\/pause\\/?$","segments":[[{"content":"api","dynamic":false,"spread":false}],[{"content":"session","dynamic":false,"spread":false}],[{"content":"id","dynamic":true,"spread":false}],[{"content":"pause","dynamic":false,"spread":false}]],"params":["id"],"component":"src/pages/api/session/[id]/pause.ts","prerender":false,"fallbackRoutes":[],"distURL":[],"origin":"project","_meta":{"trailingSlash":"ignore"}}},{"file":"","links":[],"scripts":[],"styles":[],"routeData":{"route":"/api/session/[id]/stream","isIndex":false,"type":"endpoint","pattern":"^\\/api\\/session\\/([^/]+?)\\/stream\\/?$","segments":[[{"content":"api","dynamic":false,"spread":false}],[{"content":"session","dynamic":false,"spread":false}],[{"content":"id","dynamic":true,"spread":false}],[{"content":"stream","dynamic":false,"spread":false}]],"params":["id"],"component":"src/pages/api/session/[id]/stream.ts","prerender":false,"fallbackRoutes":[],"distURL":[],"origin":"project","_meta":{"trailingSlash":"ignore"}}},{"file":"","links":[],"scripts":[],"styles":[],"routeData":{"route":"/api/sessions","isIndex":false,"type":"endpoint","pattern":"^\\/api\\/sessions\\/?$","segments":[[{"content":"api","dynamic":false,"spread":false}],[{"content":"sessions","dynamic":false,"spread":false}]],"params":[],"component":"src/pages/api/sessions.ts","pathname":"/api/sessions","prerender":false,"fallbackRoutes":[],"distURL":[],"origin":"project","_meta":{"trailingSlash":"ignore"}}},{"file":"","links":[],"scripts":[],"styles":[],"routeData":{"route":"/api/tones/[name]","isIndex":false,"type":"endpoint","pattern":"^\\/api\\/tones\\/([^/]+?)\\/?$","segments":[[{"content":"api","dynamic":false,"spread":false}],[{"content":"tones","dynamic":false,"spread":false}],[{"content":"name","dynamic":true,"spread":false}]],"params":["name"],"component":"src/pages/api/tones/[name].ts","prerender":false,"fallbackRoutes":[],"distURL":[],"origin":"project","_meta":{"trailingSlash":"ignore"}}},{"file":"","links":[],"scripts":[],"styles":[],"routeData":{"route":"/api/tones","isIndex":true,"type":"endpoint","pattern":"^\\/api\\/tones\\/?$","segments":[[{"content":"api","dynamic":false,"spread":false}],[{"content":"tones","dynamic":false,"spread":false}]],"params":[],"component":"src/pages/api/tones/index.ts","pathname":"/api/tones","prerender":false,"fallbackRoutes":[],"distURL":[],"origin":"project","_meta":{"trailingSlash":"ignore"}}},{"file":"","links":[],"scripts":[],"styles":[{"type":"external","src":"/_astro/index.CwgqzyKA.css"}],"routeData":{"route":"/session","isIndex":false,"type":"page","pattern":"^\\/session\\/?$","segments":[[{"content":"session","dynamic":false,"spread":false}]],"params":[],"component":"src/pages/session.astro","pathname":"/session","prerender":false,"fallbackRoutes":[],"distURL":[],"origin":"project","_meta":{"trailingSlash":"ignore"}}},{"file":"","links":[],"scripts":[],"styles":[{"type":"external","src":"/_astro/index.CwgqzyKA.css"}],"routeData":{"route":"/settings","isIndex":false,"type":"page","pattern":"^\\/settings\\/?$","segments":[[{"content":"settings","dynamic":false,"spread":false}]],"params":[],"component":"src/pages/settings.astro","pathname":"/settings","prerender":false,"fallbackRoutes":[],"distURL":[],"origin":"project","_meta":{"trailingSlash":"ignore"}}},{"file":"","links":[],"scripts":[],"styles":[{"type":"external","src":"/_astro/index.CwgqzyKA.css"}],"routeData":{"route":"/","isIndex":true,"type":"page","pattern":"^\\/$","segments":[],"params":[],"component":"src/pages/index.astro","pathname":"/","prerender":false,"fallbackRoutes":[],"distURL":[],"origin":"project","_meta":{"trailingSlash":"ignore"}}}],"base":"/","trailingSlash":"ignore","compressHTML":true,"componentMetadata":[["/Users/davideast/Code/jules.ink/ui/src/pages/index.astro",{"propagation":"none","containsHead":true}],["/Users/davideast/Code/jules.ink/ui/src/pages/session.astro",{"propagation":"none","containsHead":true}],["/Users/davideast/Code/jules.ink/ui/src/pages/settings.astro",{"propagation":"none","containsHead":true}]],"renderers":[],"clientDirectives":[["idle","(()=>{var l=(n,t)=>{let i=async()=>{await(await n())()},e=typeof t.value==\"object\"?t.value:void 0,s={timeout:e==null?void 0:e.timeout};\"requestIdleCallback\"in window?window.requestIdleCallback(i,s):setTimeout(i,s.timeout||200)};(self.Astro||(self.Astro={})).idle=l;window.dispatchEvent(new Event(\"astro:idle\"));})();"],["load","(()=>{var e=async t=>{await(await t())()};(self.Astro||(self.Astro={})).load=e;window.dispatchEvent(new Event(\"astro:load\"));})();"],["media","(()=>{var n=(a,t)=>{let i=async()=>{await(await a())()};if(t.value){let e=matchMedia(t.value);e.matches?i():e.addEventListener(\"change\",i,{once:!0})}};(self.Astro||(self.Astro={})).media=n;window.dispatchEvent(new Event(\"astro:media\"));})();"],["only","(()=>{var e=async t=>{await(await t())()};(self.Astro||(self.Astro={})).only=e;window.dispatchEvent(new Event(\"astro:only\"));})();"],["visible","(()=>{var a=(s,i,o)=>{let r=async()=>{await(await s())()},t=typeof i.value==\"object\"?i.value:void 0,c={rootMargin:t==null?void 0:t.rootMargin},n=new IntersectionObserver(e=>{for(let l of e)if(l.isIntersecting){n.disconnect(),r();break}},c);for(let e of o.children)n.observe(e)};(self.Astro||(self.Astro={})).visible=a;window.dispatchEvent(new Event(\"astro:visible\"));})();"]],"entryModules":{"\u0000noop-middleware":"_noop-middleware.mjs","\u0000virtual:astro:actions/noop-entrypoint":"noop-entrypoint.mjs","\u0000@astro-page:src/pages/api/keys@_@ts":"pages/api/keys.astro.mjs","\u0000@astro-page:src/pages/api/label/image@_@ts":"pages/api/label/image.astro.mjs","\u0000@astro-page:src/pages/api/print@_@ts":"pages/api/print.astro.mjs","\u0000@astro-page:src/pages/api/print-stack/[id]@_@ts":"pages/api/print-stack/_id_.astro.mjs","\u0000@astro-page:src/pages/api/print-stack/index@_@ts":"pages/api/print-stack.astro.mjs","\u0000@astro-page:src/pages/api/printers@_@ts":"pages/api/printers.astro.mjs","\u0000@astro-page:src/pages/api/session/[id]/pause@_@ts":"pages/api/session/_id_/pause.astro.mjs","\u0000@astro-page:src/pages/api/session/[id]/stream@_@ts":"pages/api/session/_id_/stream.astro.mjs","\u0000@astro-page:src/pages/api/sessions@_@ts":"pages/api/sessions.astro.mjs","\u0000@astro-page:src/pages/api/tones/[name]@_@ts":"pages/api/tones/_name_.astro.mjs","\u0000@astro-page:src/pages/api/tones/index@_@ts":"pages/api/tones.astro.mjs","\u0000@astro-page:src/pages/session@_@astro":"pages/session.astro.mjs","\u0000@astro-page:src/pages/settings@_@astro":"pages/settings.astro.mjs","\u0000@astro-page:src/pages/index@_@astro":"pages/index.astro.mjs","\u0000@astrojs-ssr-virtual-entry":"entry.mjs","\u0000@astro-renderers":"renderers.mjs","\u0000@astro-page:../node_modules/astro/dist/assets/endpoint/node@_@js":"pages/_image.astro.mjs","\u0000@astrojs-ssr-adapter":"_@astrojs-ssr-adapter.mjs","\u0000@astrojs-manifest":"manifest_Us9s2mbf.mjs","/Users/davideast/Code/jules.ink/node_modules/unstorage/drivers/fs-lite.mjs":"chunks/fs-lite_COtHaKzy.mjs","/Users/davideast/Code/jules.ink/node_modules/astro/dist/assets/services/sharp.js":"chunks/sharp_C1PLyHjw.mjs","/Users/davideast/Code/jules.ink/dist/index.js":"chunks/index_DPFooF1i.mjs","/Users/davideast/Code/jules.ink/ui/src/components/pages/SessionPage":"_astro/SessionPage.BVAKjd5H.js","/Users/davideast/Code/jules.ink/ui/src/components/pages/SessionListPage":"_astro/SessionListPage.BvVZqYsX.js","/Users/davideast/Code/jules.ink/ui/src/components/pages/SetupPage":"_astro/SetupPage.DYREvJ4u.js","/Users/davideast/Code/jules.ink/ui/src/components/pages/SettingsPage":"_astro/SettingsPage.Dxak0E-b.js","@astrojs/react/client.js":"_astro/client.Dc9Vh3na.js","astro:scripts/before-hydration.js":""},"inlinedScripts":[],"assets":["/_astro/index.CwgqzyKA.css","/assets/03ba5d9f9e95fc3599acebcbe7e5fb9a.js","/assets/a39f5c6fcbb87b419667ec984d2e579a.css","/assets/c290bebe757d80dba414d37aba776275.css","/assets/logo.svg","/_astro/ApiKeyForm.DLtrDqK2.js","/_astro/SessionListPage.BvVZqYsX.js","/_astro/SessionPage.BVAKjd5H.js","/_astro/SettingsPage.Dxak0E-b.js","/_astro/SetupPage.DYREvJ4u.js","/_astro/TopBar.CC2bbZSl.js","/_astro/client.Dc9Vh3na.js","/_astro/index.DiEladB3.js"],"buildFormat":"directory","checkOrigin":true,"allowedDomains":[],"serverIslandNameMap":[],"key":"P/Bc5neijH6ileGStrYroHG0nmJjjaaG7J1VVEiducs=","sessionConfig":{"driver":"fs-lite","options":{"base":"/Users/davideast/Code/jules.ink/ui/node_modules/.astro/sessions"}}});
99
99
  if (manifest.sessionConfig) manifest.sessionConfig.driverModule = () => import('./chunks/fs-lite_COtHaKzy.mjs');
100
100
 
101
101
  export { manifest };
@@ -11,7 +11,7 @@ const POST = async ({ request }) => {
11
11
  }
12
12
  let generateLabel;
13
13
  try {
14
- const mod = await import('../../../chunks/index_DJ2vRdKd.mjs');
14
+ const mod = await import('../../../chunks/index_DPFooF1i.mjs');
15
15
  generateLabel = mod.generateLabel;
16
16
  } catch (err) {
17
17
  console.error("[API] Failed to load jules-ink:", err);
@@ -13,7 +13,7 @@ const POST = async ({ request }) => {
13
13
  let thermal;
14
14
  let generateLabel;
15
15
  try {
16
- const mod = await import('../../chunks/index_DJ2vRdKd.mjs');
16
+ const mod = await import('../../chunks/index_DPFooF1i.mjs');
17
17
  thermal = mod.thermal;
18
18
  generateLabel = mod.generateLabel;
19
19
  } catch (err) {
@@ -4,7 +4,7 @@ const GET = async () => {
4
4
  console.log("[API] Printers scan request");
5
5
  let thermal;
6
6
  try {
7
- const mod = await import('../../chunks/index_DJ2vRdKd.mjs');
7
+ const mod = await import('../../chunks/index_DPFooF1i.mjs');
8
8
  thermal = mod.thermal;
9
9
  } catch (err) {
10
10
  console.error("[API] Failed to load jules-ink:", err);
@@ -11,7 +11,7 @@ const GET = async ({ params, request }) => {
11
11
  console.log(`[SSE] Stream request: session=${sessionId}, tone=${tone}, model=${model}, afterIndex=${afterIndex}`);
12
12
  let streamSession;
13
13
  try {
14
- const mod = await import('../../../../chunks/index_DJ2vRdKd.mjs');
14
+ const mod = await import('../../../../chunks/index_DPFooF1i.mjs');
15
15
  streamSession = mod.streamSession;
16
16
  console.log("[SSE] jules-ink loaded successfully");
17
17
  } catch (err) {
@@ -4,18 +4,9 @@ const GET = async ({ request }) => {
4
4
  const url = new URL(request.url);
5
5
  const pageSize = parseInt(url.searchParams.get("pageSize") || "25", 10);
6
6
  const pageToken = url.searchParams.get("pageToken") || void 0;
7
- let jules;
8
- try {
9
- const mod = await import('@google/jules-sdk');
10
- jules = mod.jules;
11
- } catch (err) {
12
- console.error("[API] Failed to load jules-sdk:", err);
13
- return new Response(
14
- JSON.stringify({ error: "Failed to load jules-sdk" }),
15
- { status: 500, headers: { "Content-Type": "application/json" } }
16
- );
17
- }
18
7
  try {
8
+ const { connect } = await import('@google/jules-sdk');
9
+ const jules = connect();
19
10
  const page = await jules.sessions({ pageSize, pageToken });
20
11
  const sessions = page.sessions.map((s) => {
21
12
  const rawState = String(s.state || "").toLowerCase();
@@ -1,4 +1,3 @@
1
- import '@google/jules-sdk';
2
1
  import '@google/genai';
3
2
  import 'ollama';
4
3
  import 'parse-diff';
@@ -1,4 +1,3 @@
1
- import '@google/jules-sdk';
2
1
  import '@google/genai';
3
2
  import 'ollama';
4
3
  import 'parse-diff';
@@ -226,7 +226,8 @@ const $$Index = createComponent(async ($$result, $$props, $$slots) => {
226
226
  let initialError = null;
227
227
  if (keysConfigured) {
228
228
  try {
229
- const { jules } = await import('@google/jules-sdk');
229
+ const { connect } = await import('@google/jules-sdk');
230
+ const jules = connect();
230
231
  const page = await jules.sessions({ pageSize: 25 });
231
232
  initialSessions = page.sessions.map((s) => {
232
233
  const rawState = String(s.state || "").toLowerCase();
@@ -1178,7 +1178,8 @@ const $$Session = createComponent(async ($$result, $$props, $$slots) => {
1178
1178
  let sessionMeta = null;
1179
1179
  if (sessionId) {
1180
1180
  try {
1181
- const { jules } = await import('@google/jules-sdk');
1181
+ const { connect } = await import('@google/jules-sdk');
1182
+ const jules = connect();
1182
1183
  const session = jules.session(sessionId);
1183
1184
  const info = await session.info();
1184
1185
  const rawState = String(info.state || "").toLowerCase();