deepline 0.3.400 → 0.3.402
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/release.ts +1 -1
- package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/run-ledger-outbox-recovery.ts +3 -1
- package/dist/cli/auth-CF34E66T.js +40 -0
- package/dist/cli/{auth-JL76JRJP.mjs → auth-GJGFHAUP.mjs} +4 -4
- package/dist/cli/{billing-C6QEIDES.mjs → billing-7YYI5OFD.mjs} +4 -4
- package/dist/cli/{billing-BPYI4EUH.js → billing-UBBNYU74.js} +73 -73
- package/dist/cli/{chunk-III4UASP.mjs → chunk-4EWCKDFC.mjs} +1 -1
- package/dist/cli/{chunk-H7Q6RK5Y.js → chunk-5Z7SAD3Q.js} +44 -44
- package/dist/cli/{chunk-O4JZTJEP.js → chunk-65YHUBYZ.js} +8 -8
- package/dist/cli/{chunk-ORQE3XBG.js → chunk-B2FAQ3AX.js} +50 -50
- package/dist/cli/{chunk-6SRV2NM3.js → chunk-CBPK2TLC.js} +65 -65
- package/dist/cli/{chunk-4OPBTEVW.js → chunk-CIOMFOJJ.js} +6 -6
- package/dist/cli/{chunk-JIDNO3FI.js → chunk-IK7J2DE5.js} +1 -1
- package/dist/cli/{chunk-OVYVMPEC.js → chunk-JHFX74T6.js} +4 -4
- package/dist/cli/{chunk-V3T4CHXI.mjs → chunk-JT7XZP4U.mjs} +1 -1
- package/dist/cli/{chunk-PF3N65JD.js → chunk-L5UOVDJV.js} +2 -2
- package/dist/cli/{chunk-IDXATBJB.js → chunk-LQS5XUFL.js} +6 -6
- package/dist/cli/{chunk-QUCAOIN7.js → chunk-MSS6UHGK.js} +26 -26
- package/dist/cli/{chunk-QZDHNVKF.mjs → chunk-NMPFKSZN.mjs} +1 -1
- package/dist/cli/{chunk-BRMEK6KG.mjs → chunk-OIUXHL7G.mjs} +3 -3
- package/dist/cli/{chunk-GCIMQKW4.mjs → chunk-OPS5KQVF.mjs} +2 -2
- package/dist/cli/{chunk-6PRUVCMW.mjs → chunk-Q77JWGMZ.mjs} +1 -1
- package/dist/cli/{chunk-GMMJMFCQ.mjs → chunk-QPIAVCCS.mjs} +2 -2
- package/dist/cli/{chunk-GYJSZ6J6.mjs → chunk-RLL23M7M.mjs} +2 -2
- package/dist/cli/{chunk-UYIRTEU6.mjs → chunk-TPPHH3FS.mjs} +3 -3
- package/dist/cli/{chunk-CKIELGYT.mjs → chunk-TWZEHT5L.mjs} +5 -5
- package/dist/cli/{chunk-H33BWG7S.mjs → chunk-V4TFEZ47.mjs} +1 -1
- package/dist/cli/{chunk-USSWEZNP.js → chunk-VHZOTHAD.js} +15 -15
- package/dist/cli/{chunk-BENKBQ2J.mjs → chunk-Z7MNFHHE.mjs} +4 -4
- package/dist/cli/{chunk-2H37YDDG.js → chunk-ZOKF4F65.js} +8 -8
- package/dist/cli/{csv-FLNTE5CW.mjs → csv-USUSIYER.mjs} +3 -3
- package/dist/cli/{csv-NK4QWZNT.js → csv-V6JDZEWY.js} +12 -12
- package/dist/cli/{db-CAGTZIVN.mjs → db-F5GMBQ65.mjs} +4 -4
- package/dist/cli/{db-DU7J3CEM.js → db-HRWKCFXF.js} +25 -25
- package/dist/cli/{describe-IWQW7OLG.js → describe-R6KMEHL5.js} +10 -10
- package/dist/cli/{describe-YJHDN5IE.mjs → describe-S5O6FVT3.mjs} +6 -6
- package/dist/cli/{executions-SUKU6I7V.js → executions-PZIPKQBP.js} +6 -6
- package/dist/cli/{executions-CDFAK267.mjs → executions-YPZREEMY.mjs} +4 -4
- package/dist/cli/{feedback-EQKQZTC4.mjs → feedback-BTETOM6H.mjs} +3 -3
- package/dist/cli/{feedback-SRPRMYAN.js → feedback-VDJR5X3J.js} +7 -7
- package/dist/cli/git-B5DP75FD.js +24 -0
- package/dist/cli/{git-M555IN55.mjs → git-INUECEXT.mjs} +4 -4
- package/dist/cli/index.js +89 -89
- package/dist/cli/index.mjs +32 -32
- package/dist/cli/{legacy-noops-M4X6PQFZ.js → legacy-noops-45WQXPUD.js} +7 -7
- package/dist/cli/{legacy-noops-LRNAWLDN.mjs → legacy-noops-MDN77QAS.mjs} +4 -4
- package/dist/cli/{monitors-IKRE2U3J.mjs → monitors-4BTZGTJW.mjs} +4 -4
- package/dist/cli/{monitors-AOXY55KT.js → monitors-BMQEIYV6.js} +84 -84
- package/dist/cli/{org-V5MRHKRO.mjs → org-6YNJ7VNJ.mjs} +4 -4
- package/dist/cli/{org-HNFRABMG.js → org-GTZDYRD3.js} +64 -64
- package/dist/cli/{play-LSGWSQE2.js → play-BDIBVDSU.js} +375 -296
- package/dist/cli/{play-Z22R7FWE.mjs → play-GGQBJQG4.mjs} +112 -33
- package/dist/cli/{providers-BJJCETVG.mjs → providers-6EYFXCHM.mjs} +4 -4
- package/dist/cli/{providers-VYVFZR4J.js → providers-AFQ6FQWQ.js} +7 -7
- package/dist/cli/{quickstart-EFPCKX32.mjs → quickstart-FIK5TO73.mjs} +3 -3
- package/dist/cli/{quickstart-UGWUJK67.js → quickstart-PUXYA3QD.js} +5 -5
- package/dist/cli/search-64GE26YS.js +30 -0
- package/dist/cli/{search-NVPTBYU3.mjs → search-UTPRENV4.mjs} +5 -5
- package/dist/cli/{secrets-ENLLOXON.js → secrets-FMM4RFK2.js} +13 -13
- package/dist/cli/{secrets-4N4LSDKP.mjs → secrets-R2RJ2J7Z.mjs} +4 -4
- package/dist/cli/{sessions-7BKKDN5T.mjs → sessions-HA2B7AYB.mjs} +4 -4
- package/dist/cli/{sessions-PHGZZFBP.js → sessions-ZRXUQIVV.js} +5 -5
- package/dist/cli/{settings-VWEGOBRP.mjs → settings-HPGNP7UU.mjs} +7 -7
- package/dist/cli/{settings-CV2ZCTVK.js → settings-KKHOBBKF.js} +74 -74
- package/dist/cli/{setup-DEJSO3OM.js → setup-FTSDFQOK.js} +41 -41
- package/dist/cli/{setup-KG5HHXZD.mjs → setup-WERVZIIX.mjs} +6 -6
- package/dist/cli/{skills-EKFHOC3V.mjs → skills-D4BGGD5D.mjs} +4 -4
- package/dist/cli/skills-O7HGWWGF.js +29 -0
- package/dist/cli/{tools-4RLOPQJK.js → tools-EKVHV35B.js} +7 -7
- package/dist/cli/{tools-4YNU6U4J.mjs → tools-TKQW72OL.mjs} +6 -6
- package/dist/cli/update-5CP72TRU.js +29 -0
- package/dist/cli/{update-DE4SJRNA.mjs → update-O77BPQAE.mjs} +6 -6
- package/dist/cli/{workflow-I7QMPLIW.js → workflow-GIDAYVSL.js} +15 -15
- package/dist/cli/{workflow-ODAFYNZA.mjs → workflow-IJCMSPGJ.mjs} +5 -5
- package/dist/index.js +6 -6
- package/dist/index.mjs +3 -3
- package/dist/install-integrity.json +70 -70
- package/dist/release.d.mts +1 -1
- package/dist/release.d.ts +1 -1
- package/dist/release.js +2 -2
- package/dist/release.mjs +1 -1
- package/package.json +1 -1
- package/dist/cli/auth-TNYZVC73.js +0 -40
- package/dist/cli/git-IRCN2ZZY.js +0 -24
- package/dist/cli/search-V3STUCIN.js +0 -30
- package/dist/cli/skills-YEVGRKB6.js +0 -29
- package/dist/cli/update-2RMF5UZD.js +0 -29
|
@@ -4,11 +4,11 @@ import {
|
|
|
4
4
|
} from "./chunk-OSDXE27V.mjs";
|
|
5
5
|
import {
|
|
6
6
|
registerDeprecatedSearchCommand
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-OIUXHL7G.mjs";
|
|
8
8
|
import {
|
|
9
9
|
handleDeploymentGet,
|
|
10
10
|
handleDeploymentsList
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-OPS5KQVF.mjs";
|
|
12
12
|
import {
|
|
13
13
|
buildPlayDashboardUrl
|
|
14
14
|
} from "./chunk-IHG7UAHD.mjs";
|
|
@@ -45,7 +45,7 @@ import {
|
|
|
45
45
|
logProvenanceReaches,
|
|
46
46
|
normalizeRunEventOperationRequest,
|
|
47
47
|
parseLogLevel
|
|
48
|
-
} from "./chunk-
|
|
48
|
+
} from "./chunk-4EWCKDFC.mjs";
|
|
49
49
|
import "./chunk-6IKARAYD.mjs";
|
|
50
50
|
import {
|
|
51
51
|
CSV_DATA_INPUT_KEY,
|
|
@@ -84,16 +84,16 @@ import {
|
|
|
84
84
|
printJsonError,
|
|
85
85
|
renderCommandEnvelopeText,
|
|
86
86
|
shouldEmitJson
|
|
87
|
-
} from "./chunk-
|
|
87
|
+
} from "./chunk-JT7XZP4U.mjs";
|
|
88
88
|
import {
|
|
89
89
|
fetchWithDeploymentProtection
|
|
90
|
-
} from "./chunk-
|
|
90
|
+
} from "./chunk-Q77JWGMZ.mjs";
|
|
91
91
|
import "./chunk-YHPYUZZX.mjs";
|
|
92
92
|
import "./chunk-DLIRSHV6.mjs";
|
|
93
93
|
import {
|
|
94
94
|
DeeplineError
|
|
95
95
|
} from "./chunk-NXGCO4JB.mjs";
|
|
96
|
-
import "./chunk-
|
|
96
|
+
import "./chunk-NMPFKSZN.mjs";
|
|
97
97
|
import "./chunk-WZYKRD7T.mjs";
|
|
98
98
|
import {
|
|
99
99
|
__commonJS,
|
|
@@ -13800,13 +13800,34 @@ function renderRunOverviewText(overview, extras = {}) {
|
|
|
13800
13800
|
|
|
13801
13801
|
${renderCommandEnvelopeText({ render: { sections, actions: actions2 } })}`;
|
|
13802
13802
|
}
|
|
13803
|
+
var RUN_READ_TIMING_PROGRESS_INTERVAL_MS = 15e3;
|
|
13804
|
+
async function withRunReadTiming(command, stage, enabled, action) {
|
|
13805
|
+
if (!enabled) return action();
|
|
13806
|
+
const startedAt = performance.now();
|
|
13807
|
+
const elapsedMs = () => Math.round(performance.now() - startedAt);
|
|
13808
|
+
console.error(`[${command}] ${stage} started`);
|
|
13809
|
+
const progressTimer = setInterval(() => {
|
|
13810
|
+
console.error(`[${command}] ${stage} still running after ${elapsedMs()}ms`);
|
|
13811
|
+
}, RUN_READ_TIMING_PROGRESS_INTERVAL_MS);
|
|
13812
|
+
progressTimer.unref?.();
|
|
13813
|
+
try {
|
|
13814
|
+
const result = await action();
|
|
13815
|
+
console.error(`[${command}] ${stage} completed in ${elapsedMs()}ms`);
|
|
13816
|
+
return result;
|
|
13817
|
+
} catch (error) {
|
|
13818
|
+
console.error(`[${command}] ${stage} failed after ${elapsedMs()}ms`);
|
|
13819
|
+
throw error;
|
|
13820
|
+
} finally {
|
|
13821
|
+
clearInterval(progressTimer);
|
|
13822
|
+
}
|
|
13823
|
+
}
|
|
13803
13824
|
async function handleRunGet(args) {
|
|
13804
13825
|
const selection = parseJsonFields(
|
|
13805
13826
|
args,
|
|
13806
13827
|
args.includes("--config") ? "config" : "get"
|
|
13807
13828
|
);
|
|
13808
13829
|
args = selection.args;
|
|
13809
|
-
const usage2 = "Usage: deepline runs get <run-id> [--json] [--full] [--input] [--config] [--web-url]";
|
|
13830
|
+
const usage2 = "Usage: deepline runs get <run-id> [--json] [--full] [--input] [--config] [--web-url] [--timing]";
|
|
13810
13831
|
let runId;
|
|
13811
13832
|
try {
|
|
13812
13833
|
runId = parseRunIdPositional(args, usage2);
|
|
@@ -13815,8 +13836,14 @@ async function handleRunGet(args) {
|
|
|
13815
13836
|
return 1;
|
|
13816
13837
|
}
|
|
13817
13838
|
const client = new DeeplineClient();
|
|
13839
|
+
const timing = args.includes("--timing");
|
|
13818
13840
|
if (args.includes("--web-url")) {
|
|
13819
|
-
const status2 = await
|
|
13841
|
+
const status2 = await withRunReadTiming(
|
|
13842
|
+
"runs get",
|
|
13843
|
+
"status",
|
|
13844
|
+
timing,
|
|
13845
|
+
() => client.runs.get(runId, { full: false })
|
|
13846
|
+
);
|
|
13820
13847
|
const playName2 = resolveRunPlayName(status2, runId);
|
|
13821
13848
|
if (!playName2) {
|
|
13822
13849
|
console.error(`Run ${runId} does not name its play; no play page URL.`);
|
|
@@ -13837,7 +13864,12 @@ async function handleRunGet(args) {
|
|
|
13837
13864
|
);
|
|
13838
13865
|
return 1;
|
|
13839
13866
|
}
|
|
13840
|
-
const status2 = await
|
|
13867
|
+
const status2 = await withRunReadTiming(
|
|
13868
|
+
"runs get",
|
|
13869
|
+
"configuration",
|
|
13870
|
+
timing,
|
|
13871
|
+
() => client.runs.get(runId, { configuration: true })
|
|
13872
|
+
);
|
|
13841
13873
|
if (!Object.hasOwn(status2, "contract")) {
|
|
13842
13874
|
throw new Error(
|
|
13843
13875
|
"This server does not support recorded configuration reads."
|
|
@@ -13850,21 +13882,36 @@ async function handleRunGet(args) {
|
|
|
13850
13882
|
return 0;
|
|
13851
13883
|
}
|
|
13852
13884
|
if (args.includes("--input")) {
|
|
13853
|
-
const input = await
|
|
13885
|
+
const input = await withRunReadTiming(
|
|
13886
|
+
"runs get",
|
|
13887
|
+
"input",
|
|
13888
|
+
timing,
|
|
13889
|
+
() => client.getRunInput(runId)
|
|
13890
|
+
);
|
|
13854
13891
|
printCommandEnvelope(input, { json: true });
|
|
13855
13892
|
return 0;
|
|
13856
13893
|
}
|
|
13857
13894
|
const full = args.includes("--full");
|
|
13858
|
-
const status = await
|
|
13859
|
-
|
|
13860
|
-
|
|
13861
|
-
|
|
13895
|
+
const status = await withRunReadTiming(
|
|
13896
|
+
"runs get",
|
|
13897
|
+
"status",
|
|
13898
|
+
timing,
|
|
13899
|
+
() => client.runs.get(runId, {
|
|
13900
|
+
full: false,
|
|
13901
|
+
failedLogs: args.includes("--log-failed")
|
|
13902
|
+
})
|
|
13903
|
+
);
|
|
13862
13904
|
if (status.package) recordPlayTermination(buildRunOverview(status).run);
|
|
13863
13905
|
if (!status.package) {
|
|
13864
|
-
const legacyStatus = full ? await
|
|
13865
|
-
|
|
13866
|
-
|
|
13867
|
-
|
|
13906
|
+
const legacyStatus = full ? await withRunReadTiming(
|
|
13907
|
+
"runs get",
|
|
13908
|
+
"legacy full status",
|
|
13909
|
+
timing,
|
|
13910
|
+
() => client.runs.get(runId, {
|
|
13911
|
+
full: true,
|
|
13912
|
+
failedLogs: args.includes("--log-failed")
|
|
13913
|
+
})
|
|
13914
|
+
) : status;
|
|
13868
13915
|
const legacyPlayName = resolveRunPlayName(legacyStatus, runId);
|
|
13869
13916
|
const legacyDashboardUrl = legacyPlayName ? buildPlayDashboardUrl(client.baseUrl, legacyPlayName) : null;
|
|
13870
13917
|
if (argsWantJson(args)) {
|
|
@@ -13886,11 +13933,26 @@ async function handleRunGet(args) {
|
|
|
13886
13933
|
}
|
|
13887
13934
|
return 0;
|
|
13888
13935
|
}
|
|
13889
|
-
const fullStatus = full ? await
|
|
13936
|
+
const fullStatus = full ? await withRunReadTiming(
|
|
13937
|
+
"runs get",
|
|
13938
|
+
"full result",
|
|
13939
|
+
timing,
|
|
13940
|
+
() => client.runs.get(runId, { full: true })
|
|
13941
|
+
) : void 0;
|
|
13890
13942
|
const overview = buildRunOverview(status, fullStatus);
|
|
13891
13943
|
const [hits, credits] = await Promise.all([
|
|
13892
|
-
|
|
13893
|
-
|
|
13944
|
+
withRunReadTiming(
|
|
13945
|
+
"runs get",
|
|
13946
|
+
"row summaries",
|
|
13947
|
+
timing,
|
|
13948
|
+
() => readRunHitCounts(client, status)
|
|
13949
|
+
),
|
|
13950
|
+
withRunReadTiming(
|
|
13951
|
+
"runs get",
|
|
13952
|
+
"billing",
|
|
13953
|
+
timing,
|
|
13954
|
+
() => readRunCredits(client, runId, !TERMINAL_PLAY_STATUSES.has(status.status))
|
|
13955
|
+
)
|
|
13894
13956
|
]);
|
|
13895
13957
|
const hitLines = formatRunHitsLines(hits);
|
|
13896
13958
|
const json = argsWantJson(args);
|
|
@@ -14053,7 +14115,8 @@ async function handleRunsRerun(args) {
|
|
|
14053
14115
|
return runRunsRerunCommand(runId, options);
|
|
14054
14116
|
}
|
|
14055
14117
|
async function handleRunsList(args) {
|
|
14056
|
-
const usage2 = "Usage: deepline runs list [--play <play-name>] [--node <mermaid-node-id>] [--status <status>] [--limit <count>] [--offset <count>] [--json]";
|
|
14118
|
+
const usage2 = "Usage: deepline runs list [--play <play-name>] [--node <mermaid-node-id>] [--status <status>] [--limit <count>] [--offset <count>] [--json] [--timing]";
|
|
14119
|
+
const timing = args.includes("--timing");
|
|
14057
14120
|
let playName = null;
|
|
14058
14121
|
let nodeId = null;
|
|
14059
14122
|
let statusFilter = null;
|
|
@@ -14124,13 +14187,18 @@ Active runs: ${next.running}`
|
|
|
14124
14187
|
return 1;
|
|
14125
14188
|
}
|
|
14126
14189
|
const client = new DeeplineClient();
|
|
14127
|
-
const page = await
|
|
14128
|
-
|
|
14129
|
-
|
|
14130
|
-
|
|
14131
|
-
|
|
14132
|
-
|
|
14133
|
-
|
|
14190
|
+
const page = await withRunReadTiming(
|
|
14191
|
+
"runs list",
|
|
14192
|
+
"run inventory",
|
|
14193
|
+
timing,
|
|
14194
|
+
() => client.runs.listPage({
|
|
14195
|
+
...playName ? { play: playName } : {},
|
|
14196
|
+
...statusFilter ? { status: statusFilter } : {},
|
|
14197
|
+
...nodeId ? { node: nodeId } : {},
|
|
14198
|
+
...limit !== void 0 ? { limit } : {},
|
|
14199
|
+
...offset !== void 0 ? { offset } : {}
|
|
14200
|
+
})
|
|
14201
|
+
);
|
|
14134
14202
|
const runs = page.runs.map((run) => ({
|
|
14135
14203
|
id: run.workflowId,
|
|
14136
14204
|
runId: run.workflowId,
|
|
@@ -16642,7 +16710,7 @@ Examples:
|
|
|
16642
16710
|
process.exitCode = await ownView();
|
|
16643
16711
|
return;
|
|
16644
16712
|
}
|
|
16645
|
-
const { describeAnything } = await import("./describe-
|
|
16713
|
+
const { describeAnything } = await import("./describe-S5O6FVT3.mjs");
|
|
16646
16714
|
process.exitCode = await describeAnything(
|
|
16647
16715
|
name,
|
|
16648
16716
|
{
|
|
@@ -16938,6 +17006,8 @@ Notes:
|
|
|
16938
17006
|
--json run.status,datasets.name,actions selects fields without flattening.
|
|
16939
17007
|
Selection changes stdout only, not the server query. Optional missing paths
|
|
16940
17008
|
are omitted; array positions are preserved. --json diagnostics needs --full.
|
|
17009
|
+
--timing writes each read phase and periodic long-read updates to stderr;
|
|
17010
|
+
JSON stdout stays unchanged.
|
|
16941
17011
|
dashboardUrl (text: "play page:") links the run's play page; link it in a
|
|
16942
17012
|
final answer. --web-url prints only that URL (with --json: {"dashboardUrl"}).
|
|
16943
17013
|
|
|
@@ -16962,7 +17032,10 @@ Examples:
|
|
|
16962
17032
|
).option(
|
|
16963
17033
|
"--config",
|
|
16964
17034
|
"Explicitly print the recorded configuration, without full results"
|
|
16965
|
-
).option("--web-url", "Print only the run's play page URL").
|
|
17035
|
+
).option("--web-url", "Print only the run's play page URL").option(
|
|
17036
|
+
"--timing",
|
|
17037
|
+
"Report read phases and periodic long-read updates to stderr"
|
|
17038
|
+
).addOption(
|
|
16966
17039
|
new Option2("--log-failed", "Attach terminal-failure logs").hideHelp()
|
|
16967
17040
|
).action(async (runId, options) => {
|
|
16968
17041
|
process.exitCode = await handleRunGet([
|
|
@@ -16972,6 +17045,7 @@ Examples:
|
|
|
16972
17045
|
...options.full ? ["--full"] : [],
|
|
16973
17046
|
...options.input ? ["--input"] : [],
|
|
16974
17047
|
...options.config ? ["--config"] : [],
|
|
17048
|
+
...options.timing ? ["--timing"] : [],
|
|
16975
17049
|
...options.logFailed ? ["--log-failed"] : []
|
|
16976
17050
|
]);
|
|
16977
17051
|
});
|
|
@@ -17017,6 +17091,7 @@ Notes:
|
|
|
17017
17091
|
JSON runs[].id is the public ID accepted by runs get, watch, export, and stop.
|
|
17018
17092
|
runId and workflowId are compatibility aliases; temporalRunId is not the public ID.
|
|
17019
17093
|
Use the ID returned by plays run for your execution, not the latest inventory entry.
|
|
17094
|
+
--timing writes the inventory request duration and periodic long-read updates to stderr.
|
|
17020
17095
|
|
|
17021
17096
|
Examples:
|
|
17022
17097
|
deepline runs list --play my-play
|
|
@@ -17024,14 +17099,18 @@ Examples:
|
|
|
17024
17099
|
deepline runs list --play my-play --status failed --compact
|
|
17025
17100
|
deepline runs list --status running --compact
|
|
17026
17101
|
`
|
|
17027
|
-
).option("--play <name>", "Play name to filter runs").option("--status <status>", "Filter by run status").option("--limit <count>", "Maximum runs to return").option("--offset <count>", "Zero-based page offset (requires --play)").option("--compact", "Drop verbose fields from JSON output").option("--json", "Emit JSON output").
|
|
17102
|
+
).option("--play <name>", "Play name to filter runs").option("--status <status>", "Filter by run status").option("--limit <count>", "Maximum runs to return").option("--offset <count>", "Zero-based page offset (requires --play)").option("--compact", "Drop verbose fields from JSON output").option("--json", "Emit JSON output").option(
|
|
17103
|
+
"--timing",
|
|
17104
|
+
"Report the inventory request duration and periodic long-read updates to stderr"
|
|
17105
|
+
).action(async (options) => {
|
|
17028
17106
|
process.exitCode = await handleRunsList([
|
|
17029
17107
|
...options.play ? ["--play", options.play] : [],
|
|
17030
17108
|
...options.status ? ["--status", options.status] : [],
|
|
17031
17109
|
...options.limit ? ["--limit", options.limit] : [],
|
|
17032
17110
|
...options.offset ? ["--offset", options.offset] : [],
|
|
17033
17111
|
...options.compact ? ["--compact"] : [],
|
|
17034
|
-
...options.json ? ["--json"] : []
|
|
17112
|
+
...options.json ? ["--json"] : [],
|
|
17113
|
+
...options.timing ? ["--timing"] : []
|
|
17035
17114
|
]);
|
|
17036
17115
|
});
|
|
17037
17116
|
runs.command("stop-all").description("Stop active play runs in the current workspace.").addHelpText(
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
DeeplineClient
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-4EWCKDFC.mjs";
|
|
4
4
|
import "./chunk-6IKARAYD.mjs";
|
|
5
5
|
import "./chunk-JI2B4RZP.mjs";
|
|
6
6
|
import "./chunk-EIMG75BT.mjs";
|
|
@@ -8,12 +8,12 @@ import "./chunk-UBKA33KY.mjs";
|
|
|
8
8
|
import {
|
|
9
9
|
printCommandEnvelope,
|
|
10
10
|
shouldEmitJson
|
|
11
|
-
} from "./chunk-
|
|
12
|
-
import "./chunk-
|
|
11
|
+
} from "./chunk-JT7XZP4U.mjs";
|
|
12
|
+
import "./chunk-Q77JWGMZ.mjs";
|
|
13
13
|
import "./chunk-YHPYUZZX.mjs";
|
|
14
14
|
import "./chunk-DLIRSHV6.mjs";
|
|
15
15
|
import "./chunk-NXGCO4JB.mjs";
|
|
16
|
-
import "./chunk-
|
|
16
|
+
import "./chunk-NMPFKSZN.mjs";
|
|
17
17
|
import "./chunk-WZYKRD7T.mjs";
|
|
18
18
|
import "./chunk-KRD6H754.mjs";
|
|
19
19
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } }
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var _chunkLQS5XUFLjs = require('./chunk-LQS5XUFL.js');
|
|
4
4
|
require('./chunk-S6R3OX7B.js');
|
|
5
5
|
require('./chunk-UHNDVD3P.js');
|
|
6
6
|
require('./chunk-KXMNM4AQ.js');
|
|
@@ -8,20 +8,20 @@ require('./chunk-XDVT3GOM.js');
|
|
|
8
8
|
|
|
9
9
|
|
|
10
10
|
|
|
11
|
-
var
|
|
12
|
-
require('./chunk-
|
|
11
|
+
var _chunkCIOMFOJJjs = require('./chunk-CIOMFOJJ.js');
|
|
12
|
+
require('./chunk-JHFX74T6.js');
|
|
13
13
|
require('./chunk-Q2E4E4FJ.js');
|
|
14
14
|
require('./chunk-XNYIZMNQ.js');
|
|
15
15
|
require('./chunk-7P5AA3SN.js');
|
|
16
|
-
require('./chunk-
|
|
16
|
+
require('./chunk-IK7J2DE5.js');
|
|
17
17
|
require('./chunk-OG64RBAC.js');
|
|
18
18
|
require('./chunk-COGTRVWW.js');
|
|
19
19
|
|
|
20
20
|
// src/cli/commands/providers.ts
|
|
21
21
|
async function listProviders(options = {}) {
|
|
22
|
-
const client = new (0,
|
|
22
|
+
const client = new (0, _chunkLQS5XUFLjs.DeeplineClient)();
|
|
23
23
|
const changed = options.changed === true;
|
|
24
|
-
const emitJson = options.json === true ||
|
|
24
|
+
const emitJson = options.json === true || _chunkCIOMFOJJjs.shouldEmitJson.call(void 0, );
|
|
25
25
|
const providers = await client.listProviders({ changed });
|
|
26
26
|
const render = {
|
|
27
27
|
sections: [
|
|
@@ -40,7 +40,7 @@ async function listProviders(options = {}) {
|
|
|
40
40
|
}
|
|
41
41
|
]
|
|
42
42
|
};
|
|
43
|
-
|
|
43
|
+
_chunkCIOMFOJJjs.printCommandEnvelope.call(void 0,
|
|
44
44
|
{
|
|
45
45
|
providers,
|
|
46
46
|
count: providers.length,
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import {
|
|
2
2
|
printCommandEnvelope,
|
|
3
3
|
shouldEmitJson
|
|
4
|
-
} from "./chunk-
|
|
5
|
-
import "./chunk-
|
|
4
|
+
} from "./chunk-JT7XZP4U.mjs";
|
|
5
|
+
import "./chunk-Q77JWGMZ.mjs";
|
|
6
6
|
import "./chunk-YHPYUZZX.mjs";
|
|
7
7
|
import "./chunk-DLIRSHV6.mjs";
|
|
8
8
|
import "./chunk-NXGCO4JB.mjs";
|
|
9
|
-
import "./chunk-
|
|
9
|
+
import "./chunk-NMPFKSZN.mjs";
|
|
10
10
|
import "./chunk-WZYKRD7T.mjs";
|
|
11
11
|
import {
|
|
12
12
|
DEEPLINE_GTM_SKILL,
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
2
2
|
|
|
3
3
|
|
|
4
|
-
var
|
|
5
|
-
require('./chunk-
|
|
4
|
+
var _chunkCIOMFOJJjs = require('./chunk-CIOMFOJJ.js');
|
|
5
|
+
require('./chunk-JHFX74T6.js');
|
|
6
6
|
require('./chunk-Q2E4E4FJ.js');
|
|
7
7
|
require('./chunk-XNYIZMNQ.js');
|
|
8
8
|
require('./chunk-7P5AA3SN.js');
|
|
9
|
-
require('./chunk-
|
|
9
|
+
require('./chunk-IK7J2DE5.js');
|
|
10
10
|
require('./chunk-OG64RBAC.js');
|
|
11
11
|
|
|
12
12
|
|
|
@@ -16,12 +16,12 @@ require('./chunk-COGTRVWW.js');
|
|
|
16
16
|
|
|
17
17
|
// src/cli/commands/quickstart.ts
|
|
18
18
|
async function handleQuickstart(options) {
|
|
19
|
-
const jsonOutput =
|
|
19
|
+
const jsonOutput = _chunkCIOMFOJJjs.shouldEmitJson.call(void 0, options.json === true);
|
|
20
20
|
const gettingStarted = {
|
|
21
21
|
skill: _chunkEBU7LQ64js.DEEPLINE_GTM_SKILL,
|
|
22
22
|
examples: _chunkEBU7LQ64js.DEEPLINE_GTM_STARTER_PROMPTS
|
|
23
23
|
};
|
|
24
|
-
|
|
24
|
+
_chunkCIOMFOJJjs.printCommandEnvelope.call(void 0,
|
|
25
25
|
{
|
|
26
26
|
ok: true,
|
|
27
27
|
status: "deprecated",
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
var _chunkZOKF4F65js = require('./chunk-ZOKF4F65.js');
|
|
9
|
+
require('./chunk-ZM2YPJQJ.js');
|
|
10
|
+
require('./chunk-LQS5XUFL.js');
|
|
11
|
+
require('./chunk-S6R3OX7B.js');
|
|
12
|
+
require('./chunk-UHNDVD3P.js');
|
|
13
|
+
require('./chunk-KXMNM4AQ.js');
|
|
14
|
+
require('./chunk-XDVT3GOM.js');
|
|
15
|
+
require('./chunk-CIOMFOJJ.js');
|
|
16
|
+
require('./chunk-JHFX74T6.js');
|
|
17
|
+
require('./chunk-Q2E4E4FJ.js');
|
|
18
|
+
require('./chunk-XNYIZMNQ.js');
|
|
19
|
+
require('./chunk-7P5AA3SN.js');
|
|
20
|
+
require('./chunk-IK7J2DE5.js');
|
|
21
|
+
require('./chunk-OG64RBAC.js');
|
|
22
|
+
require('./chunk-COGTRVWW.js');
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
exports.SEARCH_TYPES = _chunkZOKF4F65js.SEARCH_TYPES; exports.appendCsv = _chunkZOKF4F65js.appendCsv; exports.parseTypes = _chunkZOKF4F65js.parseTypes; exports.pointAtDescribe = _chunkZOKF4F65js.pointAtDescribe; exports.registerDeprecatedSearchCommand = _chunkZOKF4F65js.registerDeprecatedSearchCommand; exports.registerSearchCommand = _chunkZOKF4F65js.registerSearchCommand;
|
|
@@ -5,19 +5,19 @@ import {
|
|
|
5
5
|
pointAtDescribe,
|
|
6
6
|
registerDeprecatedSearchCommand,
|
|
7
7
|
registerSearchCommand
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-OIUXHL7G.mjs";
|
|
9
9
|
import "./chunk-LJ5747UC.mjs";
|
|
10
|
-
import "./chunk-
|
|
10
|
+
import "./chunk-4EWCKDFC.mjs";
|
|
11
11
|
import "./chunk-6IKARAYD.mjs";
|
|
12
12
|
import "./chunk-JI2B4RZP.mjs";
|
|
13
13
|
import "./chunk-EIMG75BT.mjs";
|
|
14
14
|
import "./chunk-UBKA33KY.mjs";
|
|
15
|
-
import "./chunk-
|
|
16
|
-
import "./chunk-
|
|
15
|
+
import "./chunk-JT7XZP4U.mjs";
|
|
16
|
+
import "./chunk-Q77JWGMZ.mjs";
|
|
17
17
|
import "./chunk-YHPYUZZX.mjs";
|
|
18
18
|
import "./chunk-DLIRSHV6.mjs";
|
|
19
19
|
import "./chunk-NXGCO4JB.mjs";
|
|
20
|
-
import "./chunk-
|
|
20
|
+
import "./chunk-NMPFKSZN.mjs";
|
|
21
21
|
import "./chunk-WZYKRD7T.mjs";
|
|
22
22
|
import "./chunk-KRD6H754.mjs";
|
|
23
23
|
export {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var _chunkLQS5XUFLjs = require('./chunk-LQS5XUFL.js');
|
|
4
4
|
require('./chunk-S6R3OX7B.js');
|
|
5
5
|
require('./chunk-UHNDVD3P.js');
|
|
6
6
|
require('./chunk-KXMNM4AQ.js');
|
|
@@ -8,12 +8,12 @@ require('./chunk-XDVT3GOM.js');
|
|
|
8
8
|
|
|
9
9
|
|
|
10
10
|
|
|
11
|
-
var
|
|
12
|
-
require('./chunk-
|
|
11
|
+
var _chunkCIOMFOJJjs = require('./chunk-CIOMFOJJ.js');
|
|
12
|
+
require('./chunk-JHFX74T6.js');
|
|
13
13
|
require('./chunk-Q2E4E4FJ.js');
|
|
14
14
|
require('./chunk-XNYIZMNQ.js');
|
|
15
15
|
require('./chunk-7P5AA3SN.js');
|
|
16
|
-
require('./chunk-
|
|
16
|
+
require('./chunk-IK7J2DE5.js');
|
|
17
17
|
require('./chunk-OG64RBAC.js');
|
|
18
18
|
require('./chunk-COGTRVWW.js');
|
|
19
19
|
|
|
@@ -205,9 +205,9 @@ function preventShellHistoryLeak(forbidden) {
|
|
|
205
205
|
}
|
|
206
206
|
}
|
|
207
207
|
async function handleList(options) {
|
|
208
|
-
const client = new (0,
|
|
208
|
+
const client = new (0, _chunkLQS5XUFLjs.DeeplineClient)();
|
|
209
209
|
const secrets = await client.listSecrets();
|
|
210
|
-
|
|
210
|
+
_chunkCIOMFOJJjs.printCommandEnvelope.call(void 0,
|
|
211
211
|
{
|
|
212
212
|
secrets,
|
|
213
213
|
count: secrets.length,
|
|
@@ -225,14 +225,14 @@ async function handleList(options) {
|
|
|
225
225
|
}
|
|
226
226
|
async function handleCheck(nameInput, options) {
|
|
227
227
|
const name = normalizeSecretName(nameInput);
|
|
228
|
-
const client = new (0,
|
|
228
|
+
const client = new (0, _chunkLQS5XUFLjs.DeeplineClient)();
|
|
229
229
|
const playName = options.play === void 0 ? void 0 : normalizePlaySelector(options.play);
|
|
230
230
|
const check = playName !== void 0 ? await client.inspectSecret(name, { playName }) : null;
|
|
231
231
|
const secret = check ? check.secret : await client.checkSecret(name);
|
|
232
232
|
const ok = check ? check.ok : Boolean(secret);
|
|
233
233
|
const quotedPlay = `'${(_nullishCoalesce(options.play, () => ( "PLAY"))).replace(/'/g, `'"'"'`)}'`;
|
|
234
234
|
const scopeHint = check ? _optionalChain([secret, 'optionalAccess', _3 => _3.scope]) === "play" ? check.reason === "disabled" ? `The Play-scoped secret is disabled and no active org fallback is available. Restore it with: deepline secrets set ${name} --scope play --play ${quotedPlay}` : `The active Play-scoped secret takes precedence over the org secret.${ok ? "" : ` Restore it with: deepline secrets set ${name} --scope play --play ${quotedPlay}`}` : `No Play override.${ok ? " The org secret is available." : ` Set or rotate the org secret with: deepline secrets set ${name}`}` : `Metadata only. Verify effective scope and active version with: deepline secrets check ${name} --play <play-name>`;
|
|
235
|
-
|
|
235
|
+
_chunkCIOMFOJJjs.printCommandEnvelope.call(void 0,
|
|
236
236
|
{
|
|
237
237
|
ok,
|
|
238
238
|
name,
|
|
@@ -260,7 +260,7 @@ async function handleSet(nameInput, forbidden, options) {
|
|
|
260
260
|
const name = normalizeSecretName(nameInput);
|
|
261
261
|
const { scope, playName } = resolveSecretWriteScope(options);
|
|
262
262
|
const value = await readSecretValueFromOptions(options);
|
|
263
|
-
const { http } =
|
|
263
|
+
const { http } = _chunkCIOMFOJJjs.getAuthedHttpClient.call(void 0, );
|
|
264
264
|
const response = await http.post(
|
|
265
265
|
"/api/v2/secrets",
|
|
266
266
|
{
|
|
@@ -272,7 +272,7 @@ async function handleSet(nameInput, forbidden, options) {
|
|
|
272
272
|
}
|
|
273
273
|
);
|
|
274
274
|
const secret = response.secret;
|
|
275
|
-
|
|
275
|
+
_chunkCIOMFOJJjs.printCommandEnvelope.call(void 0,
|
|
276
276
|
{
|
|
277
277
|
ok: true,
|
|
278
278
|
secret,
|
|
@@ -300,7 +300,7 @@ async function handleNote(secretId, noteInput, options) {
|
|
|
300
300
|
}
|
|
301
301
|
const note = options.clear ? "" : noteInput;
|
|
302
302
|
if (options.dryRun) {
|
|
303
|
-
|
|
303
|
+
_chunkCIOMFOJJjs.printCommandEnvelope.call(void 0,
|
|
304
304
|
{
|
|
305
305
|
ok: true,
|
|
306
306
|
dryRun: true,
|
|
@@ -321,9 +321,9 @@ async function handleNote(secretId, noteInput, options) {
|
|
|
321
321
|
);
|
|
322
322
|
return;
|
|
323
323
|
}
|
|
324
|
-
const client = new (0,
|
|
324
|
+
const client = new (0, _chunkLQS5XUFLjs.DeeplineClient)();
|
|
325
325
|
const secret = await client.updateSecretNote(secretId, note);
|
|
326
|
-
|
|
326
|
+
_chunkCIOMFOJJjs.printCommandEnvelope.call(void 0,
|
|
327
327
|
{
|
|
328
328
|
ok: true,
|
|
329
329
|
secret,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
DeeplineClient
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-4EWCKDFC.mjs";
|
|
4
4
|
import "./chunk-6IKARAYD.mjs";
|
|
5
5
|
import "./chunk-JI2B4RZP.mjs";
|
|
6
6
|
import "./chunk-EIMG75BT.mjs";
|
|
@@ -8,12 +8,12 @@ import "./chunk-UBKA33KY.mjs";
|
|
|
8
8
|
import {
|
|
9
9
|
getAuthedHttpClient,
|
|
10
10
|
printCommandEnvelope
|
|
11
|
-
} from "./chunk-
|
|
12
|
-
import "./chunk-
|
|
11
|
+
} from "./chunk-JT7XZP4U.mjs";
|
|
12
|
+
import "./chunk-Q77JWGMZ.mjs";
|
|
13
13
|
import "./chunk-YHPYUZZX.mjs";
|
|
14
14
|
import "./chunk-DLIRSHV6.mjs";
|
|
15
15
|
import "./chunk-NXGCO4JB.mjs";
|
|
16
|
-
import "./chunk-
|
|
16
|
+
import "./chunk-NMPFKSZN.mjs";
|
|
17
17
|
import "./chunk-WZYKRD7T.mjs";
|
|
18
18
|
import "./chunk-KRD6H754.mjs";
|
|
19
19
|
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import {
|
|
2
2
|
registerSessionSendRenderCommands,
|
|
3
3
|
registerSessionsCommands
|
|
4
|
-
} from "./chunk-
|
|
5
|
-
import "./chunk-
|
|
6
|
-
import "./chunk-
|
|
4
|
+
} from "./chunk-QPIAVCCS.mjs";
|
|
5
|
+
import "./chunk-JT7XZP4U.mjs";
|
|
6
|
+
import "./chunk-Q77JWGMZ.mjs";
|
|
7
7
|
import "./chunk-YHPYUZZX.mjs";
|
|
8
8
|
import "./chunk-DLIRSHV6.mjs";
|
|
9
9
|
import "./chunk-NXGCO4JB.mjs";
|
|
10
|
-
import "./chunk-
|
|
10
|
+
import "./chunk-NMPFKSZN.mjs";
|
|
11
11
|
import "./chunk-WZYKRD7T.mjs";
|
|
12
12
|
import "./chunk-KRD6H754.mjs";
|
|
13
13
|
export {
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
2
2
|
|
|
3
3
|
|
|
4
|
-
var
|
|
5
|
-
require('./chunk-
|
|
6
|
-
require('./chunk-
|
|
4
|
+
var _chunk65YHUBYZjs = require('./chunk-65YHUBYZ.js');
|
|
5
|
+
require('./chunk-CIOMFOJJ.js');
|
|
6
|
+
require('./chunk-JHFX74T6.js');
|
|
7
7
|
require('./chunk-Q2E4E4FJ.js');
|
|
8
8
|
require('./chunk-XNYIZMNQ.js');
|
|
9
9
|
require('./chunk-7P5AA3SN.js');
|
|
10
|
-
require('./chunk-
|
|
10
|
+
require('./chunk-IK7J2DE5.js');
|
|
11
11
|
require('./chunk-OG64RBAC.js');
|
|
12
12
|
require('./chunk-COGTRVWW.js');
|
|
13
13
|
|
|
14
14
|
|
|
15
15
|
|
|
16
|
-
exports.registerSessionSendRenderCommands =
|
|
16
|
+
exports.registerSessionSendRenderCommands = _chunk65YHUBYZjs.registerSessionSendRenderCommands; exports.registerSessionsCommands = _chunk65YHUBYZjs.registerSessionsCommands;
|
|
@@ -2,7 +2,7 @@ import {
|
|
|
2
2
|
DeeplineClient,
|
|
3
3
|
PRODUCT_NOTIFICATION_EVENT_CATALOG,
|
|
4
4
|
resolveLegacySlackNotification
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-4EWCKDFC.mjs";
|
|
6
6
|
import "./chunk-6IKARAYD.mjs";
|
|
7
7
|
import "./chunk-JI2B4RZP.mjs";
|
|
8
8
|
import "./chunk-EIMG75BT.mjs";
|
|
@@ -11,19 +11,19 @@ import {
|
|
|
11
11
|
readCliUpdatePreferences,
|
|
12
12
|
runUpdateCommand,
|
|
13
13
|
setCliAutoUpdateEnabled
|
|
14
|
-
} from "./chunk-
|
|
15
|
-
import "./chunk-
|
|
16
|
-
import "./chunk-
|
|
14
|
+
} from "./chunk-Z7MNFHHE.mjs";
|
|
15
|
+
import "./chunk-V4TFEZ47.mjs";
|
|
16
|
+
import "./chunk-TPPHH3FS.mjs";
|
|
17
17
|
import "./chunk-GAMFK2ZP.mjs";
|
|
18
18
|
import {
|
|
19
19
|
openInBrowser,
|
|
20
20
|
printCommandEnvelope
|
|
21
|
-
} from "./chunk-
|
|
22
|
-
import "./chunk-
|
|
21
|
+
} from "./chunk-JT7XZP4U.mjs";
|
|
22
|
+
import "./chunk-Q77JWGMZ.mjs";
|
|
23
23
|
import "./chunk-YHPYUZZX.mjs";
|
|
24
24
|
import "./chunk-DLIRSHV6.mjs";
|
|
25
25
|
import "./chunk-NXGCO4JB.mjs";
|
|
26
|
-
import "./chunk-
|
|
26
|
+
import "./chunk-NMPFKSZN.mjs";
|
|
27
27
|
import "./chunk-WZYKRD7T.mjs";
|
|
28
28
|
import "./chunk-KRD6H754.mjs";
|
|
29
29
|
|