@agentsky/sky 2.12.0 → 2.13.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/products.js CHANGED
@@ -8,7 +8,7 @@ import {
8
8
  skillsArraySchema,
9
9
  systemMessageEventSchema,
10
10
  userMessageEventSchema
11
- } from "./chunk-XXDQKVPS.js";
11
+ } from "./chunk-2IKEJ74C.js";
12
12
  import "./chunk-MLKGABMK.js";
13
13
 
14
14
  // ../../packages/spec/src/compatibility.ts
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  external_exports,
3
3
  messagePartSchema
4
- } from "./chunk-XXDQKVPS.js";
4
+ } from "./chunk-2IKEJ74C.js";
5
5
  import "./chunk-MLKGABMK.js";
6
6
 
7
7
  // ../../packages/chat/src/stream.ts
@@ -1,11 +1,11 @@
1
1
  import {
2
2
  USER_AGENT,
3
3
  configPath
4
- } from "./chunk-RF5JICNX.js";
4
+ } from "./chunk-Z3FPPGWX.js";
5
5
  import {
6
6
  TRACE_CONTENT_SCOPES,
7
7
  redactTraceText
8
- } from "./chunk-XXDQKVPS.js";
8
+ } from "./chunk-2IKEJ74C.js";
9
9
  import "./chunk-MLKGABMK.js";
10
10
 
11
11
  // src/trace.ts
@@ -1,14 +1,16 @@
1
1
  import {
2
2
  ApiError
3
- } from "./chunk-7LUCHBX6.js";
3
+ } from "./chunk-XJ5JLLXM.js";
4
4
  import {
5
5
  USER_AGENT,
6
6
  apiBase,
7
7
  apiToken
8
- } from "./chunk-RF5JICNX.js";
8
+ } from "./chunk-Z3FPPGWX.js";
9
9
  import {
10
+ SessionSourceCollector,
11
+ publicRemote,
10
12
  redactTraceText
11
- } from "./chunk-XXDQKVPS.js";
13
+ } from "./chunk-2IKEJ74C.js";
12
14
  import "./chunk-MLKGABMK.js";
13
15
 
14
16
  // src/trace-library.ts
@@ -234,6 +236,7 @@ function isoOrUndefined(value) {
234
236
  async function parseClaudeSession(session) {
235
237
  const out = { harness: "claude_code", sessionId: session.sessionId, userTurns: 0, toolCalls: 0, partial: false, messages: [] };
236
238
  const collector = new Collector();
239
+ const source = new SessionSourceCollector();
237
240
  for (const [index, file] of session.files.entries()) {
238
241
  for await (const line of readLines(file)) {
239
242
  if (!line.trim()) continue;
@@ -245,11 +248,11 @@ async function parseClaudeSession(session) {
245
248
  continue;
246
249
  }
247
250
  if (!record) continue;
251
+ source.push(index === 0 ? record : { ...record, isSidechain: true });
248
252
  const at = isoOrUndefined(record.timestamp);
249
253
  if (index === 0) {
250
254
  out.cwd ??= str(record.cwd);
251
255
  out.gitBranch ??= str(record.gitBranch);
252
- out.harnessVersion ??= str(record.version);
253
256
  if (at) {
254
257
  out.startedAt ??= at;
255
258
  out.endedAt = at;
@@ -278,7 +281,6 @@ async function parseClaudeSession(session) {
278
281
  }
279
282
  if (typed && index === 0) out.userTurns += 1;
280
283
  } else if (record.type === "assistant") {
281
- if (index === 0) out.model ??= str(message.model);
282
284
  const content = Array.isArray(message.content) ? message.content.map(asRecord) : [];
283
285
  for (const part of content) {
284
286
  if (part?.type === "text") collector.push("assistant", str(part.text) ?? "", at);
@@ -290,11 +292,12 @@ async function parseClaudeSession(session) {
290
292
  }
291
293
  }
292
294
  }
293
- return finish(out, collector);
295
+ return finish(withSource(out, source.result()), collector);
294
296
  }
295
297
  async function parseCodexSession(session) {
296
298
  const out = { harness: "codex", sessionId: session.sessionId, userTurns: 0, toolCalls: 0, partial: false, messages: [] };
297
299
  const collector = new Collector();
300
+ const source = new SessionSourceCollector();
298
301
  for await (const line of readLines(session.files[0])) {
299
302
  if (!line.trim()) continue;
300
303
  let record;
@@ -304,6 +307,7 @@ async function parseCodexSession(session) {
304
307
  out.partial = true;
305
308
  continue;
306
309
  }
310
+ source.push(record);
307
311
  const payload = asRecord(record?.payload);
308
312
  if (!record || !payload) continue;
309
313
  const at = isoOrUndefined(record.timestamp);
@@ -313,12 +317,7 @@ async function parseCodexSession(session) {
313
317
  }
314
318
  if (record.type === "session_meta") {
315
319
  out.cwd ??= str(payload.cwd);
316
- out.harnessVersion ??= str(payload.cli_version);
317
- const git = asRecord(payload.git);
318
- out.gitBranch ??= str(git?.branch);
319
- out.gitCommit ??= str(git?.commit_hash);
320
320
  } else if (record.type === "turn_context") {
321
- out.model ??= str(payload.model);
322
321
  out.cwd ??= str(payload.cwd);
323
322
  } else if (record.type === "response_item") {
324
323
  if (payload.type === "message") {
@@ -340,7 +339,22 @@ async function parseCodexSession(session) {
340
339
  }
341
340
  }
342
341
  }
343
- return finish(out, collector);
342
+ return finish(withSource(out, source.result()), collector);
343
+ }
344
+ function withSource(out, meta) {
345
+ return {
346
+ ...out,
347
+ gitBranch: out.gitBranch ?? meta.git?.branch,
348
+ gitCommit: meta.git?.commit,
349
+ gitRemote: meta.git?.remote ? publicRemote(meta.git.remote) : void 0,
350
+ model: meta.models?.[0],
351
+ models: meta.models,
352
+ harnessVersion: meta.harness_version,
353
+ client: meta.client,
354
+ modelProvider: meta.model_provider,
355
+ effort: meta.effort,
356
+ usage: meta.usage
357
+ };
344
358
  }
345
359
  function finish(out, collector) {
346
360
  let messages = collector.messages;
@@ -494,8 +508,14 @@ function uploadBody(session, sha256, device) {
494
508
  ...session.cwd && projectOf(session.cwd) ? { project: projectOf(session.cwd).slice(0, 200) } : {},
495
509
  ...session.gitBranch ? { git_branch: session.gitBranch.slice(0, 300) } : {},
496
510
  ...session.gitCommit ? { git_commit: session.gitCommit.slice(0, 80) } : {},
511
+ ...session.gitRemote ? { git_remote: session.gitRemote.slice(0, 1024) } : {},
497
512
  ...session.model ? { model: session.model.slice(0, 200) } : {},
513
+ ...session.models?.length ? { models: session.models.slice(0, 50).map((model) => model.slice(0, 200)) } : {},
498
514
  ...session.harnessVersion ? { harness_version: session.harnessVersion.slice(0, 80) } : {},
515
+ ...session.client ? { client: session.client.slice(0, 200) } : {},
516
+ ...session.modelProvider ? { model_provider: session.modelProvider.slice(0, 100) } : {},
517
+ ...session.effort ? { effort: session.effort.slice(0, 100) } : {},
518
+ ...session.usage && Object.keys(session.usage).length ? { usage: session.usage } : {},
499
519
  device: device.slice(0, 200),
500
520
  ...session.startedAt ? { started_at: session.startedAt } : {},
501
521
  ...session.endedAt ? { ended_at: session.endedAt } : {},
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agentsky/sky",
3
- "version": "2.12.0",
3
+ "version": "2.13.0",
4
4
  "description": "sky \u2014 the AgentSky developer CLI: launch and talk to long-lived agents from your terminal.",
5
5
  "license": "MIT",
6
6
  "type": "module",