veryfront 0.1.71 → 0.1.73
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/esm/cli/commands/files/command-help.d.ts +3 -0
- package/esm/cli/commands/files/command-help.d.ts.map +1 -0
- package/esm/cli/commands/files/command-help.js +38 -0
- package/esm/cli/commands/files/command.d.ts +105 -0
- package/esm/cli/commands/files/command.d.ts.map +1 -0
- package/esm/cli/commands/files/command.js +250 -0
- package/esm/cli/commands/files/handler.d.ts +3 -0
- package/esm/cli/commands/files/handler.d.ts.map +1 -0
- package/esm/cli/commands/files/handler.js +4 -0
- package/esm/cli/commands/files/index.d.ts +4 -0
- package/esm/cli/commands/files/index.d.ts.map +1 -0
- package/esm/cli/commands/files/index.js +2 -0
- package/esm/cli/commands/knowledge/command-help.d.ts +3 -0
- package/esm/cli/commands/knowledge/command-help.d.ts.map +1 -0
- package/esm/cli/commands/knowledge/command-help.js +38 -0
- package/esm/cli/commands/knowledge/command.d.ts +122 -0
- package/esm/cli/commands/knowledge/command.d.ts.map +1 -0
- package/esm/cli/commands/knowledge/command.js +382 -0
- package/esm/cli/commands/knowledge/handler.d.ts +3 -0
- package/esm/cli/commands/knowledge/handler.d.ts.map +1 -0
- package/esm/cli/commands/knowledge/handler.js +4 -0
- package/esm/cli/commands/knowledge/index.d.ts +3 -0
- package/esm/cli/commands/knowledge/index.d.ts.map +1 -0
- package/esm/cli/commands/knowledge/index.js +2 -0
- package/esm/cli/commands/knowledge/parser-source.d.ts +2 -0
- package/esm/cli/commands/knowledge/parser-source.d.ts.map +1 -0
- package/esm/cli/commands/knowledge/parser-source.js +415 -0
- package/esm/cli/commands/uploads/command-help.d.ts +3 -0
- package/esm/cli/commands/uploads/command-help.d.ts.map +1 -0
- package/esm/cli/commands/uploads/command-help.js +43 -0
- package/esm/cli/commands/uploads/command.d.ts +140 -0
- package/esm/cli/commands/uploads/command.d.ts.map +1 -0
- package/esm/cli/commands/uploads/command.js +323 -0
- package/esm/cli/commands/uploads/handler.d.ts +3 -0
- package/esm/cli/commands/uploads/handler.d.ts.map +1 -0
- package/esm/cli/commands/uploads/handler.js +4 -0
- package/esm/cli/commands/uploads/index.d.ts +4 -0
- package/esm/cli/commands/uploads/index.d.ts.map +1 -0
- package/esm/cli/commands/uploads/index.js +2 -0
- package/esm/cli/help/command-definitions.d.ts.map +1 -1
- package/esm/cli/help/command-definitions.js +6 -0
- package/esm/cli/router.d.ts.map +1 -1
- package/esm/cli/router.js +6 -0
- package/esm/deno.js +1 -1
- package/esm/src/errors/error-registry.d.ts +2 -0
- package/esm/src/errors/error-registry.d.ts.map +1 -1
- package/esm/src/errors/error-registry.js +8 -0
- package/esm/src/errors/index.d.ts +1 -1
- package/esm/src/errors/index.d.ts.map +1 -1
- package/esm/src/errors/index.js +1 -1
- package/esm/src/html/html-shell-generator.d.ts.map +1 -1
- package/esm/src/html/html-shell-generator.js +6 -0
- package/esm/src/platform/compat/media-types.d.ts +5 -0
- package/esm/src/platform/compat/media-types.d.ts.map +1 -0
- package/esm/src/platform/compat/media-types.js +19 -0
- package/esm/src/platform/index.d.ts +1 -0
- package/esm/src/platform/index.d.ts.map +1 -1
- package/esm/src/platform/index.js +2 -0
- package/esm/src/rendering/orchestrator/pipeline.d.ts.map +1 -1
- package/esm/src/rendering/orchestrator/pipeline.js +116 -105
- package/esm/src/server/bootstrap.js +5 -1
- package/esm/src/server/dev-server/error-overlay/error-formatter.d.ts +4 -0
- package/esm/src/server/dev-server/error-overlay/error-formatter.d.ts.map +1 -1
- package/esm/src/server/dev-server/error-overlay/error-formatter.js +15 -0
- package/esm/src/server/dev-server/error-overlay/html-template.d.ts +1 -1
- package/esm/src/server/dev-server/error-overlay/html-template.d.ts.map +1 -1
- package/esm/src/server/dev-server/error-overlay/html-template.js +131 -8
- package/esm/src/server/dev-server/error-overlay/index.d.ts +1 -1
- package/esm/src/server/dev-server/error-overlay/index.d.ts.map +1 -1
- package/esm/src/server/dev-server/error-overlay/index.js +1 -1
- package/esm/src/server/dev-server/error-overlay/overlay-renderer.d.ts +1 -1
- package/esm/src/server/dev-server/error-overlay/overlay-renderer.d.ts.map +1 -1
- package/esm/src/server/dev-server/error-overlay/overlay-renderer.js +2 -2
- package/esm/src/server/dev-server/request-handler.d.ts.map +1 -1
- package/esm/src/server/dev-server/request-handler.js +6 -2
- package/esm/src/server/services/rendering/ssr.service.d.ts.map +1 -1
- package/esm/src/server/services/rendering/ssr.service.js +9 -2
- package/esm/src/server/utils/error-html.d.ts.map +1 -1
- package/esm/src/server/utils/error-html.js +26 -6
- package/package.json +2 -1
- package/src/cli/commands/files/command-help.ts +40 -0
- package/src/cli/commands/files/command.ts +328 -0
- package/src/cli/commands/files/handler.ts +6 -0
- package/src/cli/commands/files/index.ts +19 -0
- package/src/cli/commands/knowledge/command-help.ts +40 -0
- package/src/cli/commands/knowledge/command.ts +513 -0
- package/src/cli/commands/knowledge/handler.ts +6 -0
- package/src/cli/commands/knowledge/index.ts +2 -0
- package/src/cli/commands/knowledge/parser-source.ts +415 -0
- package/src/cli/commands/uploads/command-help.ts +45 -0
- package/src/cli/commands/uploads/command.ts +465 -0
- package/src/cli/commands/uploads/handler.ts +6 -0
- package/src/cli/commands/uploads/index.ts +23 -0
- package/src/cli/help/command-definitions.ts +6 -0
- package/src/cli/router.ts +6 -0
- package/src/deno.js +1 -1
- package/src/src/errors/error-registry.ts +9 -0
- package/src/src/errors/index.ts +1 -0
- package/src/src/html/html-shell-generator.ts +9 -0
- package/src/src/platform/compat/media-types.ts +23 -0
- package/src/src/platform/index.ts +3 -0
- package/src/src/rendering/orchestrator/pipeline.ts +186 -172
- package/src/src/server/bootstrap.ts +6 -1
- package/src/src/server/dev-server/error-overlay/error-formatter.ts +21 -0
- package/src/src/server/dev-server/error-overlay/html-template.ts +139 -8
- package/src/src/server/dev-server/error-overlay/index.ts +1 -0
- package/src/src/server/dev-server/error-overlay/overlay-renderer.ts +2 -1
- package/src/src/server/dev-server/request-handler.ts +6 -2
- package/src/src/server/services/rendering/ssr.service.ts +9 -2
- package/src/src/server/utils/error-html.ts +29 -6
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command-help.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/files/command-help.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEvD,eAAO,MAAM,SAAS,EAAE,WAqCvB,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
export const filesHelp = {
|
|
2
|
+
name: "files",
|
|
3
|
+
description: "List, read, write, and delete project files",
|
|
4
|
+
usage: "veryfront files <command> [options]",
|
|
5
|
+
options: [
|
|
6
|
+
{
|
|
7
|
+
flag: "--project, -p <slug>",
|
|
8
|
+
description: "Project slug override (otherwise inferred from env/config)",
|
|
9
|
+
},
|
|
10
|
+
{
|
|
11
|
+
flag: "--path <prefix>",
|
|
12
|
+
description: "Prefix filter for files list",
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
flag: "--from <path>",
|
|
16
|
+
description: "Local file to upload with files put",
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
flag: "--output, -o <path>",
|
|
20
|
+
description: "Write files get output to a local file instead of stdout",
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
flag: "--json, -j",
|
|
24
|
+
description: "Output machine-readable JSON",
|
|
25
|
+
},
|
|
26
|
+
],
|
|
27
|
+
examples: [
|
|
28
|
+
"veryfront files list --path knowledge/ --json",
|
|
29
|
+
"veryfront files get knowledge/q1-report.md",
|
|
30
|
+
"veryfront files put knowledge/q1-report.md --from /workspace/knowledge/q1-report.md",
|
|
31
|
+
"veryfront files delete knowledge/q1-report.md",
|
|
32
|
+
],
|
|
33
|
+
notes: [
|
|
34
|
+
"Subcommands: list, get, put, delete",
|
|
35
|
+
"Uses the project files API, not the uploads store",
|
|
36
|
+
"Designed for precise sandbox writes where `veryfront push` would be too broad",
|
|
37
|
+
],
|
|
38
|
+
};
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { type ApiClient } from "../../shared/config.js";
|
|
3
|
+
import type { ParsedArgs } from "../../shared/types.js";
|
|
4
|
+
import { listAllFiles } from "../pull/command.js";
|
|
5
|
+
type RemoteFileEntry = Awaited<ReturnType<typeof listAllFiles>>[number];
|
|
6
|
+
declare const FilesListArgsSchema: z.ZodObject<{
|
|
7
|
+
projectSlug: z.ZodOptional<z.ZodString>;
|
|
8
|
+
projectDir: z.ZodOptional<z.ZodString>;
|
|
9
|
+
path: z.ZodOptional<z.ZodString>;
|
|
10
|
+
json: z.ZodDefault<z.ZodBoolean>;
|
|
11
|
+
quiet: z.ZodDefault<z.ZodBoolean>;
|
|
12
|
+
}, "strip", z.ZodTypeAny, {
|
|
13
|
+
json: boolean;
|
|
14
|
+
quiet: boolean;
|
|
15
|
+
path?: string | undefined;
|
|
16
|
+
projectSlug?: string | undefined;
|
|
17
|
+
projectDir?: string | undefined;
|
|
18
|
+
}, {
|
|
19
|
+
path?: string | undefined;
|
|
20
|
+
projectSlug?: string | undefined;
|
|
21
|
+
json?: boolean | undefined;
|
|
22
|
+
projectDir?: string | undefined;
|
|
23
|
+
quiet?: boolean | undefined;
|
|
24
|
+
}>;
|
|
25
|
+
declare const FilesGetArgsSchema: z.ZodObject<{
|
|
26
|
+
projectSlug: z.ZodOptional<z.ZodString>;
|
|
27
|
+
projectDir: z.ZodOptional<z.ZodString>;
|
|
28
|
+
remotePath: z.ZodString;
|
|
29
|
+
output: z.ZodOptional<z.ZodString>;
|
|
30
|
+
json: z.ZodDefault<z.ZodBoolean>;
|
|
31
|
+
quiet: z.ZodDefault<z.ZodBoolean>;
|
|
32
|
+
}, "strip", z.ZodTypeAny, {
|
|
33
|
+
json: boolean;
|
|
34
|
+
quiet: boolean;
|
|
35
|
+
remotePath: string;
|
|
36
|
+
projectSlug?: string | undefined;
|
|
37
|
+
projectDir?: string | undefined;
|
|
38
|
+
output?: string | undefined;
|
|
39
|
+
}, {
|
|
40
|
+
remotePath: string;
|
|
41
|
+
projectSlug?: string | undefined;
|
|
42
|
+
json?: boolean | undefined;
|
|
43
|
+
projectDir?: string | undefined;
|
|
44
|
+
output?: string | undefined;
|
|
45
|
+
quiet?: boolean | undefined;
|
|
46
|
+
}>;
|
|
47
|
+
declare const FilesPutArgsSchema: z.ZodObject<{
|
|
48
|
+
projectSlug: z.ZodOptional<z.ZodString>;
|
|
49
|
+
projectDir: z.ZodOptional<z.ZodString>;
|
|
50
|
+
remotePath: z.ZodString;
|
|
51
|
+
from: z.ZodString;
|
|
52
|
+
json: z.ZodDefault<z.ZodBoolean>;
|
|
53
|
+
quiet: z.ZodDefault<z.ZodBoolean>;
|
|
54
|
+
}, "strip", z.ZodTypeAny, {
|
|
55
|
+
json: boolean;
|
|
56
|
+
from: string;
|
|
57
|
+
quiet: boolean;
|
|
58
|
+
remotePath: string;
|
|
59
|
+
projectSlug?: string | undefined;
|
|
60
|
+
projectDir?: string | undefined;
|
|
61
|
+
}, {
|
|
62
|
+
from: string;
|
|
63
|
+
remotePath: string;
|
|
64
|
+
projectSlug?: string | undefined;
|
|
65
|
+
json?: boolean | undefined;
|
|
66
|
+
projectDir?: string | undefined;
|
|
67
|
+
quiet?: boolean | undefined;
|
|
68
|
+
}>;
|
|
69
|
+
declare const FilesDeleteArgsSchema: z.ZodObject<{
|
|
70
|
+
projectSlug: z.ZodOptional<z.ZodString>;
|
|
71
|
+
projectDir: z.ZodOptional<z.ZodString>;
|
|
72
|
+
remotePath: z.ZodString;
|
|
73
|
+
json: z.ZodDefault<z.ZodBoolean>;
|
|
74
|
+
quiet: z.ZodDefault<z.ZodBoolean>;
|
|
75
|
+
}, "strip", z.ZodTypeAny, {
|
|
76
|
+
json: boolean;
|
|
77
|
+
quiet: boolean;
|
|
78
|
+
remotePath: string;
|
|
79
|
+
projectSlug?: string | undefined;
|
|
80
|
+
projectDir?: string | undefined;
|
|
81
|
+
}, {
|
|
82
|
+
remotePath: string;
|
|
83
|
+
projectSlug?: string | undefined;
|
|
84
|
+
json?: boolean | undefined;
|
|
85
|
+
projectDir?: string | undefined;
|
|
86
|
+
quiet?: boolean | undefined;
|
|
87
|
+
}>;
|
|
88
|
+
export type FilesListOptions = z.infer<typeof FilesListArgsSchema>;
|
|
89
|
+
export type FilesGetOptions = z.infer<typeof FilesGetArgsSchema>;
|
|
90
|
+
export type FilesPutOptions = z.infer<typeof FilesPutArgsSchema>;
|
|
91
|
+
export type FilesDeleteOptions = z.infer<typeof FilesDeleteArgsSchema>;
|
|
92
|
+
export declare function parseFilesListArgs(args: ParsedArgs): z.SafeParseReturnType<unknown, FilesListOptions>;
|
|
93
|
+
export declare function parseFilesGetArgs(args: ParsedArgs): z.SafeParseReturnType<unknown, FilesGetOptions>;
|
|
94
|
+
export declare function parseFilesPutArgs(args: ParsedArgs): z.SafeParseReturnType<unknown, FilesPutOptions>;
|
|
95
|
+
export declare function parseFilesDeleteArgs(args: ParsedArgs): z.SafeParseReturnType<unknown, FilesDeleteOptions>;
|
|
96
|
+
export declare function buildRemoteFileUrl(projectSlug: string, remotePath: string): string;
|
|
97
|
+
export declare function listRemoteFiles(client: ApiClient, projectSlug: string, options?: Pick<FilesListOptions, "path">): Promise<RemoteFileEntry[]>;
|
|
98
|
+
export declare function getRemoteFile(client: ApiClient, projectSlug: string, remotePath: string): Promise<string>;
|
|
99
|
+
export declare function putRemoteFileFromLocal(client: ApiClient, projectSlug: string, remotePath: string, localPath: string): Promise<{
|
|
100
|
+
path: string;
|
|
101
|
+
}>;
|
|
102
|
+
export declare function deleteRemoteFile(client: ApiClient, projectSlug: string, remotePath: string): Promise<void>;
|
|
103
|
+
export declare function filesCommand(args: ParsedArgs): Promise<void>;
|
|
104
|
+
export {};
|
|
105
|
+
//# sourceMappingURL=command.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/files/command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,OAAO,EAAE,KAAK,SAAS,EAA0C,MAAM,wBAAwB,CAAC;AAChG,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAkB,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAIlE,KAAK,eAAe,GAAG,OAAO,CAAC,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AAExE,QAAA,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;EAMvB,CAAC;AAEH,QAAA,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;EAOtB,CAAC;AAEH,QAAA,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;EAOtB,CAAC;AAEH,QAAA,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;EAMzB,CAAC;AAEH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AACnE,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AACjE,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AACjE,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AA4CvE,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,UAAU,GACf,CAAC,CAAC,mBAAmB,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAQlD;AAED,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,UAAU,GACf,CAAC,CAAC,mBAAmB,CAAC,OAAO,EAAE,eAAe,CAAC,CASjD;AAED,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,UAAU,GACf,CAAC,CAAC,mBAAmB,CAAC,OAAO,EAAE,eAAe,CAAC,CASjD;AAED,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,UAAU,GACf,CAAC,CAAC,mBAAmB,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAQpD;AAED,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAGlF;AAED,wBAAsB,eAAe,CACnC,MAAM,EAAE,SAAS,EACjB,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,IAAI,CAAC,gBAAgB,EAAE,MAAM,CAAM,GAC3C,OAAO,CAAC,eAAe,EAAE,CAAC,CAI5B;AAED,wBAAsB,aAAa,CACjC,MAAM,EAAE,SAAS,EACjB,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,CAAC,CAEjB;AAED,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,SAAS,EACjB,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAO3B;AAED,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,SAAS,EACjB,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC,CAEf;AAED,wBAAsB,YAAY,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CA0IlE"}
|
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { createFileSystem } from "../../../src/platform/index.js";
|
|
3
|
+
import { dirname, normalize } from "../../../src/platform/compat/path/index.js";
|
|
4
|
+
import { withSpan } from "../../../src/observability/tracing/otlp-setup.js";
|
|
5
|
+
import { cliLogger } from "../../utils/index.js";
|
|
6
|
+
import { createApiClient, resolveConfigWithAuth } from "../../shared/config.js";
|
|
7
|
+
import { getFileContent, listAllFiles } from "../pull/command.js";
|
|
8
|
+
const MAIN_SOURCE = { type: "main" };
|
|
9
|
+
const FilesListArgsSchema = z.object({
|
|
10
|
+
projectSlug: z.string().optional(),
|
|
11
|
+
projectDir: z.string().optional(),
|
|
12
|
+
path: z.string().optional(),
|
|
13
|
+
json: z.boolean().default(false),
|
|
14
|
+
quiet: z.boolean().default(false),
|
|
15
|
+
});
|
|
16
|
+
const FilesGetArgsSchema = z.object({
|
|
17
|
+
projectSlug: z.string().optional(),
|
|
18
|
+
projectDir: z.string().optional(),
|
|
19
|
+
remotePath: z.string().min(1),
|
|
20
|
+
output: z.string().optional(),
|
|
21
|
+
json: z.boolean().default(false),
|
|
22
|
+
quiet: z.boolean().default(false),
|
|
23
|
+
});
|
|
24
|
+
const FilesPutArgsSchema = z.object({
|
|
25
|
+
projectSlug: z.string().optional(),
|
|
26
|
+
projectDir: z.string().optional(),
|
|
27
|
+
remotePath: z.string().min(1),
|
|
28
|
+
from: z.string().min(1),
|
|
29
|
+
json: z.boolean().default(false),
|
|
30
|
+
quiet: z.boolean().default(false),
|
|
31
|
+
});
|
|
32
|
+
const FilesDeleteArgsSchema = z.object({
|
|
33
|
+
projectSlug: z.string().optional(),
|
|
34
|
+
projectDir: z.string().optional(),
|
|
35
|
+
remotePath: z.string().min(1),
|
|
36
|
+
json: z.boolean().default(false),
|
|
37
|
+
quiet: z.boolean().default(false),
|
|
38
|
+
});
|
|
39
|
+
function getStringArg(args, ...keys) {
|
|
40
|
+
for (const key of keys) {
|
|
41
|
+
const value = args[key];
|
|
42
|
+
if (typeof value === "string" && value)
|
|
43
|
+
return value;
|
|
44
|
+
}
|
|
45
|
+
return undefined;
|
|
46
|
+
}
|
|
47
|
+
function getBooleanArg(args, ...keys) {
|
|
48
|
+
return keys.some((key) => Boolean(args[key]));
|
|
49
|
+
}
|
|
50
|
+
function printJson(value) {
|
|
51
|
+
console.log(JSON.stringify(value, null, 2));
|
|
52
|
+
}
|
|
53
|
+
function showFilesUsage() {
|
|
54
|
+
console.log(`
|
|
55
|
+
Veryfront Files
|
|
56
|
+
|
|
57
|
+
Usage:
|
|
58
|
+
veryfront files list [options]
|
|
59
|
+
veryfront files get <remote-path> [--output <local-file>] [options]
|
|
60
|
+
veryfront files put <remote-path> --from <local-file> [options]
|
|
61
|
+
veryfront files delete <remote-path> [options]
|
|
62
|
+
|
|
63
|
+
Subcommands:
|
|
64
|
+
list List project files
|
|
65
|
+
get Read a remote project file
|
|
66
|
+
put Upload a local file into the project files tree
|
|
67
|
+
delete Delete a remote project file
|
|
68
|
+
`);
|
|
69
|
+
}
|
|
70
|
+
function normalizeProjectFilePath(remotePath) {
|
|
71
|
+
const normalizedPath = normalize(remotePath).replace(/^\/+/, "");
|
|
72
|
+
if (!normalizedPath || normalizedPath.startsWith("..") || normalizedPath.startsWith("/")) {
|
|
73
|
+
throw new Error(`Invalid remote file path: ${remotePath}`);
|
|
74
|
+
}
|
|
75
|
+
return normalizedPath;
|
|
76
|
+
}
|
|
77
|
+
export function parseFilesListArgs(args) {
|
|
78
|
+
return FilesListArgsSchema.safeParse({
|
|
79
|
+
projectSlug: getStringArg(args, "project", "p", "project-slug"),
|
|
80
|
+
projectDir: getStringArg(args, "project-dir", "dir", "d"),
|
|
81
|
+
path: getStringArg(args, "path"),
|
|
82
|
+
json: getBooleanArg(args, "json", "j"),
|
|
83
|
+
quiet: getBooleanArg(args, "quiet", "q"),
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
export function parseFilesGetArgs(args) {
|
|
87
|
+
return FilesGetArgsSchema.safeParse({
|
|
88
|
+
projectSlug: getStringArg(args, "project", "p", "project-slug"),
|
|
89
|
+
projectDir: getStringArg(args, "project-dir", "dir", "d"),
|
|
90
|
+
remotePath: typeof args._[2] === "string" ? args._[2] : "",
|
|
91
|
+
output: getStringArg(args, "output", "o"),
|
|
92
|
+
json: getBooleanArg(args, "json", "j"),
|
|
93
|
+
quiet: getBooleanArg(args, "quiet", "q"),
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
export function parseFilesPutArgs(args) {
|
|
97
|
+
return FilesPutArgsSchema.safeParse({
|
|
98
|
+
projectSlug: getStringArg(args, "project", "p", "project-slug"),
|
|
99
|
+
projectDir: getStringArg(args, "project-dir", "dir", "d"),
|
|
100
|
+
remotePath: typeof args._[2] === "string" ? args._[2] : "",
|
|
101
|
+
from: getStringArg(args, "from") ?? "",
|
|
102
|
+
json: getBooleanArg(args, "json", "j"),
|
|
103
|
+
quiet: getBooleanArg(args, "quiet", "q"),
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
export function parseFilesDeleteArgs(args) {
|
|
107
|
+
return FilesDeleteArgsSchema.safeParse({
|
|
108
|
+
projectSlug: getStringArg(args, "project", "p", "project-slug"),
|
|
109
|
+
projectDir: getStringArg(args, "project-dir", "dir", "d"),
|
|
110
|
+
remotePath: typeof args._[2] === "string" ? args._[2] : "",
|
|
111
|
+
json: getBooleanArg(args, "json", "j"),
|
|
112
|
+
quiet: getBooleanArg(args, "quiet", "q"),
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
export function buildRemoteFileUrl(projectSlug, remotePath) {
|
|
116
|
+
const normalizedPath = normalizeProjectFilePath(remotePath);
|
|
117
|
+
return `/projects/${projectSlug}/files/${encodeURIComponent(normalizedPath)}`;
|
|
118
|
+
}
|
|
119
|
+
export async function listRemoteFiles(client, projectSlug, options = {}) {
|
|
120
|
+
const files = await listAllFiles(client, projectSlug, MAIN_SOURCE);
|
|
121
|
+
if (!options.path)
|
|
122
|
+
return files;
|
|
123
|
+
return files.filter((file) => file.path.startsWith(options.path));
|
|
124
|
+
}
|
|
125
|
+
export async function getRemoteFile(client, projectSlug, remotePath) {
|
|
126
|
+
return getFileContent(client, projectSlug, normalizeProjectFilePath(remotePath), MAIN_SOURCE);
|
|
127
|
+
}
|
|
128
|
+
export async function putRemoteFileFromLocal(client, projectSlug, remotePath, localPath) {
|
|
129
|
+
const fs = createFileSystem();
|
|
130
|
+
const content = await fs.readTextFile(localPath);
|
|
131
|
+
const result = await client.put(buildRemoteFileUrl(projectSlug, remotePath), {
|
|
132
|
+
content,
|
|
133
|
+
});
|
|
134
|
+
return { path: result.path ?? normalizeProjectFilePath(remotePath) };
|
|
135
|
+
}
|
|
136
|
+
export async function deleteRemoteFile(client, projectSlug, remotePath) {
|
|
137
|
+
await client.delete(buildRemoteFileUrl(projectSlug, remotePath));
|
|
138
|
+
}
|
|
139
|
+
export async function filesCommand(args) {
|
|
140
|
+
const subcommand = typeof args._[1] === "string" ? args._[1] : undefined;
|
|
141
|
+
if (!subcommand || subcommand === "help") {
|
|
142
|
+
showFilesUsage();
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
await withSpan("cli.command.files", async () => {
|
|
146
|
+
switch (subcommand) {
|
|
147
|
+
case "list": {
|
|
148
|
+
const parsed = parseFilesListArgs(args);
|
|
149
|
+
if (!parsed.success) {
|
|
150
|
+
throw new Error(`Invalid files list arguments: ${parsed.error.message}`);
|
|
151
|
+
}
|
|
152
|
+
const options = parsed.data;
|
|
153
|
+
let config = await resolveConfigWithAuth(options.projectDir);
|
|
154
|
+
if (options.projectSlug)
|
|
155
|
+
config = { ...config, projectSlug: options.projectSlug };
|
|
156
|
+
const client = createApiClient(config);
|
|
157
|
+
const files = await listRemoteFiles(client, config.projectSlug, options);
|
|
158
|
+
if (options.json) {
|
|
159
|
+
printJson(files);
|
|
160
|
+
return;
|
|
161
|
+
}
|
|
162
|
+
if (!files.length) {
|
|
163
|
+
cliLogger.info("No files found.");
|
|
164
|
+
return;
|
|
165
|
+
}
|
|
166
|
+
for (const file of files) {
|
|
167
|
+
console.log(file.path);
|
|
168
|
+
}
|
|
169
|
+
return;
|
|
170
|
+
}
|
|
171
|
+
case "get": {
|
|
172
|
+
const parsed = parseFilesGetArgs(args);
|
|
173
|
+
if (!parsed.success) {
|
|
174
|
+
throw new Error(`Invalid files get arguments: ${parsed.error.message}`);
|
|
175
|
+
}
|
|
176
|
+
const options = parsed.data;
|
|
177
|
+
let config = await resolveConfigWithAuth(options.projectDir);
|
|
178
|
+
if (options.projectSlug)
|
|
179
|
+
config = { ...config, projectSlug: options.projectSlug };
|
|
180
|
+
const client = createApiClient(config);
|
|
181
|
+
const content = await getRemoteFile(client, config.projectSlug, options.remotePath);
|
|
182
|
+
if (options.output) {
|
|
183
|
+
const fs = createFileSystem();
|
|
184
|
+
await fs.mkdir(dirname(options.output), { recursive: true });
|
|
185
|
+
await fs.writeTextFile(options.output, content);
|
|
186
|
+
if (options.json) {
|
|
187
|
+
printJson({
|
|
188
|
+
path: normalizeProjectFilePath(options.remotePath),
|
|
189
|
+
output: options.output,
|
|
190
|
+
});
|
|
191
|
+
return;
|
|
192
|
+
}
|
|
193
|
+
if (!options.quiet) {
|
|
194
|
+
cliLogger.info(`Downloaded ${normalizeProjectFilePath(options.remotePath)} -> ${options.output}`);
|
|
195
|
+
}
|
|
196
|
+
return;
|
|
197
|
+
}
|
|
198
|
+
if (options.json) {
|
|
199
|
+
printJson({ path: normalizeProjectFilePath(options.remotePath), content });
|
|
200
|
+
return;
|
|
201
|
+
}
|
|
202
|
+
console.log(content);
|
|
203
|
+
return;
|
|
204
|
+
}
|
|
205
|
+
case "put": {
|
|
206
|
+
const parsed = parseFilesPutArgs(args);
|
|
207
|
+
if (!parsed.success) {
|
|
208
|
+
throw new Error(`Invalid files put arguments: ${parsed.error.message}`);
|
|
209
|
+
}
|
|
210
|
+
const options = parsed.data;
|
|
211
|
+
let config = await resolveConfigWithAuth(options.projectDir);
|
|
212
|
+
if (options.projectSlug)
|
|
213
|
+
config = { ...config, projectSlug: options.projectSlug };
|
|
214
|
+
const client = createApiClient(config);
|
|
215
|
+
const result = await putRemoteFileFromLocal(client, config.projectSlug, options.remotePath, options.from);
|
|
216
|
+
if (options.json) {
|
|
217
|
+
printJson(result);
|
|
218
|
+
return;
|
|
219
|
+
}
|
|
220
|
+
if (!options.quiet) {
|
|
221
|
+
cliLogger.info(`Uploaded ${options.from} -> ${result.path}`);
|
|
222
|
+
}
|
|
223
|
+
return;
|
|
224
|
+
}
|
|
225
|
+
case "delete":
|
|
226
|
+
case "rm": {
|
|
227
|
+
const parsed = parseFilesDeleteArgs(args);
|
|
228
|
+
if (!parsed.success) {
|
|
229
|
+
throw new Error(`Invalid files delete arguments: ${parsed.error.message}`);
|
|
230
|
+
}
|
|
231
|
+
const options = parsed.data;
|
|
232
|
+
let config = await resolveConfigWithAuth(options.projectDir);
|
|
233
|
+
if (options.projectSlug)
|
|
234
|
+
config = { ...config, projectSlug: options.projectSlug };
|
|
235
|
+
const client = createApiClient(config);
|
|
236
|
+
await deleteRemoteFile(client, config.projectSlug, options.remotePath);
|
|
237
|
+
if (options.json) {
|
|
238
|
+
printJson({ success: true, path: normalizeProjectFilePath(options.remotePath) });
|
|
239
|
+
return;
|
|
240
|
+
}
|
|
241
|
+
if (!options.quiet) {
|
|
242
|
+
cliLogger.info(`Deleted ${normalizeProjectFilePath(options.remotePath)}`);
|
|
243
|
+
}
|
|
244
|
+
return;
|
|
245
|
+
}
|
|
246
|
+
default:
|
|
247
|
+
showFilesUsage();
|
|
248
|
+
}
|
|
249
|
+
});
|
|
250
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/files/handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAGxD,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAExE"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { buildRemoteFileUrl, deleteRemoteFile, filesCommand, getRemoteFile, listRemoteFiles, parseFilesDeleteArgs, parseFilesGetArgs, parseFilesListArgs, parseFilesPutArgs, putRemoteFileFromLocal, } from "./command.js";
|
|
2
|
+
export type { FilesDeleteOptions, FilesGetOptions, FilesListOptions, FilesPutOptions, } from "./command.js";
|
|
3
|
+
export { handleFilesCommand } from "./handler.js";
|
|
4
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/files/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,YAAY,EACZ,aAAa,EACb,eAAe,EACf,oBAAoB,EACpB,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,sBAAsB,GACvB,MAAM,cAAc,CAAC;AACtB,YAAY,EACV,kBAAkB,EAClB,eAAe,EACf,gBAAgB,EAChB,eAAe,GAChB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command-help.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/knowledge/command-help.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEvD,eAAO,MAAM,aAAa,EAAE,WAqC3B,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
export const knowledgeHelp = {
|
|
2
|
+
name: "knowledge",
|
|
3
|
+
description: "Ingest documents into the project knowledge base",
|
|
4
|
+
usage: "veryfront knowledge ingest <source> [options]",
|
|
5
|
+
options: [
|
|
6
|
+
{
|
|
7
|
+
flag: "--project, -p <slug>",
|
|
8
|
+
description: "Project slug override (otherwise inferred from env/config)",
|
|
9
|
+
},
|
|
10
|
+
{
|
|
11
|
+
flag: "--path <prefix>",
|
|
12
|
+
description: "Upload prefix or local directory used with --all",
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
flag: "--all",
|
|
16
|
+
description: "Ingest all files under the given --path prefix or directory",
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
flag: "--recursive",
|
|
20
|
+
description: "Recurse into subdirectories for local directory ingestion",
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
flag: "--json, -j",
|
|
24
|
+
description: "Output machine-readable JSON",
|
|
25
|
+
},
|
|
26
|
+
],
|
|
27
|
+
examples: [
|
|
28
|
+
"veryfront knowledge ingest uploads/contracts/q1.pdf --json",
|
|
29
|
+
"veryfront knowledge ingest /workspace/uploads/q1.pdf --json",
|
|
30
|
+
"veryfront knowledge ingest --path uploads/ --all --json",
|
|
31
|
+
],
|
|
32
|
+
notes: [
|
|
33
|
+
"Primary subcommand: ingest",
|
|
34
|
+
"`uploads/...` means a remote project upload; use `./uploads/...` or `/workspace/uploads/...` to force a local file",
|
|
35
|
+
"`ingest` orchestrates upload resolution, parsing, and project file writes",
|
|
36
|
+
"Requires python3; non-text formats also require the supported parser packages unless you run inside the Veryfront sandbox",
|
|
37
|
+
],
|
|
38
|
+
};
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { type ApiClient } from "../../shared/config.js";
|
|
3
|
+
import type { ParsedArgs } from "../../shared/types.js";
|
|
4
|
+
export interface KnowledgeParserResult {
|
|
5
|
+
success: true;
|
|
6
|
+
source_path: string;
|
|
7
|
+
source_filename: string;
|
|
8
|
+
source_type: string;
|
|
9
|
+
slug: string;
|
|
10
|
+
sandbox_output_path: string;
|
|
11
|
+
suggested_project_path: string;
|
|
12
|
+
description: string;
|
|
13
|
+
title: string;
|
|
14
|
+
summary: string;
|
|
15
|
+
stats: Record<string, unknown>;
|
|
16
|
+
warnings: string[];
|
|
17
|
+
}
|
|
18
|
+
export interface KnowledgeIngestFileResult {
|
|
19
|
+
source: string;
|
|
20
|
+
localSourcePath: string;
|
|
21
|
+
outputPath: string;
|
|
22
|
+
remotePath: string;
|
|
23
|
+
slug: string;
|
|
24
|
+
sourceType: string;
|
|
25
|
+
summary: string;
|
|
26
|
+
stats: Record<string, unknown>;
|
|
27
|
+
warnings: string[];
|
|
28
|
+
}
|
|
29
|
+
type KnowledgeSource = {
|
|
30
|
+
kind: "local";
|
|
31
|
+
input: string;
|
|
32
|
+
localPath: string;
|
|
33
|
+
} | {
|
|
34
|
+
kind: "upload";
|
|
35
|
+
input: string;
|
|
36
|
+
uploadPath: string;
|
|
37
|
+
localPath: string;
|
|
38
|
+
};
|
|
39
|
+
type DownloadResult = {
|
|
40
|
+
uploadPath: string;
|
|
41
|
+
localPath: string;
|
|
42
|
+
bytes?: number;
|
|
43
|
+
};
|
|
44
|
+
declare const KnowledgeIngestArgsSchema: z.ZodObject<{
|
|
45
|
+
projectSlug: z.ZodOptional<z.ZodString>;
|
|
46
|
+
projectDir: z.ZodOptional<z.ZodString>;
|
|
47
|
+
source: z.ZodOptional<z.ZodString>;
|
|
48
|
+
path: z.ZodOptional<z.ZodString>;
|
|
49
|
+
all: z.ZodDefault<z.ZodBoolean>;
|
|
50
|
+
recursive: z.ZodDefault<z.ZodBoolean>;
|
|
51
|
+
outputDir: z.ZodOptional<z.ZodString>;
|
|
52
|
+
knowledgePath: z.ZodDefault<z.ZodString>;
|
|
53
|
+
description: z.ZodOptional<z.ZodString>;
|
|
54
|
+
slug: z.ZodOptional<z.ZodString>;
|
|
55
|
+
json: z.ZodDefault<z.ZodBoolean>;
|
|
56
|
+
quiet: z.ZodDefault<z.ZodBoolean>;
|
|
57
|
+
}, "strip", z.ZodTypeAny, {
|
|
58
|
+
json: boolean;
|
|
59
|
+
recursive: boolean;
|
|
60
|
+
all: boolean;
|
|
61
|
+
quiet: boolean;
|
|
62
|
+
knowledgePath: string;
|
|
63
|
+
path?: string | undefined;
|
|
64
|
+
projectSlug?: string | undefined;
|
|
65
|
+
description?: string | undefined;
|
|
66
|
+
outputDir?: string | undefined;
|
|
67
|
+
projectDir?: string | undefined;
|
|
68
|
+
slug?: string | undefined;
|
|
69
|
+
source?: string | undefined;
|
|
70
|
+
}, {
|
|
71
|
+
path?: string | undefined;
|
|
72
|
+
projectSlug?: string | undefined;
|
|
73
|
+
description?: string | undefined;
|
|
74
|
+
outputDir?: string | undefined;
|
|
75
|
+
json?: boolean | undefined;
|
|
76
|
+
recursive?: boolean | undefined;
|
|
77
|
+
projectDir?: string | undefined;
|
|
78
|
+
slug?: string | undefined;
|
|
79
|
+
all?: boolean | undefined;
|
|
80
|
+
source?: string | undefined;
|
|
81
|
+
quiet?: boolean | undefined;
|
|
82
|
+
knowledgePath?: string | undefined;
|
|
83
|
+
}>;
|
|
84
|
+
export type KnowledgeIngestOptions = z.infer<typeof KnowledgeIngestArgsSchema>;
|
|
85
|
+
export declare function parseKnowledgeIngestArgs(args: ParsedArgs): z.SafeParseReturnType<unknown, KnowledgeIngestOptions>;
|
|
86
|
+
export declare function normalizeKnowledgeInputPath(inputPath: string): string;
|
|
87
|
+
export declare function normalizeProjectUploadPath(inputPath: string): string;
|
|
88
|
+
export declare function formatKnowledgeUploadSource(uploadPath: string): string;
|
|
89
|
+
export declare function isLikelyLocalPath(value: string): boolean;
|
|
90
|
+
export declare function resolveKnowledgeDownloadOutputDir(outputDir: string): string;
|
|
91
|
+
export declare function deriveKnowledgeRemotePath(outputPath: string, outputDir: string, knowledgePath: string): string;
|
|
92
|
+
export declare function createKnowledgeIngestResult(input: {
|
|
93
|
+
source: string;
|
|
94
|
+
localSourcePath: string;
|
|
95
|
+
outputPath: string;
|
|
96
|
+
remotePath: string;
|
|
97
|
+
parser: Pick<KnowledgeParserResult, "slug" | "stats" | "warnings" | "source_type" | "summary">;
|
|
98
|
+
}): KnowledgeIngestFileResult;
|
|
99
|
+
export declare function runKnowledgeParser(input: {
|
|
100
|
+
filePath: string;
|
|
101
|
+
outputDir: string;
|
|
102
|
+
description?: string;
|
|
103
|
+
slug?: string;
|
|
104
|
+
sourceReference?: string;
|
|
105
|
+
}): Promise<KnowledgeParserResult>;
|
|
106
|
+
export declare function collectKnowledgeSources(options: Pick<KnowledgeIngestOptions, "source" | "path" | "all" | "recursive">, deps: {
|
|
107
|
+
client: ApiClient;
|
|
108
|
+
projectSlug: string;
|
|
109
|
+
downloadUploads: (uploadPaths: string[]) => Promise<DownloadResult[]>;
|
|
110
|
+
}): Promise<KnowledgeSource[]>;
|
|
111
|
+
export declare function ingestResolvedSources(sources: KnowledgeSource[], options: KnowledgeIngestOptions, deps: {
|
|
112
|
+
client: ApiClient;
|
|
113
|
+
projectSlug: string;
|
|
114
|
+
outputDir: string;
|
|
115
|
+
runParser: typeof runKnowledgeParser;
|
|
116
|
+
uploadKnowledgeFile: (remotePath: string, localPath: string) => Promise<{
|
|
117
|
+
path: string;
|
|
118
|
+
}>;
|
|
119
|
+
}): Promise<KnowledgeIngestFileResult[]>;
|
|
120
|
+
export declare function knowledgeCommand(args: ParsedArgs): Promise<void>;
|
|
121
|
+
export {};
|
|
122
|
+
//# sourceMappingURL=command.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/knowledge/command.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,OAAO,EAAE,KAAK,SAAS,EAA0C,MAAM,wBAAwB,CAAC;AAChG,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAqBxD,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,IAAI,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,mBAAmB,EAAE,MAAM,CAAC;IAC5B,sBAAsB,EAAE,MAAM,CAAC;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,yBAAyB;IACxC,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,KAAK,eAAe,GAChB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GACnD;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC;AAE7E,KAAK,cAAc,GAAG;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAEhF,QAAA,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAa7B,CAAC;AAEH,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AA+B/E,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,UAAU,GACf,CAAC,CAAC,mBAAmB,CAAC,OAAO,EAAE,sBAAsB,CAAC,CAexD;AAED,wBAAgB,2BAA2B,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAMrE;AAED,wBAAgB,0BAA0B,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAGpE;AAED,wBAAgB,2BAA2B,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAKtE;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAGxD;AAoBD,wBAAgB,iCAAiC,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAE3E;AAgED,wBAAgB,yBAAyB,CACvC,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,MAAM,GACpB,MAAM,CAQR;AAED,wBAAgB,2BAA2B,CAAC,KAAK,EAAE;IACjD,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,IAAI,CAAC,qBAAqB,EAAE,MAAM,GAAG,OAAO,GAAG,UAAU,GAAG,aAAa,GAAG,SAAS,CAAC,CAAC;CAChG,GAAG,yBAAyB,CAY5B;AAED,wBAAsB,kBAAkB,CAAC,KAAK,EAAE;IAC9C,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,GAAG,OAAO,CAAC,qBAAqB,CAAC,CA6CjC;AAED,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,IAAI,CAAC,sBAAsB,EAAE,QAAQ,GAAG,MAAM,GAAG,KAAK,GAAG,WAAW,CAAC,EAC9E,IAAI,EAAE;IACJ,MAAM,EAAE,SAAS,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;CACvE,GACA,OAAO,CAAC,eAAe,EAAE,CAAC,CAmE5B;AAED,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,eAAe,EAAE,EAC1B,OAAO,EAAE,sBAAsB,EAC/B,IAAI,EAAE;IACJ,MAAM,EAAE,SAAS,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,OAAO,kBAAkB,CAAC;IACrC,mBAAmB,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC3F,GACA,OAAO,CAAC,yBAAyB,EAAE,CAAC,CA8BtC;AAED,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAwEtE"}
|