@schoolai/shipyard 3.13.0-rc.20260615.0 → 3.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/{chunk-YXEUA4QK.js → chunk-UQ2COP52.js} +17 -15
- package/dist/chunk-UQ2COP52.js.map +1 -0
- package/dist/electron-utility.js +1 -1
- package/dist/index.js +3 -3
- package/dist/{roi-HNJRISLW.js → roi-WN6ZLKUG.js} +2 -2
- package/dist/{serve-3N7IHREI.js → serve-RW42I4NC.js} +16 -15
- package/dist/{serve-3N7IHREI.js.map → serve-RW42I4NC.js.map} +1 -1
- package/dist/{start-UPNI6OOF.js → start-7GIHIERV.js} +2 -2
- package/package.json +1 -1
- package/dist/chunk-YXEUA4QK.js.map +0 -1
- /package/dist/{roi-HNJRISLW.js.map → roi-WN6ZLKUG.js.map} +0 -0
- /package/dist/{start-UPNI6OOF.js.map → start-7GIHIERV.js.map} +0 -0
|
@@ -83,9 +83,9 @@ function emitCommitAttributed(collector, input) {
|
|
|
83
83
|
repo: input.repo,
|
|
84
84
|
branch: input.branch,
|
|
85
85
|
model: input.model,
|
|
86
|
-
tokens: input.tokens,
|
|
87
|
-
costUsd: input.costUsd,
|
|
88
|
-
turnCount: input.turnCount,
|
|
86
|
+
tokens: input.tokens ?? 0,
|
|
87
|
+
costUsd: input.costUsd ?? 0,
|
|
88
|
+
turnCount: input.turnCount ?? 0,
|
|
89
89
|
attributionType: input.attributionType,
|
|
90
90
|
runtimeId: input.runtimeId
|
|
91
91
|
};
|
|
@@ -256,10 +256,10 @@ var RoiReportSchema = external_exports.object({
|
|
|
256
256
|
});
|
|
257
257
|
|
|
258
258
|
// ../../packages/roi-aggregator/src/schemas/trailers.ts
|
|
259
|
-
var TRAILER_SCHEMA_VERSION =
|
|
260
|
-
var
|
|
259
|
+
var TRAILER_SCHEMA_VERSION = 3;
|
|
260
|
+
var LEGACY_TRAILER_SCHEMA_VERSION = 2;
|
|
261
261
|
var GitTrailerV2Schema = external_exports.object({
|
|
262
|
-
version: external_exports.literal(
|
|
262
|
+
version: external_exports.literal(LEGACY_TRAILER_SCHEMA_VERSION),
|
|
263
263
|
taskId: external_exports.string().min(1),
|
|
264
264
|
sessionId: external_exports.string().min(1),
|
|
265
265
|
model: external_exports.string().min(1),
|
|
@@ -269,9 +269,17 @@ var GitTrailerV2Schema = external_exports.object({
|
|
|
269
269
|
attributionType: AttributionTypeSchema,
|
|
270
270
|
clientVersion: external_exports.string().min(1)
|
|
271
271
|
});
|
|
272
|
+
var GitTrailerV3Schema = external_exports.object({
|
|
273
|
+
version: external_exports.literal(TRAILER_SCHEMA_VERSION),
|
|
274
|
+
taskId: external_exports.string().min(1),
|
|
275
|
+
taskUrl: external_exports.string().url(),
|
|
276
|
+
model: external_exports.string().min(1),
|
|
277
|
+
attributionType: AttributionTypeSchema
|
|
278
|
+
});
|
|
272
279
|
var HEADERS = {
|
|
273
280
|
version: "Shipyard-Version",
|
|
274
281
|
taskId: "Shipyard-Task-Id",
|
|
282
|
+
taskUrl: "Shipyard-Task-Url",
|
|
275
283
|
sessionId: "Shipyard-Session-Id",
|
|
276
284
|
model: "Shipyard-Model",
|
|
277
285
|
tokens: "Shipyard-Tokens",
|
|
@@ -284,15 +292,9 @@ function formatTrailer(trailer) {
|
|
|
284
292
|
const lines = [
|
|
285
293
|
`${HEADERS.version}: ${trailer.version}`,
|
|
286
294
|
`${HEADERS.taskId}: ${trailer.taskId}`,
|
|
287
|
-
`${HEADERS.
|
|
295
|
+
`${HEADERS.taskUrl}: ${trailer.taskUrl}`,
|
|
288
296
|
`${HEADERS.model}: ${trailer.model}`,
|
|
289
|
-
`${HEADERS.
|
|
290
|
-
`${HEADERS.costUsd}: ${trailer.costUsd.toFixed(4)}`,
|
|
291
|
-
`${HEADERS.turnCount}: ${trailer.turnCount}`,
|
|
292
|
-
`${HEADERS.attributionType}: ${trailer.attributionType}`,
|
|
293
|
-
`${HEADERS.clientVersion}: ${trailer.clientVersion}`,
|
|
294
|
-
"",
|
|
295
|
-
`Co-Authored-By: ${SHIPYARD_COAUTHOR}`
|
|
297
|
+
`${HEADERS.attributionType}: ${trailer.attributionType}`
|
|
296
298
|
];
|
|
297
299
|
return lines.join("\n");
|
|
298
300
|
}
|
|
@@ -327,4 +329,4 @@ export {
|
|
|
327
329
|
hasShipyardTrailer,
|
|
328
330
|
appendTrailerToMessage
|
|
329
331
|
};
|
|
330
|
-
//# sourceMappingURL=chunk-
|
|
332
|
+
//# sourceMappingURL=chunk-UQ2COP52.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../packages/roi-aggregator/src/schemas/events.ts","../../../packages/roi-aggregator/src/emit/commit-attributed.ts","../../../packages/roi-aggregator/src/emit/pr-attributed.ts","../../../packages/roi-aggregator/src/emit/pr-merged.ts","../../../packages/roi-aggregator/src/emit/task-ended.ts","../../../packages/roi-aggregator/src/emit/task-started.ts","../../../packages/roi-aggregator/src/schemas/report.ts","../../../packages/roi-aggregator/src/schemas/trailers.ts"],"sourcesContent":["import { z } from 'zod';\n\nexport const ROI_EVENT_TYPE = 'shipyard.roi' as const;\n\nexport const ROI_EVENT_SCHEMA_VERSION = 2 as const;\n\nconst EventBase = z.object({\n version: z.literal(ROI_EVENT_SCHEMA_VERSION),\n taskId: z.string().min(1),\n userId: z.string().min(1),\n timestamp: z.number().int().positive(),\n});\n\nexport const TaskStartedEventSchema = EventBase.extend({\n kind: z.literal('task_started'),\n activeTaskCount: z.number().int().nonnegative(),\n taskType: z.string().max(50).optional(),\n mode: z.string().max(50),\n runtimeId: z.string().min(1).default('claude-code'),\n});\nexport type TaskStartedEvent = z.infer<typeof TaskStartedEventSchema>;\n\nexport const TaskEndedEventSchema = EventBase.extend({\n kind: z.literal('task_ended'),\n finalStatus: z.enum(['completed', 'canceled', 'input_required']),\n totalCostUsd: z.number().nonnegative(),\n totalOutputTokens: z.number().int().nonnegative(),\n turnCount: z.number().int().nonnegative(),\n durationMs: z.number().int().nonnegative(),\n runtimeId: z.string().min(1).default('claude-code'),\n});\nexport type TaskEndedEvent = z.infer<typeof TaskEndedEventSchema>;\n\nexport const AttributionTypeSchema = z.enum(['originated', 'amended', 'extended']);\nexport type AttributionType = z.infer<typeof AttributionTypeSchema>;\n\nexport const CommitAttributedEventSchema = EventBase.extend({\n kind: z.literal('commit_attributed'),\n commitSha: z.string().regex(/^[0-9a-f]{7,40}$/, 'expected hex SHA'),\n repo: z.string().min(1),\n branch: z.string().min(1),\n model: z.string().min(1),\n tokens: z.number().int().nonnegative(),\n costUsd: z.number().nonnegative(),\n turnCount: z.number().int().nonnegative(),\n attributionType: AttributionTypeSchema,\n runtimeId: z.string().min(1).default('claude-code'),\n});\nexport type CommitAttributedEvent = z.infer<typeof CommitAttributedEventSchema>;\n\nexport const PrAttributedEventSchema = EventBase.extend({\n kind: z.literal('pr_attributed'),\n prUrl: z.string().url(),\n prNumber: z.number().int().positive(),\n repo: z.string().min(1),\n runtimeId: z.string().min(1).default('claude-code'),\n});\nexport type PrAttributedEvent = z.infer<typeof PrAttributedEventSchema>;\n\nexport const MergeMethodSchema = z.enum(['github_native', 'graphite_queue']);\nexport type MergeMethod = z.infer<typeof MergeMethodSchema>;\n\nexport const PrMergedEventSchema = EventBase.extend({\n kind: z.literal('pr_merged'),\n prUrl: z.string().url(),\n prNumber: z.number().int().positive(),\n repo: z.string().min(1),\n /** Null for Graphite merge queue — Graphite closes PRs as 'closed' rather than 'merged' and the mergeCommitSha is not exposed by the GitHub API for those. Null still means \"this task's work landed in trunk\", discoverable via the Shipyard-Task-Id trailer grep. */\n mergeCommitSha: z.string().nullable(),\n mergeMethod: MergeMethodSchema,\n mergedAt: z.number().int().positive(),\n runtimeId: z.string().min(1).default('claude-code'),\n});\nexport type PrMergedEvent = z.infer<typeof PrMergedEventSchema>;\n\nexport const RoiEventSchema = z.discriminatedUnion('kind', [\n TaskStartedEventSchema,\n TaskEndedEventSchema,\n CommitAttributedEventSchema,\n PrAttributedEventSchema,\n PrMergedEventSchema,\n]);\nexport type RoiEvent = z.infer<typeof RoiEventSchema>;\n\nexport type RoiEventKind = RoiEvent['kind'];\n\nexport function isRoiEvent(value: unknown): value is RoiEvent {\n return RoiEventSchema.safeParse(value).success;\n}\n\nexport function assertNeverEvent(event: never): never {\n throw new Error(`unhandled ROI event kind: ${JSON.stringify(event)}`);\n}\n","import type { AttributionType } from '../schemas/events';\nimport {\n CommitAttributedEventSchema,\n ROI_EVENT_SCHEMA_VERSION,\n ROI_EVENT_TYPE,\n} from '../schemas/events';\nimport type { MetricsCapture } from './types';\n\nexport interface CommitAttributedInput {\n taskId: string;\n userId: string;\n commitSha: string;\n repo: string;\n branch: string;\n model: string;\n tokens?: number;\n costUsd?: number;\n turnCount?: number;\n attributionType: AttributionType;\n runtimeId: string;\n timestamp?: number;\n}\n\nexport function emitCommitAttributed(\n collector: MetricsCapture,\n input: CommitAttributedInput\n): void {\n const candidate = {\n version: ROI_EVENT_SCHEMA_VERSION,\n kind: 'commit_attributed' as const,\n taskId: input.taskId,\n userId: input.userId,\n timestamp: input.timestamp ?? Date.now(),\n commitSha: input.commitSha,\n repo: input.repo,\n branch: input.branch,\n model: input.model,\n tokens: input.tokens ?? 0,\n costUsd: input.costUsd ?? 0,\n turnCount: input.turnCount ?? 0,\n attributionType: input.attributionType,\n runtimeId: input.runtimeId,\n };\n const parsed = CommitAttributedEventSchema.safeParse(candidate);\n if (!parsed.success) return;\n collector.capture(ROI_EVENT_TYPE, parsed.data);\n}\n","import {\n PrAttributedEventSchema,\n ROI_EVENT_SCHEMA_VERSION,\n ROI_EVENT_TYPE,\n} from '../schemas/events';\nimport type { MetricsCapture } from './types';\n\nexport interface PrAttributedInput {\n taskId: string;\n userId: string;\n prUrl: string;\n prNumber: number;\n repo: string;\n runtimeId?: string;\n timestamp?: number;\n}\n\nexport function emitPrAttributed(collector: MetricsCapture, input: PrAttributedInput): void {\n const candidate = {\n version: ROI_EVENT_SCHEMA_VERSION,\n kind: 'pr_attributed' as const,\n taskId: input.taskId,\n userId: input.userId,\n timestamp: input.timestamp ?? Date.now(),\n prUrl: input.prUrl,\n prNumber: input.prNumber,\n repo: input.repo,\n ...(input.runtimeId !== undefined ? { runtimeId: input.runtimeId } : {}),\n };\n const parsed = PrAttributedEventSchema.safeParse(candidate);\n if (!parsed.success) return;\n collector.capture(ROI_EVENT_TYPE, parsed.data);\n}\n","import {\n type MergeMethod,\n PrMergedEventSchema,\n ROI_EVENT_SCHEMA_VERSION,\n ROI_EVENT_TYPE,\n} from '../schemas/events';\nimport type { MetricsCapture } from './types';\n\nexport interface PrMergedInput {\n taskId: string;\n userId: string;\n prUrl: string;\n prNumber: number;\n repo: string;\n mergeCommitSha: string | null;\n mergeMethod: MergeMethod;\n mergedAt: number;\n runtimeId?: string;\n timestamp?: number;\n}\n\nexport function emitPrMerged(collector: MetricsCapture, input: PrMergedInput): void {\n const candidate = {\n version: ROI_EVENT_SCHEMA_VERSION,\n kind: 'pr_merged' as const,\n taskId: input.taskId,\n userId: input.userId,\n timestamp: input.timestamp ?? Date.now(),\n prUrl: input.prUrl,\n prNumber: input.prNumber,\n repo: input.repo,\n mergeCommitSha: input.mergeCommitSha,\n mergeMethod: input.mergeMethod,\n mergedAt: input.mergedAt,\n ...(input.runtimeId !== undefined ? { runtimeId: input.runtimeId } : {}),\n };\n const parsed = PrMergedEventSchema.safeParse(candidate);\n if (!parsed.success) return;\n collector.capture(ROI_EVENT_TYPE, parsed.data);\n}\n","import { ROI_EVENT_SCHEMA_VERSION, ROI_EVENT_TYPE, TaskEndedEventSchema } from '../schemas/events';\nimport type { MetricsCapture } from './types';\n\nexport interface TaskEndedInput {\n taskId: string;\n userId: string;\n finalStatus: 'completed' | 'canceled' | 'input_required';\n totalCostUsd: number;\n totalOutputTokens: number;\n turnCount: number;\n durationMs: number;\n runtimeId: string;\n timestamp?: number;\n}\n\nexport function emitTaskEnded(collector: MetricsCapture, input: TaskEndedInput): void {\n const candidate = {\n version: ROI_EVENT_SCHEMA_VERSION,\n kind: 'task_ended' as const,\n taskId: input.taskId,\n userId: input.userId,\n timestamp: input.timestamp ?? Date.now(),\n finalStatus: input.finalStatus,\n totalCostUsd: input.totalCostUsd,\n totalOutputTokens: input.totalOutputTokens,\n turnCount: input.turnCount,\n durationMs: input.durationMs,\n runtimeId: input.runtimeId,\n };\n const parsed = TaskEndedEventSchema.safeParse(candidate);\n if (!parsed.success) return;\n collector.capture(ROI_EVENT_TYPE, parsed.data);\n}\n","import {\n ROI_EVENT_SCHEMA_VERSION,\n ROI_EVENT_TYPE,\n TaskStartedEventSchema,\n} from '../schemas/events';\nimport type { MetricsCapture } from './types';\n\nexport interface TaskStartedInput {\n taskId: string;\n userId: string;\n activeTaskCount: number;\n mode: string;\n taskType?: string;\n runtimeId: string;\n timestamp?: number;\n}\n\nexport function emitTaskStarted(collector: MetricsCapture, input: TaskStartedInput): void {\n const candidate = {\n version: ROI_EVENT_SCHEMA_VERSION,\n kind: 'task_started' as const,\n taskId: input.taskId,\n userId: input.userId,\n timestamp: input.timestamp ?? Date.now(),\n activeTaskCount: input.activeTaskCount,\n mode: input.mode,\n taskType: input.taskType,\n runtimeId: input.runtimeId,\n };\n const parsed = TaskStartedEventSchema.safeParse(candidate);\n if (!parsed.success) return;\n collector.capture(ROI_EVENT_TYPE, parsed.data);\n}\n","import { z } from 'zod';\n\nexport const REPORT_SCHEMA_VERSION = 1 as const;\n\nexport const TimeWindowSchema = z.object({\n since: z.string(),\n until: z.string(),\n});\nexport type TimeWindow = z.infer<typeof TimeWindowSchema>;\n\nexport const TimeSeriesPointSchema = z.object({\n bucket: z.string(),\n value: z.number(),\n denominator: z.number().int().nonnegative().optional(),\n});\nexport type TimeSeriesPoint = z.infer<typeof TimeSeriesPointSchema>;\n\nexport const TimeSeriesMetricSchema = z.object({\n metric: z.string(),\n unit: z.string(),\n bucketSize: z.enum(['day', 'week', 'month']),\n series: z.array(TimeSeriesPointSchema),\n});\nexport type TimeSeriesMetric = z.infer<typeof TimeSeriesMetricSchema>;\n\nexport const TaskOutcomeFunnelSchema = z.object({\n tasksStarted: z.number().int().nonnegative(),\n producedCommits: z.number().int().nonnegative(),\n openedPr: z.number().int().nonnegative(),\n merged: z.number().int().nonnegative(),\n abandoned: z.number().int().nonnegative(),\n revertedWithin30d: z.number().int().nonnegative(),\n});\nexport type TaskOutcomeFunnel = z.infer<typeof TaskOutcomeFunnelSchema>;\n\nexport const EngineerScorecardRowSchema = z.object({\n userId: z.string(),\n prsPerWeekDelta: z.number().optional(),\n cycleTimeDelta: z.number().optional(),\n peakParallel: z.number().nonnegative(),\n costPerPrUsd: z.number().nonnegative(),\n revertRate: z.number().min(0).max(1),\n sampleSize: z.number().int().nonnegative(),\n signal: z.enum(['strong', 'modest', 'low-adoption', 'outlier-high', 'insufficient-data']),\n});\nexport type EngineerScorecardRow = z.infer<typeof EngineerScorecardRowSchema>;\n\nexport const FacetBreakdownSchema = z.object({\n facet: z.string(),\n rows: z.array(\n z.object({\n key: z.string(),\n count: z.number().int().nonnegative(),\n costUsd: z.number().nonnegative(),\n mergedPct: z.number().min(0).max(1).optional(),\n abandonedPct: z.number().min(0).max(1).optional(),\n revertedPct: z.number().min(0).max(1).optional(),\n })\n ),\n});\nexport type FacetBreakdown = z.infer<typeof FacetBreakdownSchema>;\n\nexport const RoiTotalsSchema = z.object({\n tasksStarted: z.number().int().nonnegative(),\n tasksAbandoned: z.number().int().nonnegative(),\n tasksShipped: z.number().int().nonnegative(),\n costUsd: z.number().nonnegative(),\n tokens: z.number().int().nonnegative(),\n engineersActive: z.number().int().nonnegative(),\n});\nexport type RoiTotals = z.infer<typeof RoiTotalsSchema>;\n\nexport const RoiKpisSchema = z.object({\n costPerMergedPr: z.number().nonnegative(),\n peakLeverageAvg: z.number().nonnegative(),\n peakLeverageHumanBaseline: z.number().nonnegative().default(1.0),\n revertRateShipyard: z.number().min(0).max(1),\n revertRateManualBaseline: z.number().min(0).max(1).optional(),\n});\nexport type RoiKpis = z.infer<typeof RoiKpisSchema>;\n\nexport const RoiWarningSchema = z.object({\n code: z.string(),\n message: z.string(),\n context: z.record(z.unknown()).default({}),\n});\nexport type RoiWarning = z.infer<typeof RoiWarningSchema>;\n\nexport const RoiReportSchema = z.object({\n schemaVersion: z.literal(REPORT_SCHEMA_VERSION),\n generatedAt: z.string(),\n window: TimeWindowSchema,\n totals: RoiTotalsSchema,\n kpis: RoiKpisSchema,\n series: z.object({\n tokensPerPrWeekly: TimeSeriesMetricSchema,\n concurrentTasksWeekly: TimeSeriesMetricSchema,\n }),\n funnel: TaskOutcomeFunnelSchema,\n byEngineer: z.array(EngineerScorecardRowSchema),\n facets: z.array(FacetBreakdownSchema),\n warnings: z.array(RoiWarningSchema),\n});\nexport type RoiReport = z.infer<typeof RoiReportSchema>;\n","import { z } from 'zod';\nimport { type AttributionType, AttributionTypeSchema } from './events';\n\nexport const TRAILER_SCHEMA_VERSION = 3 as const;\nexport const LEGACY_TRAILER_SCHEMA_VERSION = 2 as const;\n\nexport const GitTrailerV2Schema = z.object({\n version: z.literal(LEGACY_TRAILER_SCHEMA_VERSION),\n taskId: z.string().min(1),\n sessionId: z.string().min(1),\n model: z.string().min(1),\n tokens: z.number().int().nonnegative(),\n costUsd: z.number().nonnegative(),\n turnCount: z.number().int().nonnegative(),\n attributionType: AttributionTypeSchema,\n clientVersion: z.string().min(1),\n});\nexport type GitTrailerV2 = z.infer<typeof GitTrailerV2Schema>;\n\nexport const GitTrailerV3Schema = z.object({\n version: z.literal(TRAILER_SCHEMA_VERSION),\n taskId: z.string().min(1),\n taskUrl: z.string().url(),\n model: z.string().min(1),\n attributionType: AttributionTypeSchema,\n});\nexport type GitTrailerV3 = z.infer<typeof GitTrailerV3Schema>;\n\nexport const GitTrailerSchema = GitTrailerV3Schema;\nexport type GitTrailer = GitTrailerV3;\n\nexport interface ParsedGitTrailer {\n version: typeof LEGACY_TRAILER_SCHEMA_VERSION | typeof TRAILER_SCHEMA_VERSION;\n taskId: string;\n taskUrl?: string;\n model: string;\n attributionType: AttributionType;\n sessionId?: string;\n tokens?: number;\n costUsd?: number;\n turnCount?: number;\n clientVersion?: string;\n}\n\nconst HEADERS = {\n version: 'Shipyard-Version',\n taskId: 'Shipyard-Task-Id',\n taskUrl: 'Shipyard-Task-Url',\n sessionId: 'Shipyard-Session-Id',\n model: 'Shipyard-Model',\n tokens: 'Shipyard-Tokens',\n costUsd: 'Shipyard-Cost-Usd',\n turnCount: 'Shipyard-Turn-Count',\n attributionType: 'Shipyard-Attribution-Type',\n clientVersion: 'Shipyard-Client-Version',\n} as const;\n\nexport function formatTrailer(trailer: GitTrailer): string {\n const lines = [\n `${HEADERS.version}: ${trailer.version}`,\n `${HEADERS.taskId}: ${trailer.taskId}`,\n `${HEADERS.taskUrl}: ${trailer.taskUrl}`,\n `${HEADERS.model}: ${trailer.model}`,\n `${HEADERS.attributionType}: ${trailer.attributionType}`,\n ];\n return lines.join('\\n');\n}\n\nexport type ParseTrailerResult =\n | { success: true; trailer: ParsedGitTrailer }\n | { success: false; error: string };\n\nconst NUMERIC_FIELDS: Record<string, 'int' | 'float'> = {\n [HEADERS.version]: 'int',\n [HEADERS.tokens]: 'int',\n [HEADERS.costUsd]: 'float',\n [HEADERS.turnCount]: 'int',\n};\n\ntype ExtractFieldResult =\n | { ok: true; key: string; value: string | number }\n | { ok: false; error: string }\n | { ok: 'skip' };\n\nfunction extractField(rawLine: string): ExtractFieldResult {\n const line = rawLine.trimEnd();\n if (!line.startsWith('Shipyard-')) return { ok: 'skip' };\n const colonIdx = line.indexOf(':');\n if (colonIdx === -1) return { ok: 'skip' };\n\n const header = line.slice(0, colonIdx).trim();\n const value = line.slice(colonIdx + 1).trim();\n const numericKind = NUMERIC_FIELDS[header];\n\n if (numericKind === undefined) {\n return { ok: true, key: header, value };\n }\n const n = numericKind === 'int' ? Number.parseInt(value, 10) : Number.parseFloat(value);\n if (Number.isNaN(n)) {\n return { ok: false, error: `non-numeric ${header}: ${value}` };\n }\n return { ok: true, key: header, value: n };\n}\n\nexport function parseTrailer(commitMessage: string): ParseTrailerResult {\n const fields: Record<string, string | number> = {};\n for (const rawLine of commitMessage.split(/\\r?\\n/)) {\n const result = extractField(rawLine);\n if (result.ok === false) return { success: false, error: result.error };\n if (result.ok === 'skip') continue;\n fields[result.key] = result.value;\n }\n\n const version = fields[HEADERS.version];\n if (version === LEGACY_TRAILER_SCHEMA_VERSION) {\n const parsed = GitTrailerV2Schema.safeParse({\n version,\n taskId: fields[HEADERS.taskId],\n sessionId: fields[HEADERS.sessionId],\n model: fields[HEADERS.model],\n tokens: fields[HEADERS.tokens],\n costUsd: fields[HEADERS.costUsd],\n turnCount: fields[HEADERS.turnCount],\n attributionType: fields[HEADERS.attributionType],\n clientVersion: fields[HEADERS.clientVersion],\n });\n if (!parsed.success) {\n return { success: false, error: parsed.error.issues.map((i) => i.message).join('; ') };\n }\n return { success: true, trailer: parsed.data };\n }\n\n if (version === TRAILER_SCHEMA_VERSION) {\n const parsed = GitTrailerV3Schema.safeParse({\n version,\n taskId: fields[HEADERS.taskId],\n taskUrl: fields[HEADERS.taskUrl],\n model: fields[HEADERS.model],\n attributionType: fields[HEADERS.attributionType],\n });\n if (!parsed.success) {\n return { success: false, error: parsed.error.issues.map((i) => i.message).join('; ') };\n }\n return { success: true, trailer: parsed.data };\n }\n\n return {\n success: false,\n error:\n version === undefined\n ? `missing ${HEADERS.version}`\n : `unsupported ${HEADERS.version}: ${String(version)}`,\n };\n}\n\nexport function hasShipyardTrailer(commitMessage: string): boolean {\n return commitMessage.includes(`${HEADERS.taskId}:`);\n}\n\nexport function appendTrailerToMessage(originalMessage: string, trailer: GitTrailer): string {\n const body = originalMessage.trimEnd();\n return `${body}\\n\\n${formatTrailer(trailer)}\\n`;\n}\n\nexport type { AttributionType };\nexport { AttributionTypeSchema };\n"],"mappings":";;;;;;AAEO,IAAM,iBAAiB;AAEvB,IAAM,2BAA2B;AAExC,IAAM,YAAY,iBAAE,OAAO;AAAA,EACzB,SAAS,iBAAE,QAAQ,wBAAwB;AAAA,EAC3C,QAAQ,iBAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EACxB,QAAQ,iBAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EACxB,WAAW,iBAAE,OAAO,EAAE,IAAI,EAAE,SAAS;AACvC,CAAC;AAEM,IAAM,yBAAyB,UAAU,OAAO;AAAA,EACrD,MAAM,iBAAE,QAAQ,cAAc;AAAA,EAC9B,iBAAiB,iBAAE,OAAO,EAAE,IAAI,EAAE,YAAY;AAAA,EAC9C,UAAU,iBAAE,OAAO,EAAE,IAAI,EAAE,EAAE,SAAS;AAAA,EACtC,MAAM,iBAAE,OAAO,EAAE,IAAI,EAAE;AAAA,EACvB,WAAW,iBAAE,OAAO,EAAE,IAAI,CAAC,EAAE,QAAQ,aAAa;AACpD,CAAC;AAGM,IAAM,uBAAuB,UAAU,OAAO;AAAA,EACnD,MAAM,iBAAE,QAAQ,YAAY;AAAA,EAC5B,aAAa,iBAAE,KAAK,CAAC,aAAa,YAAY,gBAAgB,CAAC;AAAA,EAC/D,cAAc,iBAAE,OAAO,EAAE,YAAY;AAAA,EACrC,mBAAmB,iBAAE,OAAO,EAAE,IAAI,EAAE,YAAY;AAAA,EAChD,WAAW,iBAAE,OAAO,EAAE,IAAI,EAAE,YAAY;AAAA,EACxC,YAAY,iBAAE,OAAO,EAAE,IAAI,EAAE,YAAY;AAAA,EACzC,WAAW,iBAAE,OAAO,EAAE,IAAI,CAAC,EAAE,QAAQ,aAAa;AACpD,CAAC;AAGM,IAAM,wBAAwB,iBAAE,KAAK,CAAC,cAAc,WAAW,UAAU,CAAC;AAG1E,IAAM,8BAA8B,UAAU,OAAO;AAAA,EAC1D,MAAM,iBAAE,QAAQ,mBAAmB;AAAA,EACnC,WAAW,iBAAE,OAAO,EAAE,MAAM,oBAAoB,kBAAkB;AAAA,EAClE,MAAM,iBAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EACtB,QAAQ,iBAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EACxB,OAAO,iBAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EACvB,QAAQ,iBAAE,OAAO,EAAE,IAAI,EAAE,YAAY;AAAA,EACrC,SAAS,iBAAE,OAAO,EAAE,YAAY;AAAA,EAChC,WAAW,iBAAE,OAAO,EAAE,IAAI,EAAE,YAAY;AAAA,EACxC,iBAAiB;AAAA,EACjB,WAAW,iBAAE,OAAO,EAAE,IAAI,CAAC,EAAE,QAAQ,aAAa;AACpD,CAAC;AAGM,IAAM,0BAA0B,UAAU,OAAO;AAAA,EACtD,MAAM,iBAAE,QAAQ,eAAe;AAAA,EAC/B,OAAO,iBAAE,OAAO,EAAE,IAAI;AAAA,EACtB,UAAU,iBAAE,OAAO,EAAE,IAAI,EAAE,SAAS;AAAA,EACpC,MAAM,iBAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EACtB,WAAW,iBAAE,OAAO,EAAE,IAAI,CAAC,EAAE,QAAQ,aAAa;AACpD,CAAC;AAGM,IAAM,oBAAoB,iBAAE,KAAK,CAAC,iBAAiB,gBAAgB,CAAC;AAGpE,IAAM,sBAAsB,UAAU,OAAO;AAAA,EAClD,MAAM,iBAAE,QAAQ,WAAW;AAAA,EAC3B,OAAO,iBAAE,OAAO,EAAE,IAAI;AAAA,EACtB,UAAU,iBAAE,OAAO,EAAE,IAAI,EAAE,SAAS;AAAA,EACpC,MAAM,iBAAE,OAAO,EAAE,IAAI,CAAC;AAAA;AAAA,EAEtB,gBAAgB,iBAAE,OAAO,EAAE,SAAS;AAAA,EACpC,aAAa;AAAA,EACb,UAAU,iBAAE,OAAO,EAAE,IAAI,EAAE,SAAS;AAAA,EACpC,WAAW,iBAAE,OAAO,EAAE,IAAI,CAAC,EAAE,QAAQ,aAAa;AACpD,CAAC;AAGM,IAAM,iBAAiB,iBAAE,mBAAmB,QAAQ;AAAA,EACzD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AASM,SAAS,iBAAiB,OAAqB;AACpD,QAAM,IAAI,MAAM,6BAA6B,KAAK,UAAU,KAAK,CAAC,EAAE;AACtE;;;ACrEO,SAAS,qBACd,WACA,OACM;AACN,QAAM,YAAY;AAAA,IAChB,SAAS;AAAA,IACT,MAAM;AAAA,IACN,QAAQ,MAAM;AAAA,IACd,QAAQ,MAAM;AAAA,IACd,WAAW,MAAM,aAAa,KAAK,IAAI;AAAA,IACvC,WAAW,MAAM;AAAA,IACjB,MAAM,MAAM;AAAA,IACZ,QAAQ,MAAM;AAAA,IACd,OAAO,MAAM;AAAA,IACb,QAAQ,MAAM,UAAU;AAAA,IACxB,SAAS,MAAM,WAAW;AAAA,IAC1B,WAAW,MAAM,aAAa;AAAA,IAC9B,iBAAiB,MAAM;AAAA,IACvB,WAAW,MAAM;AAAA,EACnB;AACA,QAAM,SAAS,4BAA4B,UAAU,SAAS;AAC9D,MAAI,CAAC,OAAO,QAAS;AACrB,YAAU,QAAQ,gBAAgB,OAAO,IAAI;AAC/C;;;AC7BO,SAAS,iBAAiB,WAA2B,OAAgC;AAC1F,QAAM,YAAY;AAAA,IAChB,SAAS;AAAA,IACT,MAAM;AAAA,IACN,QAAQ,MAAM;AAAA,IACd,QAAQ,MAAM;AAAA,IACd,WAAW,MAAM,aAAa,KAAK,IAAI;AAAA,IACvC,OAAO,MAAM;AAAA,IACb,UAAU,MAAM;AAAA,IAChB,MAAM,MAAM;AAAA,IACZ,GAAI,MAAM,cAAc,SAAY,EAAE,WAAW,MAAM,UAAU,IAAI,CAAC;AAAA,EACxE;AACA,QAAM,SAAS,wBAAwB,UAAU,SAAS;AAC1D,MAAI,CAAC,OAAO,QAAS;AACrB,YAAU,QAAQ,gBAAgB,OAAO,IAAI;AAC/C;;;ACXO,SAAS,aAAa,WAA2B,OAA4B;AAClF,QAAM,YAAY;AAAA,IAChB,SAAS;AAAA,IACT,MAAM;AAAA,IACN,QAAQ,MAAM;AAAA,IACd,QAAQ,MAAM;AAAA,IACd,WAAW,MAAM,aAAa,KAAK,IAAI;AAAA,IACvC,OAAO,MAAM;AAAA,IACb,UAAU,MAAM;AAAA,IAChB,MAAM,MAAM;AAAA,IACZ,gBAAgB,MAAM;AAAA,IACtB,aAAa,MAAM;AAAA,IACnB,UAAU,MAAM;AAAA,IAChB,GAAI,MAAM,cAAc,SAAY,EAAE,WAAW,MAAM,UAAU,IAAI,CAAC;AAAA,EACxE;AACA,QAAM,SAAS,oBAAoB,UAAU,SAAS;AACtD,MAAI,CAAC,OAAO,QAAS;AACrB,YAAU,QAAQ,gBAAgB,OAAO,IAAI;AAC/C;;;ACxBO,SAAS,cAAc,WAA2B,OAA6B;AACpF,QAAM,YAAY;AAAA,IAChB,SAAS;AAAA,IACT,MAAM;AAAA,IACN,QAAQ,MAAM;AAAA,IACd,QAAQ,MAAM;AAAA,IACd,WAAW,MAAM,aAAa,KAAK,IAAI;AAAA,IACvC,aAAa,MAAM;AAAA,IACnB,cAAc,MAAM;AAAA,IACpB,mBAAmB,MAAM;AAAA,IACzB,WAAW,MAAM;AAAA,IACjB,YAAY,MAAM;AAAA,IAClB,WAAW,MAAM;AAAA,EACnB;AACA,QAAM,SAAS,qBAAqB,UAAU,SAAS;AACvD,MAAI,CAAC,OAAO,QAAS;AACrB,YAAU,QAAQ,gBAAgB,OAAO,IAAI;AAC/C;;;ACfO,SAAS,gBAAgB,WAA2B,OAA+B;AACxF,QAAM,YAAY;AAAA,IAChB,SAAS;AAAA,IACT,MAAM;AAAA,IACN,QAAQ,MAAM;AAAA,IACd,QAAQ,MAAM;AAAA,IACd,WAAW,MAAM,aAAa,KAAK,IAAI;AAAA,IACvC,iBAAiB,MAAM;AAAA,IACvB,MAAM,MAAM;AAAA,IACZ,UAAU,MAAM;AAAA,IAChB,WAAW,MAAM;AAAA,EACnB;AACA,QAAM,SAAS,uBAAuB,UAAU,SAAS;AACzD,MAAI,CAAC,OAAO,QAAS;AACrB,YAAU,QAAQ,gBAAgB,OAAO,IAAI;AAC/C;;;AC9BO,IAAM,wBAAwB;AAE9B,IAAM,mBAAmB,iBAAE,OAAO;AAAA,EACvC,OAAO,iBAAE,OAAO;AAAA,EAChB,OAAO,iBAAE,OAAO;AAClB,CAAC;AAGM,IAAM,wBAAwB,iBAAE,OAAO;AAAA,EAC5C,QAAQ,iBAAE,OAAO;AAAA,EACjB,OAAO,iBAAE,OAAO;AAAA,EAChB,aAAa,iBAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,SAAS;AACvD,CAAC;AAGM,IAAM,yBAAyB,iBAAE,OAAO;AAAA,EAC7C,QAAQ,iBAAE,OAAO;AAAA,EACjB,MAAM,iBAAE,OAAO;AAAA,EACf,YAAY,iBAAE,KAAK,CAAC,OAAO,QAAQ,OAAO,CAAC;AAAA,EAC3C,QAAQ,iBAAE,MAAM,qBAAqB;AACvC,CAAC;AAGM,IAAM,0BAA0B,iBAAE,OAAO;AAAA,EAC9C,cAAc,iBAAE,OAAO,EAAE,IAAI,EAAE,YAAY;AAAA,EAC3C,iBAAiB,iBAAE,OAAO,EAAE,IAAI,EAAE,YAAY;AAAA,EAC9C,UAAU,iBAAE,OAAO,EAAE,IAAI,EAAE,YAAY;AAAA,EACvC,QAAQ,iBAAE,OAAO,EAAE,IAAI,EAAE,YAAY;AAAA,EACrC,WAAW,iBAAE,OAAO,EAAE,IAAI,EAAE,YAAY;AAAA,EACxC,mBAAmB,iBAAE,OAAO,EAAE,IAAI,EAAE,YAAY;AAClD,CAAC;AAGM,IAAM,6BAA6B,iBAAE,OAAO;AAAA,EACjD,QAAQ,iBAAE,OAAO;AAAA,EACjB,iBAAiB,iBAAE,OAAO,EAAE,SAAS;AAAA,EACrC,gBAAgB,iBAAE,OAAO,EAAE,SAAS;AAAA,EACpC,cAAc,iBAAE,OAAO,EAAE,YAAY;AAAA,EACrC,cAAc,iBAAE,OAAO,EAAE,YAAY;AAAA,EACrC,YAAY,iBAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC;AAAA,EACnC,YAAY,iBAAE,OAAO,EAAE,IAAI,EAAE,YAAY;AAAA,EACzC,QAAQ,iBAAE,KAAK,CAAC,UAAU,UAAU,gBAAgB,gBAAgB,mBAAmB,CAAC;AAC1F,CAAC;AAGM,IAAM,uBAAuB,iBAAE,OAAO;AAAA,EAC3C,OAAO,iBAAE,OAAO;AAAA,EAChB,MAAM,iBAAE;AAAA,IACN,iBAAE,OAAO;AAAA,MACP,KAAK,iBAAE,OAAO;AAAA,MACd,OAAO,iBAAE,OAAO,EAAE,IAAI,EAAE,YAAY;AAAA,MACpC,SAAS,iBAAE,OAAO,EAAE,YAAY;AAAA,MAChC,WAAW,iBAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE,SAAS;AAAA,MAC7C,cAAc,iBAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE,SAAS;AAAA,MAChD,aAAa,iBAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE,SAAS;AAAA,IACjD,CAAC;AAAA,EACH;AACF,CAAC;AAGM,IAAM,kBAAkB,iBAAE,OAAO;AAAA,EACtC,cAAc,iBAAE,OAAO,EAAE,IAAI,EAAE,YAAY;AAAA,EAC3C,gBAAgB,iBAAE,OAAO,EAAE,IAAI,EAAE,YAAY;AAAA,EAC7C,cAAc,iBAAE,OAAO,EAAE,IAAI,EAAE,YAAY;AAAA,EAC3C,SAAS,iBAAE,OAAO,EAAE,YAAY;AAAA,EAChC,QAAQ,iBAAE,OAAO,EAAE,IAAI,EAAE,YAAY;AAAA,EACrC,iBAAiB,iBAAE,OAAO,EAAE,IAAI,EAAE,YAAY;AAChD,CAAC;AAGM,IAAM,gBAAgB,iBAAE,OAAO;AAAA,EACpC,iBAAiB,iBAAE,OAAO,EAAE,YAAY;AAAA,EACxC,iBAAiB,iBAAE,OAAO,EAAE,YAAY;AAAA,EACxC,2BAA2B,iBAAE,OAAO,EAAE,YAAY,EAAE,QAAQ,CAAG;AAAA,EAC/D,oBAAoB,iBAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC;AAAA,EAC3C,0BAA0B,iBAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE,SAAS;AAC9D,CAAC;AAGM,IAAM,mBAAmB,iBAAE,OAAO;AAAA,EACvC,MAAM,iBAAE,OAAO;AAAA,EACf,SAAS,iBAAE,OAAO;AAAA,EAClB,SAAS,iBAAE,OAAO,iBAAE,QAAQ,CAAC,EAAE,QAAQ,CAAC,CAAC;AAC3C,CAAC;AAGM,IAAM,kBAAkB,iBAAE,OAAO;AAAA,EACtC,eAAe,iBAAE,QAAQ,qBAAqB;AAAA,EAC9C,aAAa,iBAAE,OAAO;AAAA,EACtB,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,QAAQ,iBAAE,OAAO;AAAA,IACf,mBAAmB;AAAA,IACnB,uBAAuB;AAAA,EACzB,CAAC;AAAA,EACD,QAAQ;AAAA,EACR,YAAY,iBAAE,MAAM,0BAA0B;AAAA,EAC9C,QAAQ,iBAAE,MAAM,oBAAoB;AAAA,EACpC,UAAU,iBAAE,MAAM,gBAAgB;AACpC,CAAC;;;ACnGM,IAAM,yBAAyB;AAC/B,IAAM,gCAAgC;AAEtC,IAAM,qBAAqB,iBAAE,OAAO;AAAA,EACzC,SAAS,iBAAE,QAAQ,6BAA6B;AAAA,EAChD,QAAQ,iBAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EACxB,WAAW,iBAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EAC3B,OAAO,iBAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EACvB,QAAQ,iBAAE,OAAO,EAAE,IAAI,EAAE,YAAY;AAAA,EACrC,SAAS,iBAAE,OAAO,EAAE,YAAY;AAAA,EAChC,WAAW,iBAAE,OAAO,EAAE,IAAI,EAAE,YAAY;AAAA,EACxC,iBAAiB;AAAA,EACjB,eAAe,iBAAE,OAAO,EAAE,IAAI,CAAC;AACjC,CAAC;AAGM,IAAM,qBAAqB,iBAAE,OAAO;AAAA,EACzC,SAAS,iBAAE,QAAQ,sBAAsB;AAAA,EACzC,QAAQ,iBAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EACxB,SAAS,iBAAE,OAAO,EAAE,IAAI;AAAA,EACxB,OAAO,iBAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EACvB,iBAAiB;AACnB,CAAC;AAmBD,IAAM,UAAU;AAAA,EACd,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,WAAW;AAAA,EACX,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,WAAW;AAAA,EACX,iBAAiB;AAAA,EACjB,eAAe;AACjB;AAEO,SAAS,cAAc,SAA6B;AACzD,QAAM,QAAQ;AAAA,IACZ,GAAG,QAAQ,OAAO,KAAK,QAAQ,OAAO;AAAA,IACtC,GAAG,QAAQ,MAAM,KAAK,QAAQ,MAAM;AAAA,IACpC,GAAG,QAAQ,OAAO,KAAK,QAAQ,OAAO;AAAA,IACtC,GAAG,QAAQ,KAAK,KAAK,QAAQ,KAAK;AAAA,IAClC,GAAG,QAAQ,eAAe,KAAK,QAAQ,eAAe;AAAA,EACxD;AACA,SAAO,MAAM,KAAK,IAAI;AACxB;AAMA,IAAM,iBAAkD;AAAA,EACtD,CAAC,QAAQ,OAAO,GAAG;AAAA,EACnB,CAAC,QAAQ,MAAM,GAAG;AAAA,EAClB,CAAC,QAAQ,OAAO,GAAG;AAAA,EACnB,CAAC,QAAQ,SAAS,GAAG;AACvB;AA8EO,SAAS,mBAAmB,eAAgC;AACjE,SAAO,cAAc,SAAS,GAAG,QAAQ,MAAM,GAAG;AACpD;AAEO,SAAS,uBAAuB,iBAAyB,SAA6B;AAC3F,QAAM,OAAO,gBAAgB,QAAQ;AACrC,SAAO,GAAG,IAAI;AAAA;AAAA,EAAO,cAAc,OAAO,CAAC;AAAA;AAC7C;","names":[]}
|
package/dist/electron-utility.js
CHANGED
|
@@ -71,7 +71,7 @@ async function main() {
|
|
|
71
71
|
await loadAuthFromConfig(env);
|
|
72
72
|
crumb("post-auth-load");
|
|
73
73
|
crumb("pre-serve-import");
|
|
74
|
-
const { serve } = await import("./serve-
|
|
74
|
+
const { serve } = await import("./serve-RW42I4NC.js");
|
|
75
75
|
crumb("post-serve-import");
|
|
76
76
|
const portQueue = [];
|
|
77
77
|
let acceptor = null;
|
package/dist/index.js
CHANGED
|
@@ -124,12 +124,12 @@ async function handleSubcommand() {
|
|
|
124
124
|
return true;
|
|
125
125
|
}
|
|
126
126
|
if (subcommand === "start") {
|
|
127
|
-
const { startCommand } = await import("./start-
|
|
127
|
+
const { startCommand } = await import("./start-7GIHIERV.js");
|
|
128
128
|
await startCommand();
|
|
129
129
|
return true;
|
|
130
130
|
}
|
|
131
131
|
if (subcommand === "roi") {
|
|
132
|
-
const { roiCommand } = await import("./roi-
|
|
132
|
+
const { roiCommand } = await import("./roi-WN6ZLKUG.js");
|
|
133
133
|
await roiCommand();
|
|
134
134
|
return true;
|
|
135
135
|
}
|
|
@@ -146,7 +146,7 @@ async function main() {
|
|
|
146
146
|
const args = parseCliArgs();
|
|
147
147
|
if (args.serve) {
|
|
148
148
|
await loadAuthFromConfig(env);
|
|
149
|
-
const { serve } = await import("./serve-
|
|
149
|
+
const { serve } = await import("./serve-RW42I4NC.js");
|
|
150
150
|
return serve({ isDev: env.SHIPYARD_DEV });
|
|
151
151
|
}
|
|
152
152
|
logger.error("Use `shipyard start` to run the daemon. Use --help for usage.");
|
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
ROI_EVENT_TYPE,
|
|
5
5
|
RoiEventSchema,
|
|
6
6
|
assertNeverEvent
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-UQ2COP52.js";
|
|
8
8
|
import "./chunk-EHQITHQX.js";
|
|
9
9
|
import {
|
|
10
10
|
logger
|
|
@@ -680,4 +680,4 @@ function renderReport(report, format) {
|
|
|
680
680
|
export {
|
|
681
681
|
roiCommand
|
|
682
682
|
};
|
|
683
|
-
//# sourceMappingURL=roi-
|
|
683
|
+
//# sourceMappingURL=roi-WN6ZLKUG.js.map
|
|
@@ -22,7 +22,7 @@ import {
|
|
|
22
22
|
emitTaskEnded,
|
|
23
23
|
emitTaskStarted,
|
|
24
24
|
hasShipyardTrailer
|
|
25
|
-
} from "./chunk-
|
|
25
|
+
} from "./chunk-UQ2COP52.js";
|
|
26
26
|
import {
|
|
27
27
|
Adapter,
|
|
28
28
|
Bridge,
|
|
@@ -58352,6 +58352,12 @@ async function injectShipyardTrailer(ctx, deps) {
|
|
|
58352
58352
|
return { injected: true, commitSha, branch, repo };
|
|
58353
58353
|
}
|
|
58354
58354
|
|
|
58355
|
+
// src/services/roi/task-url.ts
|
|
58356
|
+
function buildShipyardTaskUrl(taskId) {
|
|
58357
|
+
const baseUrl = validateEnv().SHIPYARD_PRODUCTION_WEB_URL.replace(/\/+$/, "");
|
|
58358
|
+
return `${baseUrl}/tasks/${encodeURIComponent(taskId)}`;
|
|
58359
|
+
}
|
|
58360
|
+
|
|
58355
58361
|
// src/services/roi/commit-sweep.ts
|
|
58356
58362
|
function planBaselineHeal(opts) {
|
|
58357
58363
|
const { lastSeenSha, isAncestor: isAncestor2, headSha, alreadyWarned } = opts;
|
|
@@ -58409,13 +58415,9 @@ async function handleHeadCommit(commit, input, deps) {
|
|
|
58409
58415
|
const trailer = {
|
|
58410
58416
|
version: TRAILER_SCHEMA_VERSION,
|
|
58411
58417
|
taskId,
|
|
58412
|
-
|
|
58418
|
+
taskUrl: payload.taskUrl ?? buildShipyardTaskUrl(taskId),
|
|
58413
58419
|
model: payload.model,
|
|
58414
|
-
|
|
58415
|
-
costUsd: payload.costUsd,
|
|
58416
|
-
turnCount: payload.turnCount,
|
|
58417
|
-
attributionType: "originated",
|
|
58418
|
-
clientVersion: "shipyard-daemon"
|
|
58420
|
+
attributionType: "originated"
|
|
58419
58421
|
};
|
|
58420
58422
|
try {
|
|
58421
58423
|
const result = await deps.injectTrailer({ cwd, trailer }, buildDefaultTrailerInjectDeps());
|
|
@@ -58435,9 +58437,9 @@ async function handleHeadCommit(commit, input, deps) {
|
|
|
58435
58437
|
repo: result.repo,
|
|
58436
58438
|
branch: result.branch,
|
|
58437
58439
|
model: trailer.model,
|
|
58438
|
-
tokens:
|
|
58439
|
-
costUsd:
|
|
58440
|
-
turnCount:
|
|
58440
|
+
tokens: payload.tokens,
|
|
58441
|
+
costUsd: payload.costUsd,
|
|
58442
|
+
turnCount: payload.turnCount,
|
|
58441
58443
|
attributionType: "originated",
|
|
58442
58444
|
runtimeId
|
|
58443
58445
|
});
|
|
@@ -86391,10 +86393,10 @@ var RoiTracker = class {
|
|
|
86391
86393
|
const costBaseline = this.#deps.getCostBaseline();
|
|
86392
86394
|
return {
|
|
86393
86395
|
model: this.#deps.getCurrentModel(),
|
|
86396
|
+
taskUrl: buildShipyardTaskUrl(this.#deps.taskId),
|
|
86394
86397
|
tokens: costBaseline.totalOutputTokens,
|
|
86395
86398
|
costUsd: costBaseline.totalCostUsd,
|
|
86396
|
-
turnCount: this.#roiTurnCount
|
|
86397
|
-
sessionId: this.#deps.getSessionId() ?? `pre-session-${this.#deps.taskId}`
|
|
86399
|
+
turnCount: this.#roiTurnCount
|
|
86398
86400
|
};
|
|
86399
86401
|
},
|
|
86400
86402
|
/** Cursor's per-run repo/branch hint (RunResult.git), when present. */
|
|
@@ -90079,7 +90081,7 @@ var Task = class {
|
|
|
90079
90081
|
* historically read the STATIC construction-time `#deps.runtimeId` (a
|
|
90080
90082
|
* cross-runtime switch flips the live `#runtimeId` but leaves the ROI runtime
|
|
90081
90083
|
* stamp at the original) — preserve that by passing `#deps.runtimeId` here.
|
|
90082
|
-
* `getCwd`, `getCurrentModel`, `getCostBaseline`,
|
|
90084
|
+
* `getCwd`, `getCurrentModel`, `getCostBaseline`, and
|
|
90083
90085
|
* `getSdkGitBranches` are LIVE so the commit-scan attribution observes the
|
|
90084
90086
|
* current values, matching the original verbatim reads.
|
|
90085
90087
|
*/
|
|
@@ -90108,7 +90110,6 @@ var Task = class {
|
|
|
90108
90110
|
*/
|
|
90109
90111
|
getCurrentModel: () => this.#latestSettings.model ?? "unknown",
|
|
90110
90112
|
getCostBaseline: () => this.#usage.getCostBaseline(),
|
|
90111
|
-
getSessionId: () => this.sessionId,
|
|
90112
90113
|
getSdkGitBranches: () => this.#usage.getLastTurnResult()?.gitBranches
|
|
90113
90114
|
};
|
|
90114
90115
|
}
|
|
@@ -100625,4 +100626,4 @@ export {
|
|
|
100625
100626
|
decideWorkspaceScope,
|
|
100626
100627
|
serve
|
|
100627
100628
|
};
|
|
100628
|
-
//# sourceMappingURL=serve-
|
|
100629
|
+
//# sourceMappingURL=serve-RW42I4NC.js.map
|