deepline 0.3.236 → 0.3.237
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/bundling-sources/sdk/src/client.ts +6 -0
- package/dist/bundling-sources/sdk/src/release.ts +1 -1
- package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/absurd-runtime-worker.ts +264 -120
- package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/postgres.ts +219 -46
- package/dist/cli/index.js +148 -53
- package/dist/cli/index.mjs +148 -53
- package/dist/index.d.mts +6 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.js +1 -1
- package/dist/index.mjs +1 -1
- package/dist/release.d.mts +1 -1
- package/dist/release.d.ts +1 -1
- package/dist/release.js +1 -1
- package/dist/release.mjs +1 -1
- package/package.json +1 -1
package/dist/cli/index.js
CHANGED
|
@@ -3454,7 +3454,7 @@ var SDK_RELEASE = {
|
|
|
3454
3454
|
// getters keep their established compatibility behavior.
|
|
3455
3455
|
// 0.3.1 deprecated the legacy `deepline enrich` command in favor of Plays.
|
|
3456
3456
|
// 0.3.90 is the first deliberately versioned SDK release for API v3.
|
|
3457
|
-
version: "0.3.
|
|
3457
|
+
version: "0.3.237",
|
|
3458
3458
|
updateSummary: "Play grep now returns concise results with the matched fields and terms. Automatic CLI updates are enabled by default; use `deepline settings autoupdate off` to opt out, `deepline settings autoupdate on` to re-enable updates, or `deepline settings autoupdate pin <version>` to hold an exact release.",
|
|
3459
3459
|
packageCapabilities: {
|
|
3460
3460
|
updatePreferences: 1
|
|
@@ -12899,9 +12899,13 @@ function recentUsageLines(entries) {
|
|
|
12899
12899
|
for (const entry of entries) {
|
|
12900
12900
|
const op = `${humanize(entry.provider)} ${humanize(entry.operation)}`.trim();
|
|
12901
12901
|
const roughUsd = Number(entry.rough_usd_cost);
|
|
12902
|
-
const
|
|
12903
|
-
const
|
|
12904
|
-
const
|
|
12902
|
+
const credits = entry.credits !== null && entry.credits !== void 0 && String(entry.credits).trim().length > 0 && Number.isFinite(Number(entry.credits)) ? Number(entry.credits) : null;
|
|
12903
|
+
const temporaryHold = entry.charge_state === "temporary_hold";
|
|
12904
|
+
const pending = entry.charge_state === "pending" || entry.charge_finality === "pending";
|
|
12905
|
+
const unknown = entry.charge_finality === "unknown" || credits === null;
|
|
12906
|
+
const usdText = !pending && !unknown && entry.rough_usd_cost !== null && entry.rough_usd_cost !== void 0 && Number.isFinite(roughUsd) ? ` (\u2248$${roughUsd.toFixed(2)})` : "";
|
|
12907
|
+
const charge = temporaryHold ? `${credits === null ? "unknown amount" : `${credits} cr`} held${usdText}, not final` : pending ? "final Deepline charge pending" : unknown ? "charge unknown" : entry.billing_mode === "no_bill" ? "free" : credits === 0 && (entry.charge_finality === "final" || entry.charge_state === "hold_release") ? "0 cr, final" : `${credits} cr${usdText}`;
|
|
12908
|
+
const state = temporaryHold ? "temporary hold, final charge pending" : pending ? "no final charge recorded yet" : entry.status || "unknown";
|
|
12905
12909
|
const auditBits = [
|
|
12906
12910
|
entry.outcome ? `outcome=${entry.outcome}` : null,
|
|
12907
12911
|
entry.pricing_basis ? `priced_by=${entry.pricing_basis}` : null,
|
|
@@ -13098,6 +13102,7 @@ async function handleUsage(options) {
|
|
|
13098
13102
|
const recentLines = recentUsageLines(
|
|
13099
13103
|
Array.isArray(recent.entries) ? recent.entries : []
|
|
13100
13104
|
);
|
|
13105
|
+
const matchingActivity = typeof recent.total === "number" && Number.isFinite(recent.total) && recent.total >= 0 && typeof recent.total_is_exact === "boolean" ? recent.total_is_exact ? `Matching activity: ${recent.total}` : typeof recent.total_lower_bound === "number" && Number.isFinite(recent.total_lower_bound) && recent.total_lower_bound >= 0 ? `Matching activity: at least ${recent.total_lower_bound}` : `Matching activity: count not exact (reported ${recent.total})` : null;
|
|
13101
13106
|
const lines = options.requestId ? [`Charge lookup: ${options.requestId}`, ...recentLines] : [
|
|
13102
13107
|
`Balance: ${payload.balance ?? "(unknown)"}`,
|
|
13103
13108
|
`Last 30 days usage: ${last30Usage ?? "(unknown)"}`,
|
|
@@ -13106,8 +13111,10 @@ async function handleUsage(options) {
|
|
|
13106
13111
|
...options.runId && recent.run_id ? [
|
|
13107
13112
|
`Run spend: ${(payload.run ?? {}).spent_credits ?? "(unknown)"} Deepline Credits`
|
|
13108
13113
|
] : [],
|
|
13114
|
+
...matchingActivity ? [matchingActivity] : [],
|
|
13109
13115
|
...recentLines,
|
|
13110
|
-
...recent.has_more === true
|
|
13116
|
+
...recent.has_more === true ? ["More activity pages are available."] : [],
|
|
13117
|
+
...recent.incomplete === true ? ["Recent activity is incomplete; the matching count may be higher."] : [],
|
|
13111
13118
|
...nextPage ? [`Next page: ${nextPage}`] : [],
|
|
13112
13119
|
...!nextPage && (recent.has_more === true || recent.incomplete === true) ? [
|
|
13113
13120
|
"No continuation is available for this view. Use deepline billing ledger export all --json for the full ledger."
|
|
@@ -13187,7 +13194,13 @@ async function handleLimitOff(options) {
|
|
|
13187
13194
|
async function exportLedger(http, outputPath, options) {
|
|
13188
13195
|
let summary = { row_count: 0, net_delta_credits: 0 };
|
|
13189
13196
|
let initialized = false;
|
|
13197
|
+
let pageNumber = 0;
|
|
13198
|
+
console.error(`Exporting billing ledger to ${outputPath}`);
|
|
13190
13199
|
for await (const entries of iterateCursorPages(async (cursor) => {
|
|
13200
|
+
pageNumber += 1;
|
|
13201
|
+
console.error(
|
|
13202
|
+
`Fetching page ${pageNumber}; ${summary.row_count} rows written.`
|
|
13203
|
+
);
|
|
13191
13204
|
const params = new URLSearchParams({ limit: "5000" });
|
|
13192
13205
|
if (cursor) params.set("cursor", cursor);
|
|
13193
13206
|
if (options.sinceAt !== null)
|
|
@@ -13214,7 +13227,11 @@ async function exportLedger(http, outputPath, options) {
|
|
|
13214
13227
|
const rows = entries.map(ledgerApiEntryToRow);
|
|
13215
13228
|
await (0, import_promises2.appendFile)(outputPath, ledgerRowsToCsv(rows, false), "utf-8");
|
|
13216
13229
|
summary = summarizeLedgerRows(summary, rows);
|
|
13230
|
+
console.error(
|
|
13231
|
+
`Wrote page ${pageNumber}; ${summary.row_count} rows written.`
|
|
13232
|
+
);
|
|
13217
13233
|
}
|
|
13234
|
+
console.error(`Export complete: ${summary.row_count} rows written.`);
|
|
13218
13235
|
return summary;
|
|
13219
13236
|
}
|
|
13220
13237
|
async function handleHistory(options) {
|
|
@@ -14014,6 +14031,8 @@ function registerBillingCommands(program) {
|
|
|
14014
14031
|
`
|
|
14015
14032
|
Concepts:
|
|
14016
14033
|
Billing commands show Deepline credits, not raw provider spend.
|
|
14034
|
+
Balance is shared by the workspace; concurrent work changes it. Use a job_id
|
|
14035
|
+
charge lookup to attribute one tool command instead of comparing balances.
|
|
14017
14036
|
checkout/subscribe/redeem-code can open a browser unless --no-open is set.
|
|
14018
14037
|
|
|
14019
14038
|
Examples:
|
|
@@ -14023,6 +14042,10 @@ Examples:
|
|
|
14023
14042
|
deepline billing plans --json
|
|
14024
14043
|
deepline billing subscription status --json
|
|
14025
14044
|
|
|
14045
|
+
# Price a tool before execution; look up its exact charge afterward
|
|
14046
|
+
deepline tools describe <tool-id> --pricing-only
|
|
14047
|
+
deepline billing usage --request-id <job_id> --json
|
|
14048
|
+
|
|
14026
14049
|
# Buy credits or a plan
|
|
14027
14050
|
deepline billing top-up 1000 --json
|
|
14028
14051
|
deepline billing checkout --credits 1000 --no-open --json
|
|
@@ -14044,6 +14067,8 @@ Examples:
|
|
|
14044
14067
|
`
|
|
14045
14068
|
Notes:
|
|
14046
14069
|
Read-only. Shows the current Deepline credit balance for the active workspace.
|
|
14070
|
+
The balance includes concurrent workspace activity, so a before/after difference
|
|
14071
|
+
cannot isolate one command. Use billing usage --request-id <job_id> --json.
|
|
14047
14072
|
|
|
14048
14073
|
Examples:
|
|
14049
14074
|
deepline billing balance
|
|
@@ -14056,6 +14081,9 @@ Examples:
|
|
|
14056
14081
|
Notes:
|
|
14057
14082
|
Read-only. Shows last-30-day Deepline credit usage plus a bounded recent-call
|
|
14058
14083
|
page. Use --limit/--cursor to paginate the recent-call section.
|
|
14084
|
+
For one tool command, use the job_id returned by tools execute, or its next.billing
|
|
14085
|
+
command. Pending charges and temporary holds are not final spend; unknown means
|
|
14086
|
+
final charge evidence is unavailable. Workspace balance changes include other work.
|
|
14059
14087
|
|
|
14060
14088
|
Examples:
|
|
14061
14089
|
deepline billing usage
|
|
@@ -29941,7 +29969,23 @@ async function handleRunsList(args) {
|
|
|
29941
29969
|
}
|
|
29942
29970
|
}
|
|
29943
29971
|
if (!playName && !statusFilter) {
|
|
29944
|
-
|
|
29972
|
+
const message = "runs list requires --play or --status.";
|
|
29973
|
+
const next = {
|
|
29974
|
+
discover: "deepline plays list --json",
|
|
29975
|
+
running: "deepline runs list --status running --json"
|
|
29976
|
+
};
|
|
29977
|
+
console.error(
|
|
29978
|
+
`${message}
|
|
29979
|
+
${usage}
|
|
29980
|
+
Discover Plays: ${next.discover}
|
|
29981
|
+
Active runs: ${next.running}`
|
|
29982
|
+
);
|
|
29983
|
+
if (argsWantJson(args)) {
|
|
29984
|
+
printCommandEnvelope(
|
|
29985
|
+
{ ok: false, exitCode: 1, code: "RUN_FILTER_REQUIRED", message, next },
|
|
29986
|
+
{ json: true }
|
|
29987
|
+
);
|
|
29988
|
+
}
|
|
29945
29989
|
return 1;
|
|
29946
29990
|
}
|
|
29947
29991
|
if ((offset ?? 0) > 0 && !playName) {
|
|
@@ -32374,11 +32418,15 @@ Examples:
|
|
|
32374
32418
|
"after",
|
|
32375
32419
|
`
|
|
32376
32420
|
Notes:
|
|
32421
|
+
Requires --play or --status. Discover Play references with deepline plays list --json.
|
|
32377
32422
|
Bounded inventory for a play's recent runs. Use --compact for agent loops.
|
|
32423
|
+
Use the exact qualified Play reference, such as workspace/my-play or prebuilt/my-play.
|
|
32424
|
+
--offset requires --play; narrow status-only lists with a Play reference to paginate.
|
|
32378
32425
|
Common statuses include running, completed, failed, and stopped.
|
|
32379
32426
|
|
|
32380
32427
|
Examples:
|
|
32381
32428
|
deepline runs list --play my-play
|
|
32429
|
+
deepline runs list --play workspace/my-play --json
|
|
32382
32430
|
deepline runs list --play my-play --status failed --compact --json
|
|
32383
32431
|
deepline runs list --status running --compact --json
|
|
32384
32432
|
`
|
|
@@ -49856,11 +49904,17 @@ var CapabilityDescription = class _CapabilityDescription {
|
|
|
49856
49904
|
legacyCost.pricingModel ?? legacyCost.pricing_model
|
|
49857
49905
|
);
|
|
49858
49906
|
const pricingModel = unit === "call" ? "fixed" : unit === "result" || unit === "page" ? `per_${unit}` : unit === "usage" ? "provider_usage" : legacyPricingModel;
|
|
49859
|
-
const canonicalCredits =
|
|
49860
|
-
pricing
|
|
49861
|
-
|
|
49862
|
-
|
|
49863
|
-
|
|
49907
|
+
const canonicalCredits = pricingNumber(
|
|
49908
|
+
pricing,
|
|
49909
|
+
"creditsPerUnit",
|
|
49910
|
+
"credits_per_unit",
|
|
49911
|
+
this.#catalogEntry.deeplineCreditsPerPricingUnit ?? this.#catalogEntry.deepline_credits_per_pricing_unit
|
|
49912
|
+
);
|
|
49913
|
+
const canonicalUsd = pricingNumber(
|
|
49914
|
+
pricing,
|
|
49915
|
+
"usdPerUnit",
|
|
49916
|
+
"usd_per_unit",
|
|
49917
|
+
this.#catalogEntry.deeplineUsdPerPricingUnit ?? this.#catalogEntry.deepline_usd_per_pricing_unit
|
|
49864
49918
|
);
|
|
49865
49919
|
const billingSource = stringValue4(
|
|
49866
49920
|
this.#catalogEntry.billingSource ?? this.#catalogEntry.billing_source
|
|
@@ -49879,12 +49933,8 @@ var CapabilityDescription = class _CapabilityDescription {
|
|
|
49879
49933
|
),
|
|
49880
49934
|
billingSource,
|
|
49881
49935
|
billingSourceLabel,
|
|
49882
|
-
deeplineCreditsPerPricingUnit: isFree ? 0 : canonicalCredits
|
|
49883
|
-
|
|
49884
|
-
),
|
|
49885
|
-
deeplineUsdPerPricingUnit: isFree ? 0 : canonicalUsd ?? numberValue(
|
|
49886
|
-
this.#catalogEntry.deeplineUsdPerPricingUnit ?? this.#catalogEntry.deepline_usd_per_pricing_unit
|
|
49887
|
-
)
|
|
49936
|
+
deeplineCreditsPerPricingUnit: isFree ? 0 : canonicalCredits,
|
|
49937
|
+
deeplineUsdPerPricingUnit: isFree ? 0 : canonicalUsd
|
|
49888
49938
|
};
|
|
49889
49939
|
}
|
|
49890
49940
|
};
|
|
@@ -49897,6 +49947,13 @@ function stringValue4(value) {
|
|
|
49897
49947
|
function numberValue(value) {
|
|
49898
49948
|
return typeof value === "number" && Number.isFinite(value) ? value : null;
|
|
49899
49949
|
}
|
|
49950
|
+
function pricingNumber(pricing, canonicalKey, aliasKey, legacyValue) {
|
|
49951
|
+
for (const key of [canonicalKey, aliasKey]) {
|
|
49952
|
+
if (Object.prototype.hasOwnProperty.call(pricing, key))
|
|
49953
|
+
return numberValue(pricing[key]);
|
|
49954
|
+
}
|
|
49955
|
+
return numberValue(legacyValue);
|
|
49956
|
+
}
|
|
49900
49957
|
|
|
49901
49958
|
// src/cli/tool-connection-status.ts
|
|
49902
49959
|
function toolConnectionStatusMessage(input2) {
|
|
@@ -50490,11 +50547,15 @@ Concepts:
|
|
|
50490
50547
|
Common commands:
|
|
50491
50548
|
deepline tools search email --json
|
|
50492
50549
|
deepline tools describe hunter_email_verifier --json
|
|
50550
|
+
deepline tools describe hunter_email_verifier --pricing-only --json
|
|
50493
50551
|
deepline tools execute hunter_email_verifier --input '{"email":"a@b.com"}'
|
|
50552
|
+
deepline billing usage --request-id <job_id> --json
|
|
50494
50553
|
|
|
50495
50554
|
Output:
|
|
50496
50555
|
Use describe for tool contracts.
|
|
50497
50556
|
Use execute to run a tool.
|
|
50557
|
+
Read pricing before execution; use the returned next.billing command for its
|
|
50558
|
+
exact charge. Workspace balance changes also include other callers' activity.
|
|
50498
50559
|
`
|
|
50499
50560
|
);
|
|
50500
50561
|
tools.command("list [category]").description("Browse tool categories, or list every tool in a category.").addHelpText(
|
|
@@ -50620,6 +50681,7 @@ Notes:
|
|
|
50620
50681
|
Examples:
|
|
50621
50682
|
deepline tools describe hunter_email_verifier
|
|
50622
50683
|
deepline tools describe hunter_email_verifier --pricing-only
|
|
50684
|
+
deepline tools describe hunter_email_verifier --pricing-only --json
|
|
50623
50685
|
deepline tools describe hunter_email_verifier --schema-only
|
|
50624
50686
|
deepline tools describe hunter_email_verifier --examples-only
|
|
50625
50687
|
deepline tools describe hunter_email_verifier --json
|
|
@@ -50669,10 +50731,15 @@ Notes:
|
|
|
50669
50731
|
waterfalls, row maps, checkpoints, and retries.
|
|
50670
50732
|
Calling a provider-backed tool can spend Deepline credits. Use --json for the
|
|
50671
50733
|
stable result payload plus output preview and debugging helpers.
|
|
50734
|
+
Read pricing first with tools describe <toolId> --pricing-only --json.
|
|
50735
|
+
Use the returned next.billing command to look up this execution's exact charge;
|
|
50736
|
+
workspace balance changes also include other callers' activity.
|
|
50672
50737
|
--timeout sets this CLI request's HTTP deadline; it does not cancel provider work.
|
|
50673
50738
|
|
|
50674
50739
|
Examples:
|
|
50675
50740
|
deepline tools execute hunter_email_verifier --input '{"email":"a@b.com"}'
|
|
50741
|
+
deepline tools describe hunter_email_verifier --pricing-only --json
|
|
50742
|
+
deepline billing usage --request-id <job_id> --json
|
|
50676
50743
|
deepline tools execute bounceban_verify_bulk --input @batch.json --timeout 10m --json
|
|
50677
50744
|
deepline tools execute hunter_email_verifier -p email=a@b.com
|
|
50678
50745
|
deepline tools execute test_rate_limit --input '{"key":"smoke"}' --timeout 90s --json
|
|
@@ -50776,6 +50843,38 @@ async function getTool(toolId, options = {}) {
|
|
|
50776
50843
|
);
|
|
50777
50844
|
return 2;
|
|
50778
50845
|
}
|
|
50846
|
+
const onlyModes = [
|
|
50847
|
+
options.pricingOnly,
|
|
50848
|
+
options.schemaOnly,
|
|
50849
|
+
options.examplesOnly,
|
|
50850
|
+
options.gettersOnly
|
|
50851
|
+
].filter(Boolean).length;
|
|
50852
|
+
if (onlyModes > 1) {
|
|
50853
|
+
console.error(
|
|
50854
|
+
"Use only one of --pricing-only, --schema-only, --examples-only, or --getters-only."
|
|
50855
|
+
);
|
|
50856
|
+
return 2;
|
|
50857
|
+
}
|
|
50858
|
+
if (options.pricingOnly) {
|
|
50859
|
+
const lines = toolPricingOnlyLines(tool, toolId);
|
|
50860
|
+
if (inferenceQuote)
|
|
50861
|
+
lines.push(...inferenceQuoteSummaryLines(inferenceQuote));
|
|
50862
|
+
printCommandEnvelope(
|
|
50863
|
+
{
|
|
50864
|
+
toolId: String(tool.toolId || toolId),
|
|
50865
|
+
cost: Capability.fromCatalogEntry(tool).describe().customerCost(),
|
|
50866
|
+
...modelDescription ? { modelOptions: modelDescription } : {},
|
|
50867
|
+
...isMonitorTypeTool(tool) ? { pricing: recordField2(tool, "pricing") } : {},
|
|
50868
|
+
...inferenceQuote ? { inferenceQuote } : {}
|
|
50869
|
+
},
|
|
50870
|
+
{
|
|
50871
|
+
json: Boolean(options.json || options.contractJson),
|
|
50872
|
+
text: `${lines.join("\n")}
|
|
50873
|
+
`
|
|
50874
|
+
}
|
|
50875
|
+
);
|
|
50876
|
+
return 0;
|
|
50877
|
+
}
|
|
50779
50878
|
if (options.contractJson) {
|
|
50780
50879
|
printCompactJson({
|
|
50781
50880
|
...toolContractJsonForDescribe(tool, toolId),
|
|
@@ -50793,23 +50892,6 @@ async function getTool(toolId, options = {}) {
|
|
|
50793
50892
|
});
|
|
50794
50893
|
return 0;
|
|
50795
50894
|
}
|
|
50796
|
-
const onlyModes = [
|
|
50797
|
-
options.pricingOnly,
|
|
50798
|
-
options.schemaOnly,
|
|
50799
|
-
options.examplesOnly,
|
|
50800
|
-
options.gettersOnly
|
|
50801
|
-
].filter(Boolean).length;
|
|
50802
|
-
if (onlyModes > 1) {
|
|
50803
|
-
console.error(
|
|
50804
|
-
"Use only one of --pricing-only, --schema-only, --examples-only, or --getters-only."
|
|
50805
|
-
);
|
|
50806
|
-
return 2;
|
|
50807
|
-
}
|
|
50808
|
-
if (options.pricingOnly) {
|
|
50809
|
-
printToolPricingOnly(tool, toolId);
|
|
50810
|
-
if (inferenceQuote) printInferenceQuoteSummary(inferenceQuote);
|
|
50811
|
-
return 0;
|
|
50812
|
-
}
|
|
50813
50895
|
if (options.schemaOnly) {
|
|
50814
50896
|
printToolSchemaOnly(tool, toolId);
|
|
50815
50897
|
if (inferenceQuote) printInferenceQuoteSummary(inferenceQuote);
|
|
@@ -50850,11 +50932,16 @@ ${formatModelDescription(modelDescription)}`);
|
|
|
50850
50932
|
if (inferenceQuote) printInferenceQuoteSummary(inferenceQuote);
|
|
50851
50933
|
return 0;
|
|
50852
50934
|
}
|
|
50853
|
-
function
|
|
50854
|
-
|
|
50855
|
-
|
|
50856
|
-
|
|
50857
|
-
|
|
50935
|
+
function inferenceQuoteSummaryLines(_quote) {
|
|
50936
|
+
return [
|
|
50937
|
+
"",
|
|
50938
|
+
"Inference quote:",
|
|
50939
|
+
"- Temporary hold: priced estimate (minimum 0.02 credits)",
|
|
50940
|
+
"- Final charge: actual usage"
|
|
50941
|
+
];
|
|
50942
|
+
}
|
|
50943
|
+
function printInferenceQuoteSummary(quote) {
|
|
50944
|
+
for (const line of inferenceQuoteSummaryLines(quote)) console.log(line);
|
|
50858
50945
|
}
|
|
50859
50946
|
function toolContractJsonForDescribe(tool, requestedToolId) {
|
|
50860
50947
|
const toolId = String(tool.toolId || requestedToolId);
|
|
@@ -50913,6 +51000,7 @@ function toolContractJsonForDescribe(tool, requestedToolId) {
|
|
|
50913
51000
|
toolId,
|
|
50914
51001
|
provider: tool.provider,
|
|
50915
51002
|
displayName: tool.displayName,
|
|
51003
|
+
cost: pricing,
|
|
50916
51004
|
description: tool.description,
|
|
50917
51005
|
categories: tool.categories,
|
|
50918
51006
|
...deprecated ? {
|
|
@@ -50932,7 +51020,6 @@ function toolContractJsonForDescribe(tool, requestedToolId) {
|
|
|
50932
51020
|
} : {},
|
|
50933
51021
|
...executionMetadata ? { executionMetadata } : {},
|
|
50934
51022
|
...batchCapability ? { batchCapability } : {},
|
|
50935
|
-
cost: pricing,
|
|
50936
51023
|
getters: {
|
|
50937
51024
|
extractedLists,
|
|
50938
51025
|
extractedValues
|
|
@@ -51008,7 +51095,7 @@ function printMonitorTypeStreams(tool) {
|
|
|
51008
51095
|
console.log(`- ${name}: ${cols.join(", ")}`);
|
|
51009
51096
|
}
|
|
51010
51097
|
}
|
|
51011
|
-
function
|
|
51098
|
+
function monitorTypePricingLines(tool) {
|
|
51012
51099
|
const pricing = recordField2(tool, "pricing");
|
|
51013
51100
|
const byType = recordField2(
|
|
51014
51101
|
pricing,
|
|
@@ -51017,17 +51104,20 @@ function printMonitorTypePricing(tool) {
|
|
|
51017
51104
|
);
|
|
51018
51105
|
const keys = Object.keys(byType);
|
|
51019
51106
|
if (!keys.length) {
|
|
51020
|
-
|
|
51021
|
-
return;
|
|
51107
|
+
return ["Pricing: Deepline credits per accepted event (see --json)"];
|
|
51022
51108
|
}
|
|
51023
|
-
|
|
51109
|
+
const lines = ["Pricing (Deepline credits per accepted event):"];
|
|
51024
51110
|
for (const key of keys) {
|
|
51025
51111
|
const entry = isRecord13(byType[key]) ? byType[key] : {};
|
|
51026
51112
|
const credits = numberField2(entry, "deepline_credits", "deeplineCredits");
|
|
51027
51113
|
const display = stringField2(entry, "display");
|
|
51028
51114
|
const shown = display || (credits !== null ? `${formatDecimal(credits)} credits/event` : "see --json");
|
|
51029
|
-
|
|
51115
|
+
lines.push(`- ${key}: ${shown}`);
|
|
51030
51116
|
}
|
|
51117
|
+
return lines;
|
|
51118
|
+
}
|
|
51119
|
+
function printMonitorTypePricing(tool) {
|
|
51120
|
+
for (const line of monitorTypePricingLines(tool)) console.log(line);
|
|
51031
51121
|
}
|
|
51032
51122
|
function printMonitorTypeDeploy(tool) {
|
|
51033
51123
|
const deploy = recordField2(tool, "deploy");
|
|
@@ -51165,13 +51255,12 @@ function printCompactToolContract(tool, requestedToolId) {
|
|
|
51165
51255
|
`More: deepline tools describe ${contract.toolId} --pricing-only | --schema-only | --examples-only | --getters-only | --json`
|
|
51166
51256
|
);
|
|
51167
51257
|
}
|
|
51168
|
-
function
|
|
51258
|
+
function toolPricingOnlyLines(tool, requestedToolId, options = {}) {
|
|
51169
51259
|
if (isMonitorTypeTool(tool)) {
|
|
51170
|
-
|
|
51171
|
-
return;
|
|
51260
|
+
return monitorTypePricingLines(tool);
|
|
51172
51261
|
}
|
|
51173
|
-
const
|
|
51174
|
-
const cost =
|
|
51262
|
+
const toolId = String(tool.toolId || requestedToolId);
|
|
51263
|
+
const cost = Capability.fromCatalogEntry(tool).describe().customerCost();
|
|
51175
51264
|
const pricingModel = stringField2(cost, "pricingModel") || "unknown";
|
|
51176
51265
|
const billing = stringField2(cost, "billingSourceLabel") || stringField2(cost, "billingSource") || stringField2(cost, "billingMode") || "unknown";
|
|
51177
51266
|
const explicitUnit = stringField2(cost, "unit");
|
|
@@ -51181,8 +51270,14 @@ function printToolPricingOnly(tool, requestedToolId, options = {}) {
|
|
|
51181
51270
|
const displayText = stringField2(cost, "displayText");
|
|
51182
51271
|
const summary = stringField2(cost, "summary");
|
|
51183
51272
|
const price = displayText || summary || (credits !== null ? `${formatDecimal(credits)} Deepline credits${usd !== null ? ` / ${formatUsd(usd)}` : ""} per ${unit}` : "pricing unavailable");
|
|
51184
|
-
|
|
51185
|
-
|
|
51273
|
+
return [
|
|
51274
|
+
`${options.heading ?? `Pricing: ${toolId}`}: ${price}`,
|
|
51275
|
+
`Billing: ${billing}`
|
|
51276
|
+
];
|
|
51277
|
+
}
|
|
51278
|
+
function printToolPricingOnly(tool, requestedToolId, options = {}) {
|
|
51279
|
+
for (const line of toolPricingOnlyLines(tool, requestedToolId, options))
|
|
51280
|
+
console.log(line);
|
|
51186
51281
|
}
|
|
51187
51282
|
function printToolSchemaOnly(tool, requestedToolId) {
|
|
51188
51283
|
if (isMonitorTypeTool(tool)) {
|
|
@@ -51395,6 +51490,7 @@ function toolMetadataJsonForDescribe(tool, requestedToolId) {
|
|
|
51395
51490
|
} = tool;
|
|
51396
51491
|
const outputSchemaRecord = recordField2(tool, "outputSchema", "output_schema");
|
|
51397
51492
|
return {
|
|
51493
|
+
cost: Capability.fromCatalogEntry(tool).describe().customerCost(),
|
|
51398
51494
|
...publicTool,
|
|
51399
51495
|
toolId,
|
|
51400
51496
|
provider: tool.provider,
|
|
@@ -51406,7 +51502,6 @@ function toolMetadataJsonForDescribe(tool, requestedToolId) {
|
|
|
51406
51502
|
)
|
|
51407
51503
|
} : {},
|
|
51408
51504
|
inputFields: inputFields.map(inputFieldJsonForDescribe),
|
|
51409
|
-
cost: Capability.fromCatalogEntry(tool).describe().customerCost(),
|
|
51410
51505
|
usageGuidance,
|
|
51411
51506
|
runtimeOutputHelp: {
|
|
51412
51507
|
contract: "tools describe shows declared schema and Deepline getters; it is not an observed provider response.",
|