@scribed/cli 0.1.23 → 0.1.24
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/dist/index.js +12 -9
- package/dist/mcp/server.js +11 -8
- package/package.json +3 -3
package/dist/index.js
CHANGED
|
@@ -50896,7 +50896,7 @@ var program = new Command;
|
|
|
50896
50896
|
// package.json
|
|
50897
50897
|
var package_default = {
|
|
50898
50898
|
name: "@scribed/cli",
|
|
50899
|
-
version: "0.1.
|
|
50899
|
+
version: "0.1.24",
|
|
50900
50900
|
description: "Command-line client + MCP server for Scribed — CRM records, phone + texting, inbox, calendar + booking, transcriptions, HR, Vault, automations, Creative Studio, and Documents, derived from the scribed-agent tool catalog.",
|
|
50901
50901
|
type: "module",
|
|
50902
50902
|
license: "SEE LICENSE IN LICENSE",
|
|
@@ -76084,7 +76084,7 @@ class StreamableHTTPClientTransport {
|
|
|
76084
76084
|
// package.json
|
|
76085
76085
|
var package_default2 = {
|
|
76086
76086
|
name: "@scribed/cli",
|
|
76087
|
-
version: "0.1.
|
|
76087
|
+
version: "0.1.24",
|
|
76088
76088
|
description: "Command-line client + MCP server for Scribed — CRM records, phone + texting, inbox, calendar + booking, transcriptions, HR, Vault, automations, Creative Studio, and Documents, derived from the scribed-agent tool catalog.",
|
|
76089
76089
|
type: "module",
|
|
76090
76090
|
license: "SEE LICENSE IN LICENSE",
|
|
@@ -83890,8 +83890,9 @@ async function fetchObjectType(client, workspaceId10, collectionId) {
|
|
|
83890
83890
|
throw new Error("Scribed API returned no collection.");
|
|
83891
83891
|
return res.collection;
|
|
83892
83892
|
}
|
|
83893
|
-
async function fetchObjectRecord(client, workspaceId10, recordId) {
|
|
83894
|
-
const
|
|
83893
|
+
async function fetchObjectRecord(client, workspaceId10, recordId, sourceCollectionId) {
|
|
83894
|
+
const selector = sourceCollectionId ? `?collectionId=${encodeURIComponent(sourceCollectionId)}` : "";
|
|
83895
|
+
const res = await client.get(`${collectionApi(workspaceId10)}/records/${encodeURIComponent(recordId)}${selector}`);
|
|
83895
83896
|
if (!res?.record)
|
|
83896
83897
|
throw new Error(`No record with id '${recordId}' — get record ids from objects_records_list.`);
|
|
83897
83898
|
return res.record;
|
|
@@ -83946,7 +83947,9 @@ function objectTypeSummary(type) {
|
|
|
83946
83947
|
description: type.description ?? "",
|
|
83947
83948
|
titleFieldKey: keyFor(type.titleFieldId),
|
|
83948
83949
|
pipelineFieldKey: keyFor(type.pipelineFieldId),
|
|
83949
|
-
recordCount: typeof type.recordCount === "number" ? type.recordCount : 0,
|
|
83950
|
+
recordCount: type.recordCountAvailable === false ? null : typeof type.recordCount === "number" ? type.recordCount : 0,
|
|
83951
|
+
...type.recordCountAvailable === undefined ? {} : { recordCountAvailable: type.recordCountAvailable },
|
|
83952
|
+
...type.sourceStatus ? { sourceStatus: type.sourceStatus } : {},
|
|
83950
83953
|
fields: type.fields.map((f) => {
|
|
83951
83954
|
const outcomes = (f.options ?? []).filter((o) => stageOutcomeOf(o) !== null);
|
|
83952
83955
|
return {
|
|
@@ -84149,7 +84152,7 @@ var objectsSourcesList = collectionRestTool({
|
|
|
84149
84152
|
});
|
|
84150
84153
|
var objectsSourceAdd = collectionRestTool({
|
|
84151
84154
|
description: "Add an existing service as a collection for the selected account or workspace owner. Discover supported sources with objects_sources_list. Reuses installed metadata and saved views without copying records. Requires an editor or manager. Generic record and field writes are protected; open row.source.href for original service actions. Credential metadata requires vault access and never includes secrets. Financials combines authorized payroll entries and native imported transactions, statements and reconciliations without duplicating pay-run totals. Use financials_entries_list/import and financials_entry_review for imported data; generic record writes remain protected. Prefer Financials over the legacy pay_runs/pay_items sources. Capital reads live SAFE activity and standalone investment positions linked to canonical Contacts, Deals and Raises; adding it creates no agreement or payment. Use a returned saved viewId with workspace_page_create(kind=collection) for a Capital page, or bind it to a view block on any doc page. Check existing pages/views first. Account scope supports only sources returned by account-scoped discovery; workspace-only services remain unavailable there. Account-owned data remains personal and Notes retain their separate session-only access.",
|
|
84152
|
-
inputSchema: exports_external.object({ workspaceId: WorkspaceIdArg, scope: AccountResourceScopeArg, source: exports_external.enum(["transcriptions", "events", "members", "ideas", "comments", "bulletins", "credentials", "activity", "forms", "financials", "capital", "pay_runs", "pay_items", "notes", "vault"]) }).refine(({ scope, source }) => scope === "account" ? ["transcriptions", "notes", "vault", "activity"].includes(source) : source !== "notes" && source !== "vault", { path: ["source"], message: "Choose a source available to the selected account or workspace owner." }),
|
|
84155
|
+
inputSchema: exports_external.object({ workspaceId: WorkspaceIdArg, scope: AccountResourceScopeArg, source: exports_external.enum(["transcriptions", "events", "members", "ideas", "comments", "bulletins", "credentials", "activity", "forms", "financials", "capital", "pay_runs", "pay_items", "notes", "vault", "phone_calls", "phone_messages", "phone_call_campaigns", "phone_call_entries", "phone_sms_campaigns", "phone_sms_recipients", "time_entries", "timecards", "time_off", "time_off_balances", "compensation", "form_responses", "data_rooms", "data_room_files", "metric_targets"]) }).refine(({ scope, source }) => scope === "account" ? ["transcriptions", "notes", "vault", "activity"].includes(source) : source !== "notes" && source !== "vault", { path: ["source"], message: "Choose a source available to the selected account or workspace owner." }),
|
|
84153
84156
|
method: "POST",
|
|
84154
84157
|
path: (a, ws) => `${collectionApi(ws)}/collections/sources/${encodeURIComponent(a.source)}`,
|
|
84155
84158
|
body: () => ({})
|
|
@@ -84202,7 +84205,7 @@ var objectsRecordTitles = collectionRestTool({
|
|
|
84202
84205
|
path: (a, ws) => `${collectionApi(ws)}/records/titles${query2({ ids: a.recordIds.join(",") })}`
|
|
84203
84206
|
});
|
|
84204
84207
|
var buildObjectsRecordRead = (personalTranscriptions = false) => Object.assign(defineTool({
|
|
84205
|
-
description: "Read ONE record — its full field values (valuesByKey by unique field KEY, plus legacy values by field label; option ids resolved to labels in both; optionIdsByKey retains stored option IDs for distinguishing same-label choices) plus its notes timeline (oldest first). Pass the recordId from objects_records_list; the
|
|
84208
|
+
description: "Read ONE record — its full field values (valuesByKey by unique field KEY, plus legacy values by field label; option ids resolved to labels in both; optionIdsByKey retains stored option IDs for distinguishing same-label choices) plus its notes timeline (oldest first). Pass the recordId from objects_records_list. Include its typeId or key for managed service rows, especially phone and HR; the selector is optional for ordinary records. Use this before answering detailed questions about a specific contact, company, deal, or task, or quoting its contents — never answer from the list row alone. Returns { collection, record: { id, collectionId, title, iconUrl?, values, valuesByKey, optionIdsByKey?, createdAt, updatedAt }, notes: [{ id, text, pinned, source, createdAt, updatedAt }] } — a formula field's value is the stored computed number (absent when its inputs were empty), never something to edit. 404 record_not_found = no active record with that id in this workspace. Managed service rows read the authorized collection projection without generic CRM notes (notesSupported:false); source.href opens the original service. Financials includes Payroll virtual entries. Use financials_entry_get/events for native imported entry evidence and version history; Payroll IDs are not imported entry IDs. For a service-managed transcription row this tool reads the exact canonical transcription and returns { collection, source, transcription, transcriptPage } instead of generic record notes. Pass its collection typeId/key when known. Continue long content with transcription_get using source.id, source.workspaceId for workspace sources, transcriptPage.nextOffset and transcriptPage.version as expectedVersion; never summarize from its title alone." + (personalTranscriptions ? " Use scope account for Personal transcription sources." : " Personal transcription source content requires the signed-in interactive Scribed agent; ordinary account records remain readable here."),
|
|
84206
84209
|
inputSchema: exports_external.object({
|
|
84207
84210
|
...AccountCollectionSelector,
|
|
84208
84211
|
recordId: exports_external.string().min(1).max(100)
|
|
@@ -84240,7 +84243,7 @@ var buildObjectsRecordRead = (personalTranscriptions = false) => Object.assign(d
|
|
|
84240
84243
|
return await readTranscription(selected2);
|
|
84241
84244
|
let record3;
|
|
84242
84245
|
try {
|
|
84243
|
-
record3 = await fetchObjectRecord(client, workspaceId10, a.recordId);
|
|
84246
|
+
record3 = await fetchObjectRecord(client, workspaceId10, a.recordId, selected2?.id);
|
|
84244
84247
|
} catch (error51) {
|
|
84245
84248
|
const source = !selected2 && types.find((type2) => type2.source === "transcriptions");
|
|
84246
84249
|
if (source && error51 instanceof AppWorkerError && error51.status === 404 && error51.details?.code === "record_not_found") {
|
|
@@ -84249,7 +84252,7 @@ var buildObjectsRecordRead = (personalTranscriptions = false) => Object.assign(d
|
|
|
84249
84252
|
throw error51;
|
|
84250
84253
|
}
|
|
84251
84254
|
const type = types.find((t) => t.id === record3.collectionId);
|
|
84252
|
-
if (type?.source
|
|
84255
|
+
if (type?.source && record3.source) {
|
|
84253
84256
|
return { collection: collectionRef(type), record: presentObjectRecord(type, record3), notes: [], notesSupported: false };
|
|
84254
84257
|
}
|
|
84255
84258
|
const notesRes = await client.get(`${base14}/records/${encodeURIComponent(a.recordId)}/notes`);
|
package/dist/mcp/server.js
CHANGED
|
@@ -70177,7 +70177,7 @@ class StdioServerTransport {
|
|
|
70177
70177
|
// package.json
|
|
70178
70178
|
var package_default = {
|
|
70179
70179
|
name: "@scribed/cli",
|
|
70180
|
-
version: "0.1.
|
|
70180
|
+
version: "0.1.24",
|
|
70181
70181
|
description: "Command-line client + MCP server for Scribed — CRM records, phone + texting, inbox, calendar + booking, transcriptions, HR, Vault, automations, Creative Studio, and Documents, derived from the scribed-agent tool catalog.",
|
|
70182
70182
|
type: "module",
|
|
70183
70183
|
license: "SEE LICENSE IN LICENSE",
|
|
@@ -81776,8 +81776,9 @@ async function fetchObjectType(client, workspaceId10, collectionId) {
|
|
|
81776
81776
|
throw new Error("Scribed API returned no collection.");
|
|
81777
81777
|
return res.collection;
|
|
81778
81778
|
}
|
|
81779
|
-
async function fetchObjectRecord(client, workspaceId10, recordId) {
|
|
81780
|
-
const
|
|
81779
|
+
async function fetchObjectRecord(client, workspaceId10, recordId, sourceCollectionId) {
|
|
81780
|
+
const selector = sourceCollectionId ? `?collectionId=${encodeURIComponent(sourceCollectionId)}` : "";
|
|
81781
|
+
const res = await client.get(`${collectionApi(workspaceId10)}/records/${encodeURIComponent(recordId)}${selector}`);
|
|
81781
81782
|
if (!res?.record)
|
|
81782
81783
|
throw new Error(`No record with id '${recordId}' — get record ids from objects_records_list.`);
|
|
81783
81784
|
return res.record;
|
|
@@ -81832,7 +81833,9 @@ function objectTypeSummary(type) {
|
|
|
81832
81833
|
description: type.description ?? "",
|
|
81833
81834
|
titleFieldKey: keyFor(type.titleFieldId),
|
|
81834
81835
|
pipelineFieldKey: keyFor(type.pipelineFieldId),
|
|
81835
|
-
recordCount: typeof type.recordCount === "number" ? type.recordCount : 0,
|
|
81836
|
+
recordCount: type.recordCountAvailable === false ? null : typeof type.recordCount === "number" ? type.recordCount : 0,
|
|
81837
|
+
...type.recordCountAvailable === undefined ? {} : { recordCountAvailable: type.recordCountAvailable },
|
|
81838
|
+
...type.sourceStatus ? { sourceStatus: type.sourceStatus } : {},
|
|
81836
81839
|
fields: type.fields.map((f) => {
|
|
81837
81840
|
const outcomes = (f.options ?? []).filter((o) => stageOutcomeOf(o) !== null);
|
|
81838
81841
|
return {
|
|
@@ -82035,7 +82038,7 @@ var objectsSourcesList = collectionRestTool({
|
|
|
82035
82038
|
});
|
|
82036
82039
|
var objectsSourceAdd = collectionRestTool({
|
|
82037
82040
|
description: "Add an existing service as a collection for the selected account or workspace owner. Discover supported sources with objects_sources_list. Reuses installed metadata and saved views without copying records. Requires an editor or manager. Generic record and field writes are protected; open row.source.href for original service actions. Credential metadata requires vault access and never includes secrets. Financials combines authorized payroll entries and native imported transactions, statements and reconciliations without duplicating pay-run totals. Use financials_entries_list/import and financials_entry_review for imported data; generic record writes remain protected. Prefer Financials over the legacy pay_runs/pay_items sources. Capital reads live SAFE activity and standalone investment positions linked to canonical Contacts, Deals and Raises; adding it creates no agreement or payment. Use a returned saved viewId with workspace_page_create(kind=collection) for a Capital page, or bind it to a view block on any doc page. Check existing pages/views first. Account scope supports only sources returned by account-scoped discovery; workspace-only services remain unavailable there. Account-owned data remains personal and Notes retain their separate session-only access.",
|
|
82038
|
-
inputSchema: exports_external.object({ workspaceId: WorkspaceIdArg, scope: AccountResourceScopeArg, source: exports_external.enum(["transcriptions", "events", "members", "ideas", "comments", "bulletins", "credentials", "activity", "forms", "financials", "capital", "pay_runs", "pay_items", "notes", "vault"]) }).refine(({ scope, source }) => scope === "account" ? ["transcriptions", "notes", "vault", "activity"].includes(source) : source !== "notes" && source !== "vault", { path: ["source"], message: "Choose a source available to the selected account or workspace owner." }),
|
|
82041
|
+
inputSchema: exports_external.object({ workspaceId: WorkspaceIdArg, scope: AccountResourceScopeArg, source: exports_external.enum(["transcriptions", "events", "members", "ideas", "comments", "bulletins", "credentials", "activity", "forms", "financials", "capital", "pay_runs", "pay_items", "notes", "vault", "phone_calls", "phone_messages", "phone_call_campaigns", "phone_call_entries", "phone_sms_campaigns", "phone_sms_recipients", "time_entries", "timecards", "time_off", "time_off_balances", "compensation", "form_responses", "data_rooms", "data_room_files", "metric_targets"]) }).refine(({ scope, source }) => scope === "account" ? ["transcriptions", "notes", "vault", "activity"].includes(source) : source !== "notes" && source !== "vault", { path: ["source"], message: "Choose a source available to the selected account or workspace owner." }),
|
|
82039
82042
|
method: "POST",
|
|
82040
82043
|
path: (a, ws) => `${collectionApi(ws)}/collections/sources/${encodeURIComponent(a.source)}`,
|
|
82041
82044
|
body: () => ({})
|
|
@@ -82088,7 +82091,7 @@ var objectsRecordTitles = collectionRestTool({
|
|
|
82088
82091
|
path: (a, ws) => `${collectionApi(ws)}/records/titles${query2({ ids: a.recordIds.join(",") })}`
|
|
82089
82092
|
});
|
|
82090
82093
|
var buildObjectsRecordRead = (personalTranscriptions = false) => Object.assign(defineTool({
|
|
82091
|
-
description: "Read ONE record — its full field values (valuesByKey by unique field KEY, plus legacy values by field label; option ids resolved to labels in both; optionIdsByKey retains stored option IDs for distinguishing same-label choices) plus its notes timeline (oldest first). Pass the recordId from objects_records_list; the
|
|
82094
|
+
description: "Read ONE record — its full field values (valuesByKey by unique field KEY, plus legacy values by field label; option ids resolved to labels in both; optionIdsByKey retains stored option IDs for distinguishing same-label choices) plus its notes timeline (oldest first). Pass the recordId from objects_records_list. Include its typeId or key for managed service rows, especially phone and HR; the selector is optional for ordinary records. Use this before answering detailed questions about a specific contact, company, deal, or task, or quoting its contents — never answer from the list row alone. Returns { collection, record: { id, collectionId, title, iconUrl?, values, valuesByKey, optionIdsByKey?, createdAt, updatedAt }, notes: [{ id, text, pinned, source, createdAt, updatedAt }] } — a formula field's value is the stored computed number (absent when its inputs were empty), never something to edit. 404 record_not_found = no active record with that id in this workspace. Managed service rows read the authorized collection projection without generic CRM notes (notesSupported:false); source.href opens the original service. Financials includes Payroll virtual entries. Use financials_entry_get/events for native imported entry evidence and version history; Payroll IDs are not imported entry IDs. For a service-managed transcription row this tool reads the exact canonical transcription and returns { collection, source, transcription, transcriptPage } instead of generic record notes. Pass its collection typeId/key when known. Continue long content with transcription_get using source.id, source.workspaceId for workspace sources, transcriptPage.nextOffset and transcriptPage.version as expectedVersion; never summarize from its title alone." + (personalTranscriptions ? " Use scope account for Personal transcription sources." : " Personal transcription source content requires the signed-in interactive Scribed agent; ordinary account records remain readable here."),
|
|
82092
82095
|
inputSchema: exports_external.object({
|
|
82093
82096
|
...AccountCollectionSelector,
|
|
82094
82097
|
recordId: exports_external.string().min(1).max(100)
|
|
@@ -82126,7 +82129,7 @@ var buildObjectsRecordRead = (personalTranscriptions = false) => Object.assign(d
|
|
|
82126
82129
|
return await readTranscription(selected2);
|
|
82127
82130
|
let record3;
|
|
82128
82131
|
try {
|
|
82129
|
-
record3 = await fetchObjectRecord(client, workspaceId10, a.recordId);
|
|
82132
|
+
record3 = await fetchObjectRecord(client, workspaceId10, a.recordId, selected2?.id);
|
|
82130
82133
|
} catch (error51) {
|
|
82131
82134
|
const source = !selected2 && types.find((type2) => type2.source === "transcriptions");
|
|
82132
82135
|
if (source && error51 instanceof AppWorkerError && error51.status === 404 && error51.details?.code === "record_not_found") {
|
|
@@ -82135,7 +82138,7 @@ var buildObjectsRecordRead = (personalTranscriptions = false) => Object.assign(d
|
|
|
82135
82138
|
throw error51;
|
|
82136
82139
|
}
|
|
82137
82140
|
const type = types.find((t) => t.id === record3.collectionId);
|
|
82138
|
-
if (type?.source
|
|
82141
|
+
if (type?.source && record3.source) {
|
|
82139
82142
|
return { collection: collectionRef(type), record: presentObjectRecord(type, record3), notes: [], notesSupported: false };
|
|
82140
82143
|
}
|
|
82141
82144
|
const notesRes = await client.get(`${base14}/records/${encodeURIComponent(a.recordId)}/notes`);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@scribed/cli",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.24",
|
|
4
4
|
"description": "Command-line client + MCP server for Scribed — CRM records, phone + texting, inbox, calendar + booking, transcriptions, HR, Vault, automations, Creative Studio, and Documents, derived from the scribed-agent tool catalog.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "SEE LICENSE IN LICENSE",
|
|
@@ -39,9 +39,9 @@
|
|
|
39
39
|
"url": "git+https://github.com/q6th/scribed-web.git",
|
|
40
40
|
"directory": "scribed-cli"
|
|
41
41
|
},
|
|
42
|
-
"gitHead": "
|
|
42
|
+
"gitHead": "409663d349eaacf5bd08e72e93c94464540021bb",
|
|
43
43
|
"scribedRelease": {
|
|
44
44
|
"repository": "q6th/scribed-web",
|
|
45
|
-
"commit": "
|
|
45
|
+
"commit": "409663d349eaacf5bd08e72e93c94464540021bb"
|
|
46
46
|
}
|
|
47
47
|
}
|