tenbrains 2.1.0 → 2.3.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/AGENTS.md +19 -2
- package/README.md +93 -9
- package/dist/ai/analyzer.d.ts +7 -2
- package/dist/ai/analyzer.d.ts.map +1 -1
- package/dist/ai/analyzer.js +19 -5
- package/dist/ai/analyzer.js.map +1 -1
- package/dist/ai/mock.d.ts +2 -1
- package/dist/ai/mock.d.ts.map +1 -1
- package/dist/ai/mock.js +12 -0
- package/dist/ai/mock.js.map +1 -1
- package/dist/ai/prompts.d.ts +3 -1
- package/dist/ai/prompts.d.ts.map +1 -1
- package/dist/ai/prompts.js +17 -2
- package/dist/ai/prompts.js.map +1 -1
- package/dist/bin/tenbrains.js +0 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +115 -8
- package/dist/cli.js.map +1 -1
- package/dist/commands/analyze.d.ts.map +1 -1
- package/dist/commands/analyze.js +100 -11
- package/dist/commands/analyze.js.map +1 -1
- package/dist/commands/bookmark.d.ts.map +1 -1
- package/dist/commands/bookmark.js +10 -1
- package/dist/commands/bookmark.js.map +1 -1
- package/dist/commands/digest.d.ts +6 -1
- package/dist/commands/digest.d.ts.map +1 -1
- package/dist/commands/digest.js +15 -5
- package/dist/commands/digest.js.map +1 -1
- package/dist/commands/learn.d.ts.map +1 -1
- package/dist/commands/learn.js +14 -2
- package/dist/commands/learn.js.map +1 -1
- package/dist/commands/manifest.d.ts.map +1 -1
- package/dist/commands/manifest.js +6 -0
- package/dist/commands/manifest.js.map +1 -1
- package/dist/commands/objective-tags.d.ts +27 -0
- package/dist/commands/objective-tags.d.ts.map +1 -0
- package/dist/commands/objective-tags.js +105 -0
- package/dist/commands/objective-tags.js.map +1 -0
- package/dist/commands/objective.d.ts +11 -0
- package/dist/commands/objective.d.ts.map +1 -0
- package/dist/commands/objective.js +208 -0
- package/dist/commands/objective.js.map +1 -0
- package/dist/commands/record.d.ts +1 -1
- package/dist/commands/record.d.ts.map +1 -1
- package/dist/commands/record.js +10 -2
- package/dist/commands/record.js.map +1 -1
- package/dist/commands/search.d.ts.map +1 -1
- package/dist/commands/search.js +16 -2
- package/dist/commands/search.js.map +1 -1
- package/dist/commands/takeaway.d.ts.map +1 -1
- package/dist/commands/takeaway.js +4 -1
- package/dist/commands/takeaway.js.map +1 -1
- package/dist/core/text.d.ts +2 -0
- package/dist/core/text.d.ts.map +1 -1
- package/dist/core/text.js +10 -0
- package/dist/core/text.js.map +1 -1
- package/dist/db/database.d.ts +2 -1
- package/dist/db/database.d.ts.map +1 -1
- package/dist/db/database.js +3 -0
- package/dist/db/database.js.map +1 -1
- package/dist/db/migrations.d.ts.map +1 -1
- package/dist/db/migrations.js +25 -0
- package/dist/db/migrations.js.map +1 -1
- package/dist/db/repositories.d.ts +21 -1
- package/dist/db/repositories.d.ts.map +1 -1
- package/dist/db/repositories.js +209 -0
- package/dist/db/repositories.js.map +1 -1
- package/dist/domain/learn.d.ts +5 -4
- package/dist/domain/learn.d.ts.map +1 -1
- package/dist/domain/learn.js +39 -15
- package/dist/domain/learn.js.map +1 -1
- package/dist/domain/schemas.d.ts +14 -0
- package/dist/domain/schemas.d.ts.map +1 -1
- package/dist/domain/schemas.js +5 -0
- package/dist/domain/schemas.js.map +1 -1
- package/dist/domain/search.d.ts +2 -0
- package/dist/domain/search.d.ts.map +1 -1
- package/dist/domain/search.js +20 -1
- package/dist/domain/search.js.map +1 -1
- package/dist/domain/suggest.d.ts.map +1 -1
- package/dist/domain/suggest.js +34 -14
- package/dist/domain/suggest.js.map +1 -1
- package/dist/domain/types.d.ts +22 -0
- package/dist/domain/types.d.ts.map +1 -1
- package/dist/youtube/client.d.ts +31 -0
- package/dist/youtube/client.d.ts.map +1 -0
- package/dist/youtube/client.js +334 -0
- package/dist/youtube/client.js.map +1 -0
- package/package.json +5 -3
package/dist/domain/learn.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { tokenOverlapScore, tokenSet } from "../core/text.js";
|
|
1
2
|
const TRACK_DAYS = 7;
|
|
2
3
|
const DEFAULT_FAMILIARITY = 1; // assume novel when unrated
|
|
3
4
|
const DEFAULT_INTEREST = 3; // assume neutral interest when unrated
|
|
@@ -8,23 +9,46 @@ function ratingFor(concept, ratings) {
|
|
|
8
9
|
interest: match?.interest ?? DEFAULT_INTEREST,
|
|
9
10
|
};
|
|
10
11
|
}
|
|
12
|
+
function compareExistingPriority(a, b) {
|
|
13
|
+
if (b.interest !== a.interest) {
|
|
14
|
+
return b.interest - a.interest;
|
|
15
|
+
}
|
|
16
|
+
const noveltyA = 6 - a.familiarity;
|
|
17
|
+
const noveltyB = 6 - b.familiarity;
|
|
18
|
+
if (noveltyB !== noveltyA) {
|
|
19
|
+
return noveltyB - noveltyA;
|
|
20
|
+
}
|
|
21
|
+
return a.index - b.index;
|
|
22
|
+
}
|
|
11
23
|
/**
|
|
12
|
-
* Order concepts for study
|
|
13
|
-
*
|
|
24
|
+
* Order concepts for study. With objective descriptions, the highest unique-token
|
|
25
|
+
* overlap against any one description is the primary lens. Ratings retain their
|
|
26
|
+
* existing interest/novelty order as deterministic tiebreakers.
|
|
14
27
|
*/
|
|
15
|
-
export function prioritizeConcepts(concepts, ratings) {
|
|
16
|
-
|
|
17
|
-
|
|
28
|
+
export function prioritizeConcepts(concepts, ratings, objectiveDescriptions = []) {
|
|
29
|
+
const ranked = concepts.map((concept, index) => ({
|
|
30
|
+
concept,
|
|
31
|
+
index,
|
|
32
|
+
...ratingFor(concept, ratings),
|
|
33
|
+
}));
|
|
34
|
+
const objectiveTokenSets = objectiveDescriptions
|
|
35
|
+
.map((description) => tokenSet(description))
|
|
36
|
+
.filter((tokens) => tokens.size > 0);
|
|
37
|
+
// Preserve the pre-lens code path exactly when no usable description exists.
|
|
38
|
+
if (objectiveTokenSets.length === 0) {
|
|
39
|
+
return ranked.sort(compareExistingPriority).map((entry) => entry.concept);
|
|
40
|
+
}
|
|
41
|
+
return ranked
|
|
42
|
+
.map((entry) => {
|
|
43
|
+
const conceptTokens = tokenSet(`${entry.concept.name} ${entry.concept.whyItMattersInTweet}`);
|
|
44
|
+
const relevance = Math.max(...objectiveTokenSets.map((objectiveTokens) => tokenOverlapScore(conceptTokens, objectiveTokens)));
|
|
45
|
+
return { ...entry, relevance };
|
|
46
|
+
})
|
|
18
47
|
.sort((a, b) => {
|
|
19
|
-
if (b.
|
|
20
|
-
return b.
|
|
21
|
-
}
|
|
22
|
-
const noveltyA = 6 - a.familiarity;
|
|
23
|
-
const noveltyB = 6 - b.familiarity;
|
|
24
|
-
if (noveltyB !== noveltyA) {
|
|
25
|
-
return noveltyB - noveltyA;
|
|
48
|
+
if (b.relevance !== a.relevance) {
|
|
49
|
+
return b.relevance - a.relevance;
|
|
26
50
|
}
|
|
27
|
-
return a
|
|
51
|
+
return compareExistingPriority(a, b);
|
|
28
52
|
})
|
|
29
53
|
.map((entry) => entry.concept);
|
|
30
54
|
}
|
|
@@ -62,8 +86,8 @@ export function scheduledDay(createdAt, now, totalDays) {
|
|
|
62
86
|
const elapsed = Math.floor((now.getTime() - new Date(createdAt).getTime()) / 86_400_000);
|
|
63
87
|
return Math.min(Math.max(elapsed + 1, 1), Math.max(totalDays, 1));
|
|
64
88
|
}
|
|
65
|
-
export function buildFeynmanTrack(concepts, minutesPerDay, ratings) {
|
|
66
|
-
const ordered = prioritizeConcepts(concepts, ratings);
|
|
89
|
+
export function buildFeynmanTrack(concepts, minutesPerDay, ratings, objectiveDescriptions = []) {
|
|
90
|
+
const ordered = prioritizeConcepts(concepts, ratings, objectiveDescriptions);
|
|
67
91
|
if (ordered.length === 0) {
|
|
68
92
|
return [];
|
|
69
93
|
}
|
package/dist/domain/learn.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"learn.js","sourceRoot":"","sources":["../../src/domain/learn.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"learn.js","sourceRoot":"","sources":["../../src/domain/learn.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAG9D,MAAM,UAAU,GAAG,CAAC,CAAC;AACrB,MAAM,mBAAmB,GAAG,CAAC,CAAC,CAAC,4BAA4B;AAC3D,MAAM,gBAAgB,GAAG,CAAC,CAAC,CAAC,uCAAuC;AAEnE,SAAS,SAAS,CAChB,OAAgB,EAChB,OAAwB;IAExB,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;IAC1F,OAAO;QACL,WAAW,EAAE,KAAK,EAAE,WAAW,IAAI,mBAAmB;QACtD,QAAQ,EAAE,KAAK,EAAE,QAAQ,IAAI,gBAAgB;KAC9C,CAAC;AACJ,CAAC;AAED,SAAS,uBAAuB,CAC9B,CAA2D,EAC3D,CAA2D;IAE3D,IAAI,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,QAAQ,EAAE,CAAC;QAC9B,OAAO,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC;IACjC,CAAC;IACD,MAAM,QAAQ,GAAG,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC;IACnC,MAAM,QAAQ,GAAG,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC;IACnC,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC1B,OAAO,QAAQ,GAAG,QAAQ,CAAC;IAC7B,CAAC;IACD,OAAO,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;AAC3B,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAChC,QAAmB,EACnB,OAAwB,EACxB,wBAA2C,EAAE;IAE7C,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;QAC/C,OAAO;QACP,KAAK;QACL,GAAG,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC;KAC/B,CAAC,CAAC,CAAC;IACJ,MAAM,kBAAkB,GAAG,qBAAqB;SAC7C,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;SAC3C,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;IAEvC,6EAA6E;IAC7E,IAAI,kBAAkB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACpC,OAAO,MAAM,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC5E,CAAC;IAED,OAAO,MAAM;SACV,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QACb,MAAM,aAAa,GAAG,QAAQ,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAAC;QAC7F,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CACxB,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC,eAAe,EAAE,EAAE,CAC5C,iBAAiB,CAAC,aAAa,EAAE,eAAe,CAAC,CAClD,CACF,CAAC;QACF,OAAO,EAAE,GAAG,KAAK,EAAE,SAAS,EAAE,CAAC;IACjC,CAAC,CAAC;SACD,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACb,IAAI,CAAC,CAAC,SAAS,KAAK,CAAC,CAAC,SAAS,EAAE,CAAC;YAChC,OAAO,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC;QACnC,CAAC;QACD,OAAO,uBAAuB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACvC,CAAC,CAAC;SACD,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AACnC,CAAC;AAED,SAAS,YAAY,CAAC,KAAa;IACjC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC;IACnD,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC;IACrD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,KAAK,GAAG,OAAO,CAAC,CAAC;IACnD,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;AACnC,CAAC;AAED;;;;GAIG;AACH;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,IAAmB,EAAE,QAA4B;IAC9E,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACjD,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACvB,OAAO,GAAG,CAAC,GAAG,CAAC;QACjB,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,SAAiB,EAAE,GAAS,EAAE,SAAiB;IAC1E,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAAC,GAAG,UAAU,CAAC,CAAC;IACzF,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC;AACpE,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC/B,QAAmB,EACnB,aAAqB,EACrB,OAAwB,EACxB,wBAA2C,EAAE;IAE7C,MAAM,OAAO,GAAG,kBAAkB,CAAC,QAAQ,EAAE,OAAO,EAAE,qBAAqB,CAAC,CAAC;IAC7E,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,MAAM,OAAO,GAAG,YAAY,CAAC,aAAa,CAAC,CAAC;IAC5C,MAAM,IAAI,GAAkB,EAAE,CAAC;IAC/B,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,IAAI,UAAU,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;QAC9C,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,CAAY,CAAC;QAC/D,MAAM,UAAU,GAAG,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC;QACxC,IAAI,CAAC,IAAI,CAAC;YACR,GAAG;YACH,OAAO,EAAE,OAAO,CAAC,IAAI;YACrB,KAAK,EAAE,GAAG,OAAO,CAAC,KAAK,SAAS,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,2BAA2B,KAAK,OAAO,CAAC,IAAI,MAAM,OAAO,CAAC,mBAAmB,EAAE;YACxI,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,gDAAgD,OAAO,CAAC,IAAI,yCAAyC;YAChI,KAAK,EAAE,GAAG,OAAO,CAAC,KAAK,4CAA4C,OAAO,CAAC,IAAI,8CAA8C;SAC9H,CAAC,CAAC;IACL,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
|
package/dist/domain/schemas.d.ts
CHANGED
|
@@ -45,6 +45,16 @@ export declare const AnalysisResultSchema: z.ZodObject<{
|
|
|
45
45
|
whyItMattersInTweet: string;
|
|
46
46
|
}[];
|
|
47
47
|
}>;
|
|
48
|
+
export declare const SummaryResultSchema: z.ZodObject<{
|
|
49
|
+
summary: z.ZodString;
|
|
50
|
+
keyPoints: z.ZodArray<z.ZodString, "many">;
|
|
51
|
+
}, "strip", z.ZodTypeAny, {
|
|
52
|
+
summary: string;
|
|
53
|
+
keyPoints: string[];
|
|
54
|
+
}, {
|
|
55
|
+
summary: string;
|
|
56
|
+
keyPoints: string[];
|
|
57
|
+
}>;
|
|
48
58
|
/** AI account-takeaway output. */
|
|
49
59
|
export declare const TakeawayResultSchema: z.ZodObject<{
|
|
50
60
|
summary: z.ZodString;
|
|
@@ -91,6 +101,7 @@ export declare const PostInputSchema: z.ZodObject<{
|
|
|
91
101
|
authorUsername: z.ZodOptional<z.ZodString>;
|
|
92
102
|
authorName: z.ZodOptional<z.ZodString>;
|
|
93
103
|
postedAt: z.ZodOptional<z.ZodString>;
|
|
104
|
+
raw: z.ZodOptional<z.ZodUnknown>;
|
|
94
105
|
}, "strip", z.ZodTypeAny, {
|
|
95
106
|
text: string;
|
|
96
107
|
url?: string | undefined;
|
|
@@ -98,6 +109,7 @@ export declare const PostInputSchema: z.ZodObject<{
|
|
|
98
109
|
authorUsername?: string | undefined;
|
|
99
110
|
authorName?: string | undefined;
|
|
100
111
|
postedAt?: string | undefined;
|
|
112
|
+
raw?: unknown;
|
|
101
113
|
}, {
|
|
102
114
|
text: string;
|
|
103
115
|
url?: string | undefined;
|
|
@@ -105,6 +117,7 @@ export declare const PostInputSchema: z.ZodObject<{
|
|
|
105
117
|
authorUsername?: string | undefined;
|
|
106
118
|
authorName?: string | undefined;
|
|
107
119
|
postedAt?: string | undefined;
|
|
120
|
+
raw?: unknown;
|
|
108
121
|
}>;
|
|
109
122
|
/** Input shape for one of the recent posts fed into `takeaway refresh`. */
|
|
110
123
|
export declare const TakeawayPostInputSchema: z.ZodObject<{
|
|
@@ -161,6 +174,7 @@ export declare const ThreadInputSchema: z.ZodArray<z.ZodUnion<[z.ZodString, z.Zo
|
|
|
161
174
|
}>]>, "many">;
|
|
162
175
|
export type Concept = z.infer<typeof ConceptSchema>;
|
|
163
176
|
export type AnalysisResult = z.infer<typeof AnalysisResultSchema>;
|
|
177
|
+
export type SummaryResult = z.infer<typeof SummaryResultSchema>;
|
|
164
178
|
export type TakeawayResult = z.infer<typeof TakeawayResultSchema>;
|
|
165
179
|
export type ConceptRating = z.infer<typeof ConceptRatingSchema>;
|
|
166
180
|
export type PostInput = z.infer<typeof PostInputSchema>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../src/domain/schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,oFAAoF;AACpF,eAAO,MAAM,aAAa;;;;;;;;;EAGxB,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAK/B,CAAC;AAEH,kCAAkC;AAClC,eAAO,MAAM,oBAAoB;;;;;;;;;EAG/B,CAAC;AAIH,+EAA+E;AAC/E,eAAO,MAAM,mBAAmB;;;;;;;;;;;;EAI9B,CAAC;AAEH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;WAA+B,CAAC;AAE/D,2EAA2E;AAC3E,eAAO,MAAM,eAAe
|
|
1
|
+
{"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../src/domain/schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,oFAAoF;AACpF,eAAO,MAAM,aAAa;;;;;;;;;EAGxB,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAK/B,CAAC;AAEH,eAAO,MAAM,mBAAmB;;;;;;;;;EAG9B,CAAC;AAEH,kCAAkC;AAClC,eAAO,MAAM,oBAAoB;;;;;;;;;EAG/B,CAAC;AAIH,+EAA+E;AAC/E,eAAO,MAAM,mBAAmB;;;;;;;;;;;;EAI9B,CAAC;AAEH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;WAA+B,CAAC;AAE/D,2EAA2E;AAC3E,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;EAQ1B,CAAC;AAEH,2EAA2E;AAC3E,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;EAKlC,CAAC;AAEH,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;WAA0C,CAAC;AAEhF;;;GAGG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;aAErB,CAAC;AAEV,MAAM,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;AACpD,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAClE,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAChE,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAClE,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAChE,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AACxD,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AACxE,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC"}
|
package/dist/domain/schemas.js
CHANGED
|
@@ -14,6 +14,10 @@ export const AnalysisResultSchema = z.object({
|
|
|
14
14
|
intent: z.string().min(1),
|
|
15
15
|
novelConcepts: z.array(ConceptSchema).min(1).max(10),
|
|
16
16
|
});
|
|
17
|
+
export const SummaryResultSchema = z.object({
|
|
18
|
+
summary: z.string().min(1),
|
|
19
|
+
keyPoints: z.array(z.string().min(1)).min(1),
|
|
20
|
+
});
|
|
17
21
|
/** AI account-takeaway output. */
|
|
18
22
|
export const TakeawayResultSchema = z.object({
|
|
19
23
|
summary: z.string().min(1),
|
|
@@ -35,6 +39,7 @@ export const PostInputSchema = z.object({
|
|
|
35
39
|
authorUsername: z.string().min(1).optional(),
|
|
36
40
|
authorName: z.string().min(1).optional(),
|
|
37
41
|
postedAt: z.string().min(1).optional(),
|
|
42
|
+
raw: z.unknown().optional(),
|
|
38
43
|
});
|
|
39
44
|
/** Input shape for one of the recent posts fed into `takeaway refresh`. */
|
|
40
45
|
export const TakeawayPostInputSchema = z.object({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../src/domain/schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,oFAAoF;AACpF,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB,mBAAmB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;CACvC,CAAC,CAAC;AAEH;;;GAGG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACxB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1B,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACzB,aAAa,EAAE,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;CACrD,CAAC,CAAC;AAEH,kCAAkC;AAClC,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1B,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;CACpD,CAAC,CAAC;AAEH,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAE1D,+EAA+E;AAC/E,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1C,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1B,WAAW,EAAE,WAAW;IACxB,QAAQ,EAAE,WAAW;CACtB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;AAE/D,2EAA2E;AAC3E,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,uBAAuB,CAAC;IAChD,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;IAChC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IACxC,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IAC5C,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IACxC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;
|
|
1
|
+
{"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../src/domain/schemas.ts"],"names":[],"mappings":"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"}
|
package/dist/domain/search.d.ts
CHANGED
|
@@ -13,6 +13,7 @@ export interface SearchResult {
|
|
|
13
13
|
total: number;
|
|
14
14
|
groups: Record<SearchType, SearchHit[]>;
|
|
15
15
|
}
|
|
16
|
+
export type SearchIdFilter = Partial<Record<SearchType, ReadonlySet<string>>>;
|
|
16
17
|
/**
|
|
17
18
|
* Turn a free-text query into an FTS5 MATCH expression. Each word is quoted
|
|
18
19
|
* (so FTS operators in user input are inert) and words are OR-ed, letting
|
|
@@ -28,5 +29,6 @@ export declare function toMatchQuery(query: string): string | null;
|
|
|
28
29
|
export declare function searchCorpus(store: Store, query: string, options?: {
|
|
29
30
|
types?: SearchType[];
|
|
30
31
|
limit?: number;
|
|
32
|
+
allowedIds?: SearchIdFilter;
|
|
31
33
|
}): SearchResult;
|
|
32
34
|
//# sourceMappingURL=search.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/domain/search.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAEnD,MAAM,MAAM,UAAU,GAAG,UAAU,GAAG,UAAU,GAAG,UAAU,CAAC;AAE9D,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,UAAU,CAAC;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC/B;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC,UAAU,EAAE,SAAS,EAAE,CAAC,CAAC;CACzC;
|
|
1
|
+
{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/domain/search.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAEnD,MAAM,MAAM,UAAU,GAAG,UAAU,GAAG,UAAU,GAAG,UAAU,CAAC;AAE9D,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,UAAU,CAAC;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC/B;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC,UAAU,EAAE,SAAS,EAAE,CAAC,CAAC;CACzC;AAED,MAAM,MAAM,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AAS9E;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAMzD;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,MAAM,EACb,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,UAAU,EAAE,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,cAAc,CAAA;CAAO,GAClF,YAAY,CA2Dd"}
|
package/dist/domain/search.js
CHANGED
|
@@ -28,9 +28,25 @@ export function searchCorpus(store, query, options = {}) {
|
|
|
28
28
|
WHERE search_fts MATCH ? AND type = ?
|
|
29
29
|
ORDER BY rank
|
|
30
30
|
LIMIT ?`);
|
|
31
|
+
const unboundedStmt = options.allowedIds
|
|
32
|
+
? store.database.handle.prepare(`SELECT ref_id, title, snippet(search_fts, -1, '', '', '…', 24) AS snip,
|
|
33
|
+
bm25(search_fts, 0, 0, 2.0, 1.0) AS rank
|
|
34
|
+
FROM search_fts
|
|
35
|
+
WHERE search_fts MATCH ? AND type = ?
|
|
36
|
+
ORDER BY rank`)
|
|
37
|
+
: null;
|
|
31
38
|
for (const type of types) {
|
|
32
|
-
const
|
|
39
|
+
const allowed = options.allowedIds?.[type];
|
|
40
|
+
if (allowed?.size === 0) {
|
|
41
|
+
continue;
|
|
42
|
+
}
|
|
43
|
+
const rows = (allowed
|
|
44
|
+
? unboundedStmt?.all(match, type)
|
|
45
|
+
: stmt.all(match, type, limit));
|
|
33
46
|
for (const row of rows) {
|
|
47
|
+
if (allowed && !allowed.has(row.ref_id)) {
|
|
48
|
+
continue;
|
|
49
|
+
}
|
|
34
50
|
const refs = resolveRefs(store, type, row.ref_id);
|
|
35
51
|
if (refs === null) {
|
|
36
52
|
continue; // index row outlived its record; `db reindex` cleans these
|
|
@@ -45,6 +61,9 @@ export function searchCorpus(store, query, options = {}) {
|
|
|
45
61
|
snippet: row.snip,
|
|
46
62
|
refs,
|
|
47
63
|
});
|
|
64
|
+
if (groups[type].length >= limit) {
|
|
65
|
+
break;
|
|
66
|
+
}
|
|
48
67
|
}
|
|
49
68
|
}
|
|
50
69
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/domain/search.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/domain/search.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"suggest.d.ts","sourceRoot":"","sources":["../../src/domain/suggest.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"suggest.d.ts","sourceRoot":"","sources":["../../src/domain/suggest.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAmH7C,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,OAAO,CAAC;IACtB,WAAW,EAAE,UAAU,EAAE,CAAC;CAC3B;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,KAAK,EACZ,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,IAAI,CAAA;CAAO,GAC3C,cAAc,CAoDhB"}
|
package/dist/domain/suggest.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import { tokenSet } from "../core/text.js";
|
|
1
|
+
import { tokenOverlapScore, tokenSet } from "../core/text.js";
|
|
2
2
|
const TAG_WEIGHT = 3;
|
|
3
3
|
const TAKEAWAY_WEIGHT = 2;
|
|
4
4
|
const BOOKMARK_TEXT_WEIGHT = 1;
|
|
5
|
+
const FOCUS_TOKEN_WEIGHT = 2;
|
|
5
6
|
/** Interests drift: signal loses half its weight every ~2 months. */
|
|
6
7
|
const HALF_LIFE_DAYS = 60;
|
|
7
8
|
/** Exponential decay in (0, 1] by age relative to `now`. */
|
|
@@ -57,6 +58,29 @@ function scoreCandidate(profile, tokens) {
|
|
|
57
58
|
matched.sort((a, b) => b.weight - a.weight);
|
|
58
59
|
return { score, matched: matched.slice(0, 3).map((m) => m.token) };
|
|
59
60
|
}
|
|
61
|
+
function scoreProfileCandidate(profile, tokens, topic) {
|
|
62
|
+
if (profile.empty) {
|
|
63
|
+
return { score: 0.1, reason: `Analyzed (${topic}) but not yet bookmarked.` };
|
|
64
|
+
}
|
|
65
|
+
const scored = scoreCandidate(profile, tokens);
|
|
66
|
+
if (scored.score <= 0) {
|
|
67
|
+
return null;
|
|
68
|
+
}
|
|
69
|
+
return {
|
|
70
|
+
score: Number(scored.score.toFixed(4)),
|
|
71
|
+
reason: `Matches your saved interest in ${scored.matched.join(", ")}.`,
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
function buildFocusProfile(store) {
|
|
75
|
+
const focus = store.objectives.focus();
|
|
76
|
+
const tokens = tokenSet(focus?.description ?? "");
|
|
77
|
+
return focus && tokens.size > 0 ? { slug: focus.slug, tokens } : null;
|
|
78
|
+
}
|
|
79
|
+
function scoreFocus(focus, tokens) {
|
|
80
|
+
const score = tokenOverlapScore(tokens, focus.tokens) * FOCUS_TOKEN_WEIGHT;
|
|
81
|
+
const matched = [...tokens].filter((token) => focus.tokens.has(token)).slice(0, 3);
|
|
82
|
+
return { score, matched };
|
|
83
|
+
}
|
|
60
84
|
/**
|
|
61
85
|
* Regenerate pending suggestions: rank analyzed-but-unsaved posts against the
|
|
62
86
|
* interest profile. Posts already saved or dismissed are left untouched.
|
|
@@ -64,6 +88,7 @@ function scoreCandidate(profile, tokens) {
|
|
|
64
88
|
export function generateSuggestions(store, options = {}) {
|
|
65
89
|
const limit = options.limit ?? 10;
|
|
66
90
|
const profile = buildProfile(store, options.now ?? new Date());
|
|
91
|
+
const focus = buildFocusProfile(store);
|
|
67
92
|
const bookmarkedPostIds = new Set(store.bookmarks.all().map((b) => b.postId));
|
|
68
93
|
let created = 0;
|
|
69
94
|
let updated = 0;
|
|
@@ -81,20 +106,15 @@ export function generateSuggestions(store, options = {}) {
|
|
|
81
106
|
}
|
|
82
107
|
const conceptText = analysis.concepts.map((c) => c.name).join(" ");
|
|
83
108
|
const tokens = tokenSet(`${post.text} ${analysis.topic} ${conceptText}`);
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
score = 0.1;
|
|
88
|
-
reason = `Analyzed (${analysis.topic}) but not yet bookmarked.`;
|
|
89
|
-
}
|
|
90
|
-
else {
|
|
91
|
-
const scored = scoreCandidate(profile, tokens);
|
|
92
|
-
if (scored.score <= 0) {
|
|
93
|
-
continue;
|
|
94
|
-
}
|
|
95
|
-
score = Number(scored.score.toFixed(4));
|
|
96
|
-
reason = `Matches your saved interest in ${scored.matched.join(", ")}.`;
|
|
109
|
+
const base = scoreProfileCandidate(profile, tokens, analysis.topic);
|
|
110
|
+
if (!base) {
|
|
111
|
+
continue;
|
|
97
112
|
}
|
|
113
|
+
const focused = focus ? scoreFocus(focus, tokens) : null;
|
|
114
|
+
const score = Number((base.score + (focused?.score ?? 0)).toFixed(4));
|
|
115
|
+
const reason = focus && focused && focused.score > 0
|
|
116
|
+
? `Aligns with current focus "${focus.slug}" via ${focused.matched.join(", ")}. ${base.reason}`
|
|
117
|
+
: base.reason;
|
|
98
118
|
const before = existing !== null;
|
|
99
119
|
store.suggestions.upsert({ postId: post.id, reason, score });
|
|
100
120
|
if (before) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"suggest.js","sourceRoot":"","sources":["../../src/domain/suggest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"suggest.js","sourceRoot":"","sources":["../../src/domain/suggest.ts"],"names":[],"mappings":"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"}
|
package/dist/domain/types.d.ts
CHANGED
|
@@ -8,6 +8,7 @@ export interface Post {
|
|
|
8
8
|
authorName: string | null;
|
|
9
9
|
text: string;
|
|
10
10
|
postedAt: string | null;
|
|
11
|
+
raw: unknown;
|
|
11
12
|
createdAt: string;
|
|
12
13
|
}
|
|
13
14
|
export interface Analysis {
|
|
@@ -81,4 +82,25 @@ export interface LearningTrack {
|
|
|
81
82
|
progress: TrackDayProgress[];
|
|
82
83
|
createdAt: string;
|
|
83
84
|
}
|
|
85
|
+
export type ObjectiveStatus = "active" | "archived";
|
|
86
|
+
export type ObjectiveRecordType = "post" | "account" | "bookmark" | "track";
|
|
87
|
+
export interface Objective {
|
|
88
|
+
id: string;
|
|
89
|
+
slug: string;
|
|
90
|
+
name: string;
|
|
91
|
+
description: string | null;
|
|
92
|
+
status: ObjectiveStatus;
|
|
93
|
+
isFocus: boolean;
|
|
94
|
+
createdAt: string;
|
|
95
|
+
updatedAt: string;
|
|
96
|
+
}
|
|
97
|
+
export interface ObjectiveWithCount extends Objective {
|
|
98
|
+
linkCount: number;
|
|
99
|
+
}
|
|
100
|
+
export interface ObjectiveLink {
|
|
101
|
+
objectiveId: string;
|
|
102
|
+
recordType: ObjectiveRecordType;
|
|
103
|
+
recordId: string;
|
|
104
|
+
createdAt: string;
|
|
105
|
+
}
|
|
84
106
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/domain/types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/domain/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
export interface VideoRef {
|
|
2
|
+
id: string;
|
|
3
|
+
url: string;
|
|
4
|
+
}
|
|
5
|
+
export interface CaptionTrack {
|
|
6
|
+
baseUrl: string;
|
|
7
|
+
lang: string;
|
|
8
|
+
kind: "asr" | "manual";
|
|
9
|
+
}
|
|
10
|
+
export interface PlayerResponse {
|
|
11
|
+
videoId: string;
|
|
12
|
+
title: string;
|
|
13
|
+
author: string;
|
|
14
|
+
uploadDate?: string | undefined;
|
|
15
|
+
durationSeconds?: number | undefined;
|
|
16
|
+
captionTracks: CaptionTrack[];
|
|
17
|
+
}
|
|
18
|
+
export interface TranscriptResult extends PlayerResponse {
|
|
19
|
+
text: string;
|
|
20
|
+
captionLang: string;
|
|
21
|
+
captionKind: "asr" | "manual";
|
|
22
|
+
url: string;
|
|
23
|
+
}
|
|
24
|
+
export declare function parseVideoRef(input: string): VideoRef;
|
|
25
|
+
export declare function isYouTubeUrl(input: string): boolean;
|
|
26
|
+
export declare function parsePlayerResponse(html: string): PlayerResponse;
|
|
27
|
+
export declare function parseTimedText(input: string): string;
|
|
28
|
+
export declare function fetchTranscript(input: string | VideoRef, options?: {
|
|
29
|
+
lang?: string | undefined;
|
|
30
|
+
}): Promise<TranscriptResult>;
|
|
31
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/youtube/client.ts"],"names":[],"mappings":"AAYA,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,KAAK,GAAG,QAAQ,CAAC;CACxB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,eAAe,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,aAAa,EAAE,YAAY,EAAE,CAAC;CAC/B;AAED,MAAM,WAAW,gBAAiB,SAAQ,cAAc;IACtD,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,KAAK,GAAG,QAAQ,CAAC;IAC9B,GAAG,EAAE,MAAM,CAAC;CACb;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,QAAQ,CA6BrD;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAOnD;AA6ED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,CAEhE;AA8BD,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAqCpD;AA6CD,wBAAsB,eAAe,CACnC,KAAK,EAAE,MAAM,GAAG,QAAQ,EACxB,OAAO,GAAE;IAAE,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAAO,GAC1C,OAAO,CAAC,gBAAgB,CAAC,CA6E3B"}
|