minutework 0.1.39 → 0.1.40

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.
@@ -47,6 +47,7 @@ Generated-workspace-first guidance should live here, especially:
47
47
  - `workspace-guidance-refresh/SKILL.md`
48
48
  - `shell-architecture/SKILL.md`
49
49
  - `runtime-capability-inventory/SKILL.md`
50
+ - `integration-broker-and-connectors/SKILL.md`
50
51
  - `layering-and-import-modes/SKILL.md`
51
52
  - `standalone-mobile-client/SKILL.md`
52
53
  - `capability-gap-reporting/SKILL.md`
@@ -14,6 +14,9 @@ generation, itinerary generation, content generation, or structured-output UX.
14
14
  - `tenant-app` should gather inputs, invoke typed platform/runtime surfaces, and
15
15
  display or edit outputs; do not embed provider credentials or direct
16
16
  browser-to-model calls in the web app for MVP.
17
+ - When AI agents need to drive external providers such as ads, also read
18
+ `integration-broker-and-connectors/SKILL.md` and use the governed connector
19
+ capability instead of browser or sidecar provider calls.
17
20
  - Do not create a bespoke `sidecar` for drafting/generation unless the existing
18
21
  runtime AI capability has a concrete gap or there is another backend-only
19
22
  requirement.
@@ -0,0 +1,122 @@
1
+ ---
2
+ name: integration-broker-and-connectors
3
+ description: "External integrations, ads, brokered connectors, spend/approval governance, or whether to use mw.connector.ads instead of bespoke provider code."
4
+ ---
5
+
6
+ # Integration Broker And Connectors
7
+
8
+ Use this skill when a request touches external integrations, paid acquisition,
9
+ ads, provider connectors, agent-driven provider actions, spend limits,
10
+ approvals, credentials, receipts, or questions like "can the agent run ads?"
11
+
12
+ ## What It Is
13
+
14
+ MinuteWork has a governed integration broker for external systems. The first
15
+ native connector is `mw.connector.ads`.
16
+
17
+ - Runtime owns the local action surface and exposes connector actions as
18
+ `workflow.run_action` capability calls.
19
+ - Platform DJ owns provider credentials, provider account scope, tenant broker
20
+ connections, advertiser identity, spend authorization, approval policy,
21
+ append-only receipts, webhooks, and adapter execution.
22
+ - Generated apps and sidecars should call the brokered capability instead of
23
+ storing provider credentials or implementing ad-spend policy locally.
24
+ - Provider availability still depends on configured platform broker accounts.
25
+ Do not promise a provider is live just because a provider key is reserved.
26
+
27
+ ## Compose, Do Not Rebuild
28
+
29
+ Before adding ad, spend, approval, credential, or connector logic to
30
+ `tenant-app` or a `sidecar`, check whether the integration belongs on the
31
+ broker path.
32
+
33
+ - Use `integration_broker.execute` for brokered connector actions.
34
+ - Use `mw.connector.ads` for ads instead of inventing tenant-local ad APIs.
35
+ - Add providers through the platform broker adapter seam, not browser code,
36
+ generated app credentials, or ungoverned sidecar calls.
37
+ - Keep provider account and organization scope in Platform DJ. Tenant payloads
38
+ must not supply provider account, ad account, organization, or credential
39
+ identifiers as a way to bypass the broker connection.
40
+ - Use app-pack or schema changes for tenant product data around the integration,
41
+ but keep external provider writes on the governed broker.
42
+
43
+ ## Ads Connector
44
+
45
+ `mw.connector.ads` is a first-party runtime app-pack baseline. It is available
46
+ without a tenant app installing an ads pack.
47
+
48
+ Mutating actions:
49
+
50
+ - `ads.create_campaign`
51
+ - `ads.update_campaign`
52
+ - `ads.pause_campaign`
53
+ - `ads.create_group`
54
+ - `ads.create_creative`
55
+ - `ads.create_ad`
56
+
57
+ Read action:
58
+
59
+ - `ads.fetch_report`
60
+
61
+ Reserved future action:
62
+
63
+ - `ads.record_conversion`
64
+
65
+ Provider keys:
66
+
67
+ - Default: `openaiads`
68
+ - Extensible: `googleads`, `metaads`, `tiktokads`
69
+
70
+ Treat these provider keys as broker-routing keys. Do not infer that a provider
71
+ is configured for a tenant until the runtime capability inventory or platform
72
+ broker preflight reports readiness.
73
+
74
+ ## Governance Model
75
+
76
+ Rely on the broker safety model instead of recreating it:
77
+
78
+ - `BrokerProviderAccount` and `BrokerConnection` bind platform-owned provider
79
+ account scope to tenant broker access.
80
+ - `AdvertiserProfile` represents verified advertiser identity and accepted
81
+ terms.
82
+ - `AdsSpendAuthorization` defines approved spend caps.
83
+ - `AdsSpendPolicyReceipt` records reserved/released budget decisions.
84
+ - `TenantWallet.reserved_credits_cents` backs approved future ad spend before
85
+ more metered work can consume the same credits.
86
+ - `BrokerApprovalGrant` gates mutating/spend actions with human approval.
87
+ - `BrokerReceipt` and `BrokerWebhookEvent` provide append-only, payload-digested
88
+ audit trails.
89
+ - `AdsCampaignProjection` and `AdsObjectProjection` project provider objects
90
+ back into scoped tenant/runtime state.
91
+
92
+ Mutating ads actions are approval-gated and budget-gated. Credentials and spend
93
+ policy never belong in browser code, generated app artifacts, or tenant-local
94
+ sidecar configuration.
95
+
96
+ ## Builder Decision Rules
97
+
98
+ - For paid-acquisition or ads questions, route through this skill before
99
+ proposing a custom ad manager.
100
+ - For "what can we build?" answers, mention that runtime agents can drive
101
+ governed external integrations when a first-party or broker-backed connector
102
+ exists.
103
+ - For AI-agent workflows, keep AI and provider actions inside governed runtime
104
+ capabilities. UI gathers intent and renders results.
105
+ - For OSS or mature external products, use `attached_app` or sidecar bridge code
106
+ only when the foreign system should remain foreign. Connector writes still
107
+ need broker-style governance when credentials, spend, approvals, or audit are
108
+ involved.
109
+ - If a requested connector is missing, report a platform capability gap instead
110
+ of adding unreviewed provider credentials or a direct network adapter.
111
+
112
+ Useful inspection points when source is available:
113
+
114
+ - `apps/mwv3-platform-dj/apps/integration_broker/models.py`
115
+ - `apps/mwv3-platform-dj/apps/integration_broker/services.py`
116
+ - `apps/mwv3-platform-dj/apps/integration_broker/adapters.py`
117
+ - `apps/mwv3-platform-dj/apps/integration_broker/api/`
118
+ - `apps/mwv3-runtime-dj/apps/runtime_app_host/first_party_packs/mw_connector_ads.py`
119
+ - `apps/mwv3-runtime-dj/apps/runtime_app_host/ads_connector_services.py`
120
+ - `apps/mwv3-runtime-dj/apps/runtime_app_host/integration_broker_capabilities.py`
121
+ - `reference/mwv3-dj6-docs/connector_pack_and_engine_resolution_contract.md`
122
+ - `reference/mwv3-dj6-docs/runtime_app_pack_contract.md`
@@ -16,6 +16,10 @@ Use this skill when choosing between configuration, app-pack changes, overlays,
16
16
  or composition inside the Builder sandbox.
17
17
  - Durable tenant behavior should usually compile to governed app-pack artifacts,
18
18
  not ad hoc backend code.
19
+ - For external integrations that involve credentials, provider writes, spend,
20
+ approvals, or audit receipts, read
21
+ `integration-broker-and-connectors/SKILL.md` and use the broker substrate when
22
+ it fits.
19
23
  - Use `attached_app` when a mature foreign system should remain its own
20
24
  subsystem and MinuteWork should compile a governed control surface around it.
21
25
  - Use `external_repo_intake` only when no reviewed capability skill or cleaner
@@ -31,6 +31,9 @@ needed:
31
31
  belongs in governed runtime capabilities instead of browser/provider calls.
32
32
  - `layering-and-import-modes/SKILL.md` for build-native vs govern-existing,
33
33
  `attached_app`, OSS adoption, and greenfield-last decisions.
34
+ - `integration-broker-and-connectors/SKILL.md` for external integrations, paid
35
+ acquisition, ads, brokered connectors, spend/approval governance, and
36
+ `mw.connector.ads`.
34
37
  - `sidecar-generation/SKILL.md` for bridge/integration execution, workers,
35
38
  webhooks, schedulers, and backend compute.
36
39
  - `standalone-mobile-client/SKILL.md` for Expo/native client boundaries.
@@ -87,6 +90,9 @@ substrate:
87
90
  - Runtime agents use `mw.runtime.agent` seed records and namespaced runtime-kind
88
91
  tool packs. UI surfaces collect inputs and render governed outputs; they do
89
92
  not run model/provider logic directly.
93
+ - Runtime agents can drive external integrations through governed connector
94
+ capabilities such as `mw.connector.ads`; credentials, spend approvals, and
95
+ provider writes stay brokered by the platform.
90
96
  - OSS and mature external products are adopted before rebuilding when they fit.
91
97
  Use `attached_app` when the foreign system should remain independently
92
98
  deployed, and use sidecar bridge code plus runtime agents/tool packs to make
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "minutework",
3
- "version": "0.1.39",
3
+ "version": "0.1.40",
4
4
  "description": "MinuteWork CLI for workspace scaffolding, local preview workflows, and hosted preview deploys.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -24,8 +24,8 @@
24
24
  "@modelcontextprotocol/sdk": "^1.28.0",
25
25
  "jiti": "^2.6.1",
26
26
  "zod": "^4.3.6",
27
- "@minutework/platform-config": "0.1.2",
28
- "@minutework/schema-compiler": "0.1.5"
27
+ "@minutework/schema-compiler": "0.1.5",
28
+ "@minutework/platform-config": "0.1.2"
29
29
  },
30
30
  "devDependencies": {
31
31
  "@types/node": "^24.9.1",