@cogenta/cli 0.3.0 → 0.6.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/CHANGELOG.md +3856 -0
- package/dist/admin-assets/assets/index-CxZHGwVA.css +1 -0
- package/dist/admin-assets/assets/index-fYXyHpn8.js +1090 -0
- package/dist/admin-assets/assets/vips-_dmTUXFO.wasm +0 -0
- package/dist/admin-assets/assets/vips-es6-DrQTTS8Q.js +7 -0
- package/dist/admin-assets/branding/logo-cogenta-dark.png +0 -0
- package/dist/admin-assets/branding/logo-cogenta-icon.png +0 -0
- package/dist/admin-assets/branding/logo-cogenta-light.png +0 -0
- package/dist/admin-assets/branding/logo-cogenta-small.png +0 -0
- package/dist/admin-assets/branding/logo-cogenta-transparent.png +0 -0
- package/dist/admin-assets/branding/logo-cogenta.png +0 -0
- package/dist/admin-assets/favicon.png +0 -0
- package/dist/admin-assets/fonts/ibm-plex-mono-400.woff2 +0 -0
- package/dist/admin-assets/fonts/ibm-plex-mono-500.woff2 +0 -0
- package/dist/admin-assets/fonts/ibm-plex-mono-600.woff2 +0 -0
- package/dist/admin-assets/fonts/ibm-plex-mono-700.woff2 +0 -0
- package/dist/admin-assets/fonts/ibm-plex-sans-var.woff2 +0 -0
- package/dist/admin-assets/fonts/jetbrains-mono-var.woff2 +0 -0
- package/dist/admin-assets/fonts/space-grotesk-var.woff2 +0 -0
- package/dist/admin-assets/index.html +3 -2
- package/dist/bin.js +6 -0
- package/dist/bin.js.map +1 -1
- package/dist/commands/admin-assets.d.ts +1 -0
- package/dist/commands/admin-assets.d.ts.map +1 -1
- package/dist/commands/admin-assets.js +19 -1
- package/dist/commands/admin-assets.js.map +1 -1
- package/dist/commands/agent-runtime.d.ts +151 -0
- package/dist/commands/agent-runtime.d.ts.map +1 -0
- package/dist/commands/agent-runtime.js +519 -0
- package/dist/commands/agent-runtime.js.map +1 -0
- package/dist/commands/assistant.d.ts +89 -3
- package/dist/commands/assistant.d.ts.map +1 -1
- package/dist/commands/assistant.js +206 -39
- package/dist/commands/assistant.js.map +1 -1
- package/dist/commands/audit-integrity-alert.d.ts +23 -0
- package/dist/commands/audit-integrity-alert.d.ts.map +1 -0
- package/dist/commands/audit-integrity-alert.js +33 -0
- package/dist/commands/audit-integrity-alert.js.map +1 -0
- package/dist/commands/backup.d.ts +78 -0
- package/dist/commands/backup.d.ts.map +1 -0
- package/dist/commands/backup.js +238 -0
- package/dist/commands/backup.js.map +1 -0
- package/dist/commands/channels.d.ts +47 -0
- package/dist/commands/channels.d.ts.map +1 -0
- package/dist/commands/channels.js +277 -0
- package/dist/commands/channels.js.map +1 -0
- package/dist/commands/default-logo.d.ts +27 -0
- package/dist/commands/default-logo.d.ts.map +1 -0
- package/dist/commands/default-logo.js +30 -0
- package/dist/commands/default-logo.js.map +1 -0
- package/dist/commands/doctor.d.ts +5 -1
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +74 -2
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/export.d.ts +22 -0
- package/dist/commands/export.d.ts.map +1 -0
- package/dist/commands/export.js +182 -0
- package/dist/commands/export.js.map +1 -0
- package/dist/commands/forms-page.d.ts +75 -0
- package/dist/commands/forms-page.d.ts.map +1 -0
- package/dist/commands/forms-page.js +191 -0
- package/dist/commands/forms-page.js.map +1 -0
- package/dist/commands/import.d.ts.map +1 -1
- package/dist/commands/import.js +13 -1
- package/dist/commands/import.js.map +1 -1
- package/dist/commands/mcp.d.ts +35 -0
- package/dist/commands/mcp.d.ts.map +1 -0
- package/dist/commands/mcp.js +277 -0
- package/dist/commands/mcp.js.map +1 -0
- package/dist/commands/roles.d.ts +22 -0
- package/dist/commands/roles.d.ts.map +1 -0
- package/dist/commands/roles.js +79 -0
- package/dist/commands/roles.js.map +1 -0
- package/dist/commands/search-page.d.ts +15 -0
- package/dist/commands/search-page.d.ts.map +1 -1
- package/dist/commands/search-page.js +22 -16
- package/dist/commands/search-page.js.map +1 -1
- package/dist/commands/seo.d.ts +92 -4
- package/dist/commands/seo.d.ts.map +1 -1
- package/dist/commands/seo.js +168 -4
- package/dist/commands/seo.js.map +1 -1
- package/dist/commands/serve.d.ts +489 -6
- package/dist/commands/serve.d.ts.map +1 -1
- package/dist/commands/serve.js +3883 -164
- package/dist/commands/serve.js.map +1 -1
- package/dist/commands/site-plan.d.ts +27 -1
- package/dist/commands/site-plan.d.ts.map +1 -1
- package/dist/commands/site-plan.js +71 -4
- package/dist/commands/site-plan.js.map +1 -1
- package/dist/commands/term-archive-page.d.ts +94 -0
- package/dist/commands/term-archive-page.d.ts.map +1 -0
- package/dist/commands/term-archive-page.js +195 -0
- package/dist/commands/term-archive-page.js.map +1 -0
- package/dist/commands/theme-css.d.ts +22 -7
- package/dist/commands/theme-css.d.ts.map +1 -1
- package/dist/commands/theme-css.js +33 -8
- package/dist/commands/theme-css.js.map +1 -1
- package/dist/commands/theme-registry.d.ts +94 -0
- package/dist/commands/theme-registry.d.ts.map +1 -0
- package/dist/commands/theme-registry.js +130 -0
- package/dist/commands/theme-registry.js.map +1 -0
- package/dist/commands/theme-render.d.ts +360 -2
- package/dist/commands/theme-render.d.ts.map +1 -1
- package/dist/commands/theme-render.js +984 -29
- package/dist/commands/theme-render.js.map +1 -1
- package/dist/commands/theme-wiring.d.ts +107 -0
- package/dist/commands/theme-wiring.d.ts.map +1 -0
- package/dist/commands/theme-wiring.js +295 -0
- package/dist/commands/theme-wiring.js.map +1 -0
- package/dist/commands/tools.d.ts +71 -0
- package/dist/commands/tools.d.ts.map +1 -0
- package/dist/commands/tools.js +330 -0
- package/dist/commands/tools.js.map +1 -0
- package/dist/commands/update.d.ts +25 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +193 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/commands/users.d.ts.map +1 -1
- package/dist/commands/users.js +6 -36
- package/dist/commands/users.js.map +1 -1
- package/dist/index.d.ts +15 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +146 -4
- package/dist/index.js.map +1 -1
- package/dist/invite-mail.d.ts +39 -0
- package/dist/invite-mail.d.ts.map +1 -0
- package/dist/invite-mail.js +39 -0
- package/dist/invite-mail.js.map +1 -0
- package/dist/reset-mail.d.ts +39 -0
- package/dist/reset-mail.d.ts.map +1 -0
- package/dist/reset-mail.js +45 -0
- package/dist/reset-mail.js.map +1 -0
- package/dist/update/apply.d.ts +54 -0
- package/dist/update/apply.d.ts.map +1 -0
- package/dist/update/apply.js +77 -0
- package/dist/update/apply.js.map +1 -0
- package/dist/update/changelog-risk.d.ts +20 -0
- package/dist/update/changelog-risk.d.ts.map +1 -0
- package/dist/update/changelog-risk.js +55 -0
- package/dist/update/changelog-risk.js.map +1 -0
- package/dist/update/check.d.ts +60 -0
- package/dist/update/check.d.ts.map +1 -0
- package/dist/update/check.js +56 -0
- package/dist/update/check.js.map +1 -0
- package/dist/update/contract-risk.d.ts +55 -0
- package/dist/update/contract-risk.d.ts.map +1 -0
- package/dist/update/contract-risk.js +75 -0
- package/dist/update/contract-risk.js.map +1 -0
- package/dist/update/history.d.ts +30 -0
- package/dist/update/history.d.ts.map +1 -0
- package/dist/update/history.js +38 -0
- package/dist/update/history.js.map +1 -0
- package/dist/update/index.d.ts +28 -0
- package/dist/update/index.d.ts.map +1 -0
- package/dist/update/index.js +11 -0
- package/dist/update/index.js.map +1 -0
- package/dist/update/list-restore-points.d.ts +20 -0
- package/dist/update/list-restore-points.d.ts.map +1 -0
- package/dist/update/list-restore-points.js +35 -0
- package/dist/update/list-restore-points.js.map +1 -0
- package/dist/update/npm-registry.d.ts +11 -0
- package/dist/update/npm-registry.d.ts.map +1 -0
- package/dist/update/npm-registry.js +74 -0
- package/dist/update/npm-registry.js.map +1 -0
- package/dist/update/restore-point.d.ts +26 -0
- package/dist/update/restore-point.d.ts.map +1 -0
- package/dist/update/restore-point.js +23 -0
- package/dist/update/restore-point.js.map +1 -0
- package/dist/update/tar.d.ts +27 -0
- package/dist/update/tar.d.ts.map +1 -0
- package/dist/update/tar.js +56 -0
- package/dist/update/tar.js.map +1 -0
- package/dist/update/version-compare.d.ts +17 -0
- package/dist/update/version-compare.d.ts.map +1 -0
- package/dist/update/version-compare.js +42 -0
- package/dist/update/version-compare.js.map +1 -0
- package/dist/version.d.ts +13 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +18 -0
- package/dist/version.js.map +1 -0
- package/package.json +33 -13
- package/dist/admin-assets/assets/index-Buwdj1V2.js +0 -71
- package/dist/admin-assets/assets/index-Csef0SiA.css +0 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { type AssistToolset, type EmbeddingProvider, type SemanticSearch, type VectorStore } from '@cogenta/agents';
|
|
2
|
-
import type
|
|
3
|
-
import type { CollectionDefinition, ContentStore, SearchDriver } from '@cogenta/schema';
|
|
1
|
+
import { type AssistToolset, type EmbeddingProvider, type PromptTemplateStore, type ReferenceDocumentRecord, type SemanticSearch, type VectorStore } from '@cogenta/agents';
|
|
2
|
+
import { type CogentaConfig, type DatabaseHandle, type Logger } from '@cogenta/core';
|
|
3
|
+
import type { CollectionDefinition, ContentStore, SearchDriver, SiteSettingsStore } from '@cogenta/schema';
|
|
4
4
|
/**
|
|
5
5
|
* Where L18 is actually wired into a running site.
|
|
6
6
|
*
|
|
@@ -16,6 +16,49 @@ import type { CollectionDefinition, ContentStore, SearchDriver } from '@cogenta/
|
|
|
16
16
|
* not a refusal to start. Nothing in this file can prevent `cogenta serve` from
|
|
17
17
|
* serving a site (R2).
|
|
18
18
|
*/
|
|
19
|
+
/** One collection's place in the vector index — L22 task 4's "quelles collections, activable/désactivable par collection". */
|
|
20
|
+
export interface AssistantIndexedCollection {
|
|
21
|
+
readonly name: string;
|
|
22
|
+
/** `false` when an operator has explicitly excluded this collection (`assistant.indexedCollections`) — the explicit ask being able to turn off e.g. published articles. Absent from the setting means enabled: an install that has never touched this toggle indexes everything, as it always has. */
|
|
23
|
+
readonly enabled: boolean;
|
|
24
|
+
/** How many chunks of this collection are in the index right now — independent of `enabled`, since a toggle flipped off leaves old chunks in place until a reindex (`cogenta serve`'s "Reindex vectors" tool) sweeps them out. */
|
|
25
|
+
readonly count: number;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* What the vector index looks like right now — fiche 30 task 6, "l'index
|
|
29
|
+
* vectoriel est invisible", widened by L22 task 4 to explain *what is in it*
|
|
30
|
+
* rather than only how big it is. `count`/`lastIndexedAt`/`collections` are
|
|
31
|
+
* read on demand, never cached beyond the process, so the admin panel is
|
|
32
|
+
* never stale by more than one request.
|
|
33
|
+
*/
|
|
34
|
+
export interface AssistantVectorInfo {
|
|
35
|
+
readonly driver: string;
|
|
36
|
+
readonly dimensions: number;
|
|
37
|
+
count(): Promise<number>;
|
|
38
|
+
lastIndexedAt(): string | null;
|
|
39
|
+
/** `withVectorIndexing` calls this after each successful write — not exported for anything else to call. */
|
|
40
|
+
noteIndexed(): void;
|
|
41
|
+
/** Every content collection this site has, each with its toggle state and its current chunk count. */
|
|
42
|
+
collections(): Promise<readonly AssistantIndexedCollection[]>;
|
|
43
|
+
/** The reserved pseudo-collection name uploaded reference documents are stored under — `assist.chat`'s `collections` input names it to retrieve them. Exposed so the admin never has to hard-code it. */
|
|
44
|
+
readonly referenceCollection: string;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* The document upload flow, L22 task 4 — wired onto the existing
|
|
48
|
+
* `document.extract_text` → `chunkDocument` → `EmbeddingProvider.embed`
|
|
49
|
+
* pipeline (L19/L18) rather than a second one. Absent under exactly the
|
|
50
|
+
* condition `vectors` is: no embedder, nothing to embed an upload into.
|
|
51
|
+
*/
|
|
52
|
+
export interface AssistantDocumentService {
|
|
53
|
+
list(): Promise<readonly ReferenceDocumentRecord[]>;
|
|
54
|
+
/** Extracts, chunks, embeds and stores one document; never throws on a bad upload — the returned record's own `status`/`errorMessage` says what happened. */
|
|
55
|
+
upload(input: {
|
|
56
|
+
readonly filename: string;
|
|
57
|
+
readonly bytes: Buffer;
|
|
58
|
+
readonly uploadedBy: string | null;
|
|
59
|
+
}): Promise<ReferenceDocumentRecord>;
|
|
60
|
+
remove(id: string): Promise<void>;
|
|
61
|
+
}
|
|
19
62
|
export interface AssistantAssembly {
|
|
20
63
|
readonly toolset: AssistToolset;
|
|
21
64
|
/** Absent when semantic search is not available on this site. */
|
|
@@ -24,7 +67,13 @@ export interface AssistantAssembly {
|
|
|
24
67
|
readonly vectors?: {
|
|
25
68
|
readonly store: VectorStore;
|
|
26
69
|
readonly embeddings: EmbeddingProvider;
|
|
70
|
+
/** Reads live, per collection, whether it belongs in the index — shared by the write path (`withVectorIndexing`) and the bulk "Reindex vectors" tool, so both honour the same toggle. */
|
|
71
|
+
readonly isEnabled: (collectionName: string) => Promise<boolean>;
|
|
27
72
|
};
|
|
73
|
+
/** Absent when there is no vector store at all — same condition as `vectors`, but the toolset already has its own view of driver/dimensions so this is not derived from it. */
|
|
74
|
+
readonly vectorInfo?: AssistantVectorInfo;
|
|
75
|
+
/** Absent under the same condition as `vectors` — nothing to embed an uploaded document into. */
|
|
76
|
+
readonly documents?: AssistantDocumentService;
|
|
28
77
|
/** What `cogenta serve` prints on startup. Always truthful about what is off. */
|
|
29
78
|
readonly summary: string;
|
|
30
79
|
dispose(): Promise<void>;
|
|
@@ -35,7 +84,20 @@ export interface BuildAssistantOptions {
|
|
|
35
84
|
readonly logger: Logger;
|
|
36
85
|
/** L10's full-text index, fused with the vector half rather than replaced by it. */
|
|
37
86
|
readonly fullText?: SearchDriver;
|
|
87
|
+
/** Every content collection this site declares — needed to report per-collection index state (L22 task 4). */
|
|
88
|
+
readonly collections: readonly CollectionDefinition[];
|
|
89
|
+
/** Backs the `assistant.indexedCollections` per-collection toggle and identifies the site for reference-document rows. */
|
|
90
|
+
readonly settings: SiteSettingsStore;
|
|
91
|
+
readonly siteId: string;
|
|
92
|
+
/** Fiche 45 — shared with `buildAgentRuntime`'s own instance over the same on-disk directory. Absent means every `assist.*` tool keeps its hard-coded instruction text, unchanged (R2/fiche 45 §4). */
|
|
93
|
+
readonly promptTemplates?: PromptTemplateStore;
|
|
38
94
|
}
|
|
95
|
+
/**
|
|
96
|
+
* Reads the live toggle for one collection. Exported so `cogenta serve`'s
|
|
97
|
+
* "Reindex vectors" tool body (`tools.ts`) can honour the exact same
|
|
98
|
+
* predicate the write path uses, rather than a second copy of this read.
|
|
99
|
+
*/
|
|
100
|
+
export declare function isAssistantCollectionEnabled(settings: SiteSettingsStore, collectionName: string): Promise<boolean>;
|
|
39
101
|
export declare function buildAssistant(options: BuildAssistantOptions): Promise<AssistantAssembly>;
|
|
40
102
|
/**
|
|
41
103
|
* Keeps the vector index in step with the content, by wrapping the store.
|
|
@@ -60,6 +122,30 @@ export interface VectorIndexingOptions {
|
|
|
60
122
|
readonly store: VectorStore;
|
|
61
123
|
readonly embeddings: EmbeddingProvider;
|
|
62
124
|
readonly onError?: (error: unknown) => void;
|
|
125
|
+
/** Fiche 30 task 6's "dernière indexation" — called once per successful reindex (upsert or removal alike), never on failure. */
|
|
126
|
+
readonly onIndexed?: () => void;
|
|
127
|
+
/**
|
|
128
|
+
* L22 task 4's per-collection toggle. Read live on every write and by the
|
|
129
|
+
* bulk "Reindex vectors" tool — never cached, so a toggle flipped from the
|
|
130
|
+
* admin takes effect on the very next save without a restart. Absent means
|
|
131
|
+
* "always enabled", which keeps every site that predates this toggle
|
|
132
|
+
* indexing exactly as it always has.
|
|
133
|
+
*/
|
|
134
|
+
readonly isEnabled?: (collectionName: string) => Promise<boolean>;
|
|
63
135
|
}
|
|
136
|
+
/**
|
|
137
|
+
* Re-derives the indexed vector chunk(s) for one entry. Exported so a full
|
|
138
|
+
* rebuild (`reindexAllVectors`, and the "Reindex vectors" tool, fiche 24 task
|
|
139
|
+
* 3) reuses exactly what the write path does on every save, rather than a
|
|
140
|
+
* second copy of the published-only rule this indexer enforces.
|
|
141
|
+
*/
|
|
142
|
+
export declare function reindexVectorEntry(store: ContentStore, options: VectorIndexingOptions, id: string): Promise<void>;
|
|
143
|
+
/**
|
|
144
|
+
* Walks every entry of a collection and re-derives its vector chunk. Unlike
|
|
145
|
+
* search's `reindexAll`, only the published face is ever indexed (see the
|
|
146
|
+
* doc comment on `recordFor`'s caller above) — a trashed-but-published entry
|
|
147
|
+
* is still indexed, since trash is orthogonal to `status` (ADR-0022).
|
|
148
|
+
*/
|
|
149
|
+
export declare function reindexAllVectors(store: ContentStore, options: VectorIndexingOptions, onProgress?: (count: number) => void): Promise<number>;
|
|
64
150
|
export declare function withVectorIndexing(store: ContentStore, options: VectorIndexingOptions): ContentStore;
|
|
65
151
|
//# sourceMappingURL=assistant.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assistant.d.ts","sourceRoot":"","sources":["../../src/commands/assistant.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,aAAa,
|
|
1
|
+
{"version":3,"file":"assistant.d.ts","sourceRoot":"","sources":["../../src/commands/assistant.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,42 +1,59 @@
|
|
|
1
|
-
import { createAssistToolset, createHashingEmbeddingProvider, createImageProviderRegistry, createProviderRegistry, createSemanticSearch, createVectorRegistry,
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
import { createAssistToolset, createAssistUsageTracker, createHashingEmbeddingProvider, createImageProviderRegistry, createProviderRegistry, createReferenceDocumentStore, createSemanticSearch, createVectorRegistry, extractDocumentText, ingestReferenceDocument, MAX_DOCUMENT_BYTES, REFERENCE_DOCUMENT_COLLECTION, removeReferenceDocumentVectors, } from '@cogenta/agents';
|
|
2
|
+
import { CogentaError } from '@cogenta/core';
|
|
3
|
+
import { SITE_SETTINGS_SITE_SCOPE, searchDocumentFor } from '@cogenta/schema';
|
|
4
|
+
/** The one site setting this task adds — a record of collection name → included, absent meaning included (opt-out, so an existing site's behaviour before this task does not change). */
|
|
5
|
+
const INDEXED_COLLECTIONS_SETTING = 'assistant.indexedCollections';
|
|
6
|
+
/**
|
|
7
|
+
* Reads the live toggle for one collection. Exported so `cogenta serve`'s
|
|
8
|
+
* "Reindex vectors" tool body (`tools.ts`) can honour the exact same
|
|
9
|
+
* predicate the write path uses, rather than a second copy of this read.
|
|
10
|
+
*/
|
|
11
|
+
export async function isAssistantCollectionEnabled(settings, collectionName) {
|
|
12
|
+
const row = await settings.get(INDEXED_COLLECTIONS_SETTING, SITE_SETTINGS_SITE_SCOPE);
|
|
13
|
+
const map = row?.value ?? {};
|
|
14
|
+
return map[collectionName] !== false;
|
|
5
15
|
}
|
|
6
16
|
/**
|
|
7
17
|
* The text client, or nothing.
|
|
8
18
|
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
19
|
+
* Fiche 56 widened `provider` to a free string validated by
|
|
20
|
+
* `createProviderRegistry` itself (a catalog id, or any id paired with a
|
|
21
|
+
* `baseUrl` for a custom OpenAI-compatible endpoint) — so this no longer
|
|
22
|
+
* duplicates that check against a fixed 3-name list (the exact
|
|
23
|
+
* desynchronisation trap `CONTRACT_C_PERMISSIONS` already taught this
|
|
24
|
+
* codebase to avoid). A provider this build cannot resolve, or whose API key
|
|
25
|
+
* is missing, produces `undefined` and a warning — never a throw. An
|
|
26
|
+
* operator who mistyped a provider name should get a site that works with
|
|
27
|
+
* the assistant off, plus a log line saying exactly that.
|
|
13
28
|
*/
|
|
14
29
|
function textProvider(options) {
|
|
15
30
|
const llm = options.config.llm;
|
|
16
31
|
if (llm === undefined)
|
|
17
32
|
return undefined;
|
|
18
|
-
if (
|
|
19
|
-
options.logger.warn('
|
|
33
|
+
if (llm.apiKey === undefined) {
|
|
34
|
+
options.logger.warn('LLM provider configured with no API key, the writing assistant stays off', {
|
|
20
35
|
provider: llm.provider,
|
|
21
|
-
|
|
36
|
+
variable: 'COGENTA_LLM_API_KEY',
|
|
22
37
|
});
|
|
23
38
|
return undefined;
|
|
24
39
|
}
|
|
25
|
-
|
|
26
|
-
|
|
40
|
+
try {
|
|
41
|
+
const registry = createProviderRegistry({
|
|
42
|
+
[llm.provider]: {
|
|
43
|
+
apiKey: llm.apiKey,
|
|
44
|
+
model: llm.model,
|
|
45
|
+
...(llm.baseUrl === undefined ? {} : { baseUrl: llm.baseUrl }),
|
|
46
|
+
},
|
|
47
|
+
});
|
|
48
|
+
return registry.get(llm.provider);
|
|
49
|
+
}
|
|
50
|
+
catch (error) {
|
|
51
|
+
options.logger.warn('LLM provider could not be resolved, the writing assistant stays off', {
|
|
27
52
|
provider: llm.provider,
|
|
28
|
-
|
|
53
|
+
error: error instanceof Error ? error.message : String(error),
|
|
29
54
|
});
|
|
30
55
|
return undefined;
|
|
31
56
|
}
|
|
32
|
-
const registry = createProviderRegistry({
|
|
33
|
-
[llm.provider]: {
|
|
34
|
-
apiKey: llm.apiKey,
|
|
35
|
-
model: llm.model,
|
|
36
|
-
...(llm.baseUrl === undefined ? {} : { baseUrl: llm.baseUrl }),
|
|
37
|
-
},
|
|
38
|
-
});
|
|
39
|
-
return registry.get(llm.provider);
|
|
40
57
|
}
|
|
41
58
|
function imageProvider(options) {
|
|
42
59
|
const images = options.config.imageGeneration;
|
|
@@ -108,20 +125,122 @@ export async function buildAssistant(options) {
|
|
|
108
125
|
embeddings,
|
|
109
126
|
...(options.fullText === undefined ? {} : { fullText: options.fullText }),
|
|
110
127
|
});
|
|
128
|
+
// Fiche 30 task 3. Only present when a text provider is present — a site
|
|
129
|
+
// with no AI provider has nothing to meter (R2), and `createAssistToolset`
|
|
130
|
+
// itself would drop a tracker handed to it anyway once `runtime` is
|
|
131
|
+
// `undefined`, so building one unconditionally would just be dead weight.
|
|
132
|
+
const usage = provider === undefined
|
|
133
|
+
? undefined
|
|
134
|
+
: createAssistUsageTracker({
|
|
135
|
+
limits: { monthlyTokenLimit: config.assistant.monthlyTokenLimit },
|
|
136
|
+
});
|
|
111
137
|
const toolset = createAssistToolset({
|
|
112
138
|
site: { name: config.site.name, locales: config.site.locales },
|
|
113
139
|
...(provider === undefined ? {} : { provider }),
|
|
114
140
|
...(images === undefined ? {} : { imageProvider: images }),
|
|
115
141
|
...(search === undefined ? {} : { search }),
|
|
116
142
|
...(store === undefined || embeddings === undefined ? {} : { vectors: { store, embeddings } }),
|
|
143
|
+
...(usage === undefined ? {} : { usage }),
|
|
144
|
+
...(options.promptTemplates === undefined ? {} : { promptTemplates: options.promptTemplates }),
|
|
117
145
|
});
|
|
118
146
|
const summary = toolset.available
|
|
119
147
|
? `assistant: ${toolset.tools.length} tool(s), text provider: ${provider?.name ?? 'none'}, image provider: ${images?.name ?? 'none'}, vector driver: ${vectorDriver}`
|
|
120
148
|
: 'assistant: off (no AI provider configured)';
|
|
149
|
+
const isEnabled = (collectionName) => isAssistantCollectionEnabled(options.settings, collectionName);
|
|
150
|
+
// Fiche 30 task 6, widened by L22 task 4. Only when there is a real store —
|
|
151
|
+
// `vectorDriver` stays `'none'` and `store` stays `undefined` on a site with
|
|
152
|
+
// no embedder, and an "index" with no store to count is not a real state to
|
|
153
|
+
// report.
|
|
154
|
+
let lastIndexedAt = null;
|
|
155
|
+
const vectorInfo = store === undefined || embeddings === undefined
|
|
156
|
+
? undefined
|
|
157
|
+
: {
|
|
158
|
+
driver: vectorDriver,
|
|
159
|
+
dimensions: embeddings.dimensions,
|
|
160
|
+
count: () => store.count(),
|
|
161
|
+
lastIndexedAt: () => lastIndexedAt,
|
|
162
|
+
noteIndexed: () => {
|
|
163
|
+
lastIndexedAt = new Date().toISOString();
|
|
164
|
+
},
|
|
165
|
+
referenceCollection: REFERENCE_DOCUMENT_COLLECTION,
|
|
166
|
+
collections: async () => {
|
|
167
|
+
const rows = [];
|
|
168
|
+
for (const collection of options.collections) {
|
|
169
|
+
const [enabled, count] = await Promise.all([
|
|
170
|
+
isEnabled(collection.name),
|
|
171
|
+
store.count({ siteId: options.siteId, collections: [collection.name] }),
|
|
172
|
+
]);
|
|
173
|
+
rows.push({ name: collection.name, enabled, count });
|
|
174
|
+
}
|
|
175
|
+
return rows;
|
|
176
|
+
},
|
|
177
|
+
};
|
|
178
|
+
/**
|
|
179
|
+
* A nested function rather than an inline ternary: `store`/`embeddings`
|
|
180
|
+
* narrow to their non-optional type for the rest of *this* function body
|
|
181
|
+
* once checked here, which a value captured from the outer scope by a
|
|
182
|
+
* separately-declared closure does not reliably do.
|
|
183
|
+
*/
|
|
184
|
+
async function buildDocumentService() {
|
|
185
|
+
if (store === undefined || embeddings === undefined)
|
|
186
|
+
return undefined;
|
|
187
|
+
const vectorStore = store;
|
|
188
|
+
const embeddingProviderRef = embeddings;
|
|
189
|
+
const docStore = createReferenceDocumentStore(options.db);
|
|
190
|
+
// Created eagerly, once — every method below (`list` included) reads or
|
|
191
|
+
// writes this table, so it must exist before the first request, not only
|
|
192
|
+
// before the first upload.
|
|
193
|
+
await docStore.ensureTable();
|
|
194
|
+
return {
|
|
195
|
+
list: () => docStore.list(options.siteId),
|
|
196
|
+
async upload({ filename, bytes, uploadedBy }) {
|
|
197
|
+
if (bytes.byteLength > MAX_DOCUMENT_BYTES) {
|
|
198
|
+
throw new CogentaError({
|
|
199
|
+
code: 'DOCUMENT_TOO_LARGE',
|
|
200
|
+
message: `"${filename}" is larger than this route accepts.`,
|
|
201
|
+
hint: 'Upload a document of 20 MB or less, or paste the section as plain text into a .txt/.md file.',
|
|
202
|
+
details: { filename },
|
|
203
|
+
});
|
|
204
|
+
}
|
|
205
|
+
const extracted = extractDocumentText({ filename, bytes });
|
|
206
|
+
const created = await docStore.create({
|
|
207
|
+
siteId: options.siteId,
|
|
208
|
+
filename: extracted.filename,
|
|
209
|
+
format: extracted.format,
|
|
210
|
+
characters: extracted.characters,
|
|
211
|
+
warnings: extracted.warnings,
|
|
212
|
+
uploadedBy,
|
|
213
|
+
});
|
|
214
|
+
try {
|
|
215
|
+
const { chunkCount } = await ingestReferenceDocument({ filename: extracted.filename, text: extracted.text }, created.id, { store: vectorStore, embeddings: embeddingProviderRef, siteId: options.siteId });
|
|
216
|
+
const at = new Date().toISOString();
|
|
217
|
+
await docStore.markIndexed(options.siteId, created.id, chunkCount, at);
|
|
218
|
+
lastIndexedAt = at;
|
|
219
|
+
const reread = await docStore.get(options.siteId, created.id);
|
|
220
|
+
return reread ?? created;
|
|
221
|
+
}
|
|
222
|
+
catch (error) {
|
|
223
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
224
|
+
await docStore.markError(options.siteId, created.id, message);
|
|
225
|
+
const reread = await docStore.get(options.siteId, created.id);
|
|
226
|
+
return reread ?? created;
|
|
227
|
+
}
|
|
228
|
+
},
|
|
229
|
+
async remove(id) {
|
|
230
|
+
await removeReferenceDocumentVectors(vectorStore, options.siteId, id);
|
|
231
|
+
await docStore.remove(options.siteId, id);
|
|
232
|
+
},
|
|
233
|
+
};
|
|
234
|
+
}
|
|
235
|
+
const documents = await buildDocumentService();
|
|
121
236
|
return {
|
|
122
237
|
toolset,
|
|
123
238
|
...(search === undefined ? {} : { search }),
|
|
124
|
-
...(store === undefined || embeddings === undefined
|
|
239
|
+
...(store === undefined || embeddings === undefined
|
|
240
|
+
? {}
|
|
241
|
+
: { vectors: { store, embeddings, isEnabled } }),
|
|
242
|
+
...(vectorInfo === undefined ? {} : { vectorInfo }),
|
|
243
|
+
...(documents === undefined ? {} : { documents }),
|
|
125
244
|
summary,
|
|
126
245
|
dispose: async () => {
|
|
127
246
|
await disposeVectors?.();
|
|
@@ -162,24 +281,71 @@ async function recordFor(options, document) {
|
|
|
162
281
|
vector,
|
|
163
282
|
};
|
|
164
283
|
}
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
await options.store.
|
|
284
|
+
/**
|
|
285
|
+
* Re-derives the indexed vector chunk(s) for one entry. Exported so a full
|
|
286
|
+
* rebuild (`reindexAllVectors`, and the "Reindex vectors" tool, fiche 24 task
|
|
287
|
+
* 3) reuses exactly what the write path does on every save, rather than a
|
|
288
|
+
* second copy of the published-only rule this indexer enforces.
|
|
289
|
+
*/
|
|
290
|
+
export async function reindexVectorEntry(store, options, id) {
|
|
291
|
+
try {
|
|
292
|
+
const enabled = options.isEnabled === undefined ? true : await options.isEnabled(options.collection.name);
|
|
293
|
+
if (!enabled) {
|
|
294
|
+
// Excluded by the toggle (L22 task 4) — treated exactly like "no
|
|
295
|
+
// published face": whatever chunk this entry had is removed, and
|
|
296
|
+
// nothing new is written until the collection is re-enabled.
|
|
297
|
+
await options.store.remove([chunkIdFor(options.collection.name, id)]);
|
|
298
|
+
options.onIndexed?.();
|
|
299
|
+
return;
|
|
179
300
|
}
|
|
180
|
-
|
|
181
|
-
|
|
301
|
+
const published = await store.read(id, { state: 'published' });
|
|
302
|
+
if (published === null) {
|
|
303
|
+
await options.store.remove([chunkIdFor(options.collection.name, id)]);
|
|
304
|
+
options.onIndexed?.();
|
|
305
|
+
return;
|
|
306
|
+
}
|
|
307
|
+
const record = await recordFor(options, searchDocumentFor(options.collection, published));
|
|
308
|
+
if (record === null) {
|
|
309
|
+
await options.store.remove([chunkIdFor(options.collection.name, id)]);
|
|
310
|
+
options.onIndexed?.();
|
|
311
|
+
return;
|
|
182
312
|
}
|
|
313
|
+
await options.store.upsert([record]);
|
|
314
|
+
options.onIndexed?.();
|
|
315
|
+
}
|
|
316
|
+
catch (error) {
|
|
317
|
+
options.onError?.(error);
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
/**
|
|
321
|
+
* Walks every entry of a collection and re-derives its vector chunk. Unlike
|
|
322
|
+
* search's `reindexAll`, only the published face is ever indexed (see the
|
|
323
|
+
* doc comment on `recordFor`'s caller above) — a trashed-but-published entry
|
|
324
|
+
* is still indexed, since trash is orthogonal to `status` (ADR-0022).
|
|
325
|
+
*/
|
|
326
|
+
export async function reindexAllVectors(store, options, onProgress) {
|
|
327
|
+
let cursor;
|
|
328
|
+
let count = 0;
|
|
329
|
+
for (;;) {
|
|
330
|
+
const page = await store.list({
|
|
331
|
+
trashed: 'include',
|
|
332
|
+
limit: 100,
|
|
333
|
+
...(cursor ? { cursor } : {}),
|
|
334
|
+
});
|
|
335
|
+
for (const entry of page.items) {
|
|
336
|
+
await reindexVectorEntry(store, options, entry.id);
|
|
337
|
+
count += 1;
|
|
338
|
+
onProgress?.(count);
|
|
339
|
+
}
|
|
340
|
+
if (!page.hasMore || page.nextCursor === null)
|
|
341
|
+
break;
|
|
342
|
+
cursor = page.nextCursor;
|
|
343
|
+
}
|
|
344
|
+
return count;
|
|
345
|
+
}
|
|
346
|
+
export function withVectorIndexing(store, options) {
|
|
347
|
+
async function reindex(id) {
|
|
348
|
+
await reindexVectorEntry(store, options, id);
|
|
183
349
|
}
|
|
184
350
|
async function after(entry) {
|
|
185
351
|
await reindex(entry.id);
|
|
@@ -196,6 +362,7 @@ export function withVectorIndexing(store, options) {
|
|
|
196
362
|
const removed = await store.delete(id);
|
|
197
363
|
try {
|
|
198
364
|
await options.store.remove([chunkIdFor(options.collection.name, id)]);
|
|
365
|
+
options.onIndexed?.();
|
|
199
366
|
}
|
|
200
367
|
catch (error) {
|
|
201
368
|
options.onError?.(error);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assistant.js","sourceRoot":"","sources":["../../src/commands/assistant.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"assistant.js","sourceRoot":"","sources":["../../src/commands/assistant.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { AuditIntegrityStatus } from '@cogenta/auth';
|
|
2
|
+
import type { Logger } from '@cogenta/core';
|
|
3
|
+
/**
|
|
4
|
+
* Fiche 21 task 3's outbound half. `security-alerts.ts` explains why its own
|
|
5
|
+
* trigger is a request rather than a timer (R1: no durable worker); this one
|
|
6
|
+
* is the accepted exception — `runServe`'s own `setInterval` already is the
|
|
7
|
+
* scheduled-publication tick's clock, and reusing it here rather than
|
|
8
|
+
* inventing a second polling mechanism is the same trade that tick already
|
|
9
|
+
* made.
|
|
10
|
+
*
|
|
11
|
+
* Sent **once per break**, not once per tick: the caller passes `newlyBroken`
|
|
12
|
+
* from `AuditIntegrityStore.check()`, which is `true` only the run that first
|
|
13
|
+
* finds the chain broken. A tick every day for a break nobody has fixed yet
|
|
14
|
+
* would otherwise flood the channel with the same fact.
|
|
15
|
+
*/
|
|
16
|
+
export interface AuditIntegrityAlertOptions {
|
|
17
|
+
/** `null` disables the outbound half entirely — the admin notice still fires. */
|
|
18
|
+
readonly send: ((event: string, data: Readonly<Record<string, unknown>>) => Promise<void>) | null;
|
|
19
|
+
readonly siteUrl: string;
|
|
20
|
+
readonly logger: Logger;
|
|
21
|
+
}
|
|
22
|
+
export declare function sendAuditIntegrityAlert(status: AuditIntegrityStatus, options: AuditIntegrityAlertOptions): Promise<void>;
|
|
23
|
+
//# sourceMappingURL=audit-integrity-alert.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit-integrity-alert.d.ts","sourceRoot":"","sources":["../../src/commands/audit-integrity-alert.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAA;AAEzD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA;AAE3C;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,0BAA0B;IACzC,iFAAiF;IACjF,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAA;IACjG,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CACxB;AAED,wBAAsB,uBAAuB,CAC3C,MAAM,EAAE,oBAAoB,EAC5B,OAAO,EAAE,0BAA0B,GAClC,OAAO,CAAC,IAAI,CAAC,CAgCf"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { buildAlert } from '@cogenta/channels';
|
|
2
|
+
export async function sendAuditIntegrityAlert(status, options) {
|
|
3
|
+
if (options.send === null)
|
|
4
|
+
return;
|
|
5
|
+
try {
|
|
6
|
+
const adminUrl = new URL('/admin/audit', options.siteUrl).toString();
|
|
7
|
+
const entryPart = status.brokenEntryId === null
|
|
8
|
+
? 'The exact entry could not be identified.'
|
|
9
|
+
: `The first affected entry is ${status.brokenEntryId}.`;
|
|
10
|
+
const alert = buildAlert({
|
|
11
|
+
title: 'Audit log integrity check failed',
|
|
12
|
+
severity: 'critical',
|
|
13
|
+
context: `The scheduled integrity check found the audit log's hash chain broken. ${entryPart}`,
|
|
14
|
+
expectedAction: 'Investigate before doing anything else: every entry from this point on cannot be trusted. Preserve the affected rows (do not purge them) until the cause is understood.',
|
|
15
|
+
adminUrl,
|
|
16
|
+
});
|
|
17
|
+
await options.send('security.audit_integrity_broken', {
|
|
18
|
+
severity: alert.severity,
|
|
19
|
+
title: alert.title,
|
|
20
|
+
context: alert.context,
|
|
21
|
+
expectedAction: alert.expectedAction,
|
|
22
|
+
adminUrl: alert.adminUrl,
|
|
23
|
+
brokenEntryId: status.brokenEntryId,
|
|
24
|
+
brokenAt: status.brokenAt,
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
catch (error) {
|
|
28
|
+
// Same rule as every other audit/alert write in this file's neighbours:
|
|
29
|
+
// a notification failing must never fail the check it is reporting on.
|
|
30
|
+
options.logger.error('audit integrity alert failed', { error: String(error) });
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=audit-integrity-alert.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit-integrity-alert.js","sourceRoot":"","sources":["../../src/commands/audit-integrity-alert.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAuB9C,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,MAA4B,EAC5B,OAAmC;IAEnC,IAAI,OAAO,CAAC,IAAI,KAAK,IAAI;QAAE,OAAM;IAEjC,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,cAAc,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAA;QACpE,MAAM,SAAS,GACb,MAAM,CAAC,aAAa,KAAK,IAAI;YAC3B,CAAC,CAAC,0CAA0C;YAC5C,CAAC,CAAC,+BAA+B,MAAM,CAAC,aAAa,GAAG,CAAA;QAC5D,MAAM,KAAK,GAAG,UAAU,CAAC;YACvB,KAAK,EAAE,kCAAkC;YACzC,QAAQ,EAAE,UAAU;YACpB,OAAO,EAAE,0EAA0E,SAAS,EAAE;YAC9F,cAAc,EACZ,yKAAyK;YAC3K,QAAQ;SACT,CAAC,CAAA;QAEF,MAAM,OAAO,CAAC,IAAI,CAAC,iCAAiC,EAAE;YACpD,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,cAAc,EAAE,KAAK,CAAC,cAAc;YACpC,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,aAAa,EAAE,MAAM,CAAC,aAAa;YACnC,QAAQ,EAAE,MAAM,CAAC,QAAQ;SAC1B,CAAC,CAAA;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,wEAAwE;QACxE,uEAAuE;QACvE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,8BAA8B,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;IAChF,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { type DatabaseHandle, type Logger } from '@cogenta/core';
|
|
2
|
+
import { createBackup } from '@cogenta/export';
|
|
3
|
+
import type { Output, Writer } from '../output.js';
|
|
4
|
+
export type BackupSubcommand = 'create' | 'list';
|
|
5
|
+
export type RestoreSubcommand = 'preview' | 'apply';
|
|
6
|
+
export interface BackupOptions {
|
|
7
|
+
readonly subcommand: string | undefined;
|
|
8
|
+
readonly cwd?: string;
|
|
9
|
+
readonly env?: Record<string, string | undefined>;
|
|
10
|
+
readonly logger?: Logger;
|
|
11
|
+
readonly out: Output;
|
|
12
|
+
readonly stderr: Writer;
|
|
13
|
+
/** Directory backups are written to — never under the site's storage root (the plan's own piège). Default `.cogenta/backups`. */
|
|
14
|
+
readonly dir?: string;
|
|
15
|
+
readonly passphrase?: string;
|
|
16
|
+
}
|
|
17
|
+
export interface RestoreOptions {
|
|
18
|
+
readonly subcommand: string | undefined;
|
|
19
|
+
readonly file: string | undefined;
|
|
20
|
+
readonly cwd?: string;
|
|
21
|
+
readonly env?: Record<string, string | undefined>;
|
|
22
|
+
readonly logger?: Logger;
|
|
23
|
+
readonly out: Output;
|
|
24
|
+
readonly stderr: Writer;
|
|
25
|
+
readonly passphrase?: string;
|
|
26
|
+
}
|
|
27
|
+
/** Exported for `update/` (L22 task 9) — the same default directory, never a second one to keep in sync. */
|
|
28
|
+
export declare function defaultBackupDir(cwd: string): string;
|
|
29
|
+
/**
|
|
30
|
+
* Opens this site's own database, the way every command in this file that
|
|
31
|
+
* touches it does. Exported for `update/` (L22 task 9): the update system's
|
|
32
|
+
* history view needs the same audit log every other admin action already
|
|
33
|
+
* writes to, which needs the same open connection — never a second way to
|
|
34
|
+
* resolve `cogenta.config.mjs` into a live `DatabaseHandle`.
|
|
35
|
+
*/
|
|
36
|
+
export declare function openSite(options: {
|
|
37
|
+
readonly cwd?: string;
|
|
38
|
+
readonly env?: Record<string, string | undefined>;
|
|
39
|
+
}, logger: Logger): Promise<{
|
|
40
|
+
readonly db: DatabaseHandle;
|
|
41
|
+
readonly site: {
|
|
42
|
+
name: string;
|
|
43
|
+
url: string;
|
|
44
|
+
};
|
|
45
|
+
readonly dispose: () => Promise<void>;
|
|
46
|
+
}>;
|
|
47
|
+
export interface CreateSiteBackupOptions {
|
|
48
|
+
readonly cwd?: string;
|
|
49
|
+
readonly env?: Record<string, string | undefined>;
|
|
50
|
+
readonly logger?: Logger;
|
|
51
|
+
/** Directory backups are written to. Default `.cogenta/backups`, same as `cogenta backup create`. */
|
|
52
|
+
readonly dir?: string;
|
|
53
|
+
readonly passphrase?: string;
|
|
54
|
+
/**
|
|
55
|
+
* `backup-` by default (`cogenta backup create`'s own filename). The
|
|
56
|
+
* update system (`update/restore-point.ts`) passes `update-` so a restore
|
|
57
|
+
* point taken automatically before an update is visible as such in
|
|
58
|
+
* `cogenta backup list` / the admin's history view, without a second
|
|
59
|
+
* directory or a second manifest format.
|
|
60
|
+
*/
|
|
61
|
+
readonly filenamePrefix?: string;
|
|
62
|
+
}
|
|
63
|
+
export interface CreateSiteBackupResult {
|
|
64
|
+
readonly path: string;
|
|
65
|
+
readonly manifest: Awaited<ReturnType<typeof createBackup>>['manifest'];
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* The actual work behind `cogenta backup create` — factored out so
|
|
69
|
+
* `update/restore-point.ts` calls exactly this, not a reimplementation, for
|
|
70
|
+
* "un point de restauration obligatoire avant toute mise à jour" (L22 task
|
|
71
|
+
* 9, point 2: "réutilise `backup create`/`restore apply`, déjà réels depuis
|
|
72
|
+
* L9 fiche 26"). `runBackup`'s `create` subcommand below is now this
|
|
73
|
+
* function plus CLI-shaped output, nothing else.
|
|
74
|
+
*/
|
|
75
|
+
export declare function createSiteBackup(options: CreateSiteBackupOptions): Promise<CreateSiteBackupResult>;
|
|
76
|
+
export declare function runBackup(options: BackupOptions): Promise<number>;
|
|
77
|
+
export declare function runRestore(options: RestoreOptions): Promise<number>;
|
|
78
|
+
//# sourceMappingURL=backup.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"backup.d.ts","sourceRoot":"","sources":["../../src/commands/backup.ts"],"names":[],"mappings":"AAKA,OAAO,EAIL,KAAK,cAAc,EAEnB,KAAK,MAAM,EAGZ,MAAM,eAAe,CAAA;AACtB,OAAO,EAGL,YAAY,EAGb,MAAM,iBAAiB,CAAA;AAYxB,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAGlD,MAAM,MAAM,gBAAgB,GAAG,QAAQ,GAAG,MAAM,CAAA;AAChD,MAAM,MAAM,iBAAiB,GAAG,SAAS,GAAG,OAAO,CAAA;AAEnD,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,CAAA;IACvC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAA;IACjD,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,iIAAiI;IACjI,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAC7B;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,CAAA;IACvC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAA;IACjC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAA;IACjD,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAC7B;AA4BD,4GAA4G;AAC5G,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED;;;;;;GAMG;AACH,wBAAsB,QAAQ,CAC5B,OAAO,EAAE;IAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAA;CAAE,EACrF,MAAM,EAAE,MAAM,GACb,OAAO,CAAC;IACT,QAAQ,CAAC,EAAE,EAAE,cAAc,CAAA;IAC3B,QAAQ,CAAC,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAA;IAC5C,QAAQ,CAAC,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CACtC,CAAC,CAUD;AAwCD,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAA;IACjD,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IACxB,qGAAqG;IACrG,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;IAC5B;;;;;;OAMG;IACH,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAA;CACjC;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC,CAAC,UAAU,CAAC,CAAA;CACxE;AAED;;;;;;;GAOG;AACH,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,uBAAuB,GAC/B,OAAO,CAAC,sBAAsB,CAAC,CAgCjC;AAED,wBAAsB,SAAS,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CAkDvE;AAED,wBAAsB,UAAU,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAsDzE"}
|