@wirecat/cli-core 0.595.0 → 0.597.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 +63 -0
- package/dist/background/deliver.d.ts +7 -1
- package/dist/background/deliver.js +66 -10
- package/dist/background/telegram-html.d.ts +2 -0
- package/dist/background/telegram-html.js +66 -0
- package/dist/calendar/mcp/index.d.ts +12 -12
- package/dist/cli/index.d.ts +1 -1
- package/dist/cli/permission-keys.d.ts +10 -2
- package/dist/cli/preview.d.ts +3 -0
- package/dist/cli/preview.js +9 -5
- package/dist/crm/cli/index.js +71 -14
- package/dist/crm/index.d.ts +1 -1
- package/dist/crm/index.js +1 -1
- package/dist/crm/source.d.ts +6 -1
- package/dist/crm/sync.d.ts +5 -4
- package/dist/crm/sync.js +22 -4
- package/dist/crm/testing/index.d.ts +1 -1
- package/dist/crm/testing/index.js +1 -1
- package/dist/crm/testing/source-contract.js +28 -0
- package/dist/crm/testing/source.d.ts +8 -1
- package/dist/crm/testing/source.js +53 -9
- package/dist/crm/testing/sync-contract.js +14 -3
- package/dist/crm/writer.d.ts +11 -2
- package/dist/crm/writer.js +31 -0
- package/dist/crm/writes.d.ts +12 -2
- package/dist/crm/writes.js +93 -8
- package/dist/domain/crm.d.ts +29 -1
- package/dist/entities/deal.d.ts +16 -0
- package/dist/entities/deal.js +8 -0
- package/dist/entities/index.d.ts +12 -0
- package/dist/errors/reasons.js +4 -0
- package/dist/index.d.ts +1 -1
- package/dist/meetings/mcp/index.d.ts +15 -15
- package/dist/store/driver.d.ts +2 -0
- package/dist/store/driver.js +2 -0
- package/dist/store/search-index.js +6 -1
- package/dist/store/sqlite/accounts.js +1 -0
- package/dist/store/sqlite/crm.d.ts +5 -1
- package/dist/store/sqlite/crm.js +52 -0
- package/dist/store/sqlite/deals.d.ts +5 -0
- package/dist/store/sqlite/deals.js +13 -0
- package/dist/store/sqlite/manifest.js +1 -0
- package/dist/store/sqlite/migrations.generated.js +6 -0
- package/dist/store/sqlite/note-index.d.ts +1 -1
- package/dist/store/sqlite/note-index.js +3 -0
- package/dist/store/sqlite/open-store.d.ts +2 -2
- package/dist/store/sqlite/open-store.js +29 -6
- package/dist/store/sqlite/read-compatibility.d.ts +2 -0
- package/dist/store/sqlite/read-compatibility.js +7 -3
- package/dist/store/sqlite/schema.d.ts +217 -0
- package/dist/store/sqlite/schema.js +18 -0
- package/package.json +7 -1
|
@@ -1,2 +1,4 @@
|
|
|
1
1
|
import type { CacheDatabase } from "../driver.js";
|
|
2
|
+
/** "older" when the file needs migrating before a read-only open; throws for every file it may not read. */
|
|
3
|
+
export declare const readCompatibility: (database: CacheDatabase, command?: string) => "current" | "older";
|
|
2
4
|
export declare const assertReadCompatible: (database: CacheDatabase, command?: string) => void;
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { CliError } from "@wirecat/cli-base";
|
|
2
2
|
import { MIGRATIONS } from "../migrations.js";
|
|
3
3
|
import { refusalAdvice, storeClients } from "./clients.js";
|
|
4
|
-
|
|
4
|
+
/** "older" when the file needs migrating before a read-only open; throws for every file it may not read. */
|
|
5
|
+
export const readCompatibility = (database, command) => {
|
|
5
6
|
const ours = MIGRATIONS.at(-1)?.version ?? 0;
|
|
6
7
|
if (!database.prepare("SELECT 1 FROM sqlite_master WHERE type='table' AND name='schema_migrations'").get())
|
|
7
8
|
throw new CliError("configuration_error", "The store has no schema history; initialize it explicitly before a read-only open");
|
|
@@ -15,8 +16,11 @@ export const assertReadCompatible = (database, command) => {
|
|
|
15
16
|
minCompatible < 1 ||
|
|
16
17
|
minCompatible > version)
|
|
17
18
|
throw new CliError("configuration_error", "The store schema history is invalid; read-only opening cannot repair it");
|
|
18
|
-
if (version < ours)
|
|
19
|
-
throw new CliError("configuration_error", `The store needs schema ${ours} maintenance before a read-only open (found ${version})`);
|
|
20
19
|
if (minCompatible > ours)
|
|
21
20
|
throw new CliError("configuration_error", `The store requires schema ${minCompatible}, but this tool supports ${ours}; ${refusalAdvice(storeClients(database), command, version)}`);
|
|
21
|
+
return version < ours ? "older" : "current";
|
|
22
|
+
};
|
|
23
|
+
export const assertReadCompatible = (database, command) => {
|
|
24
|
+
if (readCompatibility(database, command) === "older")
|
|
25
|
+
throw new CliError("configuration_error", `The store needs schema ${MIGRATIONS.at(-1)?.version ?? 0} maintenance before a read-only open`);
|
|
22
26
|
};
|
|
@@ -16542,6 +16542,223 @@ export declare const pipelineStageChanges: import("drizzle-orm/sqlite-core").SQL
|
|
|
16542
16542
|
dialect: 'sqlite';
|
|
16543
16543
|
isAlias: false;
|
|
16544
16544
|
}>;
|
|
16545
|
+
/** A CRM account's own fields on one kind; their values stay in each row's `metadata`, keyed by code. */
|
|
16546
|
+
export declare const crmFields: import("drizzle-orm/sqlite-core").SQLiteTableWithColumns<{
|
|
16547
|
+
name: "crm_fields";
|
|
16548
|
+
schema: undefined;
|
|
16549
|
+
columns: {
|
|
16550
|
+
id: import("drizzle-orm/sqlite-core").SQLiteColumn<{
|
|
16551
|
+
name: string;
|
|
16552
|
+
tableName: "crm_fields";
|
|
16553
|
+
dataType: "number int53";
|
|
16554
|
+
data: number;
|
|
16555
|
+
driverParam: number;
|
|
16556
|
+
notNull: true;
|
|
16557
|
+
hasDefault: true;
|
|
16558
|
+
isPrimaryKey: true;
|
|
16559
|
+
isAutoincrement: false;
|
|
16560
|
+
hasRuntimeDefault: false;
|
|
16561
|
+
enumValues: undefined;
|
|
16562
|
+
baseColumn: never;
|
|
16563
|
+
identity: undefined;
|
|
16564
|
+
generated: undefined;
|
|
16565
|
+
}, {}>;
|
|
16566
|
+
accountId: import("drizzle-orm/sqlite-core").SQLiteColumn<{
|
|
16567
|
+
name: string;
|
|
16568
|
+
tableName: "crm_fields";
|
|
16569
|
+
dataType: "number int53";
|
|
16570
|
+
data: number;
|
|
16571
|
+
driverParam: number;
|
|
16572
|
+
notNull: true;
|
|
16573
|
+
hasDefault: false;
|
|
16574
|
+
isPrimaryKey: false;
|
|
16575
|
+
isAutoincrement: false;
|
|
16576
|
+
hasRuntimeDefault: false;
|
|
16577
|
+
enumValues: undefined;
|
|
16578
|
+
baseColumn: never;
|
|
16579
|
+
identity: undefined;
|
|
16580
|
+
generated: undefined;
|
|
16581
|
+
}, {}>;
|
|
16582
|
+
kind: import("drizzle-orm/sqlite-core").SQLiteColumn<{
|
|
16583
|
+
name: string;
|
|
16584
|
+
tableName: "crm_fields";
|
|
16585
|
+
dataType: "string";
|
|
16586
|
+
data: string;
|
|
16587
|
+
driverParam: string;
|
|
16588
|
+
notNull: true;
|
|
16589
|
+
hasDefault: false;
|
|
16590
|
+
isPrimaryKey: false;
|
|
16591
|
+
isAutoincrement: false;
|
|
16592
|
+
hasRuntimeDefault: false;
|
|
16593
|
+
enumValues: [string, ...string[]];
|
|
16594
|
+
baseColumn: never;
|
|
16595
|
+
identity: undefined;
|
|
16596
|
+
generated: undefined;
|
|
16597
|
+
}, {}>;
|
|
16598
|
+
code: import("drizzle-orm/sqlite-core").SQLiteColumn<{
|
|
16599
|
+
name: string;
|
|
16600
|
+
tableName: "crm_fields";
|
|
16601
|
+
dataType: "string";
|
|
16602
|
+
data: string;
|
|
16603
|
+
driverParam: string;
|
|
16604
|
+
notNull: true;
|
|
16605
|
+
hasDefault: false;
|
|
16606
|
+
isPrimaryKey: false;
|
|
16607
|
+
isAutoincrement: false;
|
|
16608
|
+
hasRuntimeDefault: false;
|
|
16609
|
+
enumValues: [string, ...string[]];
|
|
16610
|
+
baseColumn: never;
|
|
16611
|
+
identity: undefined;
|
|
16612
|
+
generated: undefined;
|
|
16613
|
+
}, {}>;
|
|
16614
|
+
label: import("drizzle-orm/sqlite-core").SQLiteColumn<{
|
|
16615
|
+
name: string;
|
|
16616
|
+
tableName: "crm_fields";
|
|
16617
|
+
dataType: "string";
|
|
16618
|
+
data: string;
|
|
16619
|
+
driverParam: string;
|
|
16620
|
+
notNull: false;
|
|
16621
|
+
hasDefault: false;
|
|
16622
|
+
isPrimaryKey: false;
|
|
16623
|
+
isAutoincrement: false;
|
|
16624
|
+
hasRuntimeDefault: false;
|
|
16625
|
+
enumValues: [string, ...string[]];
|
|
16626
|
+
baseColumn: never;
|
|
16627
|
+
identity: undefined;
|
|
16628
|
+
generated: undefined;
|
|
16629
|
+
}, {}>;
|
|
16630
|
+
type: import("drizzle-orm/sqlite-core").SQLiteColumn<{
|
|
16631
|
+
name: string;
|
|
16632
|
+
tableName: "crm_fields";
|
|
16633
|
+
dataType: "string";
|
|
16634
|
+
data: string;
|
|
16635
|
+
driverParam: string;
|
|
16636
|
+
notNull: true;
|
|
16637
|
+
hasDefault: false;
|
|
16638
|
+
isPrimaryKey: false;
|
|
16639
|
+
isAutoincrement: false;
|
|
16640
|
+
hasRuntimeDefault: false;
|
|
16641
|
+
enumValues: [string, ...string[]];
|
|
16642
|
+
baseColumn: never;
|
|
16643
|
+
identity: undefined;
|
|
16644
|
+
generated: undefined;
|
|
16645
|
+
}, {}>;
|
|
16646
|
+
multiple: import("drizzle-orm/sqlite-core").SQLiteColumn<{
|
|
16647
|
+
name: string;
|
|
16648
|
+
tableName: "crm_fields";
|
|
16649
|
+
dataType: "number int53";
|
|
16650
|
+
data: number;
|
|
16651
|
+
driverParam: number;
|
|
16652
|
+
notNull: true;
|
|
16653
|
+
hasDefault: false;
|
|
16654
|
+
isPrimaryKey: false;
|
|
16655
|
+
isAutoincrement: false;
|
|
16656
|
+
hasRuntimeDefault: false;
|
|
16657
|
+
enumValues: undefined;
|
|
16658
|
+
baseColumn: never;
|
|
16659
|
+
identity: undefined;
|
|
16660
|
+
generated: undefined;
|
|
16661
|
+
}, {}>;
|
|
16662
|
+
filterable: import("drizzle-orm/sqlite-core").SQLiteColumn<{
|
|
16663
|
+
name: string;
|
|
16664
|
+
tableName: "crm_fields";
|
|
16665
|
+
dataType: "number int53";
|
|
16666
|
+
data: number;
|
|
16667
|
+
driverParam: number;
|
|
16668
|
+
notNull: true;
|
|
16669
|
+
hasDefault: false;
|
|
16670
|
+
isPrimaryKey: false;
|
|
16671
|
+
isAutoincrement: false;
|
|
16672
|
+
hasRuntimeDefault: false;
|
|
16673
|
+
enumValues: undefined;
|
|
16674
|
+
baseColumn: never;
|
|
16675
|
+
identity: undefined;
|
|
16676
|
+
generated: undefined;
|
|
16677
|
+
}, {}>;
|
|
16678
|
+
options: import("drizzle-orm/sqlite-core").SQLiteColumn<{
|
|
16679
|
+
name: string;
|
|
16680
|
+
tableName: "crm_fields";
|
|
16681
|
+
dataType: "string";
|
|
16682
|
+
data: string;
|
|
16683
|
+
driverParam: string;
|
|
16684
|
+
notNull: false;
|
|
16685
|
+
hasDefault: false;
|
|
16686
|
+
isPrimaryKey: false;
|
|
16687
|
+
isAutoincrement: false;
|
|
16688
|
+
hasRuntimeDefault: false;
|
|
16689
|
+
enumValues: [string, ...string[]];
|
|
16690
|
+
baseColumn: never;
|
|
16691
|
+
identity: undefined;
|
|
16692
|
+
generated: undefined;
|
|
16693
|
+
}, {}>;
|
|
16694
|
+
position: import("drizzle-orm/sqlite-core").SQLiteColumn<{
|
|
16695
|
+
name: string;
|
|
16696
|
+
tableName: "crm_fields";
|
|
16697
|
+
dataType: "number int53";
|
|
16698
|
+
data: number;
|
|
16699
|
+
driverParam: number;
|
|
16700
|
+
notNull: true;
|
|
16701
|
+
hasDefault: false;
|
|
16702
|
+
isPrimaryKey: false;
|
|
16703
|
+
isAutoincrement: false;
|
|
16704
|
+
hasRuntimeDefault: false;
|
|
16705
|
+
enumValues: undefined;
|
|
16706
|
+
baseColumn: never;
|
|
16707
|
+
identity: undefined;
|
|
16708
|
+
generated: undefined;
|
|
16709
|
+
}, {}>;
|
|
16710
|
+
createdAt: import("drizzle-orm/sqlite-core").SQLiteColumn<{
|
|
16711
|
+
name: string;
|
|
16712
|
+
tableName: "crm_fields";
|
|
16713
|
+
dataType: "number int53";
|
|
16714
|
+
data: number;
|
|
16715
|
+
driverParam: number;
|
|
16716
|
+
notNull: true;
|
|
16717
|
+
hasDefault: false;
|
|
16718
|
+
isPrimaryKey: false;
|
|
16719
|
+
isAutoincrement: false;
|
|
16720
|
+
hasRuntimeDefault: false;
|
|
16721
|
+
enumValues: undefined;
|
|
16722
|
+
baseColumn: never;
|
|
16723
|
+
identity: undefined;
|
|
16724
|
+
generated: undefined;
|
|
16725
|
+
}, {}>;
|
|
16726
|
+
updatedAt: import("drizzle-orm/sqlite-core").SQLiteColumn<{
|
|
16727
|
+
name: string;
|
|
16728
|
+
tableName: "crm_fields";
|
|
16729
|
+
dataType: "number int53";
|
|
16730
|
+
data: number;
|
|
16731
|
+
driverParam: number;
|
|
16732
|
+
notNull: true;
|
|
16733
|
+
hasDefault: false;
|
|
16734
|
+
isPrimaryKey: false;
|
|
16735
|
+
isAutoincrement: false;
|
|
16736
|
+
hasRuntimeDefault: false;
|
|
16737
|
+
enumValues: undefined;
|
|
16738
|
+
baseColumn: never;
|
|
16739
|
+
identity: undefined;
|
|
16740
|
+
generated: undefined;
|
|
16741
|
+
}, {}>;
|
|
16742
|
+
deletedAt: import("drizzle-orm/sqlite-core").SQLiteColumn<{
|
|
16743
|
+
name: string;
|
|
16744
|
+
tableName: "crm_fields";
|
|
16745
|
+
dataType: "number int53";
|
|
16746
|
+
data: number;
|
|
16747
|
+
driverParam: number;
|
|
16748
|
+
notNull: false;
|
|
16749
|
+
hasDefault: false;
|
|
16750
|
+
isPrimaryKey: false;
|
|
16751
|
+
isAutoincrement: false;
|
|
16752
|
+
hasRuntimeDefault: false;
|
|
16753
|
+
enumValues: undefined;
|
|
16754
|
+
baseColumn: never;
|
|
16755
|
+
identity: undefined;
|
|
16756
|
+
generated: undefined;
|
|
16757
|
+
}, {}>;
|
|
16758
|
+
};
|
|
16759
|
+
dialect: 'sqlite';
|
|
16760
|
+
isAlias: false;
|
|
16761
|
+
}>;
|
|
16545
16762
|
/** What a source said about one of its records, as it said it: the layer under the entity an import makes. */
|
|
16546
16763
|
export declare const records: import("drizzle-orm/sqlite-core").SQLiteTableWithColumns<{
|
|
16547
16764
|
name: "records";
|
|
@@ -1661,6 +1661,24 @@ export const pipelineStageChanges = sqliteTable("pipeline_stage_changes", {
|
|
|
1661
1661
|
index("pipeline_stage_changes_by_from_stage_id").on(table.fromStageId),
|
|
1662
1662
|
index("pipeline_stage_changes_by_to_stage_id").on(table.toStageId),
|
|
1663
1663
|
]);
|
|
1664
|
+
/** A CRM account's own fields on one kind; their values stay in each row's `metadata`, keyed by code. */
|
|
1665
|
+
export const crmFields = sqliteTable("crm_fields", {
|
|
1666
|
+
id: integer("id").primaryKey(),
|
|
1667
|
+
accountId: integer("account_id")
|
|
1668
|
+
.notNull()
|
|
1669
|
+
.references(() => accounts.id),
|
|
1670
|
+
kind: text("kind").notNull(),
|
|
1671
|
+
code: text("code").notNull(),
|
|
1672
|
+
label: text("label"),
|
|
1673
|
+
type: text("type").notNull(),
|
|
1674
|
+
multiple: integer("multiple").notNull(),
|
|
1675
|
+
filterable: integer("filterable").notNull(),
|
|
1676
|
+
options: text("options"),
|
|
1677
|
+
position: integer("position").notNull(),
|
|
1678
|
+
createdAt: integer("created_at").notNull(),
|
|
1679
|
+
updatedAt: integer("updated_at").notNull(),
|
|
1680
|
+
deletedAt: integer("deleted_at"),
|
|
1681
|
+
}, (table) => [unique().on(table.accountId, table.kind, table.code)]);
|
|
1664
1682
|
/** What a source said about one of its records, as it said it: the layer under the entity an import makes. */
|
|
1665
1683
|
export const records = sqliteTable("records", {
|
|
1666
1684
|
id: integer("id").primaryKey(),
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wirecat/cli-core",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.597.0",
|
|
4
4
|
"description": "The messenger-neutral half of a messaging CLI: domain model, message locators, rendering, name resolution, the SQLite seam, the command skeleton and shared read commands, the send guard, run records and the message store",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"author": "Viacheslav Ptsarev",
|
|
@@ -13,6 +13,12 @@
|
|
|
13
13
|
"url": "https://github.com/WireCatLabs/cli-core/issues"
|
|
14
14
|
},
|
|
15
15
|
"type": "module",
|
|
16
|
+
"wirecat": {
|
|
17
|
+
"store": {
|
|
18
|
+
"speaks": 54,
|
|
19
|
+
"minCompatible": 34
|
|
20
|
+
}
|
|
21
|
+
},
|
|
16
22
|
"engines": {
|
|
17
23
|
"node": "^22.16.0 || >=24"
|
|
18
24
|
},
|