recappi 0.1.70 → 0.1.72
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/index.js +103 -2
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -1252,7 +1252,7 @@ function RecordingDetailView({
|
|
|
1252
1252
|
scrollable ? " \xB7 \u2191\u2193 scroll" : "",
|
|
1253
1253
|
ready ? " \xB7 " : "",
|
|
1254
1254
|
`o open \xB7 d download \xB7 f finder`,
|
|
1255
|
-
" \xB7 T re-transcribe",
|
|
1255
|
+
" \xB7 T re-transcribe \xB7 S re-summarize",
|
|
1256
1256
|
item.activeTranscriptId ? " \xB7 t full" : "",
|
|
1257
1257
|
links.webUrl ? " \xB7 w web" : "",
|
|
1258
1258
|
" \xB7 esc back"
|
|
@@ -2004,6 +2004,7 @@ function AppShell({
|
|
|
2004
2004
|
startRecordSetupPreview,
|
|
2005
2005
|
transcribeRecordingArtifact,
|
|
2006
2006
|
onRetranscribe,
|
|
2007
|
+
onResummarize,
|
|
2007
2008
|
initialView = "overview",
|
|
2008
2009
|
openUrl: openUrl2,
|
|
2009
2010
|
copyText: copyText2,
|
|
@@ -2422,6 +2423,23 @@ function AppShell({
|
|
|
2422
2423
|
},
|
|
2423
2424
|
[onRetranscribe, refresh]
|
|
2424
2425
|
);
|
|
2426
|
+
const resummarizeExistingRecording = useCallback(
|
|
2427
|
+
async (recordingId) => {
|
|
2428
|
+
if (!onResummarize) {
|
|
2429
|
+
setNotice("Re-summarize is not available in this CLI session.");
|
|
2430
|
+
return;
|
|
2431
|
+
}
|
|
2432
|
+
setNotice("Re-summarize started\u2026");
|
|
2433
|
+
try {
|
|
2434
|
+
await onResummarize(recordingId);
|
|
2435
|
+
setNotice("Re-summarize started \u2014 the summary will refresh shortly.");
|
|
2436
|
+
await refresh({ resetRecordings: true });
|
|
2437
|
+
} catch (error51) {
|
|
2438
|
+
setNotice(transcribeHandoffErrorCopy(error51));
|
|
2439
|
+
}
|
|
2440
|
+
},
|
|
2441
|
+
[onResummarize, refresh]
|
|
2442
|
+
);
|
|
2425
2443
|
useEffect4(() => {
|
|
2426
2444
|
if (liveRecord?.kind !== "stopped") return;
|
|
2427
2445
|
const artifact = liveRecord.artifact;
|
|
@@ -2685,6 +2703,7 @@ function AppShell({
|
|
|
2685
2703
|
const rec = recordings.find((r) => r.recordingId === screen.recordingId);
|
|
2686
2704
|
const links = rec ? resolveRecordingLinks(rec.recordingId, rec.origin) : {};
|
|
2687
2705
|
if (input === "T" && rec) void retranscribeExistingRecording(rec.recordingId);
|
|
2706
|
+
else if (input === "S" && rec) void resummarizeExistingRecording(rec.recordingId);
|
|
2688
2707
|
else if (input === "t" && rec?.activeTranscriptId) void openTranscript(rec.activeTranscriptId);
|
|
2689
2708
|
else if (input === "o" && rec) void runAudio(rec.recordingId, "open");
|
|
2690
2709
|
else if (input === "d" && rec) void runAudio(rec.recordingId, "download");
|
|
@@ -2935,6 +2954,7 @@ async function runDashboard(deps) {
|
|
|
2935
2954
|
startRecordSetupPreview: deps.startRecordSetupPreview,
|
|
2936
2955
|
transcribeRecordingArtifact: deps.transcribeRecordingArtifact,
|
|
2937
2956
|
onRetranscribe: deps.retranscribeRecording,
|
|
2957
|
+
onResummarize: deps.resummarizeRecording,
|
|
2938
2958
|
initialView: deps.initialView ?? "overview",
|
|
2939
2959
|
openUrl,
|
|
2940
2960
|
copyText
|
|
@@ -18028,6 +18048,12 @@ var summaryStatusSchema = external_exports.enum([
|
|
|
18028
18048
|
"failed",
|
|
18029
18049
|
"skipped"
|
|
18030
18050
|
]);
|
|
18051
|
+
var recordingSummarizeDataSchema = external_exports.object({
|
|
18052
|
+
origin: external_exports.string(),
|
|
18053
|
+
recordingId: external_exports.string(),
|
|
18054
|
+
transcriptId: external_exports.string(),
|
|
18055
|
+
summaryStatus: summaryStatusSchema
|
|
18056
|
+
});
|
|
18031
18057
|
var summaryActionItemSchema = external_exports.object({
|
|
18032
18058
|
who: external_exports.string().optional(),
|
|
18033
18059
|
what: external_exports.string()
|
|
@@ -19301,6 +19327,22 @@ var RecappiApiClient = class {
|
|
|
19301
19327
|
}
|
|
19302
19328
|
return result;
|
|
19303
19329
|
}
|
|
19330
|
+
async summarizeRecording(opts) {
|
|
19331
|
+
const hasPrompt = Boolean(opts.prompt?.trim());
|
|
19332
|
+
const parsed = await this.postJson(
|
|
19333
|
+
`/api/recordings/${encodeURIComponent(opts.recordingId)}/summarize`,
|
|
19334
|
+
{
|
|
19335
|
+
...hasPrompt ? { prompt: opts.prompt } : {},
|
|
19336
|
+
...opts.model ? { model: opts.model } : {}
|
|
19337
|
+
}
|
|
19338
|
+
);
|
|
19339
|
+
return recordingSummarizeDataSchema.parse({
|
|
19340
|
+
origin: this.auth.origin,
|
|
19341
|
+
recordingId: opts.recordingId,
|
|
19342
|
+
transcriptId: parsed.transcriptId,
|
|
19343
|
+
summaryStatus: parsed.summaryStatus
|
|
19344
|
+
});
|
|
19345
|
+
}
|
|
19304
19346
|
async downloadRecordingAudio(recordingId, opts = {}) {
|
|
19305
19347
|
const response = await this.request(
|
|
19306
19348
|
"GET",
|
|
@@ -20160,6 +20202,7 @@ var COMMON_TASKS = [
|
|
|
20160
20202
|
{ label: "Record audio + live captions", command: "recappi record --live" },
|
|
20161
20203
|
{ label: "Transcribe a local file", command: "recappi upload <file> --transcribe --wait" },
|
|
20162
20204
|
{ label: "Re-transcribe a recording", command: "recappi recordings retranscribe <recordingId> --wait" },
|
|
20205
|
+
{ label: "Re-summarize a recording", command: "recappi recordings resummarize <recordingId>" },
|
|
20163
20206
|
{ label: "List / find recordings", command: "recappi recordings list" },
|
|
20164
20207
|
{ label: "Read a transcript", command: "recappi transcript get <transcriptId>" },
|
|
20165
20208
|
{ label: "Download / open audio", command: "recappi audio <recordingId> --open" },
|
|
@@ -20290,6 +20333,20 @@ var COMMAND_METADATA = {
|
|
|
20290
20333
|
],
|
|
20291
20334
|
relatedCommands: ["jobs wait", "transcript get"]
|
|
20292
20335
|
},
|
|
20336
|
+
"recordings resummarize": {
|
|
20337
|
+
capabilities: ["Retry or regenerate the summary for an existing recording", "Re-summarize with a custom prompt/model"],
|
|
20338
|
+
examples: [
|
|
20339
|
+
{
|
|
20340
|
+
description: "Retry summary generation for the active transcript",
|
|
20341
|
+
command: "recappi recordings resummarize <recordingId>"
|
|
20342
|
+
},
|
|
20343
|
+
{
|
|
20344
|
+
description: "Re-summarize with custom context",
|
|
20345
|
+
command: 'recappi recordings resummarize <recordingId> --prompt "focus on action items"'
|
|
20346
|
+
}
|
|
20347
|
+
],
|
|
20348
|
+
relatedCommands: ["recordings get", "transcript get"]
|
|
20349
|
+
},
|
|
20293
20350
|
"transcript get": {
|
|
20294
20351
|
capabilities: ["Fetch a finished transcript by id"],
|
|
20295
20352
|
examples: [{ description: "Fetch an existing transcript", command: "recappi transcript get <transcriptId>" }],
|
|
@@ -20850,6 +20907,24 @@ Next:
|
|
|
20850
20907
|
opts.stdout(`
|
|
20851
20908
|
Next:
|
|
20852
20909
|
recappi jobs wait ${data.jobId}
|
|
20910
|
+
`);
|
|
20911
|
+
}
|
|
20912
|
+
return;
|
|
20913
|
+
}
|
|
20914
|
+
if (command === "recordings resummarize" && isRecord4(data)) {
|
|
20915
|
+
opts.stdout("Summary queued\n");
|
|
20916
|
+
if (typeof data.recordingId === "string") opts.stdout(` recordingId: ${data.recordingId}
|
|
20917
|
+
`);
|
|
20918
|
+
if (typeof data.transcriptId === "string") opts.stdout(` transcriptId: ${data.transcriptId}
|
|
20919
|
+
`);
|
|
20920
|
+
if (typeof data.summaryStatus === "string") {
|
|
20921
|
+
opts.stdout(` summaryStatus: ${data.summaryStatus}
|
|
20922
|
+
`);
|
|
20923
|
+
}
|
|
20924
|
+
if (typeof data.transcriptId === "string") {
|
|
20925
|
+
opts.stdout(`
|
|
20926
|
+
Next:
|
|
20927
|
+
recappi transcript get ${data.transcriptId}
|
|
20853
20928
|
`);
|
|
20854
20929
|
}
|
|
20855
20930
|
return;
|
|
@@ -21308,6 +21383,7 @@ var COMMAND_DATA_SCHEMAS = {
|
|
|
21308
21383
|
"recordings get": recordingDataSchema,
|
|
21309
21384
|
"recordings list": recordingListDataSchema,
|
|
21310
21385
|
"recordings retranscribe": recordingTranscribeDataSchema,
|
|
21386
|
+
"recordings resummarize": recordingSummarizeDataSchema,
|
|
21311
21387
|
"jobs list": jobListDataSchema,
|
|
21312
21388
|
"jobs wait": jobDataSchema,
|
|
21313
21389
|
"transcript get": transcriptDataSchema
|
|
@@ -22812,6 +22888,7 @@ async function runCli(deps = {}) {
|
|
|
22812
22888
|
return success2;
|
|
22813
22889
|
},
|
|
22814
22890
|
retranscribeRecording: (recordingId, options = {}) => client.transcribeRecording({ recordingId, ...options }),
|
|
22891
|
+
resummarizeRecording: (recordingId) => client.summarizeRecording({ recordingId }),
|
|
22815
22892
|
initialView: parsed.initialView
|
|
22816
22893
|
});
|
|
22817
22894
|
return 0;
|
|
@@ -23020,6 +23097,15 @@ async function runCli(deps = {}) {
|
|
|
23020
23097
|
renderSuccess("recordings retranscribe", data, render3);
|
|
23021
23098
|
return 0;
|
|
23022
23099
|
}
|
|
23100
|
+
if (parsed.kind === "recordings-resummarize") {
|
|
23101
|
+
const data = await client.summarizeRecording({
|
|
23102
|
+
recordingId: parsed.recordingId,
|
|
23103
|
+
prompt: parsed.prompt,
|
|
23104
|
+
model: parsed.model
|
|
23105
|
+
});
|
|
23106
|
+
renderSuccess("recordings resummarize", data, render3);
|
|
23107
|
+
return 0;
|
|
23108
|
+
}
|
|
23023
23109
|
if (parsed.kind === "dashboard-stats") {
|
|
23024
23110
|
const data = await client.dashboardStats();
|
|
23025
23111
|
renderSuccess("dashboard stats", data, render3);
|
|
@@ -23321,7 +23407,7 @@ Agent mode:
|
|
|
23321
23407
|
commandName: "dashboard stats"
|
|
23322
23408
|
});
|
|
23323
23409
|
});
|
|
23324
|
-
const recordings = program.command("recordings").description("List, fetch, and re-
|
|
23410
|
+
const recordings = program.command("recordings").description("List, fetch, re-transcribe, and re-summarize recordings");
|
|
23325
23411
|
addCommonOptions(recordings);
|
|
23326
23412
|
const recordingsList = recordings.command("list").description("List recent recordings").option("--limit <n>", "number of recordings to show", parseLimitOption("--limit", 1, 100), 20).option("--cursor <cursor>", "pagination cursor", parseStringOption("--cursor")).option("--search <query>", "search recordings and transcripts", parseStringOption("--search")).addHelpText("after", commandMetadataHelpText("recordings list"));
|
|
23327
23413
|
addCommonOptions(recordingsList);
|
|
@@ -23367,6 +23453,21 @@ Agent mode:
|
|
|
23367
23453
|
});
|
|
23368
23454
|
}
|
|
23369
23455
|
);
|
|
23456
|
+
const recordingsResummarize = recordings.command("resummarize <recordingId>").description("Retry or regenerate the summary for an existing recording").option("--model <name>", "summary model", parseStringOption("--model")).option("--prompt <text>", "custom summary prompt/context", parseStringOption("--prompt")).addHelpText("after", commandMetadataHelpText("recordings resummarize"));
|
|
23457
|
+
addCommonOptions(recordingsResummarize);
|
|
23458
|
+
recordingsResummarize.action(
|
|
23459
|
+
(recordingId, _options, command) => {
|
|
23460
|
+
const opts = command.opts();
|
|
23461
|
+
onSelect({
|
|
23462
|
+
kind: "recordings-resummarize",
|
|
23463
|
+
options: collectGlobalOptions(command),
|
|
23464
|
+
commandName: "recordings resummarize",
|
|
23465
|
+
recordingId,
|
|
23466
|
+
...typeof opts.model === "string" ? { model: opts.model } : {},
|
|
23467
|
+
...typeof opts.prompt === "string" ? { prompt: opts.prompt } : {}
|
|
23468
|
+
});
|
|
23469
|
+
}
|
|
23470
|
+
);
|
|
23370
23471
|
const transcript = program.command("transcript").description("Read transcripts (create via upload --transcribe or recordings retranscribe)").addHelpText(
|
|
23371
23472
|
"after",
|
|
23372
23473
|
`
|