mcp-scraper 0.30.0 → 0.31.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.
@@ -29723,7 +29723,7 @@ var PACKAGE_VERSION;
29723
29723
  var init_version = __esm({
29724
29724
  "src/version.ts"() {
29725
29725
  "use strict";
29726
- PACKAGE_VERSION = "0.30.0";
29726
+ PACKAGE_VERSION = "0.31.0";
29727
29727
  }
29728
29728
  });
29729
29729
 
@@ -29845,18 +29845,19 @@ Multi-step orchestrations \u2014 prefer these over hand-chaining primitives when
29845
29845
 
29846
29846
  ## Memory
29847
29847
  mcp-scraper also exposes persistent per-user memory tools (notes, facts, vaults,
29848
- scheduled actions, tables, channels) backed by memory.mcpscraper.dev. Every account starts with 15
29848
+ scheduled actions, tables, channels) backed by memory.mcpscraper.dev. Every account starts with 16
29849
29849
  vaults \u2014 call **list-vaults** to see what exists before creating anything new. Pick the vault whose job
29850
29850
  matches the content: **Ideas** (unvalidated concepts), **Knowledge** (distilled lessons/how-tos),
29851
- **Library** (raw source material \u2014 articles, transcripts), **People** (one durable note per person/org),
29852
- **Deals** (commercial opportunities tied to a known person or organization), **Communications** (individual
29851
+ **Library** (raw source material \u2014 articles, transcripts), **People** (one durable note per real person),
29852
+ **Organizations** (one durable hub per company or organization \u2014 never a person),
29853
+ **Deals** (commercial opportunities tied to a known organization or person), **Communication** (individual
29853
29854
  conversation records and drafts), **Calendar** (time-anchored entries), **Tasks** (independent Inbox action items
29854
29855
  that may link to a known Project), **Projects** (only codebases, known client projects, personal projects, or ongoing siloed
29855
29856
  workstreams), **Issues** (something broken),
29856
29857
  **Improvement Log** (receipts of changes made and whether they worked), **Experiments** (hypothesis +
29857
- measured result), **Sprint** (current cycle's scope), **Inspiration** (other people's work worth
29858
+ measured result), **Sprint** (current cycle's scope), **Examples and Inspirations** (other people's work worth
29858
29859
  studying), **Skills** (reusable skill packages; each requires \`scripts/\` and at least one of
29859
- \`references/\` or \`templates/\`, and may use both).
29860
+ \`references/\` or \`templates/\`, and may use both). The former names Inspiration and Communications still resolve.
29860
29861
  For a normal new narrative note, call **prepare-memory-write** first. It queries the live vault contract,
29861
29862
  tag vocabulary, and natural neighbor vaults, and returns interlink candidates that must be read before
29862
29863
  acceptance. Compose every returned template section, then call **memory-capture**, which validates the
@@ -29875,7 +29876,7 @@ compatibility value when the template asks for it); Tasks can be independent Inb
29875
29876
  project name; and email drafts awaiting human review need \`direction:"draft"\` with
29876
29877
  \`approval_state:"pending"\`. Link a known person, project, deal, or communication only when verified.
29877
29878
  When the user asks to add Gmail or Google Calendar evidence from a connected account, first resolve the
29878
- existing People hub. Persist Gmail as one linked **Communications** email and Calendar as one linked
29879
+ existing People hub. Persist Gmail as one linked **Communication** email and Calendar as one linked
29879
29880
  **Calendar** event, each with the provider's stable reference and \`person_refs\`; do not create a person
29880
29881
  from a subject line, infer attendees, or silently bulk-import a mailbox/calendar. If a relationship is requested but not clear, ask the user rather than inventing one. Overview is the review queue: editing leaves a draft pending, and
29881
29882
  approval or denial records a state only\u2014it does not send email.
@@ -34479,7 +34480,7 @@ var init_memory_tool_schemas = __esm({
34479
34480
  GetChatLinkSchema = {
34480
34481
  id: "get-chat-link",
34481
34482
  upstreamName: "getChatLinkTool",
34482
- description: "Get your durable, bookmarkable link to the hosted Omni-Chat page \u2014 a login-free chat UI for every channel you're in. The embedded secret is shown only once, on first call; it cannot be re-shown, only revoked and reissued via revoke-chat-link. Anyone holding the link can post as you.",
34483
+ description: "Get your durable, bookmarkable link to the hosted Inbox chat page \u2014 a login-free chat UI for every channel you're in. The embedded secret is shown only once, on first call; it cannot be re-shown, only revoked and reissued via revoke-chat-link. Anyone holding the link can post as you.",
34483
34484
  input: {},
34484
34485
  output: {
34485
34486
  ok: import_zod37.z.boolean().describe("True on success; false on auth error."),
@@ -34498,7 +34499,7 @@ var init_memory_tool_schemas = __esm({
34498
34499
  GetVaultAppLinkSchema = {
34499
34500
  id: "get-vault-app-link",
34500
34501
  upstreamName: "getVaultAppLinkTool",
34501
- description: "Get the durable, bookmarkable link to the mobile-first Vault App for People, Projects, and Tasks. The embedded secret is shown only once; revoke-vault-app-link then call this tool again to replace a link that was shared or leaked. This link is independent from Omni-Chat. Anyone holding it can use the Vault App as this identity.",
34502
+ description: "Get the durable, bookmarkable link to the mobile-first Vault App for People, Projects, and Tasks. The embedded secret is shown only once; revoke-vault-app-link then call this tool again to replace a link that was shared or leaked. This link is independent from the Inbox chat link. Anyone holding it can use the Vault App as this identity.",
34502
34503
  input: {},
34503
34504
  output: {
34504
34505
  ok: import_zod37.z.boolean().describe("True when the request succeeded."),
@@ -34765,7 +34766,7 @@ var init_memory_tool_schemas = __esm({
34765
34766
  RevokeVaultAppLinkSchema = {
34766
34767
  id: "revoke-vault-app-link",
34767
34768
  upstreamName: "revokeVaultAppLinkTool",
34768
- description: "Immediately revoke the current Vault App link without touching the separate Omni-Chat link. Call get-vault-app-link afterward to mint a replacement.",
34769
+ description: "Immediately revoke the current Vault App link without touching the separate Inbox chat link. Call get-vault-app-link afterward to mint a replacement.",
34769
34770
  input: {},
34770
34771
  output: {
34771
34772
  ok: import_zod37.z.boolean().describe("True when the request succeeded."),
@@ -34979,7 +34980,7 @@ var init_memory_tool_schemas = __esm({
34979
34980
  MemoryCaptureSchema = {
34980
34981
  id: "memory-capture",
34981
34982
  upstreamName: "memoryCaptureTool",
34982
- description: "Strict normal-create path for durable memory. Before capture, list the complete tag vocabulary, call prepare-memory-write, run hybrid memory-search for related notes, and read the strongest link candidates. This tool refuses incomplete notes and invalid relationship-domain writes: projects need a project kind, tasks can be independent Inbox todos or link a verified project, deals need a known party, and draft emails need a pending approval state. It writes through memory-put, registers canonical tags, and verifies persisted content and props. Reserve memory-put for low-level migrations or deliberate edits.",
34983
+ description: "Strict normal-create path for durable memory. Before capture, list the complete tag vocabulary, call prepare-memory-write, run hybrid memory-search for related notes, and read the strongest link candidates. This tool refuses incomplete notes and invalid relationship-domain writes: projects need a project kind, tasks may be independent Inbox todos but must use a matched project when linked, deals need a known party, and draft emails need a pending approval state. It writes through memory-put, registers canonical tags, and verifies persisted content and props. Reserve memory-put for low-level migrations or deliberate edits.",
34983
34984
  input: {
34984
34985
  vault: import_zod37.z.string(),
34985
34986
  folder: import_zod37.z.string().optional(),
@@ -35037,7 +35038,7 @@ var init_memory_tool_schemas = __esm({
35037
35038
  PrepareMemoryWriteSchema = {
35038
35039
  id: "prepare-memory-write",
35039
35040
  upstreamName: "prepareMemoryWriteTool",
35040
- description: "Mandatory planning pass for a normal new memory. First inspect the complete tag vocabulary with list-memory-tags; then this pass routes the note, returns the live template and natural vault relationships, resolves proposed tags, and shortlists interlinks. For People, Deals, Projects, Tasks, and Communications, it also returns relationship and approval guidance: a Task may be an independent Inbox todo, so search existing records only before adding a requested project or party link and never invent one. Use hybrid memory-search (3 focused queries, 50 fused candidates, bounded graph expansion, rerank to 30 by default) and read strong related notes before capture. This is an explicit AI workflow directive, not a claim of persisted call-order enforcement.",
35041
+ description: "Mandatory planning pass for a normal new memory. First inspect the complete tag vocabulary with list-memory-tags; then this pass routes the note, returns the live template and natural vault relationships, resolves proposed tags, and shortlists interlinks. For People, Organizations, Deals, Projects, Tasks, and Communication, it also returns relationship and approval guidance: search existing records before linking, but do not invent a project or party. A Task can remain an independent Inbox todo. Use hybrid memory-search (3 focused queries, 50 fused candidates, bounded graph expansion, rerank to 30 by default) and read strong related notes before capture. This is an explicit AI workflow directive, not a claim of persisted call-order enforcement.",
35041
35042
  input: {
35042
35043
  title: import_zod37.z.string().min(1),
35043
35044
  content: import_zod37.z.string().min(1),
@@ -35101,7 +35102,7 @@ var init_memory_tool_schemas = __esm({
35101
35102
  CreateChannelSchema = {
35102
35103
  id: "create-channel",
35103
35104
  upstreamName: "createChannelTool",
35104
- description: "Create an Omni-Chat channel \u2014 a vault for threaded messages, reactions, and mentions instead of ordinary notes. Starts private to you; optionally invite initial members in the same call, each still gated by the normal sender-approval trust check. Requires write scope.",
35105
+ description: "Create an Inbox channel \u2014 a vault for threaded messages, reactions, and mentions instead of ordinary notes. Starts private to you; optionally invite initial members in the same call, each still gated by the normal sender-approval trust check. Requires write scope.",
35105
35106
  input: {
35106
35107
  name: import_zod37.z.string().min(1).describe("Channel name. Must match ^[A-Za-z0-9 _-]{1,48}$."),
35107
35108
  inviteMembers: import_zod37.z.array(
@@ -35184,7 +35185,7 @@ var init_memory_tool_schemas = __esm({
35184
35185
  ListChannelMessagesSchema = {
35185
35186
  id: "list-channel-messages",
35186
35187
  upstreamName: "listChannelMessagesTool",
35187
- description: "Read an Omni-Chat channel: top-level messages by default, or one thread's replies when parentMessageId is given. Every message returned is marked read for you, visible to other members via readBy. Requires read access on the channel.",
35188
+ description: "Read an Inbox channel: top-level messages by default, or one thread's replies when parentMessageId is given. Every message returned is marked read for you, visible to other members via readBy. Requires read access on the channel.",
35188
35189
  input: {
35189
35190
  vault: import_zod37.z.string().min(1).describe("The channel (vault) to read."),
35190
35191
  parentMessageId: import_zod37.z.string().optional().describe("If given, list this thread's replies instead of top-level channel messages.")
@@ -35219,7 +35220,7 @@ var init_memory_tool_schemas = __esm({
35219
35220
  MyMentionsSchema = {
35220
35221
  id: "my-mentions",
35221
35222
  upstreamName: "myMentionsTool",
35222
- description: "List every place you're @mentioned across all Omni-Chat channels you are CURRENTLY a member of, newest first \u2014 mentions in channels you've since left do not appear.",
35223
+ description: "List every place you're @mentioned across all Inbox channels you are CURRENTLY a member of, newest first \u2014 mentions in channels you've since left do not appear.",
35223
35224
  input: {
35224
35225
  limit: import_zod37.z.number().int().min(1).max(100).optional().describe("Max mentions to return. Optional; default 25.")
35225
35226
  },
@@ -35272,7 +35273,7 @@ var init_memory_tool_schemas = __esm({
35272
35273
  PostMessageSchema = {
35273
35274
  id: "post-message",
35274
35275
  upstreamName: "postMessageTool",
35275
- description: "Post a top-level message to an Omni-Chat channel. @mentioning a member's email surfaces it in their my-mentions inbox; attachNote auto-shares one of your notes with every current channel member. Requires write access on the channel.",
35276
+ description: "Post a top-level message to an Inbox channel. @mentioning a member's email surfaces it in their my-mentions inbox; attachNote auto-shares one of your notes with every current channel member. Requires write access on the channel.",
35276
35277
  input: {
35277
35278
  vault: import_zod37.z.string().min(1).describe("The channel (vault) to post to."),
35278
35279
  content: import_zod37.z.string().min(1).describe("The message text."),
@@ -35345,7 +35346,7 @@ var init_memory_tool_schemas = __esm({
35345
35346
  ReplyMessageSchema = {
35346
35347
  id: "reply-message",
35347
35348
  upstreamName: "replyMessageTool",
35348
- description: "Reply inside a top-level message's thread in an Omni-Chat channel \u2014 one level of nesting only, so always reply on the top-level parentMessageId. @mentions and attachNote behave as in post-message. Requires write access on the channel.",
35349
+ description: "Reply inside a top-level message's thread in an Inbox channel \u2014 one level of nesting only, so always reply on the top-level parentMessageId. @mentions and attachNote behave as in post-message. Requires write access on the channel.",
35349
35350
  input: {
35350
35351
  vault: import_zod37.z.string().min(1).describe("The channel (vault) the parent message is in."),
35351
35352
  parentMessageId: import_zod37.z.string().min(1).describe("The top-level message to reply under (messageId from post-message or list-channel-messages)."),
@@ -35744,10 +35745,10 @@ var init_memory_tool_schemas = __esm({
35744
35745
  PutSchema = {
35745
35746
  id: "memory-put",
35746
35747
  upstreamName: "putTool",
35747
- description: "Create or deliberately edit one note at a path in a memory vault; content is persisted and indexed for search. For normal new People, Deals, Projects, Tasks, or Communications records, use prepare-memory-write then memory-capture: People must be real people or organizations, Deals need a known party, Projects need a supported kind, Tasks may be independent Inbox todos or use a verified Project link when requested, and draft emails need pending approval. For row-shaped datasets you'll filter/sort by exact value, use table-create/table-insert-rows/table-query instead. Ordinary vaults are indexed and shareable \u2014 never store real secrets there; use a secure vault (create-secure-vault) instead, which is never indexed or shareable and is encrypted at rest. Requires write scope.",
35748
+ description: "Create or deliberately edit one note at a path in a memory vault; content is persisted and indexed for search. For normal new People, Organizations, Deals, Projects, Tasks, or Communication records, use prepare-memory-write then memory-capture: People must be real people, Organizations must be real organizations, Deals need a known party, Projects need a supported kind, Tasks can be independent Inbox todos or use a verified Project when linked, and draft emails need pending approval. For row-shaped datasets you'll filter/sort by exact value, use table-create/table-insert-rows/table-query instead. Ordinary vaults are indexed and shareable \u2014 never store real secrets there; use a secure vault (create-secure-vault) instead, which is never indexed or shareable and is encrypted at rest. Requires write scope.",
35748
35749
  input: {
35749
35750
  vault: import_zod37.z.string().optional().describe(
35750
- "Vault to write to. Optional; defaults to the session active vault, then the first vault the caller is entitled to. On a default-provisioned account, pick the vault whose job matches the content (see the server instructions for the full 15-vault guide) rather than defaulting blindly \u2014 e.g. a lesson learned goes in Knowledge, the raw source it came from goes in Library, a broken feature goes in Issues, a named real-world initiative goes in Projects. Do not use this low-level tool to create ordinary People, Deals, Projects, Tasks, or Communications records: first use prepare-memory-write then memory-capture so relationships and approval state are validated."
35751
+ "Vault to write to. Optional; defaults to the session active vault, then the first vault the caller is entitled to. On a default-provisioned account, pick the vault whose job matches the content (see the server instructions for the full 16-vault guide) rather than defaulting blindly \u2014 e.g. a lesson learned goes in Knowledge, the raw source it came from goes in Library, a broken feature goes in Issues, a named real-world initiative goes in Projects. Do not use this low-level tool to create ordinary People, Organizations, Deals, Projects, Tasks, or Communication records: first use prepare-memory-write then memory-capture so relationships and approval state are validated."
35751
35752
  ),
35752
35753
  path: import_zod37.z.string().optional().describe("Vault-relative note path to create or overwrite, e.g. projects/q3-plan. Writing an existing path replaces it. Required unless shareId is given."),
35753
35754
  shareId: import_zod37.z.string().optional().describe("Edit a note someone individually shared with you and you accepted (accept-share), by its shareId, instead of vault+path. Requires the share to grant edit permission, and baseRevision is mandatory (get the current revision first) since you are editing alongside the owner and possibly others."),
@@ -35944,12 +35945,12 @@ var init_memory_tool_schemas = __esm({
35944
35945
  CreateScheduledActionSchema = {
35945
35946
  id: "create-scheduled-action",
35946
35947
  upstreamName: "createScheduledActionTool",
35947
- description: "Create a Credit-metered scheduled action for an active MCP Scraper Starter plan or higher, in agent mode (default) or connection_sync mode. Each execution has a 75-Credit base charge; agent model usage is added at 1.5 times OpenRouter's actual reported cost. Agent mode follows the description and writes a result into the target vault. connection_sync deterministically runs the approved read-only tools on bound service connections and ingests their data; it requires at least one connection to be bound before execution. Google Search Console syncs also upsert a typed tenant-owned performance table for exact filtering with table-query; discover its tableName by calling list_service_connections after the first successful run. Cadence 'once' runs a single time then completes permanently. Requires write access to the target vault.",
35948
+ description: "Create a Credit-metered scheduled action for an active MCP Scraper Starter plan or higher, in agent mode (default) or connection_sync mode. Each execution has a 75-Credit base charge; agent model usage is added at 1.5 times OpenRouter's actual reported cost. Agent mode follows the description and writes a result into the target vault. connection_sync deterministically runs the approved read-only tools on bound service connections and ingests their data; it requires at least one connection to be bound before execution. Cadence 'once' runs a single time then completes permanently. Requires write access to the target vault.",
35948
35949
  input: {
35949
35950
  description: import_zod37.z.string().min(1).describe("Free-text description of what this action should do each time it runs."),
35950
35951
  vault: import_zod37.z.string().min(1).describe("The vault this action writes its results into. You must already have write access to it."),
35951
35952
  cadence: import_zod37.z.enum(["once", "daily", "weekly", "monthly"]).describe('How often this action runs. "once" fires a single time and then completes.'),
35952
- executionMode: import_zod37.z.enum(["agent", "connection_sync"]).default("agent").describe(`How to execute each run. "agent" (default) lets an agent follow the description. "connection_sync" deterministically ingests data from the schedule's bound connections using only their approved read-only tools; bind at least one connection before it runs. Search Console connection_sync also maintains a typed table exposed as the connection tableName.`),
35953
+ executionMode: import_zod37.z.enum(["agent", "connection_sync"]).default("agent").describe(`How to execute each run. "agent" (default) lets an agent follow the description. "connection_sync" deterministically ingests data from the schedule's bound connections using only their approved read-only tools; bind at least one connection before it runs.`),
35953
35954
  timeOfDay: import_zod37.z.string().regex(/^([01]\d|2[0-3]):([0-5]\d)$/).optional().describe("24-hour HH:MM clock time to run at, in the given timezone. Optional \u2014 omit to run at any time during the period (matches prior default behavior)."),
35954
35955
  timezone: import_zod37.z.string().optional().describe(`IANA timezone name, e.g. "America/Denver". Only meaningful together with timeOfDay or deployDate. Omit to use the account's default timezone (set via set-schedule-defaults), falling back to UTC.`),
35955
35956
  deployDate: import_zod37.z.string().regex(/^\d{4}-\d{2}-\d{2}$/).optional().describe('Calendar date (YYYY-MM-DD, in the given timezone) this action should first become eligible to run \u2014 its deployment/start date. For recurring cadences, the first occurrence lands on or after this date; every later occurrence still follows the normal cadence. For cadence "once", this (combined with timeOfDay if given) is exactly what day it fires. Omit to start immediately.')
@@ -36534,9 +36535,9 @@ var init_memory_tool_schemas = __esm({
36534
36535
  GetVaultContractSchema = {
36535
36536
  id: "get-vault-contract",
36536
36537
  upstreamName: "getVaultContractTool",
36537
- description: "Read the machine-enforced purpose, template, statuses, types, natural neighbor vaults, and typed relationship guidance for one of the 15 governed Obsidian-style vaults. Call before composing a note when the correct shape is uncertain.",
36538
+ description: "Read the machine-enforced purpose, template, statuses, types, required and recommended props, natural neighbor vaults, and typed relationship guidance for one of the 16 governed Obsidian-style vaults. Call before composing a note when the correct shape is uncertain.",
36538
36539
  input: {
36539
- vault: import_zod37.z.string().describe("One governed vault: Ideas, Inspiration, Knowledge, Library, People, Deals, Communications, Calendar, Tasks, Projects, Issues, Improvement Log, Experiments, Sprint, or Skills.")
36540
+ vault: import_zod37.z.string().describe("One governed vault: Ideas, Examples and Inspirations, Knowledge, Library, People, Organizations, Deals, Communication, Calendar, Tasks, Projects, Issues, Improvement Log, Experiments, Sprint, or Skills. Former names Inspiration and Communications still resolve.")
36540
36541
  },
36541
36542
  output: {
36542
36543
  ok: import_zod37.z.boolean(),
@@ -36590,7 +36591,7 @@ var init_memory_tool_schemas = __esm({
36590
36591
  sharedBy: import_zod37.z.string().optional().describe('Identity that shared the vault with the caller. Present only when role is "shared".'),
36591
36592
  notes: import_zod37.z.number().describe("Number of notes currently stored in the vault."),
36592
36593
  bytes: import_zod37.z.number().describe("Total stored size of the vault content in bytes (octet_length sum)."),
36593
- kind: import_zod37.z.enum(["notes", "channel", "secure"]).describe('"channel" for an Omni-Chat channel (created via create-channel); "secure" for a private, encrypted, unshareable, unindexed vault (created via create-secure-vault) \u2014 safe to store credentials there; "notes" for an ordinary vault.')
36594
+ kind: import_zod37.z.enum(["notes", "channel", "secure"]).describe('"channel" for an Inbox channel (created via create-channel); "secure" for a private, encrypted, unshareable, unindexed vault (created via create-secure-vault) \u2014 safe to store credentials there; "notes" for an ordinary vault.')
36594
36595
  })
36595
36596
  ).optional().describe("Every vault visible in the active account, with role, addressable handle, and live storage usage. Present when ok is true."),
36596
36597
  error: import_zod37.z.string().optional().describe("Human-readable failure reason when ok is false.")
@@ -36606,17 +36607,17 @@ var init_memory_tool_schemas = __esm({
36606
36607
  ProvisionDefaultsSchema = {
36607
36608
  id: "provision-defaults",
36608
36609
  upstreamName: "provisionDefaultsTool",
36609
- description: "Provision the standard 15-vault memory structure (Ideas, Inspiration, Knowledge, Library, People, Deals, Communications, Calendar, Tasks, Projects, Issues, Improvement Log, Experiments, Sprint, Skills) for an identity. Idempotent \u2014 existing records are untouched and existing vault contracts are refreshed. Optionally issues a fresh API key entitled to all 15. Requires admin scope.",
36610
+ description: "Provision the standard 16-vault memory structure (Ideas, Examples and Inspirations, Knowledge, Library, People, Organizations, Deals, Communication, Calendar, Tasks, Projects, Issues, Improvement Log, Experiments, Sprint, Skills) for an identity. Idempotent \u2014 existing records are untouched and existing vault contracts are refreshed. Optionally issues a fresh API key entitled to all 16. Requires admin scope.",
36610
36611
  input: {
36611
- granteeIdentity: import_zod37.z.string().min(1).describe("Identity that should OWN the 15 default vaults (e.g. an email or user id)."),
36612
- issueKey: import_zod37.z.boolean().optional().describe("When true, also issue a new API key for the identity entitled to all 15 vaults and return its secret once. Default false."),
36612
+ granteeIdentity: import_zod37.z.string().min(1).describe("Identity that should OWN the 16 default vaults (e.g. an email or user id)."),
36613
+ issueKey: import_zod37.z.boolean().optional().describe("When true, also issue a new API key for the identity entitled to all 16 vaults and return its secret once. Default false."),
36613
36614
  plan: import_zod37.z.enum(["free", "pro", "team", "enterprise"]).optional().describe("Subscription plan carried by the issued key. Optional; defaults to free. Only used when issueKey is true.")
36614
36615
  },
36615
36616
  output: {
36616
36617
  ok: import_zod37.z.boolean().describe("True when provisioning succeeded; false on auth/scope error."),
36617
36618
  identity: import_zod37.z.string().optional().describe("Identity the vaults were provisioned for."),
36618
- created: import_zod37.z.array(import_zod37.z.string()).optional().describe("Vault names newly created on this call (empty when all 15 already existed)."),
36619
- vaults: import_zod37.z.array(import_zod37.z.string()).optional().describe("All 15 default vault names the identity now owns."),
36619
+ created: import_zod37.z.array(import_zod37.z.string()).optional().describe("Vault names newly created on this call (empty when all 16 already existed)."),
36620
+ vaults: import_zod37.z.array(import_zod37.z.string()).optional().describe("All 16 default vault names the identity now owns."),
36620
36621
  keyId: import_zod37.z.string().optional().describe("Stable id of the issued key. Present only when issueKey was true."),
36621
36622
  secret: import_zod37.z.string().optional().describe("The issued key secret \u2014 RETURNED ONCE. Present only when issueKey was true."),
36622
36623
  plan: import_zod37.z.string().optional().describe("Plan assigned to the issued key. Present only when issueKey was true."),
@@ -41274,6 +41275,7 @@ function normalizeRelationshipProps(vault, props) {
41274
41275
  }
41275
41276
  function defaultType(vault) {
41276
41277
  if (vault === "People" || vault === "Communications") return "unclassified";
41278
+ if (vault === "Organizations") return "organization";
41277
41279
  if (vault === "Deals") return "deal";
41278
41280
  if (vault === "Projects") return "project";
41279
41281
  if (vault === "Tasks") return "task";
@@ -41281,7 +41283,7 @@ function defaultType(vault) {
41281
41283
  return "unclassified";
41282
41284
  }
41283
41285
  function defaultStatus(vault) {
41284
- if (vault === "People") return "active";
41286
+ if (vault === "People" || vault === "Organizations") return "active";
41285
41287
  if (vault === "Deals") return "lead";
41286
41288
  if (vault === "Projects") return "active";
41287
41289
  if (vault === "Tasks") return "to_do";
@@ -41294,6 +41296,12 @@ function nonEmptyStrings(value) {
41294
41296
  function validateNewRecord(vault, props) {
41295
41297
  const type = typeof props.type === "string" ? props.type : "";
41296
41298
  if (vault === "People" && !["person", "organization"].includes(type)) return "People records must be a person or organization";
41299
+ if (vault === "Organizations") {
41300
+ if (type !== "organization") return "Organizations records must have type organization";
41301
+ if (typeof props.organization_name !== "string" || !props.organization_name.trim()) {
41302
+ return "Organizations require organization_name";
41303
+ }
41304
+ }
41297
41305
  if (vault === "Deals") {
41298
41306
  if (type !== "deal") return "Deals records must have type deal";
41299
41307
  if (typeof props.organization_ref !== "string" && nonEmptyStrings(props.person_refs).length === 0) {
@@ -41369,7 +41377,7 @@ var init_vault_routes = __esm({
41369
41377
  "use strict";
41370
41378
  import_hono22 = require("hono");
41371
41379
  init_memory();
41372
- VAULTS = ["People", "Deals", "Projects", "Tasks", "Communications", "Calendar"];
41380
+ VAULTS = ["People", "Organizations", "Deals", "Projects", "Tasks", "Communications", "Calendar"];
41373
41381
  PROJECT_TYPES = ["codebase", "personal", "work", "client"];
41374
41382
  PROJECT_KIND_BY_TYPE = {
41375
41383
  codebase: "codebase",