minutework 0.1.44 → 0.1.46
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/assets/claude-local/CLAUDE.md.template +6 -0
- package/assets/claude-local/skills/README.md +1 -0
- package/assets/claude-local/skills/ai-capability-defaults/SKILL.md +2 -0
- package/assets/claude-local/skills/published-web-and-mw-core-site/SKILL.md +4 -4
- package/assets/claude-local/skills/runtime-capability-inventory/SKILL.md +66 -15
- package/assets/claude-local/skills/runtime-capability-inventory/primitive-catalog.json +392 -0
- package/assets/claude-local/skills/runtime-primitive-interim-paths/SKILL.md +96 -0
- package/package.json +3 -3
- package/vendor/workspace-mcp/context.d.ts +4 -1
- package/vendor/workspace-mcp/context.js +4 -0
- package/vendor/workspace-mcp/context.js.map +1 -1
- package/vendor/workspace-mcp/index.d.ts +2 -1
- package/vendor/workspace-mcp/index.js +1 -0
- package/vendor/workspace-mcp/index.js.map +1 -1
- package/vendor/workspace-mcp/primitive-status.d.ts +7 -0
- package/vendor/workspace-mcp/primitive-status.js +380 -0
- package/vendor/workspace-mcp/primitive-status.js.map +1 -0
- package/vendor/workspace-mcp/server.d.ts +1 -0
- package/vendor/workspace-mcp/server.js +9 -1
- package/vendor/workspace-mcp/server.js.map +1 -1
- package/vendor/workspace-mcp/types.d.ts +110 -0
- package/vendor/workspace-mcp/types.js +38 -0
- package/vendor/workspace-mcp/types.js.map +1 -1
|
@@ -42,6 +42,12 @@ workspace state. It is wired for Cursor (`.cursor/mcp.json`) and Codex
|
|
|
42
42
|
`mcp/claude-desktop.sample.json`. Refresh all of this with
|
|
43
43
|
`minutework workspace sync-assets`.
|
|
44
44
|
|
|
45
|
+
Primitive catalog membership does not imply executability or agent exposure;
|
|
46
|
+
check the live-status block in skills/runtime-capability-inventory/SKILL.md and
|
|
47
|
+
the minutework_runtime_primitive_status workspace MCP tool before authoring
|
|
48
|
+
against a primitive (interim paths:
|
|
49
|
+
skills/runtime-primitive-interim-paths/SKILL.md).
|
|
50
|
+
|
|
45
51
|
## Hosted Sandbox Runtime
|
|
46
52
|
|
|
47
53
|
Use `minutework sandbox create` to provision and link the workspace to its
|
|
@@ -52,6 +52,7 @@ Generated-workspace-first guidance should live here, especially:
|
|
|
52
52
|
- `workspace-guidance-refresh/SKILL.md`
|
|
53
53
|
- `shell-architecture/SKILL.md`
|
|
54
54
|
- `runtime-capability-inventory/SKILL.md`
|
|
55
|
+
- `runtime-primitive-interim-paths/SKILL.md`
|
|
55
56
|
- `integration-broker-and-connectors/SKILL.md`
|
|
56
57
|
- `layering-and-import-modes/SKILL.md`
|
|
57
58
|
- `standalone-mobile-client/SKILL.md`
|
|
@@ -23,6 +23,8 @@ generation, itinerary generation, content generation, or structured-output UX.
|
|
|
23
23
|
- Start with `minutework_capability_inventory` and the generated workspace
|
|
24
24
|
capability guidance before assuming runtime AI capability is present,
|
|
25
25
|
missing, or unsupported.
|
|
26
|
+
- When a needed primitive is catalogued but not yet executable or agent-exposed,
|
|
27
|
+
use the sanctioned interim paths in `runtime-primitive-interim-paths/SKILL.md`.
|
|
26
28
|
- If runtime AI availability is unclear, inspect the linked runtime/workspace
|
|
27
29
|
context or ask a clarifying question before inventing new AI infrastructure.
|
|
28
30
|
- When AI drafting or generation touches external participants, guests,
|
|
@@ -77,11 +77,11 @@ flows, or the default MinuteWork site model.
|
|
|
77
77
|
## Current Baseline Catalog
|
|
78
78
|
|
|
79
79
|
<!-- builder-doc-sync:mw-core-site:start -->
|
|
80
|
-
- Baseline schemas: `mw.core.site.config`, `mw.core.site.page`,
|
|
81
|
-
`mw.core.site.
|
|
80
|
+
- Baseline schemas: `mw.core.site.config`, `mw.core.site.page`, `mw.core.site.nav`,
|
|
81
|
+
`mw.core.site.form`, `mw.core.site.submission`
|
|
82
82
|
- Query surfaces: `site.get_public_config`, `site.get_page_by_path`,
|
|
83
83
|
`site.list_navigation`, `site.get_form_definition`
|
|
84
|
-
- Action surfaces: `site.upsert_config`, `site.upsert_page`,
|
|
85
|
-
`site.
|
|
84
|
+
- Action surfaces: `site.upsert_config`, `site.upsert_page`, `site.upsert_navigation`,
|
|
85
|
+
`site.upsert_form`
|
|
86
86
|
- Reserved next schema: `mw.core.site.post`
|
|
87
87
|
<!-- builder-doc-sync:mw-core-site:end -->
|
|
@@ -92,19 +92,70 @@ generated Builder workspace.
|
|
|
92
92
|
## Known Seeded Primitive Catalog
|
|
93
93
|
|
|
94
94
|
<!-- builder-doc-sync:active-primitives:start -->
|
|
95
|
-
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
-
|
|
107
|
-
|
|
108
|
-
-
|
|
109
|
-
|
|
95
|
+
- Three-layer rule: catalogued != executor-wired != agent-exposed. Catalog membership
|
|
96
|
+
never implies a primitive can execute today, and an executor never implies any agent
|
|
97
|
+
can call it; check each layer separately.
|
|
98
|
+
- Default agent ring is the read-only READ_RING (`records.query`,
|
|
99
|
+
`app_pack.list_surfaces`, `app_pack.query`); its members need no grant. (`app_pack.*`
|
|
100
|
+
and `delegate_to_builder` are agent tools, not catalog primitives.) Every other tool
|
|
101
|
+
needs a per-agent `enable_agent_tools` grant (operator-only). Enabling the effectful
|
|
102
|
+
`app_pack.action` tool is additionally process-gated on the A1-A3 human-approval
|
|
103
|
+
surface being live for the tenant plane; surfaces with forced approval park on a human
|
|
104
|
+
approval before executing.
|
|
105
|
+
- Machine-readable copy with per-primitive live-status fields:
|
|
106
|
+
`skills/runtime-capability-inventory/primitive-catalog.json` (synced from the runtime
|
|
107
|
+
fixture). The `minutework_runtime_primitive_status` workspace MCP tool serves the same
|
|
108
|
+
answer, linked-runtime-backed when a runtime binding exists.
|
|
109
|
+
- Live executors (catalogued and wired today):
|
|
110
|
+
- `records.query` -- Native agent tool in the default READ_RING: enabled for the
|
|
111
|
+
provisioning-default agent without any grant.
|
|
112
|
+
- `records.upsert` -- Effectful; outside the default READ_RING, granted per agent via
|
|
113
|
+
enable_agent_tools (OPERATOR_RING member).
|
|
114
|
+
- `workflow.run_action` -- Agents reach this envelope through the app_pack.action tool
|
|
115
|
+
over manifest-declared agent_exposed action surfaces; approval is decided per target
|
|
116
|
+
capability/definition.
|
|
117
|
+
- `workflow.schedule_timer` -- Workflow-internal machinery (WORKFLOW_TIMER jobs); not
|
|
118
|
+
an agent-callable tool.
|
|
119
|
+
- `workflow.resume_checkpoint` -- Workflow-internal machinery driven by the jobs
|
|
120
|
+
worker; not an agent-callable tool.
|
|
121
|
+
- `workflow.cancel_on_thread_activity` -- Workflow-internal machinery; not an
|
|
122
|
+
agent-callable tool.
|
|
123
|
+
- `integrations.query_provider` -- Read-only provider query; preflight fail-closes on
|
|
124
|
+
connection/secret availability.
|
|
125
|
+
- `integrations.execute_automation` -- Approval is definition-forced in
|
|
126
|
+
mw.core.agent_actions (a definition can force approval, never relax it).
|
|
127
|
+
- `consent.check_channel` -- Service seam consumed by other executors and sidecars as
|
|
128
|
+
a preflight; not an agent-callable tool.
|
|
129
|
+
- `discovery.request_proposal` -- Effectful; outside the default READ_RING, granted
|
|
130
|
+
per agent via enable_agent_tools (BUILDER_DELEGATION_RING member).
|
|
131
|
+
- `command_exec.run_template` -- Operator/platform-dispatch surface; not an
|
|
132
|
+
agent-callable tool.
|
|
133
|
+
- `voice.hangup_call` -- VoiceSession finalization is live; the provider-side hangup
|
|
134
|
+
leg is platform-owned Phase 4. Not an agent-callable tool.
|
|
135
|
+
- `voice.get_call_status` -- Read-only session status lookup. Not an agent-callable
|
|
136
|
+
tool.
|
|
137
|
+
- Partial executors (wired with a deferred leg; treat the deferred
|
|
138
|
+
leg as unavailable):
|
|
139
|
+
- `scheduling.book_appointment` -- Capability is registered but the direct booking
|
|
140
|
+
executor is MVP-deferred; preflight truthfully reports provider_unavailable.
|
|
141
|
+
- `voice.initiate_call` -- Pre-dial stack is live (consent + TCPA preflight, approval
|
|
142
|
+
parking, VoiceSession lifecycle); the Twilio dial + realtime media worker are
|
|
143
|
+
platform-owned Phase 4.
|
|
144
|
+
- Catalogued-only (no executor wired; use the sanctioned interim
|
|
145
|
+
path):
|
|
146
|
+
- `projection.publish_receipt` -- Owning services emit receipts through the runtime
|
|
147
|
+
bridge directly (e.g. command_exec posts its own run receipts); do not build a
|
|
148
|
+
bespoke generic receipt executor.
|
|
149
|
+
- `communication.send_email` -- Sidecar bridge mirroring the
|
|
150
|
+
runtime_bridge/integrations transport seam with a consent.check_channel preflight;
|
|
151
|
+
route sends through the send_notification seam, never inline in runtime. End-state
|
|
152
|
+
is an action capability like voice.initiate_call.
|
|
153
|
+
- `communication.send_sms` -- Sidecar bridge mirroring the runtime_bridge/integrations
|
|
154
|
+
transport seam with a consent.check_channel preflight; route sends through the
|
|
155
|
+
send_notification seam, never inline in runtime. End-state is an action capability
|
|
156
|
+
like voice.initiate_call.
|
|
157
|
+
- `ontology.resolve_local` -- Seed URNAnchor rows at install; treat resolution as a
|
|
158
|
+
read-only lookup over seeded anchors.
|
|
159
|
+
- `ontology.propose_candidate` -- Stage PromotionCandidate rows for manual review; the
|
|
160
|
+
promotion service is platform-owned, do not build it tenant-side.
|
|
110
161
|
<!-- builder-doc-sync:active-primitives:end -->
|
|
@@ -0,0 +1,392 @@
|
|
|
1
|
+
{
|
|
2
|
+
"catalog_version": "1.1.0",
|
|
3
|
+
"live_status_contract": {
|
|
4
|
+
"note": "Live-status fields are hand-maintained claims validated against the in-process registries by apps/runtime_builder/tests/test_primitive_live_status.py (fail-closed: a claim without registry evidence fails CI). Catalog membership, executor wiring, and agent exposure are three separate layers.",
|
|
5
|
+
"executor_ready_values": ["live", "partial", "none"],
|
|
6
|
+
"agent_exposure_path_values": ["native_tool", "app_pack_action", "none"],
|
|
7
|
+
"approval_required_null_means": "no registry-evidenced approval seam exists for this primitive: either no executor is wired, or approval is decided per target capability/definition (the workflow.run_action envelope)",
|
|
8
|
+
"executor_ref_schemes": ["tool:<registered agent tool name>", "capability:<registered action capability id>", "service:<module>:<attr>"]
|
|
9
|
+
},
|
|
10
|
+
"primitives": [
|
|
11
|
+
{
|
|
12
|
+
"primitive_id": "records.query",
|
|
13
|
+
"family": "records",
|
|
14
|
+
"display_name": "Query Records",
|
|
15
|
+
"description": "Query dynamic entities by schema, filters, and paging.",
|
|
16
|
+
"runtime_app": "runtime_app_host",
|
|
17
|
+
"dispatch_path": "",
|
|
18
|
+
"status": "active",
|
|
19
|
+
"requires_integration": false,
|
|
20
|
+
"requires_secret": false,
|
|
21
|
+
"metered": false,
|
|
22
|
+
"executor_ready": "live",
|
|
23
|
+
"executor_ref": "tool:records.query",
|
|
24
|
+
"executor_notes": "Native agent tool in the default READ_RING: enabled for the provisioning-default agent without any grant.",
|
|
25
|
+
"agent_exposable": true,
|
|
26
|
+
"agent_exposure_path": "native_tool",
|
|
27
|
+
"approval_required": false,
|
|
28
|
+
"interim_path": ""
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
"primitive_id": "records.upsert",
|
|
32
|
+
"family": "records",
|
|
33
|
+
"display_name": "Upsert Record",
|
|
34
|
+
"description": "Create or update a dynamic entity against a registered schema.",
|
|
35
|
+
"runtime_app": "runtime_app_host",
|
|
36
|
+
"dispatch_path": "",
|
|
37
|
+
"status": "active",
|
|
38
|
+
"requires_integration": false,
|
|
39
|
+
"requires_secret": false,
|
|
40
|
+
"metered": false,
|
|
41
|
+
"executor_ready": "live",
|
|
42
|
+
"executor_ref": "tool:records.upsert",
|
|
43
|
+
"executor_notes": "Effectful; outside the default READ_RING, granted per agent via enable_agent_tools (OPERATOR_RING member).",
|
|
44
|
+
"agent_exposable": true,
|
|
45
|
+
"agent_exposure_path": "native_tool",
|
|
46
|
+
"approval_required": false,
|
|
47
|
+
"interim_path": ""
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
"primitive_id": "workflow.run_action",
|
|
51
|
+
"family": "workflow",
|
|
52
|
+
"display_name": "Run Action",
|
|
53
|
+
"description": "Execute a typed action through the action-execution contract.",
|
|
54
|
+
"runtime_app": "runtime_app_host",
|
|
55
|
+
"dispatch_path": "",
|
|
56
|
+
"status": "active",
|
|
57
|
+
"requires_integration": false,
|
|
58
|
+
"requires_secret": false,
|
|
59
|
+
"metered": true,
|
|
60
|
+
"executor_ready": "live",
|
|
61
|
+
"executor_ref": "service:apps.runtime_app_host.services:execute_action_run",
|
|
62
|
+
"executor_notes": "Agents reach this envelope through the app_pack.action tool over manifest-declared agent_exposed action surfaces; approval is decided per target capability/definition.",
|
|
63
|
+
"agent_exposable": true,
|
|
64
|
+
"agent_exposure_path": "app_pack_action",
|
|
65
|
+
"approval_required": null,
|
|
66
|
+
"interim_path": ""
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
"primitive_id": "workflow.schedule_timer",
|
|
70
|
+
"family": "workflow",
|
|
71
|
+
"display_name": "Schedule Timer",
|
|
72
|
+
"description": "Schedule a durable timer, reminder, or milestone.",
|
|
73
|
+
"runtime_app": "runtime_jobs",
|
|
74
|
+
"dispatch_path": "",
|
|
75
|
+
"status": "active",
|
|
76
|
+
"requires_integration": false,
|
|
77
|
+
"requires_secret": false,
|
|
78
|
+
"metered": false,
|
|
79
|
+
"executor_ready": "live",
|
|
80
|
+
"executor_ref": "service:apps.runtime_app_host.services:schedule_workflow_timer",
|
|
81
|
+
"executor_notes": "Workflow-internal machinery (WORKFLOW_TIMER jobs); not an agent-callable tool.",
|
|
82
|
+
"agent_exposable": false,
|
|
83
|
+
"agent_exposure_path": "none",
|
|
84
|
+
"approval_required": false,
|
|
85
|
+
"interim_path": ""
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
"primitive_id": "workflow.resume_checkpoint",
|
|
89
|
+
"family": "workflow",
|
|
90
|
+
"display_name": "Resume Checkpoint",
|
|
91
|
+
"description": "Resume a paused workflow at a human-approval or wait checkpoint.",
|
|
92
|
+
"runtime_app": "runtime_app_host",
|
|
93
|
+
"dispatch_path": "",
|
|
94
|
+
"status": "active",
|
|
95
|
+
"requires_integration": false,
|
|
96
|
+
"requires_secret": false,
|
|
97
|
+
"metered": false,
|
|
98
|
+
"executor_ready": "live",
|
|
99
|
+
"executor_ref": "service:apps.runtime_app_host.services:resume_workflow_checkpoint",
|
|
100
|
+
"executor_notes": "Workflow-internal machinery driven by the jobs worker; not an agent-callable tool.",
|
|
101
|
+
"agent_exposable": false,
|
|
102
|
+
"agent_exposure_path": "none",
|
|
103
|
+
"approval_required": false,
|
|
104
|
+
"interim_path": ""
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
"primitive_id": "workflow.cancel_on_thread_activity",
|
|
108
|
+
"family": "workflow",
|
|
109
|
+
"display_name": "Cancel On Thread Activity",
|
|
110
|
+
"description": "Arm a workflow run to cancel when its thread sees inbound activity (e.g. a reply or unsubscribe).",
|
|
111
|
+
"runtime_app": "runtime_app_host",
|
|
112
|
+
"dispatch_path": "",
|
|
113
|
+
"status": "active",
|
|
114
|
+
"requires_integration": false,
|
|
115
|
+
"requires_secret": false,
|
|
116
|
+
"metered": false,
|
|
117
|
+
"executor_ready": "live",
|
|
118
|
+
"executor_ref": "service:apps.runtime_app_host.services:arm_workflow_cancel_on_thread_activity",
|
|
119
|
+
"executor_notes": "Workflow-internal machinery; not an agent-callable tool.",
|
|
120
|
+
"agent_exposable": false,
|
|
121
|
+
"agent_exposure_path": "none",
|
|
122
|
+
"approval_required": false,
|
|
123
|
+
"interim_path": ""
|
|
124
|
+
},
|
|
125
|
+
{
|
|
126
|
+
"primitive_id": "projection.publish_receipt",
|
|
127
|
+
"family": "projection",
|
|
128
|
+
"display_name": "Publish Receipt",
|
|
129
|
+
"description": "Emit a receipt to Core through the runtime bridge.",
|
|
130
|
+
"runtime_app": "runtime_bridge",
|
|
131
|
+
"dispatch_path": "",
|
|
132
|
+
"status": "active",
|
|
133
|
+
"requires_integration": false,
|
|
134
|
+
"requires_secret": false,
|
|
135
|
+
"metered": false,
|
|
136
|
+
"executor_ready": "none",
|
|
137
|
+
"executor_ref": "",
|
|
138
|
+
"executor_notes": "Catalogued only: no generic executor is wired for this primitive id.",
|
|
139
|
+
"agent_exposable": false,
|
|
140
|
+
"agent_exposure_path": "none",
|
|
141
|
+
"approval_required": null,
|
|
142
|
+
"interim_path": "Owning services emit receipts through the runtime bridge directly (e.g. command_exec posts its own run receipts); do not build a bespoke generic receipt executor."
|
|
143
|
+
},
|
|
144
|
+
{
|
|
145
|
+
"primitive_id": "integrations.query_provider",
|
|
146
|
+
"family": "integrations",
|
|
147
|
+
"display_name": "Query Provider",
|
|
148
|
+
"description": "Query an external provider through a managed integration connection.",
|
|
149
|
+
"runtime_app": "runtime_integrations",
|
|
150
|
+
"dispatch_path": "",
|
|
151
|
+
"status": "active",
|
|
152
|
+
"requires_integration": true,
|
|
153
|
+
"requires_secret": true,
|
|
154
|
+
"metered": true,
|
|
155
|
+
"executor_ready": "live",
|
|
156
|
+
"executor_ref": "capability:integrations.query_provider",
|
|
157
|
+
"executor_notes": "Read-only provider query; preflight fail-closes on connection/secret availability.",
|
|
158
|
+
"agent_exposable": true,
|
|
159
|
+
"agent_exposure_path": "app_pack_action",
|
|
160
|
+
"approval_required": false,
|
|
161
|
+
"interim_path": ""
|
|
162
|
+
},
|
|
163
|
+
{
|
|
164
|
+
"primitive_id": "integrations.execute_automation",
|
|
165
|
+
"family": "integrations",
|
|
166
|
+
"display_name": "Execute Automation",
|
|
167
|
+
"description": "Run a browser-automation or portal-execution job.",
|
|
168
|
+
"runtime_app": "runtime_integrations",
|
|
169
|
+
"dispatch_path": "",
|
|
170
|
+
"status": "active",
|
|
171
|
+
"requires_integration": true,
|
|
172
|
+
"requires_secret": true,
|
|
173
|
+
"metered": true,
|
|
174
|
+
"executor_ready": "live",
|
|
175
|
+
"executor_ref": "capability:integrations.execute_automation",
|
|
176
|
+
"executor_notes": "Approval is definition-forced in mw.core.agent_actions (a definition can force approval, never relax it).",
|
|
177
|
+
"agent_exposable": true,
|
|
178
|
+
"agent_exposure_path": "app_pack_action",
|
|
179
|
+
"approval_required": true,
|
|
180
|
+
"interim_path": ""
|
|
181
|
+
},
|
|
182
|
+
{
|
|
183
|
+
"primitive_id": "communication.send_email",
|
|
184
|
+
"family": "communication",
|
|
185
|
+
"display_name": "Send Email",
|
|
186
|
+
"description": "Send an outbound email through a configured provider.",
|
|
187
|
+
"runtime_app": "runtime_communication",
|
|
188
|
+
"dispatch_path": "",
|
|
189
|
+
"status": "active",
|
|
190
|
+
"requires_integration": true,
|
|
191
|
+
"requires_secret": true,
|
|
192
|
+
"metered": true,
|
|
193
|
+
"executor_ready": "none",
|
|
194
|
+
"executor_ref": "",
|
|
195
|
+
"executor_notes": "Catalogued only: no send executor is registered for this primitive id.",
|
|
196
|
+
"agent_exposable": false,
|
|
197
|
+
"agent_exposure_path": "none",
|
|
198
|
+
"approval_required": null,
|
|
199
|
+
"interim_path": "Sidecar bridge mirroring the runtime_bridge/integrations transport seam with a consent.check_channel preflight; route sends through the send_notification seam, never inline in runtime. End-state is an action capability like voice.initiate_call."
|
|
200
|
+
},
|
|
201
|
+
{
|
|
202
|
+
"primitive_id": "communication.send_sms",
|
|
203
|
+
"family": "communication",
|
|
204
|
+
"display_name": "Send SMS",
|
|
205
|
+
"description": "Send an outbound SMS through a configured provider.",
|
|
206
|
+
"runtime_app": "runtime_communication",
|
|
207
|
+
"dispatch_path": "",
|
|
208
|
+
"status": "active",
|
|
209
|
+
"requires_integration": true,
|
|
210
|
+
"requires_secret": true,
|
|
211
|
+
"metered": true,
|
|
212
|
+
"executor_ready": "none",
|
|
213
|
+
"executor_ref": "",
|
|
214
|
+
"executor_notes": "Catalogued only: no send executor is registered for this primitive id.",
|
|
215
|
+
"agent_exposable": false,
|
|
216
|
+
"agent_exposure_path": "none",
|
|
217
|
+
"approval_required": null,
|
|
218
|
+
"interim_path": "Sidecar bridge mirroring the runtime_bridge/integrations transport seam with a consent.check_channel preflight; route sends through the send_notification seam, never inline in runtime. End-state is an action capability like voice.initiate_call."
|
|
219
|
+
},
|
|
220
|
+
{
|
|
221
|
+
"primitive_id": "consent.check_channel",
|
|
222
|
+
"family": "consent",
|
|
223
|
+
"display_name": "Check Channel Consent",
|
|
224
|
+
"description": "Preflight a recipient/channel for suppression, contact preferences, marketing consent, quiet hours, and rate limits before sending.",
|
|
225
|
+
"runtime_app": "runtime_communication",
|
|
226
|
+
"dispatch_path": "",
|
|
227
|
+
"status": "active",
|
|
228
|
+
"requires_integration": false,
|
|
229
|
+
"requires_secret": false,
|
|
230
|
+
"metered": false,
|
|
231
|
+
"executor_ready": "live",
|
|
232
|
+
"executor_ref": "service:apps.runtime_communication.services:check_channel",
|
|
233
|
+
"executor_notes": "Service seam consumed by other executors and sidecars as a preflight; not an agent-callable tool.",
|
|
234
|
+
"agent_exposable": false,
|
|
235
|
+
"agent_exposure_path": "none",
|
|
236
|
+
"approval_required": false,
|
|
237
|
+
"interim_path": ""
|
|
238
|
+
},
|
|
239
|
+
{
|
|
240
|
+
"primitive_id": "scheduling.book_appointment",
|
|
241
|
+
"family": "scheduling",
|
|
242
|
+
"display_name": "Book Appointment",
|
|
243
|
+
"description": "Book a scheduling appointment through a configured provider (Cal.com/Calendly). MVP: the agent shares a correlation-tokened booking link and the provider webhook confirms the booking; the direct executor is provider-gated.",
|
|
244
|
+
"runtime_app": "runtime_integrations",
|
|
245
|
+
"dispatch_path": "",
|
|
246
|
+
"status": "active",
|
|
247
|
+
"requires_integration": true,
|
|
248
|
+
"requires_secret": true,
|
|
249
|
+
"metered": false,
|
|
250
|
+
"executor_ready": "partial",
|
|
251
|
+
"executor_ref": "capability:scheduling.book_appointment",
|
|
252
|
+
"executor_notes": "Capability is registered but the direct booking executor is MVP-deferred; preflight truthfully reports provider_unavailable.",
|
|
253
|
+
"agent_exposable": false,
|
|
254
|
+
"agent_exposure_path": "none",
|
|
255
|
+
"approval_required": false,
|
|
256
|
+
"interim_path": "Target the workflow.run_action link+webhook envelope: share a correlation-tokened booking link (consent-guarded), and the provider webhook POST /api/v1/ingress/booking confirms the booking. Only the preflight changes when the direct executor lands."
|
|
257
|
+
},
|
|
258
|
+
{
|
|
259
|
+
"primitive_id": "discovery.request_proposal",
|
|
260
|
+
"family": "discovery",
|
|
261
|
+
"display_name": "Request Discovery Proposal",
|
|
262
|
+
"description": "Bridge a thread into the Vuilder discovery engine: create a discovery lead/session (resume optional), link it to the thread, and poll the gateway until the proposal is ready, then post the build-direction cards member-only. Discovery stays authoritative in public-dj.",
|
|
263
|
+
"runtime_app": "runtime_agents",
|
|
264
|
+
"dispatch_path": "",
|
|
265
|
+
"status": "active",
|
|
266
|
+
"requires_integration": false,
|
|
267
|
+
"requires_secret": true,
|
|
268
|
+
"metered": false,
|
|
269
|
+
"executor_ready": "live",
|
|
270
|
+
"executor_ref": "tool:discovery.request_proposal",
|
|
271
|
+
"executor_notes": "Effectful; outside the default READ_RING, granted per agent via enable_agent_tools (BUILDER_DELEGATION_RING member).",
|
|
272
|
+
"agent_exposable": true,
|
|
273
|
+
"agent_exposure_path": "native_tool",
|
|
274
|
+
"approval_required": false,
|
|
275
|
+
"interim_path": ""
|
|
276
|
+
},
|
|
277
|
+
{
|
|
278
|
+
"primitive_id": "ontology.resolve_local",
|
|
279
|
+
"family": "ontology",
|
|
280
|
+
"display_name": "Resolve Local Ontology",
|
|
281
|
+
"description": "Resolve a local record against the ontology bundle and Core URNs.",
|
|
282
|
+
"runtime_app": "runtime_memory",
|
|
283
|
+
"dispatch_path": "",
|
|
284
|
+
"status": "active",
|
|
285
|
+
"requires_integration": false,
|
|
286
|
+
"requires_secret": false,
|
|
287
|
+
"metered": false,
|
|
288
|
+
"executor_ready": "none",
|
|
289
|
+
"executor_ref": "",
|
|
290
|
+
"executor_notes": "Catalogued only: URNAnchor models exist but no resolve executor is wired.",
|
|
291
|
+
"agent_exposable": false,
|
|
292
|
+
"agent_exposure_path": "none",
|
|
293
|
+
"approval_required": null,
|
|
294
|
+
"interim_path": "Seed URNAnchor rows at install; treat resolution as a read-only lookup over seeded anchors."
|
|
295
|
+
},
|
|
296
|
+
{
|
|
297
|
+
"primitive_id": "ontology.propose_candidate",
|
|
298
|
+
"family": "ontology",
|
|
299
|
+
"display_name": "Propose Ontology Candidate",
|
|
300
|
+
"description": "Submit a promotion candidate to Core for shared ontology acceptance.",
|
|
301
|
+
"runtime_app": "runtime_bridge",
|
|
302
|
+
"dispatch_path": "",
|
|
303
|
+
"status": "active",
|
|
304
|
+
"requires_integration": false,
|
|
305
|
+
"requires_secret": false,
|
|
306
|
+
"metered": false,
|
|
307
|
+
"executor_ready": "none",
|
|
308
|
+
"executor_ref": "",
|
|
309
|
+
"executor_notes": "Catalogued only: PromotionCandidate models exist but no propose executor is wired.",
|
|
310
|
+
"agent_exposable": false,
|
|
311
|
+
"agent_exposure_path": "none",
|
|
312
|
+
"approval_required": null,
|
|
313
|
+
"interim_path": "Stage PromotionCandidate rows for manual review; the promotion service is platform-owned, do not build it tenant-side."
|
|
314
|
+
},
|
|
315
|
+
{
|
|
316
|
+
"primitive_id": "command_exec.run_template",
|
|
317
|
+
"family": "command_exec",
|
|
318
|
+
"display_name": "Run Command Template",
|
|
319
|
+
"description": "Execute a named command template with validated arguments.",
|
|
320
|
+
"runtime_app": "runtime_command_exec",
|
|
321
|
+
"dispatch_path": "",
|
|
322
|
+
"status": "active",
|
|
323
|
+
"requires_integration": false,
|
|
324
|
+
"requires_secret": false,
|
|
325
|
+
"metered": false,
|
|
326
|
+
"executor_ready": "live",
|
|
327
|
+
"executor_ref": "service:apps.runtime_command_exec.services:launch_command_execution",
|
|
328
|
+
"executor_notes": "Operator/platform-dispatch surface; not an agent-callable tool.",
|
|
329
|
+
"agent_exposable": false,
|
|
330
|
+
"agent_exposure_path": "none",
|
|
331
|
+
"approval_required": false,
|
|
332
|
+
"interim_path": ""
|
|
333
|
+
},
|
|
334
|
+
{
|
|
335
|
+
"primitive_id": "voice.initiate_call",
|
|
336
|
+
"family": "voice",
|
|
337
|
+
"display_name": "Initiate Call",
|
|
338
|
+
"description": "Place an outbound voice call to a contact and join an AI on the line. Runs through execute_action_run: preflight enforces consent (do_not_call), TCPA calling windows/quiet hours, and telephony-provider availability, then drives a VoiceSession (direction=outbound). The actual Twilio dial + realtime media worker are platform-owned (v3_voice_replacement Phase 4); outbound calls default to human approval.",
|
|
339
|
+
"runtime_app": "runtime_agents",
|
|
340
|
+
"dispatch_path": "",
|
|
341
|
+
"status": "active",
|
|
342
|
+
"requires_integration": true,
|
|
343
|
+
"requires_secret": true,
|
|
344
|
+
"metered": true,
|
|
345
|
+
"executor_ready": "partial",
|
|
346
|
+
"executor_ref": "capability:voice.initiate_call",
|
|
347
|
+
"executor_notes": "Pre-dial stack is live (consent + TCPA preflight, approval parking, VoiceSession lifecycle); the Twilio dial + realtime media worker are platform-owned Phase 4.",
|
|
348
|
+
"agent_exposable": true,
|
|
349
|
+
"agent_exposure_path": "app_pack_action",
|
|
350
|
+
"approval_required": true,
|
|
351
|
+
"interim_path": "Build the pre-dial stack now (preflight matrix, APPROVAL_PENDING parking, VoiceSession lifecycle, mock transcripts, hangup/get_call_status); dial, media worker, and inbound telephony are platform-owned Phase 4."
|
|
352
|
+
},
|
|
353
|
+
{
|
|
354
|
+
"primitive_id": "voice.hangup_call",
|
|
355
|
+
"family": "voice",
|
|
356
|
+
"display_name": "Hang Up Call",
|
|
357
|
+
"description": "Finalize an in-progress voice call: finalize the VoiceSession (terminal status + duration) and request provider hangup. Provider hangup is platform-owned (v3_voice_replacement Phase 4).",
|
|
358
|
+
"runtime_app": "runtime_agents",
|
|
359
|
+
"dispatch_path": "",
|
|
360
|
+
"status": "active",
|
|
361
|
+
"requires_integration": true,
|
|
362
|
+
"requires_secret": true,
|
|
363
|
+
"metered": false,
|
|
364
|
+
"executor_ready": "live",
|
|
365
|
+
"executor_ref": "capability:voice.hangup_call",
|
|
366
|
+
"executor_notes": "VoiceSession finalization is live; the provider-side hangup leg is platform-owned Phase 4. Not an agent-callable tool.",
|
|
367
|
+
"agent_exposable": false,
|
|
368
|
+
"agent_exposure_path": "none",
|
|
369
|
+
"approval_required": false,
|
|
370
|
+
"interim_path": ""
|
|
371
|
+
},
|
|
372
|
+
{
|
|
373
|
+
"primitive_id": "voice.get_call_status",
|
|
374
|
+
"family": "voice",
|
|
375
|
+
"display_name": "Get Call Status",
|
|
376
|
+
"description": "Read the current status, duration, and transcript summary for a VoiceSession. Read-only; no provider call.",
|
|
377
|
+
"runtime_app": "runtime_agents",
|
|
378
|
+
"dispatch_path": "",
|
|
379
|
+
"status": "active",
|
|
380
|
+
"requires_integration": true,
|
|
381
|
+
"requires_secret": true,
|
|
382
|
+
"metered": false,
|
|
383
|
+
"executor_ready": "live",
|
|
384
|
+
"executor_ref": "capability:voice.get_call_status",
|
|
385
|
+
"executor_notes": "Read-only session status lookup. Not an agent-callable tool.",
|
|
386
|
+
"agent_exposable": false,
|
|
387
|
+
"agent_exposure_path": "none",
|
|
388
|
+
"approval_required": false,
|
|
389
|
+
"interim_path": ""
|
|
390
|
+
}
|
|
391
|
+
]
|
|
392
|
+
}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: runtime-primitive-interim-paths
|
|
3
|
+
description: "Sanctioned interim build paths for catalogued runtime primitives that are not fully executable or agent-exposed yet: outbound comms, booking, ontology, voice, exposure ops, sandbox parity."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Runtime Primitive Interim Paths
|
|
7
|
+
|
|
8
|
+
Use this skill when a build targets a runtime primitive that is catalogued but
|
|
9
|
+
not fully executable or agent-exposed yet, and the workspace needs a sanctioned
|
|
10
|
+
interim path instead of bespoke substrate.
|
|
11
|
+
|
|
12
|
+
Catalog membership never implies executability or agent exposure. Check the
|
|
13
|
+
live-status block in `skills/runtime-capability-inventory/SKILL.md` and the
|
|
14
|
+
`minutework_runtime_primitive_status` workspace MCP tool first; the paths below
|
|
15
|
+
are the sanctioned interim shapes for the known gaps.
|
|
16
|
+
|
|
17
|
+
## Outbound Email / SMS (`communication.send_email` / `communication.send_sms`)
|
|
18
|
+
|
|
19
|
+
Status: catalogued, no executor.
|
|
20
|
+
|
|
21
|
+
- Build outbound delivery as a sidecar bridge mirroring the
|
|
22
|
+
`runtime_bridge`/integrations transport seam.
|
|
23
|
+
- Always preflight with `consent.check_channel` (suppression, contact
|
|
24
|
+
preferences, marketing consent, quiet hours, rate limits).
|
|
25
|
+
- Route sends through the runtime's `send_notification` seam, which queues a
|
|
26
|
+
`SCHEDULED_SEND` job. Never send inline in runtime request paths.
|
|
27
|
+
- The end-state is a governed action capability like `voice.initiate_call`.
|
|
28
|
+
File a `BuilderCapabilityRequest` gap (see
|
|
29
|
+
`skills/capability-gap-reporting/SKILL.md`) rather than hard-wiring a
|
|
30
|
+
provider SDK into runtime.
|
|
31
|
+
|
|
32
|
+
## Booking (`scheduling.book_appointment`)
|
|
33
|
+
|
|
34
|
+
Status: partial -- capability registered; preflight truthfully reports
|
|
35
|
+
`provider_unavailable`.
|
|
36
|
+
|
|
37
|
+
- Target the `workflow.run_action` envelope now: share a correlation-tokened
|
|
38
|
+
Cal.com/Calendly booking link through a consent-guarded notification.
|
|
39
|
+
- The provider webhook `POST /api/v1/ingress/booking` (this route exists on
|
|
40
|
+
the platform gateway and the runtime ingress dispatcher) confirms the
|
|
41
|
+
booking.
|
|
42
|
+
- When the direct executor lands, only the preflight outcome changes. Author
|
|
43
|
+
flows against the envelope, not the provider.
|
|
44
|
+
|
|
45
|
+
## Ontology (`ontology.resolve_local` / `ontology.propose_candidate`)
|
|
46
|
+
|
|
47
|
+
Status: catalogued, no executor; `URNAnchor` and `PromotionCandidate` models
|
|
48
|
+
exist in `runtime_ontology`.
|
|
49
|
+
|
|
50
|
+
- Seed `URNAnchor` rows at install; treat `resolve_local` as a read-only
|
|
51
|
+
lookup over seeded anchors.
|
|
52
|
+
- Treat `propose_candidate` as staging `PromotionCandidate` rows for manual
|
|
53
|
+
review. The promotion service is platform-owned -- do not build it
|
|
54
|
+
tenant-side.
|
|
55
|
+
|
|
56
|
+
## Voice (`voice.initiate_call`)
|
|
57
|
+
|
|
58
|
+
Status: partial; `hangup_call` / `get_call_status` are live.
|
|
59
|
+
|
|
60
|
+
- The workspace can build the full pre-dial stack: the preflight matrix
|
|
61
|
+
(consent `do_not_call` -> TCPA calling window 08:00-21:00 callee-local ->
|
|
62
|
+
provider availability), `APPROVAL_PENDING` parking on the `ActionRun`,
|
|
63
|
+
`VoiceSession` lifecycle, mock transcripts, and `hangup_call` /
|
|
64
|
+
`get_call_status` handling.
|
|
65
|
+
- The actual dial, the realtime media worker, and inbound telephony are
|
|
66
|
+
platform-owned (`v3_voice_replacement` Phase 4). Never implement Twilio
|
|
67
|
+
internals in a workspace.
|
|
68
|
+
|
|
69
|
+
## Exposure Ops
|
|
70
|
+
|
|
71
|
+
- Per-agent tool grants happen only via the operator-run `enable_agent_tools`
|
|
72
|
+
management command (registry-validated names; `@read` / `@operator` /
|
|
73
|
+
`@builder_delegation` ring tokens).
|
|
74
|
+
- Manifest-declared exposure (D1) is live: app-pack manifests declare
|
|
75
|
+
`agentExposed` per action/query (truthy-only, plus approval metadata on
|
|
76
|
+
capability-bound actions), and those surfaces are reached through the
|
|
77
|
+
`app_pack.action` / `app_pack.query` tools -- which still require the
|
|
78
|
+
per-agent grant above.
|
|
79
|
+
- `app_pack.action` exposure is process-gated on the A1-A3 human-approval
|
|
80
|
+
surface being live for the tenant plane; `integrations.execute_automation`
|
|
81
|
+
and `voice.initiate_call` park on approval.
|
|
82
|
+
|
|
83
|
+
## Sandbox Tier Parity
|
|
84
|
+
|
|
85
|
+
- Sandbox runtimes run identical wiring and gating to primary -- a faithful
|
|
86
|
+
dry-run. There is no permissive sandbox mode; anything blocked on primary is
|
|
87
|
+
blocked in sandbox.
|
|
88
|
+
|
|
89
|
+
## Before Authoring
|
|
90
|
+
|
|
91
|
+
- Check the live-status block in
|
|
92
|
+
`skills/runtime-capability-inventory/SKILL.md` and the
|
|
93
|
+
`minutework_runtime_primitive_status` workspace MCP tool before authoring
|
|
94
|
+
against any primitive.
|
|
95
|
+
- File gaps via `skills/capability-gap-reporting/SKILL.md` for the comms
|
|
96
|
+
executor and the ontology services.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "minutework",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.46",
|
|
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/
|
|
28
|
-
"@minutework/
|
|
27
|
+
"@minutework/schema-compiler": "0.1.8",
|
|
28
|
+
"@minutework/platform-config": "0.1.3"
|
|
29
29
|
},
|
|
30
30
|
"devDependencies": {
|
|
31
31
|
"@types/node": "^24.9.1",
|