@contractspec/example.pocket-family-office 1.48.0 → 1.49.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/dist/index.js +12 -2
- package/package.json +6 -6
package/dist/index.js
CHANGED
|
@@ -1186,6 +1186,16 @@ The endpoint requires \`POSTHOG_PROJECT_KEY\` environment variable to be set. If
|
|
|
1186
1186
|
|
|
1187
1187
|
## Events
|
|
1188
1188
|
|
|
1189
|
+
### OSS Adoption Funnel
|
|
1190
|
+
|
|
1191
|
+
| Event | Description | Properties |
|
|
1192
|
+
|-------|-------------|------------|
|
|
1193
|
+
| \`cta_install_click\` | Clicked Install OSS CTA | \`surface\` |
|
|
1194
|
+
| \`cta_studio_click\` | Clicked Studio waitlist CTA | \`surface\`, \`variant\` |
|
|
1195
|
+
| \`docs_quickstart_view\` | Entered quickstart docs path | \`surface\`, \`destination\` |
|
|
1196
|
+
| \`copy_command_click\` | Copied a command block | \`surface\`, \`language\`, \`filename\`, \`packageManager\` |
|
|
1197
|
+
| \`example_repo_open\` | Selected a template/example | \`surface\`, \`templateId\`, \`source\` |
|
|
1198
|
+
|
|
1189
1199
|
### Extension Events
|
|
1190
1200
|
|
|
1191
1201
|
| Event | Description | Properties |
|
|
@@ -1992,7 +2002,7 @@ The CLI is configured via \`.contractsrc.json\` in your project root.
|
|
|
1992
2002
|
\`\`\`
|
|
1993
2003
|
|
|
1994
2004
|
For full documentation, refer to the [package README](https://github.com/contractspec/monorepo/tree/main/packages/apps/cli-contractspec).
|
|
1995
|
-
`}];Q$(SW0);var kW0={format:"full",includeSchemas:!0,includeScenarios:!0,includeExamples:!0,includePolicy:!0,includeSideEffects:!0},cx0={...kW0,includeRelatedSpecs:!0,includeRelatedEvents:!0,includeRelatedPresentations:!0};var gM=U$.enum(["template","workflow","integration","knowledge","blueprint","ui","script","library"]),fM=U$.enum(["public","internal","experimental"]),bM=U$.enum(["playground","specs","builder","markdown","evolution"]),rW0=U$.enum(["idea","in_creation","experimental","beta","stable","deprecated"]),yM=U$.object({rootDocId:U$.string().optional(),goalDocId:U$.string().optional(),usageDocId:U$.string().optional(),referenceDocId:U$.string().optional(),constraintsDocId:U$.string().optional()}),oW0=U$.object({enabled:U$.boolean(),modes:U$.array(bM)}),iW0=U$.object({enabled:U$.boolean(),installable:U$.boolean()}),tW0=U$.object({enabled:U$.boolean()}),hM=U$.object({templates:U$.boolean(),sandbox:oW0,studio:iW0,mcp:tW0}),uM=U$.object({packageName:U$.string().min(1),feature:U$.string().optional(),blueprint:U$.string().optional(),presentations:U$.string().optional(),contracts:U$.string().optional(),handlers:U$.string().optional(),ui:U$.string().optional(),docs:U$.string().optional()}),cM=U$.object({version:U$.string(),key:U$.string().min(1),title:U$.string().optional(),description:U$.string().min(1),domain:U$.string().optional(),stability:rW0,owners:U$.array(U$.string()),tags:U$.array(U$.string()),docId:U$.array(U$.string()).optional(),kind:gM,visibility:fM,summary:U$.string().optional()}),aW0=U$.object({key:U$.string().min(1),version:U$.string().optional()}),sW0=U$.object({key:U$.string().min(1)}),zx=U$.object({meta:cM,docs:yM.optional(),surfaces:hM,entrypoints:uM,blueprint:U$.union([U$.record(U$.string(),U$.unknown()),aW0]).optional(),features:U$.array(U$.union([U$.record(U$.string(),U$.unknown()),sW0])).optional()});var lM=($)=>$;aX();var VZ0=WJ("Source",["upload","email","sync"]),OZ0=WJ("Channel",["email","sms","both"]),FZ0=WJ("Period",["P7d","P30d","P90d"]),qZ0=WJ("ObPeriod",["Pweek","Pmonth","Pquarter"]),MZ0=G1({name:"UploadDocumentInput",fields:{bucket:{type:Y0.NonEmptyString(),isOptional:!1},objectKey:{type:Y0.NonEmptyString(),isOptional:!1},mimeType:{type:Y0.NonEmptyString(),isOptional:!1},bytes:{type:Y0.Int_unsecure(),isOptional:!1},tags:{type:Y0.String_unsecure(),isOptional:!1,isArray:!0},uploadedAt:{type:Y0.Date(),isOptional:!1},source:{type:VZ0,isOptional:!1}}}),LZ0=G1({name:"UploadDocumentOutput",fields:{documentId:{type:Y0.String_unsecure(),isOptional:!1},ingestionJobId:{type:Y0.String_unsecure(),isOptional:!1}}}),PZ0=X6({meta:{key:"pfo.documents.upload",version:"1.0.0",description:"Stores an object in tenant storage and schedules ingestion into the knowledge base.",goal:"Allow users to ingest financial documents for processing.",context:"Part of the finance domain. Documents are uploaded to object storage and then processed by the ingestion pipeline.",owners:[y$.PlatformFinance],tags:["documents","ingestion",a$.Guide],stability:i0.Experimental},io:{input:MZ0,output:LZ0},policy:{auth:"user",rateLimit:{rpm:30,key:"user"}}}),EZ0=G1({name:"PaymentReminderInput",fields:{billId:{type:Y0.String_unsecure(),isOptional:!1},recipientEmail:{type:Y0.EmailAddress(),isOptional:!1},recipientPhone:{type:Y0.String_unsecure(),isOptional:!0},dueDate:{type:Y0.Date(),isOptional:!1},amountCents:{type:Y0.Int_unsecure(),isOptional:!1},currency:{type:Y0.Currency(),isOptional:!1},channel:{type:OZ0,isOptional:!1},memo:{type:Y0.String_unsecure(),isOptional:!0}}}),BZ0=G1({name:"PaymentReminderOutput",fields:{reminderId:{type:Y0.String_unsecure(),isOptional:!1},scheduledAt:{type:Y0.Date(),isOptional:!1}}}),RZ0=X6({meta:{key:"pfo.reminders.schedule-payment",version:"1.0.0",description:"Queues outbound email/SMS reminders for upcoming bills and adds an optional calendar hold.",goal:"Ensure bills are paid on time by notifying users.",context:"Finance automation. Reminders are sent via configured channels (email, SMS).",owners:[y$.PlatformFinance],tags:["payments","reminders",a$.Automation],stability:i0.Beta},io:{input:EZ0,output:BZ0},policy:{auth:"user"}}),CZ0=G1({name:"FinancialSummaryInput",fields:{period:{type:FZ0,isOptional:!1},includeVoiceSummary:{type:Y0.Boolean(),isOptional:!1}}}),SZ0=G1({name:"SummaryHighlight",fields:{label:{type:Y0.String_unsecure(),isOptional:!1},value:{type:Y0.String_unsecure(),isOptional:!1}}}),TZ0=G1({name:"FinancialSummaryOutput",fields:{summaryId:{type:Y0.String_unsecure(),isOptional:!1},generatedAt:{type:Y0.Date(),isOptional:!1},markdown:{type:Y0.String_unsecure(),isOptional:!1},highlights:{type:SZ0,isOptional:!1,isArray:!0},cashflowDelta:{type:Y0.Float_unsecure(),isOptional:!1}}}),wZ0=J1({meta:{key:"pfo.summary.generate",version:"1.0.0",description:"Runs RAG over financial documents and email threads to provide a natural-language summary with key metrics.",goal:"Provide a quick overview of financial status and recent activity.",context:"Uses RAG over ingested knowledge. Summaries can be dispatched or viewed in app.",owners:[y$.PlatformFinance],tags:["summary","ai",a$.Automation],stability:i0.Beta},io:{input:CZ0,output:TZ0},policy:{auth:"user"}}),jZ0=G1({name:"SyncEmailThreadsInput",fields:{labelIds:{type:Y0.String_unsecure(),isOptional:!1,isArray:!0},maxThreads:{type:Y0.Int_unsecure(),isOptional:!1},syncSinceMinutes:{type:Y0.Int_unsecure(),isOptional:!1}}}),NZ0=G1({name:"SyncEmailThreadsOutput",fields:{syncedThreads:{type:Y0.Int_unsecure(),isOptional:!1},lastMessageAt:{type:Y0.Date(),isOptional:!0}}}),kZ0=X6({meta:{key:"pfo.email.sync-threads",version:"1.0.0",description:"Triggers ingestion of Gmail threads into the operational knowledge space.",goal:"Keep knowledge base up to date with email communications.",context:"Syncs from Gmail integration. Only includes threads matching configured labels.",owners:[y$.PlatformMessaging],tags:["gmail","knowledge",a$.Automation],stability:i0.Beta},io:{input:jZ0,output:NZ0},policy:{auth:"user"}}),vZ0=G1({name:"SummaryDispatchInput",fields:{summaryId:{type:Y0.String_unsecure(),isOptional:!1},recipientEmail:{type:Y0.EmailAddress(),isOptional:!1},recipientName:{type:Y0.String_unsecure(),isOptional:!0},includeVoice:{type:Y0.Boolean(),isOptional:!1},voiceRecipient:{type:Y0.String_unsecure(),isOptional:!0}}}),xZ0=G1({name:"SummaryDispatchOutput",fields:{dispatchId:{type:Y0.String_unsecure(),isOptional:!1},emailSent:{type:Y0.Boolean(),isOptional:!1},voiceUrl:{type:Y0.String_unsecure(),isOptional:!0}}}),_Z0=X6({meta:{key:"pfo.summary.dispatch",version:"1.0.0",description:"Delivers the generated summary via email and optionally synthesises a voice note.",goal:"Deliver financial insights to users proactively.",context:"Dispatches summaries generated by pfo.summary.generate via email or voice.",owners:[y$.PlatformMessaging],tags:["summary","communications",a$.Automation],stability:i0.Experimental},io:{input:vZ0,output:xZ0},policy:{auth:"user"}}),gZ0=G1({name:"OpenBankingOverviewInput",fields:{tenantId:{type:Y0.String_unsecure(),isOptional:!1},accountIds:{type:Y0.String_unsecure(),isOptional:!0,isArray:!0},period:{type:qZ0,isOptional:!1},asOf:{type:Y0.Date(),isOptional:!0},includeCategories:{type:Y0.Boolean(),isOptional:!1},includeCashflowTrend:{type:Y0.Boolean(),isOptional:!1}}}),fZ0=G1({name:"OpenBankingOverviewOutput",fields:{knowledgeEntryId:{type:Y0.String_unsecure(),isOptional:!1},periodStart:{type:Y0.Date(),isOptional:!1},periodEnd:{type:Y0.Date(),isOptional:!1},generatedAt:{type:Y0.Date(),isOptional:!1},summaryPath:{type:Y0.String_unsecure(),isOptional:!0}}}),bZ0=X6({meta:{key:"pfo.openbanking.generate-overview",version:"1.0.0",description:"Aggregates balances and transactions into a derived financial overview stored in the knowledge layer.",goal:"Create a periodic financial snapshot.",context:"Aggregates data from open banking integration into a document.",owners:[y$.PlatformFinance],tags:["open-banking","summary",a$.Automation],stability:i0.Experimental},io:{input:gZ0,output:fZ0},policy:{auth:"user"},telemetry:{success:{event:{key:n6.overviewGenerated,version:"1.0.0"}}}}),fb0={"pfo.documents.upload":PZ0,"pfo.reminders.schedule-payment":RZ0,"pfo.summary.generate":wZ0,"pfo.summary.dispatch":_Z0,"pfo.email.sync-threads":kZ0,"pfo.openbanking.generate-overview":bZ0};var ub0=W1({meta:{key:"pfo.workflow.process-uploaded-document",version:"1.0.0",title:"Process Uploaded Document",description:"Stores an uploaded invoice/contract, queues ingestion, and records any follow-up reminders.",domain:"finance",owners:[y$.PlatformFinance],tags:["documents","ingestion",a$.Automation],stability:i0.Experimental},definition:{entryStepId:"store",steps:[{id:"store",type:"automation",label:"Store and Queue Ingestion",description:"Persist the document to storage and enqueue the knowledge ingestion pipeline.",action:{operation:{key:"pfo.documents.upload",version:"1.0.0"}},requiredIntegrations:["primaryStorage","primaryVectorDb"],retry:{maxAttempts:3,backoff:"exponential",delayMs:500}},{id:"review",type:"human",label:"Optional Human Classification",description:"Finance lead can categorise the document while ingestion completes."}],transitions:[{from:"store",to:"review"}]}});var pb0=W1({meta:{key:"pfo.workflow.upcoming-payments-reminder",version:"1.0.0",title:"Schedule Upcoming Payment Reminder",description:"Collects payment metadata and schedules multi-channel reminders for bills that are due soon.",domain:"finance",owners:[y$.PlatformFinance],tags:["payments","reminders",a$.Automation],stability:i0.Beta},definition:{entryStepId:"collect",steps:[{id:"collect",type:"human",label:"Review Upcoming Bill",description:"Confirm amount, due date, and preferred delivery channels before scheduling reminder."},{id:"schedule",type:"automation",label:"Schedule Reminder",action:{operation:{key:"pfo.reminders.schedule-payment",version:"1.0.0"}},requiredIntegrations:["emailOutbound","smsNotifications","calendarScheduling"],retry:{maxAttempts:2,backoff:"linear",delayMs:1000}}],transitions:[{from:"collect",to:"schedule",condition:"output?.confirmed === true",label:"Reminder confirmed"}]}});var ob0=W1({meta:{key:"pfo.workflow.generate-financial-summary",version:"1.0.0",title:"Generate Financial Summary",description:"Retrieves the latest financial signals, generates an AI summary, and optionally distributes it by voice or email.",domain:"finance",owners:[y$.PlatformFinance],tags:["summary","ai",a$.Automation],stability:i0.Beta},definition:{entryStepId:"summarise",steps:[{id:"summarise",type:"automation",label:"Generate Summary",description:"Run retrieval augmented generation over the knowledge base to produce a household summary.",action:{operation:{key:"pfo.summary.generate",version:"1.0.0"}},requiredIntegrations:["primaryLLM","primaryVectorDb"],retry:{maxAttempts:3,backoff:"exponential",delayMs:750}},{id:"distribute",type:"automation",label:"Distribute Summary",description:"Send the generated summary via email and optionally synthesise a voice note.",action:{operation:{key:"pfo.summary.dispatch",version:"1.0.0"}},requiredIntegrations:["emailOutbound"],retry:{maxAttempts:2,backoff:"linear",delayMs:500}}],transitions:[{from:"summarise",to:"distribute"}]}});var sb0=W1({meta:{key:"pfo.workflow.ingest-email-threads",version:"1.0.0",title:"Ingest Email Threads",description:"Synchronises Gmail threads tagged with finance labels and indexes them into operational knowledge spaces.",domain:"communications",owners:[y$.PlatformMessaging],tags:["gmail","knowledge",a$.Automation],stability:i0.Experimental},definition:{entryStepId:"sync",steps:[{id:"sync",type:"automation",label:"Sync Gmail Threads",description:"Fetches Gmail threads and transforms them into knowledge fragments before vector indexing.",action:{operation:{key:"pfo.email.sync-threads",version:"1.0.0"}},requiredIntegrations:["emailInbound","primaryVectorDb"],retry:{maxAttempts:3,backoff:"exponential",delayMs:1000}},{id:"triage",type:"human",label:"Triage Exceptions",description:"Operators can resolve sync failures or tag important threads for follow-up."}],transitions:[{from:"sync",to:"triage",condition:"output?.syncedThreads === 0",label:"No new threads"}]}});var Ax={key:"openbanking.accounts.read",version:"1.0.0"},Uy0=W1({meta:{key:"pfo.workflow.sync-openbanking-accounts",version:"1.0.0",title:"Synchronise Open Banking Accounts",description:"Validates Powens connectivity and synchronises bank account metadata into the canonical ledger.",domain:"finance",owners:[y$.PlatformFinance],tags:["open-banking","powens",a$.Automation],stability:i0.Experimental},definition:{entryStepId:"sync-accounts",steps:[{id:"sync-accounts",type:"automation",label:"Sync Accounts",description:"Refresh linked bank accounts via Powens and upsert canonical BankAccount records.",action:{operation:{key:"openbanking.accounts.sync",version:"1.0.0"}},requiredIntegrations:["primaryOpenBanking"],requiredCapabilities:[Ax],retry:{maxAttempts:3,backoff:"exponential",delayMs:1000}},{id:"fetch-accounts",type:"automation",label:"Fetch Accounts",description:"Retrieve the latest canonical account snapshot for downstream consumers.",action:{operation:{key:"openbanking.accounts.list",version:"1.0.0"}},requiredIntegrations:["primaryOpenBanking"],requiredCapabilities:[Ax],retry:{maxAttempts:2,backoff:"linear",delayMs:750}}],transitions:[{from:"sync-accounts",to:"fetch-accounts"}]}});var Kx={key:"openbanking.transactions.read",version:"1.0.0"},Zy0=W1({meta:{key:"pfo.workflow.sync-openbanking-transactions",version:"1.0.0",title:"Synchronise Open Banking Transactions",description:"Fetches recent transactions from Powens for each linked account and stores them in the canonical ledger.",domain:"finance",owners:[y$.PlatformFinance],tags:["open-banking","powens",a$.Automation],stability:i0.Experimental},definition:{entryStepId:"sync-transactions",steps:[{id:"sync-transactions",type:"automation",label:"Sync Transactions",description:"Call the Powens provider to pull incremental transactions for active accounts.",action:{operation:{key:"openbanking.transactions.sync",version:"1.0.0"}},requiredIntegrations:["primaryOpenBanking"],requiredCapabilities:[Kx],retry:{maxAttempts:4,backoff:"exponential",delayMs:1500}},{id:"list-transactions",type:"automation",label:"List Transactions",description:"Retrieve the canonical transaction list for reporting and downstream analytics.",action:{operation:{key:"openbanking.transactions.list",version:"1.0.0"}},requiredIntegrations:["primaryOpenBanking"],requiredCapabilities:[Kx],retry:{maxAttempts:2,backoff:"linear",delayMs:1000}}],transitions:[{from:"sync-transactions",to:"list-transactions"}]}});var Dx={key:"openbanking.balances.read",version:"1.0.0"},zy0=W1({meta:{key:"pfo.workflow.refresh-openbanking-balances",version:"1.0.0",title:"Refresh Open Banking Balances",description:"Refreshes balances for synced accounts to surface the latest cash positions in dashboards.",domain:"finance",owners:[y$.PlatformFinance],tags:["open-banking","powens",a$.Automation],stability:i0.Experimental},definition:{entryStepId:"refresh-balances",steps:[{id:"refresh-balances",type:"automation",label:"Refresh Balances",description:"Trigger the Powens provider to obtain current and available balances.",action:{operation:{key:"openbanking.balances.refresh",version:"1.0.0"}},requiredIntegrations:["primaryOpenBanking"],requiredCapabilities:[Dx],retry:{maxAttempts:3,backoff:"exponential",delayMs:1000}},{id:"fetch-balances",type:"automation",label:"Fetch Balances",description:"Load the canonical balance snapshots for downstream workflows and dashboards.",action:{operation:{key:"openbanking.balances.get",version:"1.0.0"}},requiredIntegrations:["primaryOpenBanking"],requiredCapabilities:[Dx],retry:{maxAttempts:2,backoff:"linear",delayMs:750}}],transitions:[{from:"refresh-balances",to:"fetch-balances"}]}});var yZ0=[{key:"openbanking.accounts.read",version:"1.0.0"},{key:"openbanking.transactions.read",version:"1.0.0"},{key:"openbanking.balances.read",version:"1.0.0"}],Dy0=W1({meta:{key:"pfo.workflow.generate-openbanking-overview",version:"1.0.0",title:"Generate Open Banking Overview",description:"Produces a derived financial overview and stores it in the operational knowledge space.",domain:"finance",owners:[y$.PlatformFinance],tags:["open-banking","summary",a$.Automation],stability:i0.Experimental},definition:{entryStepId:"generate-overview",steps:[{id:"generate-overview",type:"automation",label:"Generate Overview",description:"Aggregate balances, cashflow, and category breakdowns into a knowledge entry.",action:{operation:{key:"pfo.openbanking.generate-overview",version:"1.0.0"}},requiredIntegrations:["primaryOpenBanking"],requiredCapabilities:yZ0,retry:{maxAttempts:3,backoff:"exponential",delayMs:1500}}],transitions:[]}});var ez={tenantId:{type:"string",required:!0,description:"Tenant identifier for multi-tenant isolation."},appId:{type:"string",required:!0,description:"Application identifier associated with the event."},blueprint:{type:"string",required:!0,description:"Blueprint name@version emitting the telemetry."},configVersion:{type:"number",required:!0,description:"Resolved app config version when the event was generated."},slotId:{type:"string",required:!0,description:"Integration slot identifier (e.g., primaryOpenBanking)."},connectionId:{type:"string",required:!0,description:"Integration connection ID used for the sync."}};function Vx($){return{type:"string",description:$,pii:!1}}var Ty0={meta:{key:"pfo.telemetry",version:"1.0.0",title:"Pocket Family Office Telemetry",description:"Operational telemetry for Pocket Family Office workflows, including Powens open banking syncs.",domain:"finance",owners:[y$.PlatformFinance],tags:["open-banking",a$.Automation],stability:i0.Experimental},config:{defaultRetentionDays:180,defaultSamplingRate:1},events:[{key:n6.accountsSynced,version:"1.0.0",semantics:{what:"Open banking account synchronisation completed.",why:"Refresh canonical account metadata for reporting and workflows."},privacy:"internal",properties:{...ez,syncedCount:{type:"number",description:"Number of accounts synced successfully."},failedCount:{type:"number",description:"Number of accounts that failed to sync."},durationMs:{type:"number",description:"Duration of the sync job in milliseconds."}}},{key:n6.transactionsSynced,version:"1.0.0",semantics:{what:"Open banking transaction synchronisation completed.",why:"Keep canonical transaction ledger in sync for analytics."},privacy:"internal",properties:{...ez,accountId:{type:"string",description:"Bank account identifier used during the sync.",pii:!1},syncedCount:{type:"number",description:"Number of transactions synced successfully."},failedCount:{type:"number",description:"Number of transactions that failed to sync."},from:{type:"timestamp",description:"Start timestamp for the sync window."},to:{type:"timestamp",description:"End timestamp for the sync window."}}},{key:n6.balancesRefreshed,version:"1.0.0",semantics:{what:"Open banking balances refreshed.",why:"Provide accurate cash position for dashboards and alerts."},privacy:"internal",properties:{...ez,accountId:Vx("Bank account identifier."),balanceTypes:{type:"json",description:"Balance types included in the refresh."},refreshedAt:{type:"timestamp",description:"Timestamp when balances were refreshed."}}},{key:n6.overviewGenerated,version:"1.0.0",semantics:{what:"Derived financial overview generated.",why:"Persist cashflow and category summaries into knowledge space."},privacy:"internal",properties:{...ez,knowledgeEntryId:Vx("Identifier of the knowledge document containing the overview."),period:{type:"string",description:"Aggregation period used (week, month, quarter)."},periodStart:{type:"timestamp",description:"Start timestamp for the aggregation window."},periodEnd:{type:"timestamp",description:"End timestamp for the aggregation window."}},tags:["knowledge","analytics"]}]},wy0=tz;var ky0=mW({meta:{key:"pocket-family-office",version:"1.0.0",title:"Pocket Family Office",description:"Personal finance automation with document ingestion, open banking, and AI summaries",domain:"finance",owners:["@platform.finance"],tags:["finance","open-banking","documents","automation","family-office"],stability:"experimental"},operations:[{key:"pfo.documents.upload",version:"1.0.0"},{key:"pfo.reminders.schedule-payment",version:"1.0.0"},{key:"pfo.summary.generate",version:"1.0.0"},{key:"pfo.email.sync-threads",version:"1.0.0"},{key:"pfo.summary.dispatch",version:"1.0.0"},{key:"pfo.openbanking.generate-overview",version:"1.0.0"}],events:[],presentations:[],opToPresentation:[],presentationsTargets:[],capabilities:{provides:[{key:"pocket-family-office",version:"1.0.0"}],requires:[{key:"identity",version:"1.0.0"},{key:"openbanking",version:"1.0.0"}]}});var hZ0=lM({meta:{key:"pocket-family-office",version:"1.0.0",title:"Pocket Family Office",description:"Personal finance automation with document ingestion, open banking, and AI summaries",kind:"template",visibility:"public",stability:"experimental",owners:["@platform.finance"],tags:["finance","open-banking","documents","automation","family-office"]},docs:{rootDocId:"docs.examples.pocket-family-office"},entrypoints:{packageName:"@contractspec/example.pocket-family-office",feature:"./feature",docs:"./docs"},surfaces:{templates:!0,sandbox:{enabled:!0,modes:["playground","specs","builder"]},studio:{enabled:!0,installable:!0},mcp:{enabled:!0}}}),uZ0=hZ0;var cZ0=[{id:"docs.examples.pocket-family-office.goal",title:"Pocket Family Office — Goal",summary:"Secure personal finance automation combining documents and open banking.",kind:"goal",visibility:"public",route:"/docs/examples/pocket-family-office/goal",tags:["finance","goal"],body:`## Why it matters
|
|
2005
|
+
`}];Q$(SW0);var kW0={format:"full",includeSchemas:!0,includeScenarios:!0,includeExamples:!0,includePolicy:!0,includeSideEffects:!0},cx0={...kW0,includeRelatedSpecs:!0,includeRelatedEvents:!0,includeRelatedPresentations:!0};var gM=U$.enum(["template","workflow","integration","knowledge","blueprint","ui","script","library"]),fM=U$.enum(["public","internal","experimental"]),bM=U$.enum(["playground","specs","builder","markdown","evolution"]),rW0=U$.enum(["idea","in_creation","experimental","beta","stable","deprecated"]),yM=U$.object({rootDocId:U$.string().optional(),goalDocId:U$.string().optional(),usageDocId:U$.string().optional(),referenceDocId:U$.string().optional(),constraintsDocId:U$.string().optional()}),oW0=U$.object({enabled:U$.boolean(),modes:U$.array(bM)}),iW0=U$.object({enabled:U$.boolean(),installable:U$.boolean()}),tW0=U$.object({enabled:U$.boolean()}),hM=U$.object({templates:U$.boolean(),sandbox:oW0,studio:iW0,mcp:tW0}),uM=U$.object({packageName:U$.string().min(1),feature:U$.string().optional(),blueprint:U$.string().optional(),presentations:U$.string().optional(),contracts:U$.string().optional(),handlers:U$.string().optional(),ui:U$.string().optional(),docs:U$.string().optional()}),cM=U$.object({version:U$.string(),key:U$.string().min(1),title:U$.string().optional(),description:U$.string().min(1),domain:U$.string().optional(),stability:rW0,owners:U$.array(U$.string()),tags:U$.array(U$.string()),docId:U$.array(U$.string()).optional(),kind:gM,visibility:fM,summary:U$.string().optional()}),aW0=U$.object({key:U$.string().min(1),version:U$.string().optional()}),sW0=U$.object({key:U$.string().min(1)}),zx=U$.object({meta:cM,docs:yM.optional(),surfaces:hM,entrypoints:uM,blueprint:U$.union([U$.record(U$.string(),U$.unknown()),aW0]).optional(),features:U$.array(U$.union([U$.record(U$.string(),U$.unknown()),sW0])).optional()});var lM=($)=>$;aX();var VZ0=WJ("Source",["upload","email","sync"]),OZ0=WJ("Channel",["email","sms","both"]),FZ0=WJ("Period",["P7d","P30d","P90d"]),qZ0=WJ("ObPeriod",["Pweek","Pmonth","Pquarter"]),MZ0=G1({name:"UploadDocumentInput",fields:{bucket:{type:Y0.NonEmptyString(),isOptional:!1},objectKey:{type:Y0.NonEmptyString(),isOptional:!1},mimeType:{type:Y0.NonEmptyString(),isOptional:!1},bytes:{type:Y0.Int_unsecure(),isOptional:!1},tags:{type:Y0.String_unsecure(),isOptional:!1,isArray:!0},uploadedAt:{type:Y0.Date(),isOptional:!1},source:{type:VZ0,isOptional:!1}}}),LZ0=G1({name:"UploadDocumentOutput",fields:{documentId:{type:Y0.String_unsecure(),isOptional:!1},ingestionJobId:{type:Y0.String_unsecure(),isOptional:!1}}}),PZ0=X6({meta:{key:"pfo.documents.upload",version:"1.0.0",description:"Stores an object in tenant storage and schedules ingestion into the knowledge base.",goal:"Allow users to ingest financial documents for processing.",context:"Part of the finance domain. Documents are uploaded to object storage and then processed by the ingestion pipeline.",owners:[y$.PlatformFinance],tags:["documents","ingestion",a$.Guide],stability:i0.Experimental},io:{input:MZ0,output:LZ0},policy:{auth:"user",rateLimit:{rpm:30,key:"user"}}}),EZ0=G1({name:"PaymentReminderInput",fields:{billId:{type:Y0.String_unsecure(),isOptional:!1},recipientEmail:{type:Y0.EmailAddress(),isOptional:!1},recipientPhone:{type:Y0.String_unsecure(),isOptional:!0},dueDate:{type:Y0.Date(),isOptional:!1},amountCents:{type:Y0.Int_unsecure(),isOptional:!1},currency:{type:Y0.Currency(),isOptional:!1},channel:{type:OZ0,isOptional:!1},memo:{type:Y0.String_unsecure(),isOptional:!0}}}),BZ0=G1({name:"PaymentReminderOutput",fields:{reminderId:{type:Y0.String_unsecure(),isOptional:!1},scheduledAt:{type:Y0.Date(),isOptional:!1}}}),RZ0=X6({meta:{key:"pfo.reminders.schedule-payment",version:"1.0.0",description:"Queues outbound email/SMS reminders for upcoming bills and adds an optional calendar hold.",goal:"Ensure bills are paid on time by notifying users.",context:"Finance automation. Reminders are sent via configured channels (email, SMS).",owners:[y$.PlatformFinance],tags:["payments","reminders",a$.Automation],stability:i0.Beta},io:{input:EZ0,output:BZ0},policy:{auth:"user"}}),CZ0=G1({name:"FinancialSummaryInput",fields:{period:{type:FZ0,isOptional:!1},includeVoiceSummary:{type:Y0.Boolean(),isOptional:!1}}}),SZ0=G1({name:"SummaryHighlight",fields:{label:{type:Y0.String_unsecure(),isOptional:!1},value:{type:Y0.String_unsecure(),isOptional:!1}}}),TZ0=G1({name:"FinancialSummaryOutput",fields:{summaryId:{type:Y0.String_unsecure(),isOptional:!1},generatedAt:{type:Y0.Date(),isOptional:!1},markdown:{type:Y0.String_unsecure(),isOptional:!1},highlights:{type:SZ0,isOptional:!1,isArray:!0},cashflowDelta:{type:Y0.Float_unsecure(),isOptional:!1}}}),wZ0=J1({meta:{key:"pfo.summary.generate",version:"1.0.0",description:"Runs RAG over financial documents and email threads to provide a natural-language summary with key metrics.",goal:"Provide a quick overview of financial status and recent activity.",context:"Uses RAG over ingested knowledge. Summaries can be dispatched or viewed in app.",owners:[y$.PlatformFinance],tags:["summary","ai",a$.Automation],stability:i0.Beta},io:{input:CZ0,output:TZ0},policy:{auth:"user"}}),jZ0=G1({name:"SyncEmailThreadsInput",fields:{labelIds:{type:Y0.String_unsecure(),isOptional:!1,isArray:!0},maxThreads:{type:Y0.Int_unsecure(),isOptional:!1},syncSinceMinutes:{type:Y0.Int_unsecure(),isOptional:!1}}}),NZ0=G1({name:"SyncEmailThreadsOutput",fields:{syncedThreads:{type:Y0.Int_unsecure(),isOptional:!1},lastMessageAt:{type:Y0.Date(),isOptional:!0}}}),kZ0=X6({meta:{key:"pfo.email.sync-threads",version:"1.0.0",description:"Triggers ingestion of Gmail threads into the operational knowledge space.",goal:"Keep knowledge base up to date with email communications.",context:"Syncs from Gmail integration. Only includes threads matching configured labels.",owners:[y$.PlatformMessaging],tags:["gmail","knowledge",a$.Automation],stability:i0.Beta},io:{input:jZ0,output:NZ0},policy:{auth:"user"}}),vZ0=G1({name:"SummaryDispatchInput",fields:{summaryId:{type:Y0.String_unsecure(),isOptional:!1},recipientEmail:{type:Y0.EmailAddress(),isOptional:!1},recipientName:{type:Y0.String_unsecure(),isOptional:!0},includeVoice:{type:Y0.Boolean(),isOptional:!1},voiceRecipient:{type:Y0.String_unsecure(),isOptional:!0}}}),xZ0=G1({name:"SummaryDispatchOutput",fields:{dispatchId:{type:Y0.String_unsecure(),isOptional:!1},emailSent:{type:Y0.Boolean(),isOptional:!1},voiceUrl:{type:Y0.String_unsecure(),isOptional:!0}}}),_Z0=X6({meta:{key:"pfo.summary.dispatch",version:"1.0.0",description:"Delivers the generated summary via email and optionally synthesises a voice note.",goal:"Deliver financial insights to users proactively.",context:"Dispatches summaries generated by pfo.summary.generate via email or voice.",owners:[y$.PlatformMessaging],tags:["summary","communications",a$.Automation],stability:i0.Experimental},io:{input:vZ0,output:xZ0},policy:{auth:"user"}}),gZ0=G1({name:"OpenBankingOverviewInput",fields:{tenantId:{type:Y0.String_unsecure(),isOptional:!1},accountIds:{type:Y0.String_unsecure(),isOptional:!0,isArray:!0},period:{type:qZ0,isOptional:!1},asOf:{type:Y0.Date(),isOptional:!0},includeCategories:{type:Y0.Boolean(),isOptional:!1},includeCashflowTrend:{type:Y0.Boolean(),isOptional:!1}}}),fZ0=G1({name:"OpenBankingOverviewOutput",fields:{knowledgeEntryId:{type:Y0.String_unsecure(),isOptional:!1},periodStart:{type:Y0.Date(),isOptional:!1},periodEnd:{type:Y0.Date(),isOptional:!1},generatedAt:{type:Y0.Date(),isOptional:!1},summaryPath:{type:Y0.String_unsecure(),isOptional:!0}}}),bZ0=X6({meta:{key:"pfo.openbanking.generate-overview",version:"1.0.0",description:"Aggregates balances and transactions into a derived financial overview stored in the knowledge layer.",goal:"Create a periodic financial snapshot.",context:"Aggregates data from open banking integration into a document.",owners:[y$.PlatformFinance],tags:["open-banking","summary",a$.Automation],stability:i0.Experimental},io:{input:gZ0,output:fZ0},policy:{auth:"user"},telemetry:{success:{event:{key:n6.overviewGenerated,version:"1.0.0"}}}}),pb0={"pfo.documents.upload":PZ0,"pfo.reminders.schedule-payment":RZ0,"pfo.summary.generate":wZ0,"pfo.summary.dispatch":_Z0,"pfo.email.sync-threads":kZ0,"pfo.openbanking.generate-overview":bZ0};var ob0=W1({meta:{key:"pfo.workflow.process-uploaded-document",version:"1.0.0",title:"Process Uploaded Document",description:"Stores an uploaded invoice/contract, queues ingestion, and records any follow-up reminders.",domain:"finance",owners:[y$.PlatformFinance],tags:["documents","ingestion",a$.Automation],stability:i0.Experimental},definition:{entryStepId:"store",steps:[{id:"store",type:"automation",label:"Store and Queue Ingestion",description:"Persist the document to storage and enqueue the knowledge ingestion pipeline.",action:{operation:{key:"pfo.documents.upload",version:"1.0.0"}},requiredIntegrations:["primaryStorage","primaryVectorDb"],retry:{maxAttempts:3,backoff:"exponential",delayMs:500}},{id:"review",type:"human",label:"Optional Human Classification",description:"Finance lead can categorise the document while ingestion completes."}],transitions:[{from:"store",to:"review"}]}});var sb0=W1({meta:{key:"pfo.workflow.upcoming-payments-reminder",version:"1.0.0",title:"Schedule Upcoming Payment Reminder",description:"Collects payment metadata and schedules multi-channel reminders for bills that are due soon.",domain:"finance",owners:[y$.PlatformFinance],tags:["payments","reminders",a$.Automation],stability:i0.Beta},definition:{entryStepId:"collect",steps:[{id:"collect",type:"human",label:"Review Upcoming Bill",description:"Confirm amount, due date, and preferred delivery channels before scheduling reminder."},{id:"schedule",type:"automation",label:"Schedule Reminder",action:{operation:{key:"pfo.reminders.schedule-payment",version:"1.0.0"}},requiredIntegrations:["emailOutbound","smsNotifications","calendarScheduling"],retry:{maxAttempts:2,backoff:"linear",delayMs:1000}}],transitions:[{from:"collect",to:"schedule",condition:"output?.confirmed === true",label:"Reminder confirmed"}]}});var Uy0=W1({meta:{key:"pfo.workflow.generate-financial-summary",version:"1.0.0",title:"Generate Financial Summary",description:"Retrieves the latest financial signals, generates an AI summary, and optionally distributes it by voice or email.",domain:"finance",owners:[y$.PlatformFinance],tags:["summary","ai",a$.Automation],stability:i0.Beta},definition:{entryStepId:"summarise",steps:[{id:"summarise",type:"automation",label:"Generate Summary",description:"Run retrieval augmented generation over the knowledge base to produce a household summary.",action:{operation:{key:"pfo.summary.generate",version:"1.0.0"}},requiredIntegrations:["primaryLLM","primaryVectorDb"],retry:{maxAttempts:3,backoff:"exponential",delayMs:750}},{id:"distribute",type:"automation",label:"Distribute Summary",description:"Send the generated summary via email and optionally synthesise a voice note.",action:{operation:{key:"pfo.summary.dispatch",version:"1.0.0"}},requiredIntegrations:["emailOutbound"],retry:{maxAttempts:2,backoff:"linear",delayMs:500}}],transitions:[{from:"summarise",to:"distribute"}]}});var Zy0=W1({meta:{key:"pfo.workflow.ingest-email-threads",version:"1.0.0",title:"Ingest Email Threads",description:"Synchronises Gmail threads tagged with finance labels and indexes them into operational knowledge spaces.",domain:"communications",owners:[y$.PlatformMessaging],tags:["gmail","knowledge",a$.Automation],stability:i0.Experimental},definition:{entryStepId:"sync",steps:[{id:"sync",type:"automation",label:"Sync Gmail Threads",description:"Fetches Gmail threads and transforms them into knowledge fragments before vector indexing.",action:{operation:{key:"pfo.email.sync-threads",version:"1.0.0"}},requiredIntegrations:["emailInbound","primaryVectorDb"],retry:{maxAttempts:3,backoff:"exponential",delayMs:1000}},{id:"triage",type:"human",label:"Triage Exceptions",description:"Operators can resolve sync failures or tag important threads for follow-up."}],transitions:[{from:"sync",to:"triage",condition:"output?.syncedThreads === 0",label:"No new threads"}]}});var Ax={key:"openbanking.accounts.read",version:"1.0.0"},zy0=W1({meta:{key:"pfo.workflow.sync-openbanking-accounts",version:"1.0.0",title:"Synchronise Open Banking Accounts",description:"Validates Powens connectivity and synchronises bank account metadata into the canonical ledger.",domain:"finance",owners:[y$.PlatformFinance],tags:["open-banking","powens",a$.Automation],stability:i0.Experimental},definition:{entryStepId:"sync-accounts",steps:[{id:"sync-accounts",type:"automation",label:"Sync Accounts",description:"Refresh linked bank accounts via Powens and upsert canonical BankAccount records.",action:{operation:{key:"openbanking.accounts.sync",version:"1.0.0"}},requiredIntegrations:["primaryOpenBanking"],requiredCapabilities:[Ax],retry:{maxAttempts:3,backoff:"exponential",delayMs:1000}},{id:"fetch-accounts",type:"automation",label:"Fetch Accounts",description:"Retrieve the latest canonical account snapshot for downstream consumers.",action:{operation:{key:"openbanking.accounts.list",version:"1.0.0"}},requiredIntegrations:["primaryOpenBanking"],requiredCapabilities:[Ax],retry:{maxAttempts:2,backoff:"linear",delayMs:750}}],transitions:[{from:"sync-accounts",to:"fetch-accounts"}]}});var Kx={key:"openbanking.transactions.read",version:"1.0.0"},Dy0=W1({meta:{key:"pfo.workflow.sync-openbanking-transactions",version:"1.0.0",title:"Synchronise Open Banking Transactions",description:"Fetches recent transactions from Powens for each linked account and stores them in the canonical ledger.",domain:"finance",owners:[y$.PlatformFinance],tags:["open-banking","powens",a$.Automation],stability:i0.Experimental},definition:{entryStepId:"sync-transactions",steps:[{id:"sync-transactions",type:"automation",label:"Sync Transactions",description:"Call the Powens provider to pull incremental transactions for active accounts.",action:{operation:{key:"openbanking.transactions.sync",version:"1.0.0"}},requiredIntegrations:["primaryOpenBanking"],requiredCapabilities:[Kx],retry:{maxAttempts:4,backoff:"exponential",delayMs:1500}},{id:"list-transactions",type:"automation",label:"List Transactions",description:"Retrieve the canonical transaction list for reporting and downstream analytics.",action:{operation:{key:"openbanking.transactions.list",version:"1.0.0"}},requiredIntegrations:["primaryOpenBanking"],requiredCapabilities:[Kx],retry:{maxAttempts:2,backoff:"linear",delayMs:1000}}],transitions:[{from:"sync-transactions",to:"list-transactions"}]}});var Dx={key:"openbanking.balances.read",version:"1.0.0"},qy0=W1({meta:{key:"pfo.workflow.refresh-openbanking-balances",version:"1.0.0",title:"Refresh Open Banking Balances",description:"Refreshes balances for synced accounts to surface the latest cash positions in dashboards.",domain:"finance",owners:[y$.PlatformFinance],tags:["open-banking","powens",a$.Automation],stability:i0.Experimental},definition:{entryStepId:"refresh-balances",steps:[{id:"refresh-balances",type:"automation",label:"Refresh Balances",description:"Trigger the Powens provider to obtain current and available balances.",action:{operation:{key:"openbanking.balances.refresh",version:"1.0.0"}},requiredIntegrations:["primaryOpenBanking"],requiredCapabilities:[Dx],retry:{maxAttempts:3,backoff:"exponential",delayMs:1000}},{id:"fetch-balances",type:"automation",label:"Fetch Balances",description:"Load the canonical balance snapshots for downstream workflows and dashboards.",action:{operation:{key:"openbanking.balances.get",version:"1.0.0"}},requiredIntegrations:["primaryOpenBanking"],requiredCapabilities:[Dx],retry:{maxAttempts:2,backoff:"linear",delayMs:750}}],transitions:[{from:"refresh-balances",to:"fetch-balances"}]}});var yZ0=[{key:"openbanking.accounts.read",version:"1.0.0"},{key:"openbanking.transactions.read",version:"1.0.0"},{key:"openbanking.balances.read",version:"1.0.0"}],Ey0=W1({meta:{key:"pfo.workflow.generate-openbanking-overview",version:"1.0.0",title:"Generate Open Banking Overview",description:"Produces a derived financial overview and stores it in the operational knowledge space.",domain:"finance",owners:[y$.PlatformFinance],tags:["open-banking","summary",a$.Automation],stability:i0.Experimental},definition:{entryStepId:"generate-overview",steps:[{id:"generate-overview",type:"automation",label:"Generate Overview",description:"Aggregate balances, cashflow, and category breakdowns into a knowledge entry.",action:{operation:{key:"pfo.openbanking.generate-overview",version:"1.0.0"}},requiredIntegrations:["primaryOpenBanking"],requiredCapabilities:yZ0,retry:{maxAttempts:3,backoff:"exponential",delayMs:1500}}],transitions:[]}});var ez={tenantId:{type:"string",required:!0,description:"Tenant identifier for multi-tenant isolation."},appId:{type:"string",required:!0,description:"Application identifier associated with the event."},blueprint:{type:"string",required:!0,description:"Blueprint name@version emitting the telemetry."},configVersion:{type:"number",required:!0,description:"Resolved app config version when the event was generated."},slotId:{type:"string",required:!0,description:"Integration slot identifier (e.g., primaryOpenBanking)."},connectionId:{type:"string",required:!0,description:"Integration connection ID used for the sync."}};function Vx($){return{type:"string",description:$,pii:!1}}var gy0={meta:{key:"pfo.telemetry",version:"1.0.0",title:"Pocket Family Office Telemetry",description:"Operational telemetry for Pocket Family Office workflows, including Powens open banking syncs.",domain:"finance",owners:[y$.PlatformFinance],tags:["open-banking",a$.Automation],stability:i0.Experimental},config:{defaultRetentionDays:180,defaultSamplingRate:1},events:[{key:n6.accountsSynced,version:"1.0.0",semantics:{what:"Open banking account synchronisation completed.",why:"Refresh canonical account metadata for reporting and workflows."},privacy:"internal",properties:{...ez,syncedCount:{type:"number",description:"Number of accounts synced successfully."},failedCount:{type:"number",description:"Number of accounts that failed to sync."},durationMs:{type:"number",description:"Duration of the sync job in milliseconds."}}},{key:n6.transactionsSynced,version:"1.0.0",semantics:{what:"Open banking transaction synchronisation completed.",why:"Keep canonical transaction ledger in sync for analytics."},privacy:"internal",properties:{...ez,accountId:{type:"string",description:"Bank account identifier used during the sync.",pii:!1},syncedCount:{type:"number",description:"Number of transactions synced successfully."},failedCount:{type:"number",description:"Number of transactions that failed to sync."},from:{type:"timestamp",description:"Start timestamp for the sync window."},to:{type:"timestamp",description:"End timestamp for the sync window."}}},{key:n6.balancesRefreshed,version:"1.0.0",semantics:{what:"Open banking balances refreshed.",why:"Provide accurate cash position for dashboards and alerts."},privacy:"internal",properties:{...ez,accountId:Vx("Bank account identifier."),balanceTypes:{type:"json",description:"Balance types included in the refresh."},refreshedAt:{type:"timestamp",description:"Timestamp when balances were refreshed."}}},{key:n6.overviewGenerated,version:"1.0.0",semantics:{what:"Derived financial overview generated.",why:"Persist cashflow and category summaries into knowledge space."},privacy:"internal",properties:{...ez,knowledgeEntryId:Vx("Identifier of the knowledge document containing the overview."),period:{type:"string",description:"Aggregation period used (week, month, quarter)."},periodStart:{type:"timestamp",description:"Start timestamp for the aggregation window."},periodEnd:{type:"timestamp",description:"End timestamp for the aggregation window."}},tags:["knowledge","analytics"]}]},fy0=tz;var hy0=mW({meta:{key:"pocket-family-office",version:"1.0.0",title:"Pocket Family Office",description:"Personal finance automation with document ingestion, open banking, and AI summaries",domain:"finance",owners:["@platform.finance"],tags:["finance","open-banking","documents","automation","family-office"],stability:"experimental"},operations:[{key:"pfo.documents.upload",version:"1.0.0"},{key:"pfo.reminders.schedule-payment",version:"1.0.0"},{key:"pfo.summary.generate",version:"1.0.0"},{key:"pfo.email.sync-threads",version:"1.0.0"},{key:"pfo.summary.dispatch",version:"1.0.0"},{key:"pfo.openbanking.generate-overview",version:"1.0.0"}],events:[],presentations:[],opToPresentation:[],presentationsTargets:[],capabilities:{provides:[{key:"pocket-family-office",version:"1.0.0"}],requires:[{key:"identity",version:"1.0.0"},{key:"openbanking",version:"1.0.0"}]}});var hZ0=lM({meta:{key:"pocket-family-office",version:"1.0.0",title:"Pocket Family Office",description:"Personal finance automation with document ingestion, open banking, and AI summaries",kind:"template",visibility:"public",stability:"experimental",owners:["@platform.finance"],tags:["finance","open-banking","documents","automation","family-office"]},docs:{rootDocId:"docs.examples.pocket-family-office"},entrypoints:{packageName:"@contractspec/example.pocket-family-office",feature:"./feature",docs:"./docs"},surfaces:{templates:!0,sandbox:{enabled:!0,modes:["playground","specs","builder"]},studio:{enabled:!0,installable:!0},mcp:{enabled:!0}}}),uZ0=hZ0;var cZ0=[{id:"docs.examples.pocket-family-office.goal",title:"Pocket Family Office — Goal",summary:"Secure personal finance automation combining documents and open banking.",kind:"goal",visibility:"public",route:"/docs/examples/pocket-family-office/goal",tags:["finance","goal"],body:`## Why it matters
|
|
1996
2006
|
- Automate document ingestion (receipts, statements) and link to transactions.
|
|
1997
2007
|
- Provides a "family office" grade overview for individuals.
|
|
1998
2008
|
- Uses open banking for real-time data and AI for insights.
|
|
@@ -2017,4 +2027,4 @@ For full documentation, refer to the [package README](https://github.com/contrac
|
|
|
2017
2027
|
|
|
2018
2028
|
## Guardrails
|
|
2019
2029
|
- PII is redacted in summaries by default.
|
|
2020
|
-
- Read-only access to bank data (no write/payment initiation in this template).`},{id:"docs.examples.pocket-family-office.reference",title:"Pocket Family Office — Reference",summary:"Key components of the Pocket Family Office system.",kind:"reference",visibility:"public",route:"/docs/examples/pocket-family-office",tags:["finance","reference"],body:"## Workflows\n- `process-uploaded-document`: Extracts data from PDFs/Images.\n- `sync-openbanking-transactions`: Fetches latest transactions.\n- `generate-financial-summary`: AI-driven report generation.\n- `upcoming-payments-reminder`: Scans needed actions.\n\n## Operations\n- `pfo.documents.upload`: Secure upload endpoint for documents.\n\n## Capabilities\n- Requires: `identity`, `openbanking`.\n- Provides: `pocket-family-office`."}];Q$(cZ0);export{PZ0 as uploadDocumentContract,
|
|
2030
|
+
- Read-only access to bank data (no write/payment initiation in this template).`},{id:"docs.examples.pocket-family-office.reference",title:"Pocket Family Office — Reference",summary:"Key components of the Pocket Family Office system.",kind:"reference",visibility:"public",route:"/docs/examples/pocket-family-office",tags:["finance","reference"],body:"## Workflows\n- `process-uploaded-document`: Extracts data from PDFs/Images.\n- `sync-openbanking-transactions`: Fetches latest transactions.\n- `generate-financial-summary`: AI-driven report generation.\n- `upcoming-payments-reminder`: Scans needed actions.\n\n## Operations\n- `pfo.documents.upload`: Secure upload endpoint for documents.\n\n## Capabilities\n- Requires: `identity`, `openbanking`.\n- Provides: `pocket-family-office`."}];Q$(cZ0);export{PZ0 as uploadDocumentContract,sb0 as upcomingPaymentsReminderWorkflow,Dy0 as syncOpenBankingTransactionsWorkflow,zy0 as syncOpenBankingAccountsWorkflow,kZ0 as syncEmailThreadsContract,RZ0 as schedulePaymentReminderContract,dZ0 as registerPocketFamilyOfficeBlueprint,qy0 as refreshOpenBankingBalancesWorkflow,ob0 as processUploadedDocumentWorkflow,rZ0 as pocketFamilyOfficeTenantSample,gy0 as pocketFamilyOfficeTelemetry,aZ0 as pocketFamilyOfficeKnowledgeSources,pb0 as pocketFamilyOfficeContracts,Px as pocketFamilyOfficeConnections,Lx as pocketFamilyOfficeBlueprint,Zy0 as ingestEmailThreadsWorkflow,iZ0 as getPocketFamilyOfficeConnection,Ey0 as generateOpenBankingOverviewWorkflow,bZ0 as generateOpenBankingOverviewContract,Uy0 as generateFinancialSummaryWorkflow,wZ0 as generateFinancialSummaryContract,uZ0 as example,_Z0 as dispatchFinancialSummaryContract,hy0 as PocketFamilyOfficeFeature,fy0 as OPENBANKING_SENSITIVE_FIELDS};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@contractspec/example.pocket-family-office",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.49.0",
|
|
4
4
|
"description": "Pocket Family Office example - personal finance automation with open banking",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"contractspec",
|
|
@@ -26,13 +26,13 @@
|
|
|
26
26
|
"lint:check": "eslint src"
|
|
27
27
|
},
|
|
28
28
|
"dependencies": {
|
|
29
|
-
"@contractspec/lib.knowledge": "1.
|
|
30
|
-
"@contractspec/lib.contracts": "1.
|
|
31
|
-
"@contractspec/lib.schema": "1.
|
|
29
|
+
"@contractspec/lib.knowledge": "1.49.0",
|
|
30
|
+
"@contractspec/lib.contracts": "1.49.0",
|
|
31
|
+
"@contractspec/lib.schema": "1.49.0"
|
|
32
32
|
},
|
|
33
33
|
"devDependencies": {
|
|
34
|
-
"@contractspec/tool.typescript": "1.
|
|
35
|
-
"@contractspec/tool.tsdown": "1.
|
|
34
|
+
"@contractspec/tool.typescript": "1.49.0",
|
|
35
|
+
"@contractspec/tool.tsdown": "1.49.0",
|
|
36
36
|
"typescript": "^5.9.3"
|
|
37
37
|
},
|
|
38
38
|
"exports": {
|