deepline 0.1.318 → 0.1.319

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.
@@ -157,7 +157,7 @@ export const SDK_RELEASE = {
157
157
  // 0.1.253 makes play-page browser opening opt-in and retires --no-open.
158
158
  // 0.1.254 removes the internal operations tree from the published SDK CLI.
159
159
  // Operators use the checkout-local deepline-admin binary instead.
160
- version: '0.1.318',
160
+ version: '0.1.319',
161
161
  contracts: {
162
162
  api: {
163
163
  name: 'sdk-http-api',
@@ -276,16 +276,30 @@ export interface ToolDefinition {
276
276
  }>;
277
277
  /**
278
278
  * Whether this tool is callable in the current workspace. `false` for a
279
- * bring-your-own-credential provider (e.g. Apollo) that has not been
280
- * connected — the agent should offer to connect it rather than call it.
279
+ * bring-your-own-credential provider that has not been connected.
281
280
  */
282
281
  connected?: boolean;
282
+ /** Whether the tool can be executed. Exact lookup may return non-callable deprecated aliases. */
283
+ callable?: boolean;
284
+ /** True when callers should migrate this exact tool id to its replacement. */
285
+ deprecated?: boolean;
286
+ /** Deprecation reason, replacement, and compatibility execution behavior. */
287
+ deprecation?: {
288
+ replacementToolId: string;
289
+ message: string;
290
+ execution?: 'terminal' | 'forward';
291
+ };
283
292
  /**
284
293
  * Connection status for discovery: `managed` (Deepline-run credentials),
285
294
  * `connected` (your own credential is connected), or `requires_connection`
286
- * (BYO provider not yet connected in this workspace).
295
+ * (BYO provider not yet connected in this workspace). `deprecated` means
296
+ * connecting credentials will not make the tool callable.
287
297
  */
288
- credentialStatus?: 'managed' | 'connected' | 'requires_connection';
298
+ credentialStatus?:
299
+ | 'managed'
300
+ | 'connected'
301
+ | 'requires_connection'
302
+ | 'deprecated';
289
303
  /** True when the tool requires a customer-provided credential to run. */
290
304
  requiresOwnCredential?: boolean;
291
305
  /** Actionable message shown when a connection is required. */
package/dist/cli/index.js CHANGED
@@ -1037,7 +1037,7 @@ var SDK_RELEASE = {
1037
1037
  // 0.1.253 makes play-page browser opening opt-in and retires --no-open.
1038
1038
  // 0.1.254 removes the internal operations tree from the published SDK CLI.
1039
1039
  // Operators use the checkout-local deepline-admin binary instead.
1040
- version: "0.1.318",
1040
+ version: "0.1.319",
1041
1041
  contracts: {
1042
1042
  api: {
1043
1043
  name: "sdk-http-api",
@@ -28589,14 +28589,23 @@ function toolContractJsonForDescribe(tool, requestedToolId) {
28589
28589
  "deeplineUsdPerPricingUnit",
28590
28590
  "deepline_usd_per_pricing_unit"
28591
28591
  );
28592
- const starterScript = !isPlayLikeTool(tool) && extractedLists.length > 0 ? starterScriptJson(
28592
+ const deprecation = recordField2(tool, "deprecation");
28593
+ const replacementToolId = stringField2(
28594
+ deprecation,
28595
+ "replacementToolId",
28596
+ "replacement_tool_id"
28597
+ );
28598
+ const deprecationMessage = stringField2(deprecation, "message");
28599
+ const deprecationExecution = stringField2(deprecation, "execution");
28600
+ const deprecated = tool.deprecated === true || stringField2(tool, "credentialStatus", "credential_status") === "deprecated";
28601
+ const starterScript = !deprecated && !isPlayLikeTool(tool) && extractedLists.length > 0 ? starterScriptJson(
28593
28602
  seedToolListScript({
28594
28603
  toolId,
28595
28604
  payload: samplePayloadForInputFields(inputFields),
28596
28605
  rows: []
28597
28606
  })
28598
28607
  ) : null;
28599
- const executeCommand = isPlayLikeTool(tool) ? playRunCommandForTool(tool, toolId) : `deepline tools execute ${toolId} --input '{...}' --json`;
28608
+ const executeCommand = deprecated && replacementToolId ? `deepline tools execute ${replacementToolId} --input '{...}' --json` : isPlayLikeTool(tool) ? playRunCommandForTool(tool, toolId) : `deepline tools execute ${toolId} --input '{...}' --json`;
28600
28609
  return {
28601
28610
  schemaVersion: 1,
28602
28611
  toolId,
@@ -28604,6 +28613,15 @@ function toolContractJsonForDescribe(tool, requestedToolId) {
28604
28613
  displayName: tool.displayName,
28605
28614
  description: tool.description,
28606
28615
  categories: tool.categories,
28616
+ ...deprecated ? {
28617
+ deprecated: true,
28618
+ callable: tool.callable !== false,
28619
+ deprecation: {
28620
+ replacementToolId,
28621
+ message: deprecationMessage,
28622
+ ...deprecationExecution ? { execution: deprecationExecution } : {}
28623
+ }
28624
+ } : {},
28607
28625
  inputFields: inputFields.map((field) => ({
28608
28626
  name: field.name,
28609
28627
  type: field.type ?? "unknown",
@@ -28746,6 +28764,29 @@ function printCompactToolContract(tool, requestedToolId) {
28746
28764
  if (Array.isArray(contract.categories) && contract.categories.length) {
28747
28765
  console.log(`Tags: ${contract.categories.join(", ")}`);
28748
28766
  }
28767
+ if (contract.deprecated === true) {
28768
+ const deprecation = isRecord11(contract.deprecation) ? contract.deprecation : {};
28769
+ const message = stringField2(deprecation, "message");
28770
+ const replacementToolId = stringField2(
28771
+ deprecation,
28772
+ "replacementToolId",
28773
+ "replacement_tool_id"
28774
+ );
28775
+ console.log(
28776
+ contract.callable === false ? "Status: deprecated \u2014 this tool cannot be executed" : "Status: deprecated \u2014 legacy executions forward for compatibility"
28777
+ );
28778
+ if (message) console.log(`Migration: ${message}`);
28779
+ if (replacementToolId) {
28780
+ console.log(
28781
+ `Use: deepline tools execute ${replacementToolId} --input '{...}'`
28782
+ );
28783
+ }
28784
+ console.log("");
28785
+ console.log(
28786
+ `More: deepline tools describe ${replacementToolId || contract.toolId} --json`
28787
+ );
28788
+ return;
28789
+ }
28749
28790
  printToolPricingOnly(tool, requestedToolId, { heading: "Cost" });
28750
28791
  if (inputFields.length) {
28751
28792
  console.log("");
@@ -29245,6 +29286,32 @@ function samplePayload(samples, key) {
29245
29286
  function commandEnvelopeFromRawResponse(rawResponse) {
29246
29287
  return isRecord11(rawResponse) ? { ...rawResponse } : { status: "completed", result: rawResponse };
29247
29288
  }
29289
+ function extractToolExecutionWarningMessages(rawResponse) {
29290
+ if (!isRecord11(rawResponse)) return [];
29291
+ const candidates = [
29292
+ recordField2(recordField2(rawResponse, "toolResponse"), "meta"),
29293
+ recordField2(
29294
+ recordField2(recordField2(rawResponse, "toolResponse"), "raw"),
29295
+ "meta"
29296
+ ),
29297
+ recordField2(rawResponse, "meta"),
29298
+ recordField2(recordField2(rawResponse, "result"), "meta")
29299
+ ];
29300
+ const messages = [];
29301
+ for (const candidate of candidates) {
29302
+ const warnings = candidate?.warnings;
29303
+ if (!Array.isArray(warnings)) continue;
29304
+ for (const warning of warnings) {
29305
+ if (typeof warning === "string" && warning.trim()) {
29306
+ messages.push(warning.trim());
29307
+ } else if (isRecord11(warning)) {
29308
+ const message = stringField2(warning, "message");
29309
+ if (message) messages.push(message);
29310
+ }
29311
+ }
29312
+ }
29313
+ return [...new Set(messages)];
29314
+ }
29248
29315
  function apifySyncRecoveryNext(rawResponse) {
29249
29316
  if (!isRecord11(rawResponse) || rawResponse.status !== "running") return null;
29250
29317
  const toolResponse = recordField2(rawResponse, "toolResponse");
@@ -29512,6 +29579,9 @@ export default definePlay(${JSON.stringify(playName)}, async (ctx) => {
29512
29579
  }
29513
29580
  function buildToolExecuteBaseEnvelope(input2) {
29514
29581
  const envelope = commandEnvelopeFromRawResponse(input2.rawResponse);
29582
+ const warningMessages = extractToolExecutionWarningMessages(
29583
+ input2.rawResponse
29584
+ );
29515
29585
  const apifyRecovery = apifySyncRecoveryNext(input2.rawResponse);
29516
29586
  const summaryEntries = Object.entries(input2.summary);
29517
29587
  const outputPreview = input2.listConversion ? {
@@ -29549,6 +29619,7 @@ function buildToolExecuteBaseEnvelope(input2) {
29549
29619
  ...envelope,
29550
29620
  ...envelopeHasCanonicalOutput || envelopeHasDeclaredOutput ? { output_preview: outputPreview } : { output: outputPreview },
29551
29621
  ...summaryEntries.length > 0 ? { summary: input2.summary } : {},
29622
+ ...warningMessages.length > 0 ? { warnings: warningMessages } : {},
29552
29623
  next: {
29553
29624
  inspect: inspectCommand,
29554
29625
  ...apifyRecovery ?? {},
@@ -29560,6 +29631,7 @@ function buildToolExecuteBaseEnvelope(input2) {
29560
29631
  },
29561
29632
  render: {
29562
29633
  sections: input2.listConversion ? [
29634
+ ...warningMessages.length > 0 ? [{ title: "warnings", lines: warningMessages }] : [],
29563
29635
  {
29564
29636
  title: "output",
29565
29637
  lines: [
@@ -29570,6 +29642,7 @@ function buildToolExecuteBaseEnvelope(input2) {
29570
29642
  ]
29571
29643
  }
29572
29644
  ] : [
29645
+ ...warningMessages.length > 0 ? [{ title: "warnings", lines: warningMessages }] : [],
29573
29646
  {
29574
29647
  title: "result",
29575
29648
  lines: apifyRecovery ? [
@@ -1022,7 +1022,7 @@ var SDK_RELEASE = {
1022
1022
  // 0.1.253 makes play-page browser opening opt-in and retires --no-open.
1023
1023
  // 0.1.254 removes the internal operations tree from the published SDK CLI.
1024
1024
  // Operators use the checkout-local deepline-admin binary instead.
1025
- version: "0.1.318",
1025
+ version: "0.1.319",
1026
1026
  contracts: {
1027
1027
  api: {
1028
1028
  name: "sdk-http-api",
@@ -28637,14 +28637,23 @@ function toolContractJsonForDescribe(tool, requestedToolId) {
28637
28637
  "deeplineUsdPerPricingUnit",
28638
28638
  "deepline_usd_per_pricing_unit"
28639
28639
  );
28640
- const starterScript = !isPlayLikeTool(tool) && extractedLists.length > 0 ? starterScriptJson(
28640
+ const deprecation = recordField2(tool, "deprecation");
28641
+ const replacementToolId = stringField2(
28642
+ deprecation,
28643
+ "replacementToolId",
28644
+ "replacement_tool_id"
28645
+ );
28646
+ const deprecationMessage = stringField2(deprecation, "message");
28647
+ const deprecationExecution = stringField2(deprecation, "execution");
28648
+ const deprecated = tool.deprecated === true || stringField2(tool, "credentialStatus", "credential_status") === "deprecated";
28649
+ const starterScript = !deprecated && !isPlayLikeTool(tool) && extractedLists.length > 0 ? starterScriptJson(
28641
28650
  seedToolListScript({
28642
28651
  toolId,
28643
28652
  payload: samplePayloadForInputFields(inputFields),
28644
28653
  rows: []
28645
28654
  })
28646
28655
  ) : null;
28647
- const executeCommand = isPlayLikeTool(tool) ? playRunCommandForTool(tool, toolId) : `deepline tools execute ${toolId} --input '{...}' --json`;
28656
+ const executeCommand = deprecated && replacementToolId ? `deepline tools execute ${replacementToolId} --input '{...}' --json` : isPlayLikeTool(tool) ? playRunCommandForTool(tool, toolId) : `deepline tools execute ${toolId} --input '{...}' --json`;
28648
28657
  return {
28649
28658
  schemaVersion: 1,
28650
28659
  toolId,
@@ -28652,6 +28661,15 @@ function toolContractJsonForDescribe(tool, requestedToolId) {
28652
28661
  displayName: tool.displayName,
28653
28662
  description: tool.description,
28654
28663
  categories: tool.categories,
28664
+ ...deprecated ? {
28665
+ deprecated: true,
28666
+ callable: tool.callable !== false,
28667
+ deprecation: {
28668
+ replacementToolId,
28669
+ message: deprecationMessage,
28670
+ ...deprecationExecution ? { execution: deprecationExecution } : {}
28671
+ }
28672
+ } : {},
28655
28673
  inputFields: inputFields.map((field) => ({
28656
28674
  name: field.name,
28657
28675
  type: field.type ?? "unknown",
@@ -28794,6 +28812,29 @@ function printCompactToolContract(tool, requestedToolId) {
28794
28812
  if (Array.isArray(contract.categories) && contract.categories.length) {
28795
28813
  console.log(`Tags: ${contract.categories.join(", ")}`);
28796
28814
  }
28815
+ if (contract.deprecated === true) {
28816
+ const deprecation = isRecord11(contract.deprecation) ? contract.deprecation : {};
28817
+ const message = stringField2(deprecation, "message");
28818
+ const replacementToolId = stringField2(
28819
+ deprecation,
28820
+ "replacementToolId",
28821
+ "replacement_tool_id"
28822
+ );
28823
+ console.log(
28824
+ contract.callable === false ? "Status: deprecated \u2014 this tool cannot be executed" : "Status: deprecated \u2014 legacy executions forward for compatibility"
28825
+ );
28826
+ if (message) console.log(`Migration: ${message}`);
28827
+ if (replacementToolId) {
28828
+ console.log(
28829
+ `Use: deepline tools execute ${replacementToolId} --input '{...}'`
28830
+ );
28831
+ }
28832
+ console.log("");
28833
+ console.log(
28834
+ `More: deepline tools describe ${replacementToolId || contract.toolId} --json`
28835
+ );
28836
+ return;
28837
+ }
28797
28838
  printToolPricingOnly(tool, requestedToolId, { heading: "Cost" });
28798
28839
  if (inputFields.length) {
28799
28840
  console.log("");
@@ -29293,6 +29334,32 @@ function samplePayload(samples, key) {
29293
29334
  function commandEnvelopeFromRawResponse(rawResponse) {
29294
29335
  return isRecord11(rawResponse) ? { ...rawResponse } : { status: "completed", result: rawResponse };
29295
29336
  }
29337
+ function extractToolExecutionWarningMessages(rawResponse) {
29338
+ if (!isRecord11(rawResponse)) return [];
29339
+ const candidates = [
29340
+ recordField2(recordField2(rawResponse, "toolResponse"), "meta"),
29341
+ recordField2(
29342
+ recordField2(recordField2(rawResponse, "toolResponse"), "raw"),
29343
+ "meta"
29344
+ ),
29345
+ recordField2(rawResponse, "meta"),
29346
+ recordField2(recordField2(rawResponse, "result"), "meta")
29347
+ ];
29348
+ const messages = [];
29349
+ for (const candidate of candidates) {
29350
+ const warnings = candidate?.warnings;
29351
+ if (!Array.isArray(warnings)) continue;
29352
+ for (const warning of warnings) {
29353
+ if (typeof warning === "string" && warning.trim()) {
29354
+ messages.push(warning.trim());
29355
+ } else if (isRecord11(warning)) {
29356
+ const message = stringField2(warning, "message");
29357
+ if (message) messages.push(message);
29358
+ }
29359
+ }
29360
+ }
29361
+ return [...new Set(messages)];
29362
+ }
29296
29363
  function apifySyncRecoveryNext(rawResponse) {
29297
29364
  if (!isRecord11(rawResponse) || rawResponse.status !== "running") return null;
29298
29365
  const toolResponse = recordField2(rawResponse, "toolResponse");
@@ -29560,6 +29627,9 @@ export default definePlay(${JSON.stringify(playName)}, async (ctx) => {
29560
29627
  }
29561
29628
  function buildToolExecuteBaseEnvelope(input2) {
29562
29629
  const envelope = commandEnvelopeFromRawResponse(input2.rawResponse);
29630
+ const warningMessages = extractToolExecutionWarningMessages(
29631
+ input2.rawResponse
29632
+ );
29563
29633
  const apifyRecovery = apifySyncRecoveryNext(input2.rawResponse);
29564
29634
  const summaryEntries = Object.entries(input2.summary);
29565
29635
  const outputPreview = input2.listConversion ? {
@@ -29597,6 +29667,7 @@ function buildToolExecuteBaseEnvelope(input2) {
29597
29667
  ...envelope,
29598
29668
  ...envelopeHasCanonicalOutput || envelopeHasDeclaredOutput ? { output_preview: outputPreview } : { output: outputPreview },
29599
29669
  ...summaryEntries.length > 0 ? { summary: input2.summary } : {},
29670
+ ...warningMessages.length > 0 ? { warnings: warningMessages } : {},
29600
29671
  next: {
29601
29672
  inspect: inspectCommand,
29602
29673
  ...apifyRecovery ?? {},
@@ -29608,6 +29679,7 @@ function buildToolExecuteBaseEnvelope(input2) {
29608
29679
  },
29609
29680
  render: {
29610
29681
  sections: input2.listConversion ? [
29682
+ ...warningMessages.length > 0 ? [{ title: "warnings", lines: warningMessages }] : [],
29611
29683
  {
29612
29684
  title: "output",
29613
29685
  lines: [
@@ -29618,6 +29690,7 @@ function buildToolExecuteBaseEnvelope(input2) {
29618
29690
  ]
29619
29691
  }
29620
29692
  ] : [
29693
+ ...warningMessages.length > 0 ? [{ title: "warnings", lines: warningMessages }] : [],
29621
29694
  {
29622
29695
  title: "result",
29623
29696
  lines: apifyRecovery ? [
package/dist/index.d.mts CHANGED
@@ -355,16 +355,26 @@ interface ToolDefinition {
355
355
  }>;
356
356
  /**
357
357
  * Whether this tool is callable in the current workspace. `false` for a
358
- * bring-your-own-credential provider (e.g. Apollo) that has not been
359
- * connected — the agent should offer to connect it rather than call it.
358
+ * bring-your-own-credential provider that has not been connected.
360
359
  */
361
360
  connected?: boolean;
361
+ /** Whether the tool can be executed. Exact lookup may return non-callable deprecated aliases. */
362
+ callable?: boolean;
363
+ /** True when callers should migrate this exact tool id to its replacement. */
364
+ deprecated?: boolean;
365
+ /** Deprecation reason, replacement, and compatibility execution behavior. */
366
+ deprecation?: {
367
+ replacementToolId: string;
368
+ message: string;
369
+ execution?: 'terminal' | 'forward';
370
+ };
362
371
  /**
363
372
  * Connection status for discovery: `managed` (Deepline-run credentials),
364
373
  * `connected` (your own credential is connected), or `requires_connection`
365
- * (BYO provider not yet connected in this workspace).
374
+ * (BYO provider not yet connected in this workspace). `deprecated` means
375
+ * connecting credentials will not make the tool callable.
366
376
  */
367
- credentialStatus?: 'managed' | 'connected' | 'requires_connection';
377
+ credentialStatus?: 'managed' | 'connected' | 'requires_connection' | 'deprecated';
368
378
  /** True when the tool requires a customer-provided credential to run. */
369
379
  requiresOwnCredential?: boolean;
370
380
  /** Actionable message shown when a connection is required. */
package/dist/index.d.ts CHANGED
@@ -355,16 +355,26 @@ interface ToolDefinition {
355
355
  }>;
356
356
  /**
357
357
  * Whether this tool is callable in the current workspace. `false` for a
358
- * bring-your-own-credential provider (e.g. Apollo) that has not been
359
- * connected — the agent should offer to connect it rather than call it.
358
+ * bring-your-own-credential provider that has not been connected.
360
359
  */
361
360
  connected?: boolean;
361
+ /** Whether the tool can be executed. Exact lookup may return non-callable deprecated aliases. */
362
+ callable?: boolean;
363
+ /** True when callers should migrate this exact tool id to its replacement. */
364
+ deprecated?: boolean;
365
+ /** Deprecation reason, replacement, and compatibility execution behavior. */
366
+ deprecation?: {
367
+ replacementToolId: string;
368
+ message: string;
369
+ execution?: 'terminal' | 'forward';
370
+ };
362
371
  /**
363
372
  * Connection status for discovery: `managed` (Deepline-run credentials),
364
373
  * `connected` (your own credential is connected), or `requires_connection`
365
- * (BYO provider not yet connected in this workspace).
374
+ * (BYO provider not yet connected in this workspace). `deprecated` means
375
+ * connecting credentials will not make the tool callable.
366
376
  */
367
- credentialStatus?: 'managed' | 'connected' | 'requires_connection';
377
+ credentialStatus?: 'managed' | 'connected' | 'requires_connection' | 'deprecated';
368
378
  /** True when the tool requires a customer-provided credential to run. */
369
379
  requiresOwnCredential?: boolean;
370
380
  /** Actionable message shown when a connection is required. */
package/dist/index.js CHANGED
@@ -760,7 +760,7 @@ var SDK_RELEASE = {
760
760
  // 0.1.253 makes play-page browser opening opt-in and retires --no-open.
761
761
  // 0.1.254 removes the internal operations tree from the published SDK CLI.
762
762
  // Operators use the checkout-local deepline-admin binary instead.
763
- version: "0.1.318",
763
+ version: "0.1.319",
764
764
  contracts: {
765
765
  api: {
766
766
  name: "sdk-http-api",
package/dist/index.mjs CHANGED
@@ -686,7 +686,7 @@ var SDK_RELEASE = {
686
686
  // 0.1.253 makes play-page browser opening opt-in and retires --no-open.
687
687
  // 0.1.254 removes the internal operations tree from the published SDK CLI.
688
688
  // Operators use the checkout-local deepline-admin binary instead.
689
- version: "0.1.318",
689
+ version: "0.1.319",
690
690
  contracts: {
691
691
  api: {
692
692
  name: "sdk-http-api",
@@ -1,27 +1,30 @@
1
1
 
2
2
  :root {
3
- --bg: #0d1117;
4
- --bg-secondary: #161b22;
5
- --bg-tertiary: #21262d;
6
- --border: #30363d;
7
- --text: #e6edf3;
8
- --text-dim: #8b949e;
9
- --text-dimmer: #6e7681;
10
- --green: #3fb950;
11
- --red: #f85149;
12
- --yellow: #d29922;
13
- --blue: #58a6ff;
14
- --purple: #bc8cff;
15
- --orange: #f0883e;
16
- --cyan: #39d2c0;
3
+ --bg: var(--background);
4
+ --bg-secondary: var(--background-secondary);
5
+ --bg-tertiary: var(--background-tertiary);
6
+ --text: var(--foreground);
7
+ --text-dim: var(--foreground-secondary);
8
+ --text-dimmer: var(--foreground-muted);
9
+ --green: var(--status-success-foreground);
10
+ --red: var(--status-error-foreground);
11
+ --yellow: var(--status-warning-foreground);
12
+ --blue: var(--primary-text);
13
+ --purple: var(--color-silver-400);
14
+ --orange: var(--status-warning-foreground);
15
+ --cyan: var(--status-info-foreground);
17
16
  }
18
17
  * { margin: 0; padding: 0; box-sizing: border-box; }
19
18
  body {
20
19
  background: var(--bg);
21
20
  color: var(--text);
22
- font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif;
21
+ font-family: var(--font-base);
23
22
  font-size: 14px;
24
23
  line-height: 1.5;
24
+ letter-spacing: -0.011em;
25
+ -webkit-font-smoothing: antialiased;
26
+ -moz-osx-font-smoothing: grayscale;
27
+ text-rendering: optimizeLegibility;
25
28
  }
26
29
  .layout { display: flex; height: 100vh; }
27
30
  .sidebar {
@@ -36,7 +39,7 @@ body {
36
39
  padding: 10px 16px;
37
40
  cursor: pointer;
38
41
  border-left: 3px solid transparent;
39
- transition: background 0.15s;
42
+ transition: background-color var(--duration-normal) var(--ease-standard);
40
43
  font-size: 13px;
41
44
  }
42
45
  .sidebar-item:hover { background: var(--bg-tertiary); }
@@ -54,7 +57,7 @@ body {
54
57
  .sidebar-compare kbd {
55
58
  background: var(--bg-tertiary);
56
59
  border: 1px solid var(--border);
57
- border-radius: 3px;
60
+ border-radius: var(--radius-icon);
58
61
  padding: 0 4px;
59
62
  font-size: 10px;
60
63
  font-family: inherit;
@@ -64,7 +67,7 @@ body {
64
67
  .header {
65
68
  background: var(--bg-secondary);
66
69
  border: 1px solid var(--border);
67
- border-radius: 8px;
70
+ border-radius: var(--radius-lg);
68
71
  padding: 20px 24px;
69
72
  margin-bottom: 20px;
70
73
  }
@@ -99,7 +102,7 @@ body {
99
102
  gap: 4px;
100
103
  background: var(--bg);
101
104
  border: 1px solid var(--border);
102
- border-radius: 4px;
105
+ border-radius: var(--radius-sm);
103
106
  padding: 2px 8px;
104
107
  font-size: 12px;
105
108
  }
@@ -150,7 +153,7 @@ body {
150
153
  line-height: 1.6;
151
154
  white-space: pre-wrap;
152
155
  word-break: break-word;
153
- background: rgba(63,185,80,0.04);
156
+ background: color-mix(in srgb, var(--status-success-accent) 4%, transparent);
154
157
  }
155
158
  .user-message.collapsed { max-height: 100px; overflow: hidden; position: relative; }
156
159
  .user-message.collapsed::after {
@@ -184,7 +187,7 @@ body {
184
187
  white-space: pre-wrap;
185
188
  word-break: break-word;
186
189
  font-style: italic;
187
- background: rgba(188,140,255,0.03);
190
+ background: color-mix(in srgb, var(--color-silver-400) 3%, transparent);
188
191
  }
189
192
  .thinking.collapsed { max-height: 100px; overflow: hidden; position: relative; }
190
193
  .thinking.collapsed::after {
@@ -231,10 +234,10 @@ body {
231
234
  align-items: center;
232
235
  gap: 12px;
233
236
  padding: 6px 12px;
234
- border-radius: 6px;
237
+ border-radius: var(--radius-md);
235
238
  cursor: pointer;
236
- transition: background 0.15s;
237
- font-family: 'SF Mono', 'Fira Code', 'Fira Mono', Menlo, Consolas, monospace;
239
+ transition: background-color var(--duration-normal) var(--ease-standard);
240
+ font-family: var(--font-mono);
238
241
  font-size: 13px;
239
242
  }
240
243
  .tool-row:hover { background: var(--bg-secondary); }
@@ -244,15 +247,15 @@ body {
244
247
  .tool-status {
245
248
  display: inline-block;
246
249
  padding: 1px 8px;
247
- border-radius: 10px;
250
+ border-radius: var(--radius-control);
248
251
  font-size: 11px;
249
252
  font-weight: 600;
250
253
  min-width: 42px;
251
254
  text-align: center;
252
255
  }
253
- .tool-status.ok { background: rgba(63,185,80,0.15); color: var(--green); }
254
- .tool-status.fail { background: rgba(248,81,73,0.15); color: var(--red); }
255
- .tool-status.unknown { background: rgba(139,148,158,0.15); color: var(--text-dim); }
256
+ .tool-status.ok { background: color-mix(in srgb, var(--status-success-accent) 15%, transparent); color: var(--green); }
257
+ .tool-status.fail { background: color-mix(in srgb, var(--status-error-accent) 15%, transparent); color: var(--red); }
258
+ .tool-status.unknown { background: color-mix(in srgb, var(--foreground-muted) 15%, transparent); color: var(--text-dim); }
256
259
  .tool-name {
257
260
  font-weight: 600;
258
261
  min-width: 70px;
@@ -274,22 +277,22 @@ body {
274
277
  color: var(--text-dimmer);
275
278
  background: var(--bg-tertiary);
276
279
  border: 1px solid var(--border);
277
- border-radius: 4px;
280
+ border-radius: var(--radius-sm);
278
281
  padding: 0 5px;
279
282
  white-space: nowrap;
280
283
  }
281
284
  .loop-badge {
282
285
  color: var(--yellow);
283
- border-color: rgba(210,153,34,0.4);
284
- background: rgba(210,153,34,0.08);
286
+ border-color: color-mix(in srgb, var(--status-warning-accent) 40%, transparent);
287
+ background: color-mix(in srgb, var(--status-warning-accent) 8%, transparent);
285
288
  }
286
289
  .repeat-badge {
287
290
  margin-left: 6px;
288
291
  font-size: 10px;
289
292
  color: var(--text-dimmer);
290
- background: rgba(120,120,180,0.08);
291
- border: 1px solid rgba(120,120,180,0.3);
292
- border-radius: 4px;
293
+ background: color-mix(in srgb, var(--color-silver-400) 8%, transparent);
294
+ border: 1px solid color-mix(in srgb, var(--color-silver-400) 30%, transparent);
295
+ border-radius: var(--radius-sm);
293
296
  padding: 0 5px;
294
297
  white-space: nowrap;
295
298
  cursor: help;
@@ -319,7 +322,7 @@ body {
319
322
  margin-left: 48px;
320
323
  margin-bottom: 12px;
321
324
  border: 1px solid var(--border);
322
- border-radius: 6px;
325
+ border-radius: var(--radius-md);
323
326
  overflow: hidden;
324
327
  }
325
328
  .tool-detail.open { display: block; }
@@ -337,12 +340,12 @@ body {
337
340
  }
338
341
  .tool-detail-section pre {
339
342
  background: var(--bg);
340
- border-radius: 4px;
343
+ border-radius: var(--radius-sm);
341
344
  padding: 10px 14px;
342
345
  overflow-x: auto;
343
346
  font-size: 12px;
344
347
  line-height: 1.5;
345
- font-family: 'SF Mono', 'Fira Code', 'Fira Mono', Menlo, Consolas, monospace;
348
+ font-family: var(--font-mono);
346
349
  white-space: pre-wrap;
347
350
  word-break: break-word;
348
351
  max-height: 400px;
@@ -351,13 +354,13 @@ body {
351
354
  }
352
355
  .tool-detail-section pre.error-content {
353
356
  border: 1px solid var(--red);
354
- background: rgba(248,81,73,0.06);
357
+ background: color-mix(in srgb, var(--status-error-accent) 6%, transparent);
355
358
  }
356
359
  .tool-detail-toggle {
357
360
  margin-top: 8px;
358
361
  background: var(--bg-tertiary);
359
362
  border: 1px solid var(--border);
360
- border-radius: 4px;
363
+ border-radius: var(--radius-sm);
361
364
  color: var(--blue);
362
365
  cursor: pointer;
363
366
  font-size: 12px;
@@ -369,7 +372,7 @@ body {
369
372
  .result-card {
370
373
  background: var(--bg-secondary);
371
374
  border: 1px solid var(--border);
372
- border-radius: 8px;
375
+ border-radius: var(--radius-lg);
373
376
  padding: 20px 24px;
374
377
  margin-top: 20px;
375
378
  }
@@ -392,7 +395,7 @@ body {
392
395
  flex: 1;
393
396
  background: var(--bg-secondary);
394
397
  border: 1px solid var(--border);
395
- border-radius: 6px;
398
+ border-radius: var(--radius-md);
396
399
  padding: 8px 12px;
397
400
  color: var(--text);
398
401
  font-size: 13px;
@@ -404,7 +407,7 @@ body {
404
407
  .filter-btn {
405
408
  background: var(--bg-secondary);
406
409
  border: 1px solid var(--border);
407
- border-radius: 6px;
410
+ border-radius: var(--radius-md);
408
411
  padding: 8px 12px;
409
412
  color: var(--text-dim);
410
413
  font-size: 12px;
@@ -417,7 +420,7 @@ body {
417
420
  .prompt-card {
418
421
  background: var(--bg-secondary);
419
422
  border: 1px solid var(--border);
420
- border-radius: 8px;
423
+ border-radius: var(--radius-lg);
421
424
  padding: 16px 20px;
422
425
  margin-bottom: 16px;
423
426
  }
@@ -440,11 +443,11 @@ body {
440
443
  font-size: 11px;
441
444
  font-weight: 600;
442
445
  padding: 2px 8px;
443
- border-radius: 10px;
446
+ border-radius: var(--radius-control);
444
447
  vertical-align: middle;
445
448
  }
446
- .timing-badge.exact { background: rgba(63,185,80,0.15); color: var(--green); }
447
- .timing-badge.estimated { background: rgba(210,153,34,0.15); color: var(--yellow); }
449
+ .timing-badge.exact { background: color-mix(in srgb, var(--status-success-accent) 15%, transparent); color: var(--green); }
450
+ .timing-badge.estimated { background: color-mix(in srgb, var(--status-warning-accent) 15%, transparent); color: var(--yellow); }
448
451
 
449
452
  /* Live badge */
450
453
  .live-badge {
@@ -452,8 +455,8 @@ body {
452
455
  font-size: 11px;
453
456
  font-weight: 700;
454
457
  padding: 2px 10px;
455
- border-radius: 10px;
456
- background: rgba(248,81,73,0.15);
458
+ border-radius: var(--radius-control);
459
+ background: color-mix(in srgb, var(--status-error-accent) 15%, transparent);
457
460
  color: var(--red);
458
461
  animation: live-pulse 2s ease-in-out infinite;
459
462
  letter-spacing: 0.5px;
@@ -461,7 +464,7 @@ body {
461
464
  user-select: none;
462
465
  }
463
466
  .live-badge.paused {
464
- background: rgba(139,148,158,0.15);
467
+ background: color-mix(in srgb, var(--foreground-muted) 15%, transparent);
465
468
  color: var(--text-dim);
466
469
  animation: none;
467
470
  }
@@ -473,7 +476,7 @@ body {
473
476
  .download-btn {
474
477
  background: var(--bg-secondary);
475
478
  border: 1px solid var(--border);
476
- border-radius: 6px;
479
+ border-radius: var(--radius-md);
477
480
  padding: 4px 10px;
478
481
  color: var(--text-dim);
479
482
  font-size: 12px;
@@ -487,7 +490,7 @@ body {
487
490
  .file-map-card {
488
491
  background: var(--bg-secondary);
489
492
  border: 1px solid var(--border);
490
- border-radius: 8px;
493
+ border-radius: var(--radius-lg);
491
494
  margin-bottom: 16px;
492
495
  overflow: hidden;
493
496
  }
@@ -500,7 +503,7 @@ body {
500
503
  font-size: 13px;
501
504
  font-weight: 600;
502
505
  color: var(--text-dim);
503
- transition: background 0.15s;
506
+ transition: background-color var(--duration-normal) var(--ease-standard);
504
507
  }
505
508
  .file-map-header:hover { background: var(--bg-tertiary); }
506
509
  .file-map-toggle {
@@ -517,7 +520,7 @@ body {
517
520
  width: 100%;
518
521
  border-collapse: collapse;
519
522
  font-size: 12px;
520
- font-family: 'SF Mono', 'Fira Code', Menlo, monospace;
523
+ font-family: var(--font-mono);
521
524
  }
522
525
  .file-map-table th {
523
526
  background: var(--bg-tertiary);
@@ -536,13 +539,13 @@ body {
536
539
  color: var(--text-dim);
537
540
  }
538
541
  .file-map-table td:first-child { color: var(--text); }
539
- .file-map-table tr:hover { background: rgba(88,166,255,0.04); }
542
+ .file-map-table tr:hover { background: color-mix(in srgb, var(--primary) 4%, transparent); }
540
543
 
541
544
  /* Comparison view */
542
545
  .comparison-table-wrap {
543
546
  background: var(--bg-secondary);
544
547
  border: 1px solid var(--border);
545
- border-radius: 8px;
548
+ border-radius: var(--radius-lg);
546
549
  overflow: hidden;
547
550
  }
548
551
  .comparison-table {
@@ -571,7 +574,7 @@ body {
571
574
  font-weight: 500;
572
575
  min-width: 140px;
573
576
  }
574
- .comparison-table tr:hover { background: rgba(88,166,255,0.04); }
577
+ .comparison-table tr:hover { background: color-mix(in srgb, var(--primary) 4%, transparent); }
575
578
  .compare-dim { color: var(--text-dimmer); font-size: 11px; }
576
579
  .compare-best { color: var(--green); font-weight: 600; }
577
580
  .compare-worst { color: var(--red); }
@@ -593,8 +596,8 @@ body {
593
596
  .md-rendered p { margin-bottom: 8px; }
594
597
  .md-rendered strong { color: var(--text); font-weight: 600; }
595
598
  .md-rendered code {
596
- background: var(--bg-tertiary); border-radius: 3px; padding: 1px 5px;
597
- font-family: 'SF Mono', 'Fira Code', Menlo, monospace; font-size: 12px;
599
+ background: var(--bg-tertiary); border-radius: var(--radius-icon); padding: 1px 5px;
600
+ font-family: var(--font-mono); font-size: 12px;
598
601
  }
599
602
  .md-rendered table {
600
603
  border-collapse: collapse; margin: 8px 0; width: 100%; font-size: 12px;
@@ -606,7 +609,7 @@ body {
606
609
  background: var(--bg-tertiary); color: var(--text-dim); font-weight: 600;
607
610
  font-size: 11px; text-transform: uppercase; letter-spacing: 0.3px;
608
611
  }
609
- .md-rendered tr:hover { background: rgba(88,166,255,0.04); }
612
+ .md-rendered tr:hover { background: color-mix(in srgb, var(--primary) 4%, transparent); }
610
613
  .md-rendered a { color: var(--blue); text-decoration: none; }
611
614
  .md-rendered a:hover { text-decoration: underline; }
612
615
  .md-rendered h1, .md-rendered h2, .md-rendered h3 {
@@ -618,9 +621,9 @@ body {
618
621
  .md-rendered ul, .md-rendered ol { margin: 4px 0 8px 20px; }
619
622
  .md-rendered li { margin-bottom: 2px; }
620
623
  .md-rendered pre {
621
- background: var(--bg); border-radius: 4px; padding: 10px 14px;
624
+ background: var(--bg); border-radius: var(--radius-sm); padding: 10px 14px;
622
625
  font-size: 12px; line-height: 1.5; overflow-x: auto;
623
- font-family: 'SF Mono', 'Fira Code', Menlo, monospace;
626
+ font-family: var(--font-mono);
624
627
  margin: 8px 0;
625
628
  white-space: pre-wrap;
626
629
  word-break: break-word;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "deepline",
3
- "version": "0.1.318",
3
+ "version": "0.1.319",
4
4
  "description": "Deepline SDK + CLI — B2B data enrichment powered by durable cloud execution",
5
5
  "license": "MIT",
6
6
  "repository": {