@murphai/murph 0.1.1 → 0.1.13
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/CHANGELOG.md +154 -0
- package/README.md +103 -60
- package/dist/.tsbuildinfo +1 -1
- package/dist/assistant/ui/ink.d.ts.map +1 -1
- package/dist/assistant/ui/ink.js +2 -3
- package/dist/assistant/ui/ink.js.map +1 -1
- package/dist/assistant-runtime.d.ts +0 -2
- package/dist/assistant-runtime.d.ts.map +1 -1
- package/dist/assistant-runtime.js +0 -1
- package/dist/assistant-runtime.js.map +1 -1
- package/dist/commands/device.js +1 -1
- package/dist/commands/device.js.map +1 -1
- package/dist/commands/export-intake-read-helpers.d.ts +1 -1
- package/dist/commands/knowledge.d.ts +3 -0
- package/dist/commands/knowledge.d.ts.map +1 -0
- package/dist/commands/knowledge.js +164 -0
- package/dist/commands/knowledge.js.map +1 -0
- package/dist/commands/wearables.d.ts +4985 -0
- package/dist/commands/wearables.d.ts.map +1 -0
- package/dist/commands/wearables.js +355 -0
- package/dist/commands/wearables.js.map +1 -0
- package/dist/commands/workout.d.ts.map +1 -1
- package/dist/commands/workout.js +330 -28
- package/dist/commands/workout.js.map +1 -1
- package/dist/incur-error-bridge.d.ts +2 -0
- package/dist/incur-error-bridge.d.ts.map +1 -0
- package/dist/incur-error-bridge.js +25 -0
- package/dist/incur-error-bridge.js.map +1 -0
- package/dist/incur.generated.d.ts +118 -1
- package/dist/incur.generated.d.ts.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/knowledge-cli-contracts.d.ts +179 -0
- package/dist/knowledge-cli-contracts.d.ts.map +1 -0
- package/dist/knowledge-cli-contracts.js +78 -0
- package/dist/knowledge-cli-contracts.js.map +1 -0
- package/dist/knowledge-documents.d.ts +44 -0
- package/dist/knowledge-documents.d.ts.map +1 -0
- package/dist/knowledge-documents.js +195 -0
- package/dist/knowledge-documents.js.map +1 -0
- package/dist/knowledge-lint.d.ts +11 -0
- package/dist/knowledge-lint.d.ts.map +1 -0
- package/dist/knowledge-lint.js +254 -0
- package/dist/knowledge-lint.js.map +1 -0
- package/dist/knowledge-runtime.d.ts +49 -0
- package/dist/knowledge-runtime.d.ts.map +1 -0
- package/dist/knowledge-runtime.js +227 -0
- package/dist/knowledge-runtime.js.map +1 -0
- package/dist/research-runtime.d.ts +3 -40
- package/dist/research-runtime.d.ts.map +1 -1
- package/dist/research-runtime.js +54 -253
- package/dist/research-runtime.js.map +1 -1
- package/dist/review-gpt-runtime.d.ts +85 -0
- package/dist/review-gpt-runtime.d.ts.map +1 -0
- package/dist/review-gpt-runtime.js +239 -0
- package/dist/review-gpt-runtime.js.map +1 -0
- package/dist/setup-assistant.d.ts +1 -0
- package/dist/setup-assistant.d.ts.map +1 -1
- package/dist/setup-assistant.js +2 -1
- package/dist/setup-assistant.js.map +1 -1
- package/dist/setup-cli.d.ts.map +1 -1
- package/dist/setup-cli.js +10 -1
- package/dist/setup-cli.js.map +1 -1
- package/dist/setup-wizard.d.ts.map +1 -1
- package/dist/setup-wizard.js +26 -7
- package/dist/setup-wizard.js.map +1 -1
- package/dist/usecases/workout-artifacts.d.ts +21 -0
- package/dist/usecases/workout-artifacts.d.ts.map +1 -0
- package/dist/usecases/workout-artifacts.js +149 -0
- package/dist/usecases/workout-artifacts.js.map +1 -0
- package/dist/usecases/workout-format.d.ts +92 -10
- package/dist/usecases/workout-format.d.ts.map +1 -1
- package/dist/usecases/workout-format.js +211 -391
- package/dist/usecases/workout-format.js.map +1 -1
- package/dist/usecases/workout-import.d.ts +36 -0
- package/dist/usecases/workout-import.d.ts.map +1 -0
- package/dist/usecases/workout-import.js +587 -0
- package/dist/usecases/workout-import.js.map +1 -0
- package/dist/usecases/workout-measurement.d.ts +66 -0
- package/dist/usecases/workout-measurement.d.ts.map +1 -0
- package/dist/usecases/workout-measurement.js +285 -0
- package/dist/usecases/workout-measurement.js.map +1 -0
- package/dist/usecases/workout-model.d.ts +15 -0
- package/dist/usecases/workout-model.d.ts.map +1 -0
- package/dist/usecases/workout-model.js +161 -0
- package/dist/usecases/workout-model.js.map +1 -0
- package/dist/usecases/workout.d.ts +57 -20
- package/dist/usecases/workout.d.ts.map +1 -1
- package/dist/usecases/workout.js +360 -214
- package/dist/usecases/workout.js.map +1 -1
- package/dist/vault-cli-command-manifest.d.ts +5179 -3
- package/dist/vault-cli-command-manifest.d.ts.map +1 -1
- package/dist/vault-cli-command-manifest.js +140 -3
- package/dist/vault-cli-command-manifest.js.map +1 -1
- package/dist/vault-cli.d.ts.map +1 -1
- package/dist/vault-cli.js +2 -0
- package/dist/vault-cli.js.map +1 -1
- package/package.json +22 -13
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { z } from 'incur';
|
|
2
|
+
import { isoTimestampSchema, pathSchema, slugSchema, } from '@murphai/assistant-core/vault-cli-contracts';
|
|
3
|
+
import { DERIVED_KNOWLEDGE_SEARCH_RESULT_FORMAT } from '@murphai/query';
|
|
4
|
+
export const knowledgePageReferenceSchema = z.object({
|
|
5
|
+
compiledAt: isoTimestampSchema.nullable(),
|
|
6
|
+
pagePath: pathSchema,
|
|
7
|
+
pageType: z.string().min(1).nullable(),
|
|
8
|
+
relatedSlugs: z.array(z.string().min(1)),
|
|
9
|
+
slug: slugSchema,
|
|
10
|
+
sourcePaths: z.array(pathSchema),
|
|
11
|
+
status: z.string().min(1).nullable(),
|
|
12
|
+
summary: z.string().min(1).nullable(),
|
|
13
|
+
title: z.string().min(1),
|
|
14
|
+
});
|
|
15
|
+
export const knowledgePageMetadataSchema = knowledgePageReferenceSchema.extend({
|
|
16
|
+
compiler: z.string().min(1).nullable(),
|
|
17
|
+
mode: z.string().min(1).nullable(),
|
|
18
|
+
});
|
|
19
|
+
export const knowledgePageSchema = knowledgePageMetadataSchema.extend({
|
|
20
|
+
body: z.string(),
|
|
21
|
+
markdown: z.string().min(1),
|
|
22
|
+
});
|
|
23
|
+
export const knowledgeCompileResultSchema = z.object({
|
|
24
|
+
vault: pathSchema,
|
|
25
|
+
indexPath: pathSchema,
|
|
26
|
+
page: knowledgePageMetadataSchema,
|
|
27
|
+
prompt: z.string().min(1),
|
|
28
|
+
bodyLength: z.number().int().positive(),
|
|
29
|
+
savedAt: isoTimestampSchema,
|
|
30
|
+
warnings: z.array(z.string().min(1)),
|
|
31
|
+
});
|
|
32
|
+
export const knowledgeListResultSchema = z.object({
|
|
33
|
+
pageCount: z.number().int().nonnegative(),
|
|
34
|
+
pageType: z.string().min(1).nullable(),
|
|
35
|
+
pages: z.array(knowledgePageMetadataSchema),
|
|
36
|
+
status: z.string().min(1).nullable(),
|
|
37
|
+
vault: pathSchema,
|
|
38
|
+
});
|
|
39
|
+
export const knowledgeSearchHitSchema = knowledgePageReferenceSchema.extend({
|
|
40
|
+
matchedTerms: z.array(z.string().min(1)),
|
|
41
|
+
score: z.number(),
|
|
42
|
+
snippet: z.string().min(1),
|
|
43
|
+
});
|
|
44
|
+
export const knowledgeSearchResultSchema = z.object({
|
|
45
|
+
format: z.literal(DERIVED_KNOWLEDGE_SEARCH_RESULT_FORMAT),
|
|
46
|
+
hits: z.array(knowledgeSearchHitSchema),
|
|
47
|
+
pageType: z.string().min(1).nullable(),
|
|
48
|
+
query: z.string().min(1),
|
|
49
|
+
status: z.string().min(1).nullable(),
|
|
50
|
+
total: z.number().int().nonnegative(),
|
|
51
|
+
vault: pathSchema,
|
|
52
|
+
});
|
|
53
|
+
export const knowledgeShowResultSchema = z.object({
|
|
54
|
+
page: knowledgePageSchema,
|
|
55
|
+
vault: pathSchema,
|
|
56
|
+
});
|
|
57
|
+
export const knowledgeIndexRebuildResultSchema = z.object({
|
|
58
|
+
indexPath: pathSchema,
|
|
59
|
+
pageCount: z.number().int().nonnegative(),
|
|
60
|
+
pageTypes: z.array(z.string().min(1)),
|
|
61
|
+
rebuilt: z.literal(true),
|
|
62
|
+
vault: pathSchema,
|
|
63
|
+
});
|
|
64
|
+
export const knowledgeLintProblemSchema = z.object({
|
|
65
|
+
code: z.string().min(1),
|
|
66
|
+
message: z.string().min(1),
|
|
67
|
+
pagePath: pathSchema,
|
|
68
|
+
slug: slugSchema.nullable(),
|
|
69
|
+
severity: z.enum(['error', 'warning']),
|
|
70
|
+
});
|
|
71
|
+
export const knowledgeLintResultSchema = z.object({
|
|
72
|
+
ok: z.boolean(),
|
|
73
|
+
pageCount: z.number().int().nonnegative(),
|
|
74
|
+
problemCount: z.number().int().nonnegative(),
|
|
75
|
+
problems: z.array(knowledgeLintProblemSchema),
|
|
76
|
+
vault: pathSchema,
|
|
77
|
+
});
|
|
78
|
+
//# sourceMappingURL=knowledge-cli-contracts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"knowledge-cli-contracts.js","sourceRoot":"","sources":["../src/knowledge-cli-contracts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,OAAO,CAAA;AACzB,OAAO,EACL,kBAAkB,EAClB,UAAU,EACV,UAAU,GACX,MAAM,6CAA6C,CAAA;AACpD,OAAO,EAAE,sCAAsC,EAAE,MAAM,gBAAgB,CAAA;AAEvE,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,CAAC,MAAM,CAAC;IACnD,UAAU,EAAE,kBAAkB,CAAC,QAAQ,EAAE;IACzC,QAAQ,EAAE,UAAU;IACpB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IACtC,YAAY,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACxC,IAAI,EAAE,UAAU;IAChB,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC;IAChC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IACpC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IACrC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;CACzB,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,2BAA2B,GAAG,4BAA4B,CAAC,MAAM,CAAC;IAC7E,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IACtC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;CACnC,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAG,2BAA2B,CAAC,MAAM,CAAC;IACpE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;CAC5B,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,CAAC,MAAM,CAAC;IACnD,KAAK,EAAE,UAAU;IACjB,SAAS,EAAE,UAAU;IACrB,IAAI,EAAE,2BAA2B;IACjC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACzB,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;IACvC,OAAO,EAAE,kBAAkB;IAC3B,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CACrC,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC,MAAM,CAAC;IAChD,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE;IACzC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IACtC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,2BAA2B,CAAC;IAC3C,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IACpC,KAAK,EAAE,UAAU;CAClB,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,wBAAwB,GAAG,4BAA4B,CAAC,MAAM,CAAC;IAC1E,YAAY,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACxC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;IACjB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;CAC3B,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,CAAC,MAAM,CAAC;IAClD,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,sCAAsC,CAAC;IACzD,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,wBAAwB,CAAC;IACvC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IACtC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACxB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IACpC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE;IACrC,KAAK,EAAE,UAAU;CAClB,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC,MAAM,CAAC;IAChD,IAAI,EAAE,mBAAmB;IACzB,KAAK,EAAE,UAAU;CAClB,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,iCAAiC,GAAG,CAAC,CAAC,MAAM,CAAC;IACxD,SAAS,EAAE,UAAU;IACrB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE;IACzC,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACrC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC;IACxB,KAAK,EAAE,UAAU;CAClB,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,CAAC,MAAM,CAAC;IACjD,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1B,QAAQ,EAAE,UAAU;IACpB,IAAI,EAAE,UAAU,CAAC,QAAQ,EAAE;IAC3B,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;CACvC,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC,MAAM,CAAC;IAChD,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE;IACf,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE;IACzC,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE;IAC5C,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,0BAA0B,CAAC;IAC7C,KAAK,EAAE,UAAU;CAClB,CAAC,CAAA"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { type DerivedKnowledgeNode } from '@murphai/query';
|
|
2
|
+
import { type KnowledgePage, type KnowledgePageMetadata } from './knowledge-cli-contracts.js';
|
|
3
|
+
export interface KnowledgeSourceEntry {
|
|
4
|
+
content: string;
|
|
5
|
+
relativePath: string;
|
|
6
|
+
}
|
|
7
|
+
export declare function deriveKnowledgeTitle(input: {
|
|
8
|
+
existingPage?: DerivedKnowledgeNode | null;
|
|
9
|
+
prompt: string;
|
|
10
|
+
slug?: string | null;
|
|
11
|
+
title?: string | null;
|
|
12
|
+
}): string;
|
|
13
|
+
export declare function buildKnowledgeCompilePrompt(input: {
|
|
14
|
+
existingPage: DerivedKnowledgeNode | null;
|
|
15
|
+
pageType: string;
|
|
16
|
+
prompt: string;
|
|
17
|
+
slug: string;
|
|
18
|
+
sourceEntries: readonly KnowledgeSourceEntry[];
|
|
19
|
+
status: string;
|
|
20
|
+
title: string;
|
|
21
|
+
}): string;
|
|
22
|
+
export declare function normalizeKnowledgeBody(response: string, title: string): string;
|
|
23
|
+
export declare function buildKnowledgeMarkdown(input: {
|
|
24
|
+
body: string;
|
|
25
|
+
compiledAt: string;
|
|
26
|
+
compiler: string;
|
|
27
|
+
mode?: string | null;
|
|
28
|
+
pageType: string;
|
|
29
|
+
slug: string;
|
|
30
|
+
sourcePaths: string[];
|
|
31
|
+
status: string;
|
|
32
|
+
summary: string | null;
|
|
33
|
+
title: string;
|
|
34
|
+
}): string;
|
|
35
|
+
export declare function buildKnowledgePageRelativePath(slug: string): string;
|
|
36
|
+
export declare function toKnowledgeMetadata(page: DerivedKnowledgeNode): KnowledgePageMetadata;
|
|
37
|
+
export declare function toKnowledgePage(page: DerivedKnowledgeNode, markdown: string): KnowledgePage;
|
|
38
|
+
export declare function normalizeSourcePathInputs(value: readonly string[] | null | undefined): string[];
|
|
39
|
+
export declare function matchesKnowledgeFilter(value: string | null | undefined, filter: string | null): boolean;
|
|
40
|
+
export declare function truncateContextText(value: string, limit: number): {
|
|
41
|
+
text: string;
|
|
42
|
+
truncated: boolean;
|
|
43
|
+
};
|
|
44
|
+
//# sourceMappingURL=knowledge-documents.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"knowledge-documents.d.ts","sourceRoot":"","sources":["../src/knowledge-documents.ts"],"names":[],"mappings":"AAGA,OAAO,EAEL,KAAK,oBAAoB,EAI1B,MAAM,gBAAgB,CAAA;AACvB,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,qBAAqB,EAC3B,MAAM,8BAA8B,CAAA;AAKrC,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,MAAM,CAAA;IACf,YAAY,EAAE,MAAM,CAAA;CACrB;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE;IAC1C,YAAY,CAAC,EAAE,oBAAoB,GAAG,IAAI,CAAA;IAC1C,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CACtB,GAAG,MAAM,CAmBT;AAED,wBAAgB,2BAA2B,CAAC,KAAK,EAAE;IACjD,YAAY,EAAE,oBAAoB,GAAG,IAAI,CAAA;IACzC,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,aAAa,EAAE,SAAS,oBAAoB,EAAE,CAAA;IAC9C,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;CACd,GAAG,MAAM,CAuDT;AAED,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAgB9E;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE;IAC5C,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,MAAM,CAAA;IAChB,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,QAAQ,EAAE,MAAM,CAAA;IAChB,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,EAAE,CAAA;IACrB,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,KAAK,EAAE,MAAM,CAAA;CACd,GAAG,MAAM,CAgBT;AAED,wBAAgB,8BAA8B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEnE;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,oBAAoB,GAAG,qBAAqB,CAcrF;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,oBAAoB,EAAE,QAAQ,EAAE,MAAM,GAAG,aAAa,CAM3F;AAED,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,EAAE,CAU/F;AAED,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAChC,MAAM,EAAE,MAAM,GAAG,IAAI,GACpB,OAAO,CAMT;AAED,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,GACZ;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,CAatC"}
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
import { normalizeNullableString as normalizeOptionalText } from '@murphai/assistant-core/text/shared';
|
|
3
|
+
import { stringifyFrontmatterDocument } from '@murphai/core';
|
|
4
|
+
import { DERIVED_KNOWLEDGE_PAGES_ROOT, humanizeKnowledgeTag, normalizeKnowledgeTag, orderedUniqueStrings, } from '@murphai/query';
|
|
5
|
+
import {} from './knowledge-cli-contracts.js';
|
|
6
|
+
const MAX_EXISTING_PAGE_CHARS = 18_000;
|
|
7
|
+
const LOCAL_CONTEXT_TRUNCATION_SUFFIX = '\n\n[truncated locally]';
|
|
8
|
+
export function deriveKnowledgeTitle(input) {
|
|
9
|
+
const explicitTitle = normalizeOptionalText(input.title);
|
|
10
|
+
if (explicitTitle) {
|
|
11
|
+
return explicitTitle;
|
|
12
|
+
}
|
|
13
|
+
if (input.existingPage?.title) {
|
|
14
|
+
return input.existingPage.title;
|
|
15
|
+
}
|
|
16
|
+
const normalizedPrompt = input.prompt.replace(/\s+/gu, ' ').trim();
|
|
17
|
+
if (normalizedPrompt.length > 0) {
|
|
18
|
+
return normalizedPrompt.length <= 80
|
|
19
|
+
? normalizedPrompt
|
|
20
|
+
: `${normalizedPrompt.slice(0, 77).trimEnd()}...`;
|
|
21
|
+
}
|
|
22
|
+
const slug = normalizeOptionalText(input.slug);
|
|
23
|
+
return slug ? humanizeKnowledgeTag(slug) : 'Derived knowledge page';
|
|
24
|
+
}
|
|
25
|
+
export function buildKnowledgeCompilePrompt(input) {
|
|
26
|
+
const sections = [
|
|
27
|
+
'You are compiling one page in Murph\'s local-first derived knowledge wiki.',
|
|
28
|
+
'Return markdown only. Do not include YAML frontmatter and do not wrap the answer in code fences.',
|
|
29
|
+
'Write a calm, inspectable dossier rather than coaching copy. Prefer source-backed synthesis, note uncertainty and contradictions, and avoid purity language, nagging, or protocol accumulation.',
|
|
30
|
+
'Use clear markdown sections. Start with one H1 heading for the page title. Use `[[slug]]` wikilinks in a `## Related` section when another knowledge page would genuinely help. Do not include a `## Sources` section because the CLI appends that automatically.',
|
|
31
|
+
[
|
|
32
|
+
'Requested page metadata:',
|
|
33
|
+
`- title: ${input.title}`,
|
|
34
|
+
`- slug: ${input.slug}`,
|
|
35
|
+
`- page type: ${input.pageType}`,
|
|
36
|
+
`- status: ${input.status}`,
|
|
37
|
+
].join('\n'),
|
|
38
|
+
['User instruction:', input.prompt.trim()].join('\n\n'),
|
|
39
|
+
];
|
|
40
|
+
if (input.existingPage) {
|
|
41
|
+
const existingBody = stripGeneratedKnowledgeSection(input.existingPage.body, [
|
|
42
|
+
'Sources',
|
|
43
|
+
'Source notes',
|
|
44
|
+
'Source files',
|
|
45
|
+
]);
|
|
46
|
+
sections.push([
|
|
47
|
+
'Existing saved page (update it instead of starting from scratch when useful):',
|
|
48
|
+
`- path: ${input.existingPage.relativePath}`,
|
|
49
|
+
`- title: ${input.existingPage.title}`,
|
|
50
|
+
`- page type: ${input.existingPage.pageType ?? 'unknown'}`,
|
|
51
|
+
`- status: ${input.existingPage.status ?? 'unknown'}`,
|
|
52
|
+
'',
|
|
53
|
+
truncateContextText(existingBody, MAX_EXISTING_PAGE_CHARS).text,
|
|
54
|
+
].join('\n'));
|
|
55
|
+
}
|
|
56
|
+
if (input.sourceEntries.length === 0) {
|
|
57
|
+
sections.push('No local source files were supplied for this compile. Rely on the user instruction and any existing page context only.');
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
sections.push([
|
|
61
|
+
'Local source files:',
|
|
62
|
+
...input.sourceEntries.flatMap((entry) => [
|
|
63
|
+
`### ${entry.relativePath}`,
|
|
64
|
+
'```text',
|
|
65
|
+
entry.content,
|
|
66
|
+
'```',
|
|
67
|
+
]),
|
|
68
|
+
].join('\n\n'));
|
|
69
|
+
}
|
|
70
|
+
return sections.join('\n\n');
|
|
71
|
+
}
|
|
72
|
+
export function normalizeKnowledgeBody(response, title) {
|
|
73
|
+
let body = response.replace(/\r\n?/gu, '\n').trim();
|
|
74
|
+
if (/^---\s*\n[\s\S]*?\n---\s*(?:\n|$)/u.test(body)) {
|
|
75
|
+
body = body.replace(/^---\s*\n[\s\S]*?\n---\s*(?:\n|$)/u, '').trim();
|
|
76
|
+
}
|
|
77
|
+
body = stripGeneratedKnowledgeSection(body, ['Sources', 'Source notes', 'Source files']);
|
|
78
|
+
if (/^#\s+/u.test(body)) {
|
|
79
|
+
body = body.replace(/^#\s+[^\n]*$/mu, `# ${title}`);
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
body = `# ${title}\n\n${body}`;
|
|
83
|
+
}
|
|
84
|
+
return body.trim();
|
|
85
|
+
}
|
|
86
|
+
export function buildKnowledgeMarkdown(input) {
|
|
87
|
+
const attributes = compactRecord({
|
|
88
|
+
compiledAt: input.compiledAt,
|
|
89
|
+
compiler: input.compiler,
|
|
90
|
+
mode: input.mode,
|
|
91
|
+
pageType: input.pageType,
|
|
92
|
+
slug: input.slug,
|
|
93
|
+
status: input.status,
|
|
94
|
+
summary: input.summary,
|
|
95
|
+
title: input.title,
|
|
96
|
+
});
|
|
97
|
+
return stringifyFrontmatterDocument({
|
|
98
|
+
attributes,
|
|
99
|
+
body: appendKnowledgeSourcesSection(input.body, input.sourcePaths),
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
export function buildKnowledgePageRelativePath(slug) {
|
|
103
|
+
return path.posix.join(DERIVED_KNOWLEDGE_PAGES_ROOT, `${slug}.md`);
|
|
104
|
+
}
|
|
105
|
+
export function toKnowledgeMetadata(page) {
|
|
106
|
+
return {
|
|
107
|
+
compiler: page.compiler,
|
|
108
|
+
compiledAt: page.compiledAt,
|
|
109
|
+
mode: normalizeKnowledgeMode(page.mode),
|
|
110
|
+
pagePath: page.relativePath,
|
|
111
|
+
pageType: page.pageType,
|
|
112
|
+
relatedSlugs: page.relatedSlugs,
|
|
113
|
+
slug: page.slug,
|
|
114
|
+
sourcePaths: page.sourcePaths,
|
|
115
|
+
status: page.status,
|
|
116
|
+
summary: page.summary,
|
|
117
|
+
title: page.title,
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
export function toKnowledgePage(page, markdown) {
|
|
121
|
+
return {
|
|
122
|
+
...toKnowledgeMetadata(page),
|
|
123
|
+
body: page.body,
|
|
124
|
+
markdown,
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
export function normalizeSourcePathInputs(value) {
|
|
128
|
+
if (!Array.isArray(value)) {
|
|
129
|
+
return [];
|
|
130
|
+
}
|
|
131
|
+
return orderedUniqueStrings(value
|
|
132
|
+
.map((entry) => String(entry ?? '').trim())
|
|
133
|
+
.filter((entry) => entry.length > 0));
|
|
134
|
+
}
|
|
135
|
+
export function matchesKnowledgeFilter(value, filter) {
|
|
136
|
+
if (!filter) {
|
|
137
|
+
return true;
|
|
138
|
+
}
|
|
139
|
+
return normalizeKnowledgeTag(value) === filter;
|
|
140
|
+
}
|
|
141
|
+
export function truncateContextText(value, limit) {
|
|
142
|
+
if (value.length <= limit) {
|
|
143
|
+
return {
|
|
144
|
+
text: value,
|
|
145
|
+
truncated: false,
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
const textLimit = Math.max(0, limit - LOCAL_CONTEXT_TRUNCATION_SUFFIX.length);
|
|
149
|
+
return {
|
|
150
|
+
text: `${value.slice(0, textLimit).trimEnd()}${LOCAL_CONTEXT_TRUNCATION_SUFFIX}`,
|
|
151
|
+
truncated: true,
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
function normalizeKnowledgeMode(value) {
|
|
155
|
+
const normalized = normalizeOptionalText(value);
|
|
156
|
+
return normalized ?? null;
|
|
157
|
+
}
|
|
158
|
+
function appendKnowledgeSourcesSection(body, sourcePaths) {
|
|
159
|
+
if (sourcePaths.length === 0) {
|
|
160
|
+
return `${body.trim()}\n`;
|
|
161
|
+
}
|
|
162
|
+
return [
|
|
163
|
+
body.trim(),
|
|
164
|
+
'',
|
|
165
|
+
'## Sources',
|
|
166
|
+
'',
|
|
167
|
+
...sourcePaths.map((sourcePath) => `- \`${sourcePath}\``),
|
|
168
|
+
'',
|
|
169
|
+
].join('\n');
|
|
170
|
+
}
|
|
171
|
+
function stripGeneratedKnowledgeSection(body, headings) {
|
|
172
|
+
let normalized = body;
|
|
173
|
+
for (const heading of headings) {
|
|
174
|
+
const pattern = new RegExp(`(^|\\n)##\\s+${escapeRegExp(heading)}\\s*\\n[\\s\\S]*?(?=\\n##\\s+|$)`, 'giu');
|
|
175
|
+
normalized = normalized.replace(pattern, '$1').trim();
|
|
176
|
+
}
|
|
177
|
+
return normalized;
|
|
178
|
+
}
|
|
179
|
+
function compactRecord(value) {
|
|
180
|
+
const compacted = {};
|
|
181
|
+
for (const [key, current] of Object.entries(value)) {
|
|
182
|
+
if (current === null || current === undefined) {
|
|
183
|
+
continue;
|
|
184
|
+
}
|
|
185
|
+
if (Array.isArray(current) && current.length === 0) {
|
|
186
|
+
continue;
|
|
187
|
+
}
|
|
188
|
+
compacted[key] = current;
|
|
189
|
+
}
|
|
190
|
+
return compacted;
|
|
191
|
+
}
|
|
192
|
+
function escapeRegExp(value) {
|
|
193
|
+
return value.replace(/[.*+?^${}()|[\]\\]/gu, '\\$&');
|
|
194
|
+
}
|
|
195
|
+
//# sourceMappingURL=knowledge-documents.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"knowledge-documents.js","sourceRoot":"","sources":["../src/knowledge-documents.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { type DerivedKnowledgeGraph, type DerivedKnowledgeGraphIssue, type DerivedKnowledgeNode } from '@murphai/query';
|
|
2
|
+
import { type KnowledgeLintProblem } from './knowledge-cli-contracts.js';
|
|
3
|
+
export declare function collectKnowledgeLintProblems(input: {
|
|
4
|
+
graph: DerivedKnowledgeGraph;
|
|
5
|
+
issues: readonly DerivedKnowledgeGraphIssue[];
|
|
6
|
+
pathExists: (candidatePath: string) => Promise<boolean>;
|
|
7
|
+
}): Promise<KnowledgeLintProblem[]>;
|
|
8
|
+
export declare function requireUniqueKnowledgePageBySlug(graph: DerivedKnowledgeGraph, slug: string, action: 'compile' | 'reload' | 'show'): DerivedKnowledgeNode | null;
|
|
9
|
+
export declare function assertKnowledgeSourcePathAllowed(sourcePath: string): void;
|
|
10
|
+
export declare function sortKnowledgeProblems(problems: readonly KnowledgeLintProblem[]): KnowledgeLintProblem[];
|
|
11
|
+
//# sourceMappingURL=knowledge-lint.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"knowledge-lint.d.ts","sourceRoot":"","sources":["../src/knowledge-lint.ts"],"names":[],"mappings":"AAEA,OAAO,EAIL,KAAK,qBAAqB,EAC1B,KAAK,0BAA0B,EAC/B,KAAK,oBAAoB,EAC1B,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAAE,KAAK,oBAAoB,EAAE,MAAM,8BAA8B,CAAA;AAQxE,wBAAsB,4BAA4B,CAAC,KAAK,EAAE;IACxD,KAAK,EAAE,qBAAqB,CAAA;IAC5B,MAAM,EAAE,SAAS,0BAA0B,EAAE,CAAA;IAC7C,UAAU,EAAE,CAAC,aAAa,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;CACxD,GAAG,OAAO,CAAC,oBAAoB,EAAE,CAAC,CAsClC;AAED,wBAAgB,gCAAgC,CAC9C,KAAK,EAAE,qBAAqB,EAC5B,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,SAAS,GAAG,QAAQ,GAAG,MAAM,GACpC,oBAAoB,GAAG,IAAI,CAc7B;AAED,wBAAgB,gCAAgC,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAmBzE;AAED,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,SAAS,oBAAoB,EAAE,GACxC,oBAAoB,EAAE,CAgBxB"}
|
|
@@ -0,0 +1,254 @@
|
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
import { VaultCliError } from '@murphai/assistant-core/vault-cli-errors';
|
|
3
|
+
import { extractKnowledgeRelatedSlugs, extractKnowledgeSourcePaths, sameKnowledgeStringSet, } from '@murphai/query';
|
|
4
|
+
import {} from './knowledge-cli-contracts.js';
|
|
5
|
+
const FORBIDDEN_KNOWLEDGE_SOURCE_ROOTS = ['derived', '.runtime', 'assistant-state'];
|
|
6
|
+
const KNOWLEDGE_PROBLEM_SEVERITY_ORDER = {
|
|
7
|
+
error: 0,
|
|
8
|
+
warning: 1,
|
|
9
|
+
};
|
|
10
|
+
export async function collectKnowledgeLintProblems(input) {
|
|
11
|
+
const problems = input.issues.map((issue) => ({
|
|
12
|
+
code: `parse_${issue.parser}`,
|
|
13
|
+
message: issue.lineNumber !== undefined
|
|
14
|
+
? `${issue.reason} (line ${issue.lineNumber}).`
|
|
15
|
+
: issue.reason,
|
|
16
|
+
pagePath: issue.relativePath,
|
|
17
|
+
slug: null,
|
|
18
|
+
severity: 'error',
|
|
19
|
+
}));
|
|
20
|
+
const slugCounts = new Map();
|
|
21
|
+
for (const page of input.graph.nodes) {
|
|
22
|
+
const duplicatePaths = slugCounts.get(page.slug) ?? [];
|
|
23
|
+
duplicatePaths.push(page.relativePath);
|
|
24
|
+
slugCounts.set(page.slug, duplicatePaths);
|
|
25
|
+
problems.push(...(await collectKnowledgePageProblems(page, input.graph, input.pathExists)));
|
|
26
|
+
}
|
|
27
|
+
for (const [slug, pagePaths] of slugCounts) {
|
|
28
|
+
if (pagePaths.length <= 1) {
|
|
29
|
+
continue;
|
|
30
|
+
}
|
|
31
|
+
for (const pagePath of pagePaths) {
|
|
32
|
+
problems.push({
|
|
33
|
+
code: 'duplicate_slug',
|
|
34
|
+
message: `Derived knowledge slug "${slug}" appears in multiple files.`,
|
|
35
|
+
pagePath,
|
|
36
|
+
slug,
|
|
37
|
+
severity: 'error',
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
return sortKnowledgeProblems(problems);
|
|
42
|
+
}
|
|
43
|
+
export function requireUniqueKnowledgePageBySlug(graph, slug, action) {
|
|
44
|
+
const matchingPages = graph.nodes.filter((node) => node.slug === slug);
|
|
45
|
+
if (matchingPages.length <= 1) {
|
|
46
|
+
return matchingPages[0] ?? null;
|
|
47
|
+
}
|
|
48
|
+
throw new VaultCliError('knowledge_duplicate_slug', `Knowledge slug "${slug}" appears in multiple files and cannot be ${describeKnowledgeDuplicateSlugAction(action)} safely until the duplicate is resolved.`, {
|
|
49
|
+
pagePaths: matchingPages.map((node) => node.relativePath),
|
|
50
|
+
slug,
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
export function assertKnowledgeSourcePathAllowed(sourcePath) {
|
|
54
|
+
const normalizedPath = normalizeKnowledgeSourcePolicyPath(sourcePath);
|
|
55
|
+
if (!normalizedPath) {
|
|
56
|
+
throw new VaultCliError('knowledge_invalid_source_path', `Knowledge source path "${sourcePath}" must be a vault-relative file path.`, { sourcePath });
|
|
57
|
+
}
|
|
58
|
+
if (isKnowledgeSourcePathAllowed(normalizedPath)) {
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
throw new VaultCliError('knowledge_forbidden_source_path', `Knowledge source path "${sourcePath}" points into derived or runtime state and must not be used for knowledge compilation.`, { sourcePath: normalizedPath });
|
|
62
|
+
}
|
|
63
|
+
export function sortKnowledgeProblems(problems) {
|
|
64
|
+
return [...problems].sort((left, right) => {
|
|
65
|
+
const severityComparison = KNOWLEDGE_PROBLEM_SEVERITY_ORDER[left.severity] -
|
|
66
|
+
KNOWLEDGE_PROBLEM_SEVERITY_ORDER[right.severity];
|
|
67
|
+
if (severityComparison !== 0) {
|
|
68
|
+
return severityComparison;
|
|
69
|
+
}
|
|
70
|
+
const pathComparison = left.pagePath.localeCompare(right.pagePath);
|
|
71
|
+
if (pathComparison !== 0) {
|
|
72
|
+
return pathComparison;
|
|
73
|
+
}
|
|
74
|
+
return left.code.localeCompare(right.code);
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
async function collectKnowledgePageProblems(page, graph, pathExists) {
|
|
78
|
+
const problems = [];
|
|
79
|
+
const pagePath = page.relativePath;
|
|
80
|
+
const fileSlug = path.posix.basename(page.relativePath, '.md');
|
|
81
|
+
if (page.body.trim().length === 0) {
|
|
82
|
+
problems.push({
|
|
83
|
+
code: 'empty_body',
|
|
84
|
+
message: 'Knowledge page body is empty.',
|
|
85
|
+
pagePath,
|
|
86
|
+
slug: page.slug,
|
|
87
|
+
severity: 'error',
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
if (!page.pageType) {
|
|
91
|
+
problems.push({
|
|
92
|
+
code: 'missing_page_type',
|
|
93
|
+
message: 'Knowledge page frontmatter should include `pageType`.',
|
|
94
|
+
pagePath,
|
|
95
|
+
slug: page.slug,
|
|
96
|
+
severity: 'warning',
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
if (!page.status) {
|
|
100
|
+
problems.push({
|
|
101
|
+
code: 'missing_status',
|
|
102
|
+
message: 'Knowledge page frontmatter should include `status`.',
|
|
103
|
+
pagePath,
|
|
104
|
+
slug: page.slug,
|
|
105
|
+
severity: 'warning',
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
if (!page.summary) {
|
|
109
|
+
problems.push({
|
|
110
|
+
code: 'missing_summary',
|
|
111
|
+
message: 'Knowledge page frontmatter should include `summary` or enough body text to derive one.',
|
|
112
|
+
pagePath,
|
|
113
|
+
slug: page.slug,
|
|
114
|
+
severity: 'warning',
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
if (page.slug !== fileSlug) {
|
|
118
|
+
problems.push({
|
|
119
|
+
code: 'slug_path_mismatch',
|
|
120
|
+
message: `Knowledge page slug "${page.slug}" should match file name "${fileSlug}".`,
|
|
121
|
+
pagePath,
|
|
122
|
+
slug: page.slug,
|
|
123
|
+
severity: 'warning',
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
if (page.sourcePaths.length === 0) {
|
|
127
|
+
problems.push({
|
|
128
|
+
code: 'missing_sources',
|
|
129
|
+
message: 'Knowledge page does not list any source paths.',
|
|
130
|
+
pagePath,
|
|
131
|
+
slug: page.slug,
|
|
132
|
+
severity: 'warning',
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
const frontmatterSourcePaths = readKnowledgeStringArrayAttribute(page.attributes, 'sourcePaths');
|
|
136
|
+
const frontmatterRelatedSlugs = readKnowledgeStringArrayAttribute(page.attributes, 'relatedSlugs');
|
|
137
|
+
const normalizedFrontmatterSourcePaths = collectNormalizedSourcePaths(frontmatterSourcePaths, pagePath, page.slug, problems);
|
|
138
|
+
const normalizedBodySourcePaths = collectNormalizedSourcePaths(extractKnowledgeSourcePaths(page.body), pagePath, page.slug, problems);
|
|
139
|
+
if ((normalizedFrontmatterSourcePaths.length > 0 || normalizedBodySourcePaths.length > 0) &&
|
|
140
|
+
!sameKnowledgeStringSet(normalizedFrontmatterSourcePaths, normalizedBodySourcePaths)) {
|
|
141
|
+
problems.push({
|
|
142
|
+
code: 'source_paths_drift',
|
|
143
|
+
message: 'Knowledge page frontmatter `sourcePaths` does not match the canonical `## Sources` section.',
|
|
144
|
+
pagePath,
|
|
145
|
+
slug: page.slug,
|
|
146
|
+
severity: 'warning',
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
const bodyRelatedSlugs = extractKnowledgeRelatedSlugs(page.body, page.slug);
|
|
150
|
+
if ((frontmatterRelatedSlugs.length > 0 || bodyRelatedSlugs.length > 0) &&
|
|
151
|
+
!sameKnowledgeStringSet(frontmatterRelatedSlugs, bodyRelatedSlugs)) {
|
|
152
|
+
problems.push({
|
|
153
|
+
code: 'related_slugs_drift',
|
|
154
|
+
message: 'Knowledge page frontmatter `relatedSlugs` does not match the canonical body wikilinks.',
|
|
155
|
+
pagePath,
|
|
156
|
+
slug: page.slug,
|
|
157
|
+
severity: 'warning',
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
for (const relatedSlug of page.relatedSlugs) {
|
|
161
|
+
if (!graph.bySlug.has(relatedSlug)) {
|
|
162
|
+
problems.push({
|
|
163
|
+
code: 'missing_related_page',
|
|
164
|
+
message: `Related slug "${relatedSlug}" does not exist in derived knowledge pages.`,
|
|
165
|
+
pagePath,
|
|
166
|
+
slug: page.slug,
|
|
167
|
+
severity: 'warning',
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
for (const sourcePath of normalizedBodySourcePaths) {
|
|
172
|
+
const sourceExists = await pathExists(sourcePath);
|
|
173
|
+
if (!sourceExists) {
|
|
174
|
+
problems.push({
|
|
175
|
+
code: 'missing_source_path',
|
|
176
|
+
message: `Source path "${sourcePath}" does not exist inside the vault.`,
|
|
177
|
+
pagePath,
|
|
178
|
+
slug: page.slug,
|
|
179
|
+
severity: 'error',
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
return problems;
|
|
184
|
+
}
|
|
185
|
+
function readKnowledgeStringArrayAttribute(attributes, key) {
|
|
186
|
+
const value = attributes[key];
|
|
187
|
+
if (typeof value === 'string') {
|
|
188
|
+
const trimmed = value.trim();
|
|
189
|
+
return trimmed ? [trimmed] : [];
|
|
190
|
+
}
|
|
191
|
+
if (!Array.isArray(value)) {
|
|
192
|
+
return [];
|
|
193
|
+
}
|
|
194
|
+
return value
|
|
195
|
+
.flatMap((entry) => (typeof entry === 'string' ? [entry.trim()] : []))
|
|
196
|
+
.filter((entry) => entry.length > 0);
|
|
197
|
+
}
|
|
198
|
+
function collectNormalizedSourcePaths(sourcePaths, pagePath, slug, problems) {
|
|
199
|
+
const normalizedSourcePaths = [];
|
|
200
|
+
for (const rawSourcePath of sourcePaths) {
|
|
201
|
+
const normalizedSourcePath = normalizeKnowledgeSourcePolicyPath(rawSourcePath);
|
|
202
|
+
if (!normalizedSourcePath) {
|
|
203
|
+
problems.push({
|
|
204
|
+
code: 'invalid_source_path',
|
|
205
|
+
message: `Source path "${rawSourcePath}" is not a valid vault-relative file path.`,
|
|
206
|
+
pagePath,
|
|
207
|
+
slug,
|
|
208
|
+
severity: 'error',
|
|
209
|
+
});
|
|
210
|
+
continue;
|
|
211
|
+
}
|
|
212
|
+
if (!isKnowledgeSourcePathAllowed(normalizedSourcePath)) {
|
|
213
|
+
problems.push({
|
|
214
|
+
code: 'forbidden_source_path',
|
|
215
|
+
message: `Source path "${rawSourcePath}" points into derived or runtime state and must not be used for knowledge compilation.`,
|
|
216
|
+
pagePath,
|
|
217
|
+
slug,
|
|
218
|
+
severity: 'error',
|
|
219
|
+
});
|
|
220
|
+
continue;
|
|
221
|
+
}
|
|
222
|
+
normalizedSourcePaths.push(normalizedSourcePath);
|
|
223
|
+
}
|
|
224
|
+
return normalizedSourcePaths;
|
|
225
|
+
}
|
|
226
|
+
function normalizeKnowledgeSourcePolicyPath(value) {
|
|
227
|
+
const trimmed = String(value ?? '').trim().replace(/\\/gu, '/');
|
|
228
|
+
if (!trimmed || trimmed.startsWith('/')) {
|
|
229
|
+
return null;
|
|
230
|
+
}
|
|
231
|
+
if (/^[A-Za-z]:\//u.test(trimmed)) {
|
|
232
|
+
return null;
|
|
233
|
+
}
|
|
234
|
+
const normalized = path.posix.normalize(trimmed).replace(/^\.\/+/u, '');
|
|
235
|
+
if (!normalized || normalized === '.' || normalized === '..' || normalized.startsWith('../')) {
|
|
236
|
+
return null;
|
|
237
|
+
}
|
|
238
|
+
return normalized;
|
|
239
|
+
}
|
|
240
|
+
function isKnowledgeSourcePathAllowed(relativePath) {
|
|
241
|
+
const firstSegment = relativePath.split('/')[0] ?? '';
|
|
242
|
+
return !FORBIDDEN_KNOWLEDGE_SOURCE_ROOTS.includes(firstSegment);
|
|
243
|
+
}
|
|
244
|
+
function describeKnowledgeDuplicateSlugAction(action) {
|
|
245
|
+
switch (action) {
|
|
246
|
+
case 'compile':
|
|
247
|
+
return 'compiled';
|
|
248
|
+
case 'reload':
|
|
249
|
+
return 'reloaded';
|
|
250
|
+
case 'show':
|
|
251
|
+
return 'shown';
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
//# sourceMappingURL=knowledge-lint.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"knowledge-lint.js","sourceRoot":"","sources":["../src/knowledge-lint.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,EAAE,aAAa,EAAE,MAAM,0CAA0C,CAAA;AACxE,OAAO,EACL,4BAA4B,EAC5B,2BAA2B,EAC3B,sBAAsB,GAIvB,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAA6B,MAAM,8BAA8B,CAAA;AAExE,MAAM,gCAAgC,GAAG,CAAC,SAAS,EAAE,UAAU,EAAE,iBAAiB,CAAU,CAAA;AAC5F,MAAM,gCAAgC,GAAqD;IACzF,KAAK,EAAE,CAAC;IACR,OAAO,EAAE,CAAC;CACX,CAAA;AAED,MAAM,CAAC,KAAK,UAAU,4BAA4B,CAAC,KAIlD;IACC,MAAM,QAAQ,GAA2B,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACpE,IAAI,EAAE,SAAS,KAAK,CAAC,MAAM,EAAE;QAC7B,OAAO,EACL,KAAK,CAAC,UAAU,KAAK,SAAS;YAC5B,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,UAAU,KAAK,CAAC,UAAU,IAAI;YAC/C,CAAC,CAAC,KAAK,CAAC,MAAM;QAClB,QAAQ,EAAE,KAAK,CAAC,YAAY;QAC5B,IAAI,EAAE,IAAI;QACV,QAAQ,EAAE,OAAO;KAClB,CAAC,CAAC,CAAA;IACH,MAAM,UAAU,GAAG,IAAI,GAAG,EAAoB,CAAA;IAE9C,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACrC,MAAM,cAAc,GAAG,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAA;QACtD,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;QACtC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC,CAAA;QAEzC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,4BAA4B,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAA;IAC7F,CAAC;IAED,KAAK,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,UAAU,EAAE,CAAC;QAC3C,IAAI,SAAS,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;YAC1B,SAAQ;QACV,CAAC;QAED,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YACjC,QAAQ,CAAC,IAAI,CAAC;gBACZ,IAAI,EAAE,gBAAgB;gBACtB,OAAO,EAAE,2BAA2B,IAAI,8BAA8B;gBACtE,QAAQ;gBACR,IAAI;gBACJ,QAAQ,EAAE,OAAO;aAClB,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;IAED,OAAO,qBAAqB,CAAC,QAAQ,CAAC,CAAA;AACxC,CAAC;AAED,MAAM,UAAU,gCAAgC,CAC9C,KAA4B,EAC5B,IAAY,EACZ,MAAqC;IAErC,MAAM,aAAa,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAA0B,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,CAAA;IAC5F,IAAI,aAAa,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;QAC9B,OAAO,aAAa,CAAC,CAAC,CAAC,IAAI,IAAI,CAAA;IACjC,CAAC;IAED,MAAM,IAAI,aAAa,CACrB,0BAA0B,EAC1B,mBAAmB,IAAI,6CAA6C,oCAAoC,CAAC,MAAM,CAAC,0CAA0C,EAC1J;QACE,SAAS,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC,IAA0B,EAAE,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC;QAC/E,IAAI;KACL,CACF,CAAA;AACH,CAAC;AAED,MAAM,UAAU,gCAAgC,CAAC,UAAkB;IACjE,MAAM,cAAc,GAAG,kCAAkC,CAAC,UAAU,CAAC,CAAA;IACrE,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,MAAM,IAAI,aAAa,CACrB,+BAA+B,EAC/B,0BAA0B,UAAU,uCAAuC,EAC3E,EAAE,UAAU,EAAE,CACf,CAAA;IACH,CAAC;IAED,IAAI,4BAA4B,CAAC,cAAc,CAAC,EAAE,CAAC;QACjD,OAAM;IACR,CAAC;IAED,MAAM,IAAI,aAAa,CACrB,iCAAiC,EACjC,0BAA0B,UAAU,wFAAwF,EAC5H,EAAE,UAAU,EAAE,cAAc,EAAE,CAC/B,CAAA;AACH,CAAC;AAED,MAAM,UAAU,qBAAqB,CACnC,QAAyC;IAEzC,OAAO,CAAC,GAAG,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QACxC,MAAM,kBAAkB,GACtB,gCAAgC,CAAC,IAAI,CAAC,QAAQ,CAAC;YAC/C,gCAAgC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;QAClD,IAAI,kBAAkB,KAAK,CAAC,EAAE,CAAC;YAC7B,OAAO,kBAAkB,CAAA;QAC3B,CAAC;QAED,MAAM,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;QAClE,IAAI,cAAc,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,cAAc,CAAA;QACvB,CAAC;QAED,OAAO,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IAC5C,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,KAAK,UAAU,4BAA4B,CACzC,IAA0B,EAC1B,KAA4B,EAC5B,UAAuD;IAEvD,MAAM,QAAQ,GAA2B,EAAE,CAAA;IAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAA;IAClC,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,EAAE,KAAK,CAAC,CAAA;IAE9D,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAClC,QAAQ,CAAC,IAAI,CAAC;YACZ,IAAI,EAAE,YAAY;YAClB,OAAO,EAAE,+BAA+B;YACxC,QAAQ;YACR,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,QAAQ,EAAE,OAAO;SAClB,CAAC,CAAA;IACJ,CAAC;IAED,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACnB,QAAQ,CAAC,IAAI,CAAC;YACZ,IAAI,EAAE,mBAAmB;YACzB,OAAO,EAAE,uDAAuD;YAChE,QAAQ;YACR,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,QAAQ,EAAE,SAAS;SACpB,CAAC,CAAA;IACJ,CAAC;IAED,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;QACjB,QAAQ,CAAC,IAAI,CAAC;YACZ,IAAI,EAAE,gBAAgB;YACtB,OAAO,EAAE,qDAAqD;YAC9D,QAAQ;YACR,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,QAAQ,EAAE,SAAS;SACpB,CAAC,CAAA;IACJ,CAAC;IAED,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QAClB,QAAQ,CAAC,IAAI,CAAC;YACZ,IAAI,EAAE,iBAAiB;YACvB,OAAO,EAAE,wFAAwF;YACjG,QAAQ;YACR,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,QAAQ,EAAE,SAAS;SACpB,CAAC,CAAA;IACJ,CAAC;IAED,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC3B,QAAQ,CAAC,IAAI,CAAC;YACZ,IAAI,EAAE,oBAAoB;YAC1B,OAAO,EAAE,wBAAwB,IAAI,CAAC,IAAI,6BAA6B,QAAQ,IAAI;YACnF,QAAQ;YACR,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,QAAQ,EAAE,SAAS;SACpB,CAAC,CAAA;IACJ,CAAC;IAED,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAClC,QAAQ,CAAC,IAAI,CAAC;YACZ,IAAI,EAAE,iBAAiB;YACvB,OAAO,EAAE,gDAAgD;YACzD,QAAQ;YACR,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,QAAQ,EAAE,SAAS;SACpB,CAAC,CAAA;IACJ,CAAC;IAED,MAAM,sBAAsB,GAAG,iCAAiC,CAC9D,IAAI,CAAC,UAAU,EACf,aAAa,CACd,CAAA;IACD,MAAM,uBAAuB,GAAG,iCAAiC,CAC/D,IAAI,CAAC,UAAU,EACf,cAAc,CACf,CAAA;IACD,MAAM,gCAAgC,GAAG,4BAA4B,CACnE,sBAAsB,EACtB,QAAQ,EACR,IAAI,CAAC,IAAI,EACT,QAAQ,CACT,CAAA;IACD,MAAM,yBAAyB,GAAG,4BAA4B,CAC5D,2BAA2B,CAAC,IAAI,CAAC,IAAI,CAAC,EACtC,QAAQ,EACR,IAAI,CAAC,IAAI,EACT,QAAQ,CACT,CAAA;IAED,IACE,CAAC,gCAAgC,CAAC,MAAM,GAAG,CAAC,IAAI,yBAAyB,CAAC,MAAM,GAAG,CAAC,CAAC;QACrF,CAAC,sBAAsB,CACrB,gCAAgC,EAChC,yBAAyB,CAC1B,EACD,CAAC;QACD,QAAQ,CAAC,IAAI,CAAC;YACZ,IAAI,EAAE,oBAAoB;YAC1B,OAAO,EAAE,6FAA6F;YACtG,QAAQ;YACR,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,QAAQ,EAAE,SAAS;SACpB,CAAC,CAAA;IACJ,CAAC;IAED,MAAM,gBAAgB,GAAG,4BAA4B,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAA;IAC3E,IACE,CAAC,uBAAuB,CAAC,MAAM,GAAG,CAAC,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAC;QACnE,CAAC,sBAAsB,CAAC,uBAAuB,EAAE,gBAAgB,CAAC,EAClE,CAAC;QACD,QAAQ,CAAC,IAAI,CAAC;YACZ,IAAI,EAAE,qBAAqB;YAC3B,OAAO,EAAE,wFAAwF;YACjG,QAAQ;YACR,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,QAAQ,EAAE,SAAS;SACpB,CAAC,CAAA;IACJ,CAAC;IAED,KAAK,MAAM,WAAW,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;QAC5C,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;YACnC,QAAQ,CAAC,IAAI,CAAC;gBACZ,IAAI,EAAE,sBAAsB;gBAC5B,OAAO,EAAE,iBAAiB,WAAW,8CAA8C;gBACnF,QAAQ;gBACR,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,QAAQ,EAAE,SAAS;aACpB,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;IAED,KAAK,MAAM,UAAU,IAAI,yBAAyB,EAAE,CAAC;QACnD,MAAM,YAAY,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,CAAA;QACjD,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,QAAQ,CAAC,IAAI,CAAC;gBACZ,IAAI,EAAE,qBAAqB;gBAC3B,OAAO,EAAE,gBAAgB,UAAU,oCAAoC;gBACvE,QAAQ;gBACR,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,QAAQ,EAAE,OAAO;aAClB,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,CAAA;AACjB,CAAC;AAED,SAAS,iCAAiC,CACxC,UAAmC,EACnC,GAAW;IAEX,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,CAAA;IAC7B,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAA;QAC5B,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;IACjC,CAAC;IAED,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,EAAE,CAAA;IACX,CAAC;IAED,OAAO,KAAK;SACT,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;SACrE,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;AACxC,CAAC;AAED,SAAS,4BAA4B,CACnC,WAA8B,EAC9B,QAAgB,EAChB,IAAY,EACZ,QAAgC;IAEhC,MAAM,qBAAqB,GAAa,EAAE,CAAA;IAE1C,KAAK,MAAM,aAAa,IAAI,WAAW,EAAE,CAAC;QACxC,MAAM,oBAAoB,GAAG,kCAAkC,CAAC,aAAa,CAAC,CAAA;QAC9E,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC1B,QAAQ,CAAC,IAAI,CAAC;gBACZ,IAAI,EAAE,qBAAqB;gBAC3B,OAAO,EAAE,gBAAgB,aAAa,4CAA4C;gBAClF,QAAQ;gBACR,IAAI;gBACJ,QAAQ,EAAE,OAAO;aAClB,CAAC,CAAA;YACF,SAAQ;QACV,CAAC;QAED,IAAI,CAAC,4BAA4B,CAAC,oBAAoB,CAAC,EAAE,CAAC;YACxD,QAAQ,CAAC,IAAI,CAAC;gBACZ,IAAI,EAAE,uBAAuB;gBAC7B,OAAO,EAAE,gBAAgB,aAAa,wFAAwF;gBAC9H,QAAQ;gBACR,IAAI;gBACJ,QAAQ,EAAE,OAAO;aAClB,CAAC,CAAA;YACF,SAAQ;QACV,CAAC;QAED,qBAAqB,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAA;IAClD,CAAC;IAED,OAAO,qBAAqB,CAAA;AAC9B,CAAC;AAED,SAAS,kCAAkC,CACzC,KAAgC;IAEhC,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IAC/D,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACxC,OAAO,IAAI,CAAA;IACb,CAAC;IAED,IAAI,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAClC,OAAO,IAAI,CAAA;IACb,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAA;IACvE,IAAI,CAAC,UAAU,IAAI,UAAU,KAAK,GAAG,IAAI,UAAU,KAAK,IAAI,IAAI,UAAU,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QAC7F,OAAO,IAAI,CAAA;IACb,CAAC;IAED,OAAO,UAAU,CAAA;AACnB,CAAC;AAED,SAAS,4BAA4B,CAAC,YAAoB;IACxD,MAAM,YAAY,GAAG,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;IACrD,OAAO,CAAC,gCAAgC,CAAC,QAAQ,CAC/C,YAAiE,CAClE,CAAA;AACH,CAAC;AAED,SAAS,oCAAoC,CAC3C,MAAqC;IAErC,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,SAAS;YACZ,OAAO,UAAU,CAAA;QACnB,KAAK,QAAQ;YACX,OAAO,UAAU,CAAA;QACnB,KAAK,MAAM;YACT,OAAO,OAAO,CAAA;IAClB,CAAC;AACH,CAAC"}
|