@redaksjon/protokoll-engine 0.1.1-dev.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +47 -0
- package/dist/agentic/executor.d.ts +21 -0
- package/dist/agentic/executor.d.ts.map +1 -0
- package/dist/agentic/index.d.ts +27 -0
- package/dist/agentic/index.d.ts.map +1 -0
- package/dist/agentic/registry.d.ts +11 -0
- package/dist/agentic/registry.d.ts.map +1 -0
- package/dist/agentic/tools/lookup-person.d.ts +3 -0
- package/dist/agentic/tools/lookup-person.d.ts.map +1 -0
- package/dist/agentic/tools/lookup-project.d.ts +3 -0
- package/dist/agentic/tools/lookup-project.d.ts.map +1 -0
- package/dist/agentic/tools/route-note.d.ts +3 -0
- package/dist/agentic/tools/route-note.d.ts.map +1 -0
- package/dist/agentic/tools/store-context.d.ts +3 -0
- package/dist/agentic/tools/store-context.d.ts.map +1 -0
- package/dist/agentic/tools/verify-spelling.d.ts +3 -0
- package/dist/agentic/tools/verify-spelling.d.ts.map +1 -0
- package/dist/agentic/types.d.ts +110 -0
- package/dist/agentic/types.d.ts.map +1 -0
- package/dist/constants.d.ts +98 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/feedback/analyzer.d.ts +13 -0
- package/dist/feedback/analyzer.d.ts.map +1 -0
- package/dist/feedback/decision-tracker.d.ts +14 -0
- package/dist/feedback/decision-tracker.d.ts.map +1 -0
- package/dist/feedback/handler.d.ts +14 -0
- package/dist/feedback/handler.d.ts.map +1 -0
- package/dist/feedback/index.d.ts +12 -0
- package/dist/feedback/index.d.ts.map +1 -0
- package/dist/feedback/types.d.ts +72 -0
- package/dist/feedback/types.d.ts.map +1 -0
- package/dist/index.d.ts +24 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +32 -0
- package/dist/index.js.map +1 -0
- package/dist/index10.js +4 -0
- package/dist/index10.js.map +1 -0
- package/dist/index11.js +22 -0
- package/dist/index11.js.map +1 -0
- package/dist/index12.js +125 -0
- package/dist/index12.js.map +1 -0
- package/dist/index13.js +124 -0
- package/dist/index13.js.map +1 -0
- package/dist/index14.js +296 -0
- package/dist/index14.js.map +1 -0
- package/dist/index15.js +100 -0
- package/dist/index15.js.map +1 -0
- package/dist/index16.js +107 -0
- package/dist/index16.js.map +1 -0
- package/dist/index17.js +185 -0
- package/dist/index17.js.map +1 -0
- package/dist/index18.js +53 -0
- package/dist/index18.js.map +1 -0
- package/dist/index19.js +19 -0
- package/dist/index19.js.map +1 -0
- package/dist/index2.js +33 -0
- package/dist/index2.js.map +1 -0
- package/dist/index20.js +105 -0
- package/dist/index20.js.map +1 -0
- package/dist/index21.js +26 -0
- package/dist/index21.js.map +1 -0
- package/dist/index22.js +49 -0
- package/dist/index22.js.map +1 -0
- package/dist/index23.js +119 -0
- package/dist/index23.js.map +1 -0
- package/dist/index24.js +330 -0
- package/dist/index24.js.map +1 -0
- package/dist/index25.js +57 -0
- package/dist/index25.js.map +1 -0
- package/dist/index26.js +38 -0
- package/dist/index26.js.map +1 -0
- package/dist/index27.js +127 -0
- package/dist/index27.js.map +1 -0
- package/dist/index28.js +157 -0
- package/dist/index28.js.map +1 -0
- package/dist/index29.js +163 -0
- package/dist/index29.js.map +1 -0
- package/dist/index3.js +36 -0
- package/dist/index3.js.map +1 -0
- package/dist/index30.js +173 -0
- package/dist/index30.js.map +1 -0
- package/dist/index31.js +423 -0
- package/dist/index31.js.map +1 -0
- package/dist/index32.js +161 -0
- package/dist/index32.js.map +1 -0
- package/dist/index33.js +152 -0
- package/dist/index33.js.map +1 -0
- package/dist/index34.js +56 -0
- package/dist/index34.js.map +1 -0
- package/dist/index35.js +103 -0
- package/dist/index35.js.map +1 -0
- package/dist/index36.js +451 -0
- package/dist/index36.js.map +1 -0
- package/dist/index37.js +431 -0
- package/dist/index37.js.map +1 -0
- package/dist/index38.js +87 -0
- package/dist/index38.js.map +1 -0
- package/dist/index39.js +122 -0
- package/dist/index39.js.map +1 -0
- package/dist/index4.js +3 -0
- package/dist/index4.js.map +1 -0
- package/dist/index40.js +299 -0
- package/dist/index40.js.map +1 -0
- package/dist/index41.js +49 -0
- package/dist/index41.js.map +1 -0
- package/dist/index42.js +151 -0
- package/dist/index42.js.map +1 -0
- package/dist/index43.js +226 -0
- package/dist/index43.js.map +1 -0
- package/dist/index44.js +49 -0
- package/dist/index44.js.map +1 -0
- package/dist/index45.js +45 -0
- package/dist/index45.js.map +1 -0
- package/dist/index46.js +37 -0
- package/dist/index46.js.map +1 -0
- package/dist/index47.js +51 -0
- package/dist/index47.js.map +1 -0
- package/dist/index48.js +39 -0
- package/dist/index48.js.map +1 -0
- package/dist/index49.js +239 -0
- package/dist/index49.js.map +1 -0
- package/dist/index5.js +17 -0
- package/dist/index5.js.map +1 -0
- package/dist/index50.js +163 -0
- package/dist/index50.js.map +1 -0
- package/dist/index51.js +81 -0
- package/dist/index51.js.map +1 -0
- package/dist/index52.js +78 -0
- package/dist/index52.js.map +1 -0
- package/dist/index53.js +22 -0
- package/dist/index53.js.map +1 -0
- package/dist/index54.js +8 -0
- package/dist/index54.js.map +1 -0
- package/dist/index55.js +8 -0
- package/dist/index55.js.map +1 -0
- package/dist/index56.js +17 -0
- package/dist/index56.js.map +1 -0
- package/dist/index57.js +4 -0
- package/dist/index57.js.map +1 -0
- package/dist/index58.js +17 -0
- package/dist/index58.js.map +1 -0
- package/dist/index59.js +4 -0
- package/dist/index59.js.map +1 -0
- package/dist/index6.js +22 -0
- package/dist/index6.js.map +1 -0
- package/dist/index60.js +6 -0
- package/dist/index60.js.map +1 -0
- package/dist/index7.js +27 -0
- package/dist/index7.js.map +1 -0
- package/dist/index8.js +22 -0
- package/dist/index8.js.map +1 -0
- package/dist/index9.js +5 -0
- package/dist/index9.js.map +1 -0
- package/dist/logging.d.ts +7 -0
- package/dist/logging.d.ts.map +1 -0
- package/dist/output/index.d.ts +15 -0
- package/dist/output/index.d.ts.map +1 -0
- package/dist/phases/complete.d.ts +17 -0
- package/dist/phases/complete.d.ts.map +1 -0
- package/dist/phases/index.d.ts +5 -0
- package/dist/phases/index.d.ts.map +1 -0
- package/dist/phases/locate.d.ts +15 -0
- package/dist/phases/locate.d.ts.map +1 -0
- package/dist/phases/simple-replace.d.ts +72 -0
- package/dist/phases/simple-replace.d.ts.map +1 -0
- package/dist/phases/transcribe.d.ts +19 -0
- package/dist/phases/transcribe.d.ts.map +1 -0
- package/dist/pipeline/index.d.ts +10 -0
- package/dist/pipeline/index.d.ts.map +1 -0
- package/dist/pipeline/orchestrator.d.ts +13 -0
- package/dist/pipeline/orchestrator.d.ts.map +1 -0
- package/dist/pipeline/types.d.ts +58 -0
- package/dist/pipeline/types.d.ts.map +1 -0
- package/dist/prompt/index.d.ts +3 -0
- package/dist/prompt/index.d.ts.map +1 -0
- package/dist/prompt/templates.d.ts +40 -0
- package/dist/prompt/templates.d.ts.map +1 -0
- package/dist/prompt/transcribe.d.ts +42 -0
- package/dist/prompt/transcribe.d.ts.map +1 -0
- package/dist/reasoning/client.d.ts +42 -0
- package/dist/reasoning/client.d.ts.map +1 -0
- package/dist/reasoning/index.d.ts +17 -0
- package/dist/reasoning/index.d.ts.map +1 -0
- package/dist/reasoning/strategy.d.ts +12 -0
- package/dist/reasoning/strategy.d.ts.map +1 -0
- package/dist/reasoning/types.d.ts +58 -0
- package/dist/reasoning/types.d.ts.map +1 -0
- package/dist/reflection/collector.d.ts +18 -0
- package/dist/reflection/collector.d.ts.map +1 -0
- package/dist/reflection/index.d.ts +13 -0
- package/dist/reflection/index.d.ts.map +1 -0
- package/dist/reflection/reporter.d.ts +10 -0
- package/dist/reflection/reporter.d.ts.map +1 -0
- package/dist/reflection/types.d.ts +99 -0
- package/dist/reflection/types.d.ts.map +1 -0
- package/dist/routing/classifier.d.ts +8 -0
- package/dist/routing/classifier.d.ts.map +1 -0
- package/dist/routing/index.d.ts +12 -0
- package/dist/routing/index.d.ts.map +1 -0
- package/dist/routing/router.d.ts +8 -0
- package/dist/routing/router.d.ts.map +1 -0
- package/dist/routing/types.d.ts +68 -0
- package/dist/routing/types.d.ts.map +1 -0
- package/dist/transcript/feedback.d.ts +70 -0
- package/dist/transcript/feedback.d.ts.map +1 -0
- package/dist/transcript/index.d.ts +10 -0
- package/dist/transcript/index.d.ts.map +1 -0
- package/dist/transcript/operations.d.ts +152 -0
- package/dist/transcript/operations.d.ts.map +1 -0
- package/dist/transcript/pkl-utils.d.ts +66 -0
- package/dist/transcript/pkl-utils.d.ts.map +1 -0
- package/dist/transcription/index.d.ts +17 -0
- package/dist/transcription/index.d.ts.map +1 -0
- package/dist/transcription/service.d.ts +10 -0
- package/dist/transcription/service.d.ts.map +1 -0
- package/dist/transcription/types.d.ts +41 -0
- package/dist/transcription/types.d.ts.map +1 -0
- package/dist/types.d.ts +28 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/util/collision-detector.d.ts +77 -0
- package/dist/util/collision-detector.d.ts.map +1 -0
- package/dist/util/dates.d.ts +57 -0
- package/dist/util/dates.d.ts.map +1 -0
- package/dist/util/general.d.ts +3 -0
- package/dist/util/general.d.ts.map +1 -0
- package/dist/util/media.d.ts +9 -0
- package/dist/util/media.d.ts.map +1 -0
- package/dist/util/metadata.d.ts +138 -0
- package/dist/util/metadata.d.ts.map +1 -0
- package/dist/util/openai.d.ts +22 -0
- package/dist/util/openai.d.ts.map +1 -0
- package/dist/util/sounds-like-database.d.ts +98 -0
- package/dist/util/sounds-like-database.d.ts.map +1 -0
- package/dist/util/storage.d.ts +35 -0
- package/dist/util/storage.d.ts.map +1 -0
- package/dist/util/text-replacer.d.ts +56 -0
- package/dist/util/text-replacer.d.ts.map +1 -0
- package/dist/utils/entityFinder.d.ts +29 -0
- package/dist/utils/entityFinder.d.ts.map +1 -0
- package/package.json +84 -0
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { RoutingConfig, RouteDecision, RoutingContext, RouteDestination, ProjectRoute } from './types';
|
|
2
|
+
import * as Context from '@redaksjon/context';
|
|
3
|
+
export interface RoutingInstance {
|
|
4
|
+
route(context: RoutingContext): RouteDecision;
|
|
5
|
+
buildOutputPath(decision: RouteDecision, context: RoutingContext): string;
|
|
6
|
+
addProject(project: ProjectRoute): void;
|
|
7
|
+
updateDefaultRoute(destination: RouteDestination): void;
|
|
8
|
+
getConfig(): RoutingConfig;
|
|
9
|
+
}
|
|
10
|
+
export declare const create: (config: RoutingConfig, context: Context.ContextInstance) => RoutingInstance;
|
|
11
|
+
export * from './types';
|
|
12
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/routing/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,cAAc,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAGvG,OAAO,KAAK,OAAO,MAAM,oBAAoB,CAAC;AAE9C,MAAM,WAAW,eAAe;IAC5B,KAAK,CAAC,OAAO,EAAE,cAAc,GAAG,aAAa,CAAC;IAC9C,eAAe,CAAC,QAAQ,EAAE,aAAa,EAAE,OAAO,EAAE,cAAc,GAAG,MAAM,CAAC;IAC1E,UAAU,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI,CAAC;IACxC,kBAAkB,CAAC,WAAW,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACxD,SAAS,IAAI,aAAa,CAAC;CAC9B;AAED,eAAO,MAAM,MAAM,GACf,QAAQ,aAAa,EACrB,SAAS,OAAO,CAAC,eAAe,KACjC,eAqBF,CAAC;AAGF,cAAc,SAAS,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { RoutingContext, RouteDecision, RoutingConfig } from './types';
|
|
2
|
+
import * as Classifier from './classifier';
|
|
3
|
+
export interface RouterInstance {
|
|
4
|
+
route(context: RoutingContext): RouteDecision;
|
|
5
|
+
buildOutputPath(decision: RouteDecision, context: RoutingContext): string;
|
|
6
|
+
}
|
|
7
|
+
export declare const create: (config: RoutingConfig, classifier: Classifier.ClassifierInstance) => RouterInstance;
|
|
8
|
+
//# sourceMappingURL=router.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../../src/routing/router.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,OAAO,EACH,cAAc,EACd,aAAa,EACb,aAAa,EAEhB,MAAM,SAAS,CAAC;AACjB,OAAO,KAAK,UAAU,MAAM,cAAc,CAAC;AAE3C,MAAM,WAAW,cAAc;IAC3B,KAAK,CAAC,OAAO,EAAE,cAAc,GAAG,aAAa,CAAC;IAC9C,eAAe,CAAC,QAAQ,EAAE,aAAa,EAAE,OAAO,EAAE,cAAc,GAAG,MAAM,CAAC;CAC7E;AAED,eAAO,MAAM,MAAM,GACf,QAAQ,aAAa,EACrB,YAAY,UAAU,CAAC,kBAAkB,KAC1C,cA6DF,CAAC"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Routing System Types
|
|
3
|
+
*
|
|
4
|
+
* Uses Dreadcabinet's FilesystemStructure and FilenameOption types
|
|
5
|
+
* for consistent directory/filename patterns.
|
|
6
|
+
*
|
|
7
|
+
* Design Note: This module is designed to be self-contained and may be
|
|
8
|
+
* extracted for use in other tools (kronologi, observasjon) in the future.
|
|
9
|
+
*/
|
|
10
|
+
export type FilesystemStructure = 'none' | 'year' | 'month' | 'day';
|
|
11
|
+
export type FilenameOption = 'date' | 'time' | 'subject';
|
|
12
|
+
export interface RouteDestination {
|
|
13
|
+
path: string;
|
|
14
|
+
structure: FilesystemStructure;
|
|
15
|
+
filename_options: FilenameOption[];
|
|
16
|
+
createDirectories?: boolean;
|
|
17
|
+
}
|
|
18
|
+
export interface ClassificationSignal {
|
|
19
|
+
type: 'explicit_phrase' | 'associated_person' | 'associated_company' | 'topic' | 'context_type';
|
|
20
|
+
value: string;
|
|
21
|
+
weight: number;
|
|
22
|
+
}
|
|
23
|
+
export interface ClassificationResult {
|
|
24
|
+
projectId: string;
|
|
25
|
+
confidence: number;
|
|
26
|
+
signals: ClassificationSignal[];
|
|
27
|
+
reasoning: string;
|
|
28
|
+
}
|
|
29
|
+
export interface ProjectClassification {
|
|
30
|
+
context_type: 'work' | 'personal' | 'mixed';
|
|
31
|
+
associated_people?: string[];
|
|
32
|
+
associated_companies?: string[];
|
|
33
|
+
topics?: string[];
|
|
34
|
+
explicit_phrases?: string[];
|
|
35
|
+
}
|
|
36
|
+
export interface ProjectRoute {
|
|
37
|
+
projectId: string;
|
|
38
|
+
destination: RouteDestination;
|
|
39
|
+
classification: ProjectClassification;
|
|
40
|
+
priority?: number;
|
|
41
|
+
active?: boolean;
|
|
42
|
+
auto_tags?: string[];
|
|
43
|
+
}
|
|
44
|
+
export interface RoutingConfig {
|
|
45
|
+
default: RouteDestination;
|
|
46
|
+
projects: ProjectRoute[];
|
|
47
|
+
conflict_resolution: 'ask' | 'primary' | 'all';
|
|
48
|
+
priority_order?: string[];
|
|
49
|
+
}
|
|
50
|
+
export interface RouteDecision {
|
|
51
|
+
projectId: string | null;
|
|
52
|
+
destination: RouteDestination;
|
|
53
|
+
confidence: number;
|
|
54
|
+
signals: ClassificationSignal[];
|
|
55
|
+
reasoning: string;
|
|
56
|
+
auto_tags?: string[];
|
|
57
|
+
alternateMatches?: ClassificationResult[];
|
|
58
|
+
}
|
|
59
|
+
export interface RoutingContext {
|
|
60
|
+
transcriptText: string;
|
|
61
|
+
audioDate: Date;
|
|
62
|
+
sourceFile: string;
|
|
63
|
+
hash?: string;
|
|
64
|
+
detectedPeople?: string[];
|
|
65
|
+
detectedCompanies?: string[];
|
|
66
|
+
subjectOverride?: string;
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/routing/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,MAAM,MAAM,mBAAmB,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,KAAK,CAAC;AACpE,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;AAEzD,MAAM,WAAW,gBAAgB;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,mBAAmB,CAAC;IAC/B,gBAAgB,EAAE,cAAc,EAAE,CAAC;IACnC,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAED,MAAM,WAAW,oBAAoB;IACjC,IAAI,EAAE,iBAAiB,GAAG,mBAAmB,GAAG,oBAAoB,GAAG,OAAO,GAAG,cAAc,CAAC;IAChG,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,oBAAoB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,oBAAoB,EAAE,CAAC;IAChC,SAAS,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,qBAAqB;IAClC,YAAY,EAAE,MAAM,GAAG,UAAU,GAAG,OAAO,CAAC;IAC5C,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;IAChC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC/B;AAED,MAAM,WAAW,YAAY;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,gBAAgB,CAAC;IAC9B,cAAc,EAAE,qBAAqB,CAAC;IACtC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,aAAa;IAC1B,OAAO,EAAE,gBAAgB,CAAC;IAC1B,QAAQ,EAAE,YAAY,EAAE,CAAC;IACzB,mBAAmB,EAAE,KAAK,GAAG,SAAS,GAAG,KAAK,CAAC;IAC/C,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,aAAa;IAC1B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,WAAW,EAAE,gBAAgB,CAAC;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,oBAAoB,EAAE,CAAC;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IAErB,gBAAgB,CAAC,EAAE,oBAAoB,EAAE,CAAC;CAC7C;AAED,MAAM,WAAW,cAAc;IAC3B,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,IAAI,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAE7B,eAAe,CAAC,EAAE,MAAM,CAAC;CAC5B"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Feedback Operations
|
|
3
|
+
*
|
|
4
|
+
* Core business logic for processing natural language feedback on transcripts.
|
|
5
|
+
* Extracted from CLI to provide reusable functions for MCP tools.
|
|
6
|
+
*/
|
|
7
|
+
import * as Context from '@redaksjon/context';
|
|
8
|
+
import * as Reasoning from '../reasoning';
|
|
9
|
+
/**
|
|
10
|
+
* Tool definitions for feedback processor
|
|
11
|
+
*/
|
|
12
|
+
export interface FeedbackTool {
|
|
13
|
+
name: string;
|
|
14
|
+
description: string;
|
|
15
|
+
parameters: Record<string, {
|
|
16
|
+
type: string;
|
|
17
|
+
description: string;
|
|
18
|
+
required?: boolean;
|
|
19
|
+
enum?: string[];
|
|
20
|
+
items?: {
|
|
21
|
+
type: string;
|
|
22
|
+
};
|
|
23
|
+
}>;
|
|
24
|
+
}
|
|
25
|
+
export declare const FEEDBACK_TOOLS: FeedbackTool[];
|
|
26
|
+
/**
|
|
27
|
+
* Tool execution result
|
|
28
|
+
*/
|
|
29
|
+
export interface ToolResult {
|
|
30
|
+
success: boolean;
|
|
31
|
+
message: string;
|
|
32
|
+
data?: Record<string, unknown>;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Feedback processing context
|
|
36
|
+
*/
|
|
37
|
+
export interface FeedbackContext {
|
|
38
|
+
transcriptPath: string;
|
|
39
|
+
transcriptContent: string;
|
|
40
|
+
originalContent: string;
|
|
41
|
+
context: Context.ContextInstance;
|
|
42
|
+
changes: FeedbackChange[];
|
|
43
|
+
verbose: boolean;
|
|
44
|
+
dryRun: boolean;
|
|
45
|
+
}
|
|
46
|
+
export interface FeedbackChange {
|
|
47
|
+
type: 'text_correction' | 'term_added' | 'person_added' | 'project_changed' | 'title_changed';
|
|
48
|
+
description: string;
|
|
49
|
+
details: Record<string, unknown>;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Execute a feedback tool
|
|
53
|
+
*/
|
|
54
|
+
export declare const executeTool: (toolName: string, args: Record<string, unknown>, feedbackCtx: FeedbackContext) => Promise<ToolResult>;
|
|
55
|
+
/**
|
|
56
|
+
* Build system prompt for feedback agent
|
|
57
|
+
*/
|
|
58
|
+
export declare const buildFeedbackSystemPrompt: (transcriptPreview: string, availableProjects: string[]) => string;
|
|
59
|
+
/**
|
|
60
|
+
* Process feedback using agentic model
|
|
61
|
+
*/
|
|
62
|
+
export declare const processFeedback: (feedback: string, feedbackCtx: FeedbackContext, reasoning: Reasoning.ReasoningInstance) => Promise<void>;
|
|
63
|
+
/**
|
|
64
|
+
* Apply changes and save transcript
|
|
65
|
+
*/
|
|
66
|
+
export declare const applyChanges: (feedbackCtx: FeedbackContext) => Promise<{
|
|
67
|
+
newPath: string;
|
|
68
|
+
moved: boolean;
|
|
69
|
+
}>;
|
|
70
|
+
//# sourceMappingURL=feedback.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feedback.d.ts","sourceRoot":"","sources":["../../src/transcript/feedback.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,OAAO,MAAM,oBAAoB,CAAC;AAC9C,OAAO,KAAK,SAAS,MAAM,cAAc,CAAC;AAM1C;;GAEG;AACH,MAAM,WAAW,YAAY;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE;QACvB,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;QAChB,KAAK,CAAC,EAAE;YAAE,IAAI,EAAE,MAAM,CAAA;SAAE,CAAC;KAC5B,CAAC,CAAC;CACN;AAED,eAAO,MAAM,cAAc,EAAE,YAAY,EA2DxC,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,UAAU;IACvB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC5B,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,OAAO,CAAC,eAAe,CAAC;IACjC,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC3B,IAAI,EAAE,iBAAiB,GAAG,YAAY,GAAG,cAAc,GAAG,iBAAiB,GAAG,eAAe,CAAC;IAC9F,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED;;GAEG;AACH,eAAO,MAAM,WAAW,GACpB,UAAU,MAAM,EAChB,MAAM,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,aAAa,eAAe,KAC7B,OAAO,CAAC,UAAU,CAmOpB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,yBAAyB,GAClC,mBAAmB,MAAM,EACzB,mBAAmB,MAAM,EAAE,KAC5B,MAqBF,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,eAAe,GACxB,UAAU,MAAM,EAChB,aAAa,eAAe,EAC5B,WAAW,SAAS,CAAC,iBAAiB,KACvC,OAAO,CAAC,IAAI,CAkGd,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,YAAY,GACrB,aAAa,eAAe,KAC7B,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,CAyF7C,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Transcript Module
|
|
3
|
+
*
|
|
4
|
+
* Core transcript operations for parsing, listing, editing, and combining transcripts.
|
|
5
|
+
* PKL-only implementation - all transcripts are stored in PKL format.
|
|
6
|
+
*/
|
|
7
|
+
export * from './operations';
|
|
8
|
+
export * from './feedback';
|
|
9
|
+
export * from './pkl-utils';
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/transcript/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC"}
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Transcript Operations
|
|
3
|
+
*
|
|
4
|
+
* Core business logic for transcript parsing, listing, editing, and combining.
|
|
5
|
+
* PKL-only implementation - all transcripts are stored in PKL format.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Parsed transcript structure
|
|
9
|
+
*/
|
|
10
|
+
export interface ParsedTranscript {
|
|
11
|
+
filePath: string;
|
|
12
|
+
title?: string;
|
|
13
|
+
metadata: TranscriptMetadata;
|
|
14
|
+
content: string;
|
|
15
|
+
rawText: string;
|
|
16
|
+
}
|
|
17
|
+
export interface TranscriptMetadata {
|
|
18
|
+
date?: string;
|
|
19
|
+
time?: string;
|
|
20
|
+
project?: string;
|
|
21
|
+
projectId?: string;
|
|
22
|
+
destination?: string;
|
|
23
|
+
confidence?: string;
|
|
24
|
+
signals?: string[];
|
|
25
|
+
reasoning?: string;
|
|
26
|
+
tags?: string[];
|
|
27
|
+
duration?: string;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Check if input looks like a UUID (8+ hex chars)
|
|
31
|
+
*/
|
|
32
|
+
export declare function isUuidInput(input: string): boolean;
|
|
33
|
+
/**
|
|
34
|
+
* Find transcript by UUID using glob scan
|
|
35
|
+
* TODO: Replace with index-based lookup for better performance with large collections
|
|
36
|
+
*
|
|
37
|
+
* @param uuid - Full UUID or 8-character prefix
|
|
38
|
+
* @param searchDirectories - Directories to search in
|
|
39
|
+
* @returns Absolute path to transcript file, or null if not found
|
|
40
|
+
*/
|
|
41
|
+
export declare function findTranscriptByUuid(uuid: string, searchDirectories: string[]): Promise<string | null>;
|
|
42
|
+
/**
|
|
43
|
+
* Parse a transcript file into its components
|
|
44
|
+
* PKL-only implementation
|
|
45
|
+
*
|
|
46
|
+
* @param filePathOrUuid - File path or UUID to parse
|
|
47
|
+
* @param searchDirectories - Optional directories to search if UUID is provided
|
|
48
|
+
*/
|
|
49
|
+
export declare const parseTranscript: (filePathOrUuid: string, searchDirectories?: string[]) => Promise<ParsedTranscript>;
|
|
50
|
+
/**
|
|
51
|
+
* Extract the timestamp from a transcript filename
|
|
52
|
+
*/
|
|
53
|
+
export declare const extractTimestampFromFilename: (filePath: string) => {
|
|
54
|
+
day: number;
|
|
55
|
+
hour: number;
|
|
56
|
+
minute: number;
|
|
57
|
+
} | null;
|
|
58
|
+
/**
|
|
59
|
+
* Slugify a title for use in filenames
|
|
60
|
+
*/
|
|
61
|
+
export declare const slugifyTitle: (title: string) => string;
|
|
62
|
+
/**
|
|
63
|
+
* Combine multiple transcripts into a single document
|
|
64
|
+
* PKL-only implementation
|
|
65
|
+
*/
|
|
66
|
+
export declare const combineTranscripts: (filePaths: string[], options?: {
|
|
67
|
+
projectId?: string;
|
|
68
|
+
title?: string;
|
|
69
|
+
dryRun?: boolean;
|
|
70
|
+
verbose?: boolean;
|
|
71
|
+
contextDirectory?: string;
|
|
72
|
+
/** Explicit context directories (from protokoll-config.yaml) */
|
|
73
|
+
contextDirectories?: string[];
|
|
74
|
+
}) => Promise<{
|
|
75
|
+
outputPath: string;
|
|
76
|
+
content: string;
|
|
77
|
+
}>;
|
|
78
|
+
/**
|
|
79
|
+
* Edit transcript metadata and content
|
|
80
|
+
* PKL-only implementation
|
|
81
|
+
*/
|
|
82
|
+
export declare const editTranscript: (filePath: string, options: {
|
|
83
|
+
title?: string;
|
|
84
|
+
projectId?: string;
|
|
85
|
+
tagsToAdd?: string[];
|
|
86
|
+
tagsToRemove?: string[];
|
|
87
|
+
dryRun?: boolean;
|
|
88
|
+
verbose?: boolean;
|
|
89
|
+
contextDirectory?: string;
|
|
90
|
+
/** Explicit context directories (from protokoll-config.yaml) */
|
|
91
|
+
contextDirectories?: string[];
|
|
92
|
+
}) => Promise<{
|
|
93
|
+
outputPath: string;
|
|
94
|
+
content: string;
|
|
95
|
+
}>;
|
|
96
|
+
/**
|
|
97
|
+
* Transcript list item
|
|
98
|
+
*/
|
|
99
|
+
export interface TranscriptListItem {
|
|
100
|
+
path: string;
|
|
101
|
+
filename: string;
|
|
102
|
+
uuid: string;
|
|
103
|
+
date: string;
|
|
104
|
+
time?: string;
|
|
105
|
+
title: string;
|
|
106
|
+
hasRawTranscript: boolean;
|
|
107
|
+
createdAt: Date;
|
|
108
|
+
status?: 'initial' | 'enhanced' | 'reviewed' | 'in_progress' | 'closed' | 'archived';
|
|
109
|
+
openTasksCount?: number;
|
|
110
|
+
contentSize?: number;
|
|
111
|
+
entities?: {
|
|
112
|
+
people?: Array<{
|
|
113
|
+
id: string;
|
|
114
|
+
name: string;
|
|
115
|
+
}>;
|
|
116
|
+
projects?: Array<{
|
|
117
|
+
id: string;
|
|
118
|
+
name: string;
|
|
119
|
+
}>;
|
|
120
|
+
terms?: Array<{
|
|
121
|
+
id: string;
|
|
122
|
+
name: string;
|
|
123
|
+
}>;
|
|
124
|
+
companies?: Array<{
|
|
125
|
+
id: string;
|
|
126
|
+
name: string;
|
|
127
|
+
}>;
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
export interface ListTranscriptsOptions {
|
|
131
|
+
directory: string;
|
|
132
|
+
limit?: number;
|
|
133
|
+
offset?: number;
|
|
134
|
+
sortBy?: 'date' | 'filename' | 'title';
|
|
135
|
+
startDate?: string;
|
|
136
|
+
endDate?: string;
|
|
137
|
+
search?: string;
|
|
138
|
+
projectId?: string;
|
|
139
|
+
}
|
|
140
|
+
export interface ListTranscriptsResult {
|
|
141
|
+
transcripts: TranscriptListItem[];
|
|
142
|
+
total: number;
|
|
143
|
+
hasMore: boolean;
|
|
144
|
+
limit: number;
|
|
145
|
+
offset: number;
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* List transcripts with filtering and pagination
|
|
149
|
+
* Uses the protokoll-format storage API
|
|
150
|
+
*/
|
|
151
|
+
export declare const listTranscripts: (options: ListTranscriptsOptions) => Promise<ListTranscriptsResult>;
|
|
152
|
+
//# sourceMappingURL=operations.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"operations.d.ts","sourceRoot":"","sources":["../../src/transcript/operations.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAiBH;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,kBAAkB;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAElD;AAED;;;;;;;GAOG;AACH,wBAAsB,oBAAoB,CACtC,IAAI,EAAE,MAAM,EACZ,iBAAiB,EAAE,MAAM,EAAE,GAC5B,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAaxB;AAED;;;;;;GAMG;AACH,eAAO,MAAM,eAAe,GACxB,gBAAgB,MAAM,EACtB,oBAAoB,MAAM,EAAE,KAC7B,OAAO,CAAC,gBAAgB,CAiD1B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,4BAA4B,GAAI,UAAU,MAAM,KAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,IAc/G,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,YAAY,GAAI,OAAO,MAAM,KAAG,MAO5C,CAAC;AA2FF;;;GAGG;AACH,eAAO,MAAM,kBAAkB,GAC3B,WAAW,MAAM,EAAE,EACnB,UAAS;IACL,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gEAAgE;IAChE,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC5B,KACP,OAAO,CAAC;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAsKjD,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,cAAc,GACvB,UAAU,MAAM,EAChB,SAAS;IACL,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gEAAgE;IAChE,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;CACjC,KACF,OAAO,CAAC;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAsJjD,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,kBAAkB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,gBAAgB,EAAE,OAAO,CAAC;IAC1B,SAAS,EAAE,IAAI,CAAC;IAChB,MAAM,CAAC,EAAE,SAAS,GAAG,UAAU,GAAG,UAAU,GAAG,aAAa,GAAG,QAAQ,GAAG,UAAU,CAAC;IACrF,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE;QACP,MAAM,CAAC,EAAE,KAAK,CAAC;YAAE,EAAE,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QAC7C,QAAQ,CAAC,EAAE,KAAK,CAAC;YAAE,EAAE,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QAC/C,KAAK,CAAC,EAAE,KAAK,CAAC;YAAE,EAAE,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QAC5C,SAAS,CAAC,EAAE,KAAK,CAAC;YAAE,EAAE,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KACnD,CAAC;CACL;AAED,MAAM,WAAW,sBAAsB;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,GAAG,UAAU,GAAG,OAAO,CAAC;IACvC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,qBAAqB;IAClC,WAAW,EAAE,kBAAkB,EAAE,CAAC;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAClB;AAED;;;GAGG;AACH,eAAO,MAAM,eAAe,GAAU,SAAS,sBAAsB,KAAG,OAAO,CAAC,qBAAqB,CAmEpG,CAAC"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { TranscriptMetadata as PklMetadata } from '@redaksjon/protokoll-format';
|
|
2
|
+
/**
|
|
3
|
+
* Check if a file is a .pkl transcript
|
|
4
|
+
*/
|
|
5
|
+
export declare function isPklFile(filePath: string): boolean;
|
|
6
|
+
/**
|
|
7
|
+
* Get the glob pattern for finding transcript files (PKL only)
|
|
8
|
+
*/
|
|
9
|
+
export declare function getTranscriptGlobPattern(): string;
|
|
10
|
+
/**
|
|
11
|
+
* Strip .pkl extension from a transcript path
|
|
12
|
+
* Used for creating extension-agnostic identifiers
|
|
13
|
+
*/
|
|
14
|
+
export declare function stripTranscriptExtension(filePath: string): string;
|
|
15
|
+
/**
|
|
16
|
+
* Ensure a path has .pkl extension
|
|
17
|
+
*/
|
|
18
|
+
export declare function ensurePklExtension(filePath: string): string;
|
|
19
|
+
/**
|
|
20
|
+
* Check if a transcript file exists
|
|
21
|
+
*
|
|
22
|
+
* If the path has .pkl extension, checks that file.
|
|
23
|
+
* If no extension, adds .pkl and checks.
|
|
24
|
+
*/
|
|
25
|
+
export declare function transcriptExists(basePath: string): Promise<{
|
|
26
|
+
exists: boolean;
|
|
27
|
+
path: string | null;
|
|
28
|
+
}>;
|
|
29
|
+
/**
|
|
30
|
+
* Enhanced transcript existence check supporting UUID
|
|
31
|
+
*
|
|
32
|
+
* @param pathOrUuid - File path or UUID to check
|
|
33
|
+
* @param searchDirectories - Optional directories to search if UUID is provided
|
|
34
|
+
* @returns Existence info with path and UUID if found
|
|
35
|
+
*/
|
|
36
|
+
export declare function transcriptExistsUuid(pathOrUuid: string, searchDirectories?: string[]): Promise<{
|
|
37
|
+
exists: boolean;
|
|
38
|
+
path?: string;
|
|
39
|
+
uuid?: string;
|
|
40
|
+
}>;
|
|
41
|
+
/**
|
|
42
|
+
* Resolve a transcript identifier to an actual file path
|
|
43
|
+
*
|
|
44
|
+
* @param identifier The transcript identifier (with or without extension)
|
|
45
|
+
* @param baseDirectory Optional base directory to resolve relative paths
|
|
46
|
+
* @returns The resolved file info
|
|
47
|
+
*/
|
|
48
|
+
export declare function resolveTranscriptPath(identifier: string, baseDirectory?: string): Promise<{
|
|
49
|
+
exists: boolean;
|
|
50
|
+
path: string | null;
|
|
51
|
+
}>;
|
|
52
|
+
/**
|
|
53
|
+
* Read transcript content from a .pkl file
|
|
54
|
+
* Returns the content and metadata
|
|
55
|
+
*/
|
|
56
|
+
export declare function readTranscriptContent(filePath: string): Promise<{
|
|
57
|
+
content: string;
|
|
58
|
+
mimeType: string;
|
|
59
|
+
metadata: Record<string, unknown>;
|
|
60
|
+
title?: string;
|
|
61
|
+
}>;
|
|
62
|
+
/**
|
|
63
|
+
* Convert PklTranscript metadata to a simpler format for legacy compatibility
|
|
64
|
+
*/
|
|
65
|
+
export declare function convertPklMetadataToLegacy(pklMetadata: PklMetadata): Record<string, unknown>;
|
|
66
|
+
//# sourceMappingURL=pkl-utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pkl-utils.d.ts","sourceRoot":"","sources":["../../src/transcript/pkl-utils.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EAAE,kBAAkB,IAAI,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAErF;;GAEG;AACH,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEnD;AAED;;GAEG;AACH,wBAAgB,wBAAwB,IAAI,MAAM,CAEjD;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEjE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAM3D;AAED;;;;;GAKG;AACH,wBAAsB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC,CAS1G;AAED;;;;;;GAMG;AACH,wBAAsB,oBAAoB,CACtC,UAAU,EAAE,MAAM,EAClB,iBAAiB,CAAC,EAAE,MAAM,EAAE,GAC7B,OAAO,CAAC;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAqB5D;AAED;;;;;;GAMG;AACH,wBAAsB,qBAAqB,CACvC,UAAU,EAAE,MAAM,EAClB,aAAa,CAAC,EAAE,MAAM,GACvB,OAAO,CAAC;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC,CAOnD;AAED;;;GAGG;AACH,wBAAsB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;IACnE,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC,CAeD;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CACtC,WAAW,EAAE,WAAW,GACzB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAiBzB"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { default as OpenAI } from 'openai';
|
|
2
|
+
import { TranscriptionConfig, TranscriptionResult, TranscriptionModel } from './types';
|
|
3
|
+
export interface TranscriptionInstance {
|
|
4
|
+
transcribe(audioFile: string, options?: Partial<TranscriptionConfig>): Promise<TranscriptionResult>;
|
|
5
|
+
supportsStreaming(model: TranscriptionModel): boolean;
|
|
6
|
+
supportsDiarization(model: TranscriptionModel): boolean;
|
|
7
|
+
setDefaultModel(model: TranscriptionModel): void;
|
|
8
|
+
getDefaultModel(): TranscriptionModel;
|
|
9
|
+
}
|
|
10
|
+
export interface CreateOptions {
|
|
11
|
+
apiKey?: string;
|
|
12
|
+
defaultModel?: TranscriptionModel;
|
|
13
|
+
openaiClient?: OpenAI;
|
|
14
|
+
}
|
|
15
|
+
export declare const create: (options?: CreateOptions) => TranscriptionInstance;
|
|
16
|
+
export * from './types';
|
|
17
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/transcription/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAGvF,MAAM,WAAW,qBAAqB;IAElC,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,mBAAmB,CAAC,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAGpG,iBAAiB,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC;IACtD,mBAAmB,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC;IAGxD,eAAe,CAAC,KAAK,EAAE,kBAAkB,GAAG,IAAI,CAAC;IACjD,eAAe,IAAI,kBAAkB,CAAC;CACzC;AAED,MAAM,WAAW,aAAa;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,kBAAkB,CAAC;IAClC,YAAY,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,eAAO,MAAM,MAAM,GAAI,UAAS,aAAkB,KAAG,qBAiCpD,CAAC;AAGF,cAAc,SAAS,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { default as OpenAI } from 'openai';
|
|
2
|
+
import { TranscriptionRequest, TranscriptionResult, TranscriptionModel } from './types';
|
|
3
|
+
export interface ServiceInstance {
|
|
4
|
+
transcribe(request: TranscriptionRequest): Promise<TranscriptionResult>;
|
|
5
|
+
supportsStreaming(model: TranscriptionModel): boolean;
|
|
6
|
+
supportsDiarization(model: TranscriptionModel): boolean;
|
|
7
|
+
}
|
|
8
|
+
export type TranscriptionService = ServiceInstance;
|
|
9
|
+
export declare const create: (openai: OpenAI) => ServiceInstance;
|
|
10
|
+
//# sourceMappingURL=service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../src/transcription/service.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,MAAM,MAAM,QAAQ,CAAC;AAG5B,OAAO,EACH,oBAAoB,EACpB,mBAAmB,EACnB,kBAAkB,EAErB,MAAM,SAAS,CAAC;AAKjB,MAAM,WAAW,eAAe;IAC5B,UAAU,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;IACxE,iBAAiB,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC;IACtD,mBAAmB,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC;CAC3D;AAGD,MAAM,MAAM,oBAAoB,GAAG,eAAe,CAAC;AAEnD,eAAO,MAAM,MAAM,GAAI,QAAQ,MAAM,KAAG,eAqIvC,CAAC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Transcription System Types
|
|
3
|
+
*
|
|
4
|
+
* Supports multiple OpenAI transcription models with different capabilities.
|
|
5
|
+
* The transcription service produces raw phonetic output that will be
|
|
6
|
+
* corrected by the full reasoning pass.
|
|
7
|
+
*/
|
|
8
|
+
export type TranscriptionModel = 'whisper-1' | 'gpt-4o-mini-transcribe' | 'gpt-4o-transcribe' | 'gpt-4o-transcribe-diarize';
|
|
9
|
+
export interface TranscriptionConfig {
|
|
10
|
+
model: TranscriptionModel;
|
|
11
|
+
language?: string;
|
|
12
|
+
prompt?: string;
|
|
13
|
+
response_format?: 'json' | 'text' | 'verbose_json' | 'srt' | 'vtt';
|
|
14
|
+
temperature?: number;
|
|
15
|
+
streaming?: boolean;
|
|
16
|
+
}
|
|
17
|
+
export interface TranscriptionRequest {
|
|
18
|
+
audioFile: string;
|
|
19
|
+
config: TranscriptionConfig;
|
|
20
|
+
contextPrompt?: string;
|
|
21
|
+
}
|
|
22
|
+
export interface TranscriptionSegment {
|
|
23
|
+
start: number;
|
|
24
|
+
end: number;
|
|
25
|
+
text: string;
|
|
26
|
+
speaker?: string;
|
|
27
|
+
}
|
|
28
|
+
export interface TranscriptionResult {
|
|
29
|
+
text: string;
|
|
30
|
+
model: string;
|
|
31
|
+
segments?: TranscriptionSegment[];
|
|
32
|
+
duration?: number;
|
|
33
|
+
language?: string;
|
|
34
|
+
}
|
|
35
|
+
export interface ModelCapabilities {
|
|
36
|
+
supportsStreaming: boolean;
|
|
37
|
+
supportsDiarization: boolean;
|
|
38
|
+
maxFileSize: number;
|
|
39
|
+
}
|
|
40
|
+
export declare const MODEL_CAPABILITIES: Record<TranscriptionModel, ModelCapabilities>;
|
|
41
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/transcription/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,MAAM,kBAAkB,GACxB,WAAW,GACX,wBAAwB,GACxB,mBAAmB,GACnB,2BAA2B,CAAC;AAElC,MAAM,WAAW,mBAAmB;IAChC,KAAK,EAAE,kBAAkB,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,cAAc,GAAG,KAAK,GAAG,KAAK,CAAC;IACnE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,oBAAoB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,mBAAmB,CAAC;IAC5B,aAAa,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,oBAAoB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,mBAAmB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,oBAAoB,EAAE,CAAC;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,iBAAiB;IAC9B,iBAAiB,EAAE,OAAO,CAAC;IAC3B,mBAAmB,EAAE,OAAO,CAAC;IAC7B,WAAW,EAAE,MAAM,CAAC;CACvB;AAED,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,kBAAkB,EAAE,iBAAiB,CAqB5E,CAAC"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Core Types
|
|
3
|
+
*
|
|
4
|
+
* Shared type definitions for the Protokoll library.
|
|
5
|
+
*/
|
|
6
|
+
import * as Dreadcabinet from '@utilarium/dreadcabinet';
|
|
7
|
+
import * as Cardigantime from '@utilarium/cardigantime';
|
|
8
|
+
/**
|
|
9
|
+
* Configuration interface for Protokoll processing
|
|
10
|
+
*/
|
|
11
|
+
export interface Config extends Dreadcabinet.Args, Cardigantime.Args {
|
|
12
|
+
dryRun?: boolean;
|
|
13
|
+
verbose?: boolean;
|
|
14
|
+
debug?: boolean;
|
|
15
|
+
transcriptionModel?: string;
|
|
16
|
+
model?: string;
|
|
17
|
+
reasoningLevel?: 'low' | 'medium' | 'high';
|
|
18
|
+
openaiApiKey?: string;
|
|
19
|
+
overrides?: boolean;
|
|
20
|
+
contextDirectories?: string[];
|
|
21
|
+
maxAudioSize?: number | string;
|
|
22
|
+
tempDirectory?: string;
|
|
23
|
+
batch?: boolean;
|
|
24
|
+
selfReflection?: boolean;
|
|
25
|
+
silent?: boolean;
|
|
26
|
+
processedDirectory?: string;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,YAAY,MAAM,yBAAyB,CAAC;AACxD,OAAO,KAAK,YAAY,MAAM,yBAAyB,CAAC;AAExD;;GAEG;AACH,MAAM,WAAW,MAAO,SAAQ,YAAY,CAAC,IAAI,EAAE,YAAY,CAAC,IAAI;IAChE,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;IAC3C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC9B,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC/B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC/B"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { SoundsLikeMapping, Collision } from './sounds-like-database';
|
|
2
|
+
/**
|
|
3
|
+
* Classification result for an entity
|
|
4
|
+
*/
|
|
5
|
+
export interface Classification {
|
|
6
|
+
/** Identified project ID */
|
|
7
|
+
project?: string;
|
|
8
|
+
/** Classification confidence (0-1) */
|
|
9
|
+
confidence?: number;
|
|
10
|
+
/** Additional classification metadata */
|
|
11
|
+
[key: string]: any;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Replacement decision
|
|
15
|
+
*/
|
|
16
|
+
export interface ReplacementDecision {
|
|
17
|
+
/** Whether to apply the replacement */
|
|
18
|
+
shouldReplace: boolean;
|
|
19
|
+
/** The mapping to use (if shouldReplace is true) */
|
|
20
|
+
mapping?: SoundsLikeMapping;
|
|
21
|
+
/** Reason for the decision */
|
|
22
|
+
reason: string;
|
|
23
|
+
/** Confidence in this decision (0-1) */
|
|
24
|
+
confidence: number;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Context for collision resolution
|
|
28
|
+
*/
|
|
29
|
+
export interface CollisionContext {
|
|
30
|
+
/** Classification of the transcription */
|
|
31
|
+
classification: Classification;
|
|
32
|
+
/** The sounds_like value being considered */
|
|
33
|
+
soundsLike: string;
|
|
34
|
+
/** Available mappings for this sounds_like */
|
|
35
|
+
availableMappings: SoundsLikeMapping[];
|
|
36
|
+
/** Surrounding text context (optional) */
|
|
37
|
+
surroundingText?: string;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Instance interface for collision detector
|
|
41
|
+
*/
|
|
42
|
+
export interface Instance {
|
|
43
|
+
/**
|
|
44
|
+
* Decide whether to apply a replacement given a collision context
|
|
45
|
+
*/
|
|
46
|
+
decideReplacement(context: CollisionContext): ReplacementDecision;
|
|
47
|
+
/**
|
|
48
|
+
* Check if a Tier 2 mapping should be applied given classification
|
|
49
|
+
*/
|
|
50
|
+
shouldApplyTier2(mapping: SoundsLikeMapping, classification: Classification): boolean;
|
|
51
|
+
/**
|
|
52
|
+
* Resolve a collision by selecting the best mapping
|
|
53
|
+
*/
|
|
54
|
+
resolveCollision(collision: Collision, classification: Classification): SoundsLikeMapping | null;
|
|
55
|
+
/**
|
|
56
|
+
* Detect capitalization hints in context
|
|
57
|
+
*/
|
|
58
|
+
detectCapitalizationHint(soundsLike: string, surroundingText: string): 'proper-noun' | 'common-term' | 'unknown';
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Configuration for collision detector
|
|
62
|
+
*/
|
|
63
|
+
export interface CollisionDetectorConfig {
|
|
64
|
+
/** Minimum confidence for Tier 2 replacements (default: 0.6) */
|
|
65
|
+
tier2MinConfidence?: number;
|
|
66
|
+
/** High confidence threshold for aggressive replacement (default: 0.8) */
|
|
67
|
+
tier2HighConfidence?: number;
|
|
68
|
+
/** Enable capitalization hints (default: true) */
|
|
69
|
+
useCapitalizationHints?: boolean;
|
|
70
|
+
/** Enable surrounding text analysis (default: false, future feature) */
|
|
71
|
+
useSurroundingText?: boolean;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Create a collision detector instance
|
|
75
|
+
*/
|
|
76
|
+
export declare const create: (config?: CollisionDetectorConfig) => Instance;
|
|
77
|
+
//# sourceMappingURL=collision-detector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collision-detector.d.ts","sourceRoot":"","sources":["../../src/util/collision-detector.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAEtE;;GAEG;AACH,MAAM,WAAW,cAAc;IAC3B,4BAA4B;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,sCAAsC;IACtC,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,yCAAyC;IACzC,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAChC,uCAAuC;IACvC,aAAa,EAAE,OAAO,CAAC;IAEvB,oDAAoD;IACpD,OAAO,CAAC,EAAE,iBAAiB,CAAC;IAE5B,8BAA8B;IAC9B,MAAM,EAAE,MAAM,CAAC;IAEf,wCAAwC;IACxC,UAAU,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC7B,0CAA0C;IAC1C,cAAc,EAAE,cAAc,CAAC;IAE/B,6CAA6C;IAC7C,UAAU,EAAE,MAAM,CAAC;IAEnB,8CAA8C;IAC9C,iBAAiB,EAAE,iBAAiB,EAAE,CAAC;IAEvC,0CAA0C;IAC1C,eAAe,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACrB;;OAEG;IACH,iBAAiB,CAAC,OAAO,EAAE,gBAAgB,GAAG,mBAAmB,CAAC;IAElE;;OAEG;IACH,gBAAgB,CAAC,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,cAAc,GAAG,OAAO,CAAC;IAEtF;;OAEG;IACH,gBAAgB,CAAC,SAAS,EAAE,SAAS,EAAE,cAAc,EAAE,cAAc,GAAG,iBAAiB,GAAG,IAAI,CAAC;IAEjG;;OAEG;IACH,wBAAwB,CAAC,UAAU,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,aAAa,GAAG,aAAa,GAAG,SAAS,CAAC;CACpH;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACpC,gEAAgE;IAChE,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAE5B,0EAA0E;IAC1E,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAE7B,kDAAkD;IAClD,sBAAsB,CAAC,EAAE,OAAO,CAAC;IAEjC,wEAAwE;IACxE,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAChC;AAED;;GAEG;AACH,eAAO,MAAM,MAAM,GAAI,SAAS,uBAAuB,KAAG,QAqPzD,CAAC"}
|