@orderful/droid 0.52.0 → 0.52.1

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/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # @orderful/droid
2
2
 
3
+ ## 0.52.1
4
+
5
+ ### Patch Changes
6
+
7
+ - [#321](https://github.com/Orderful/droid/pull/321) [`235a4b3`](https://github.com/Orderful/droid/commit/235a4b32d735136c79b66aacca6097f42559c94c) Thanks [@frytyler](https://github.com/frytyler)! - Align propose-plan skill with Zod v4 structured output constraint: payload and sourceRaw as JSON-stringified strings
8
+
3
9
  ## 0.52.0
4
10
 
5
11
  ### Minor Changes
@@ -34,7 +34,7 @@ Produce a single JSON object matching the schema in `references/output-schema.js
34
34
  "evidence": {
35
35
  "reasoning": "string — your analysis of what needs to happen and why",
36
36
  "sourceSummary": "string — concise summary of what you found during research",
37
- "sourceRaw": "object — raw source data from research (optional)",
37
+ "sourceRaw": "stringJSON-stringified raw source data from research (optional)",
38
38
  "impactSummary": "string — what will change if this plan is approved",
39
39
  "caveats": ["string — anything uncertain, auto-generated, or requiring follow-up"]
40
40
  },
@@ -45,7 +45,7 @@ Produce a single JSON object matching the schema in `references/output-schema.js
45
45
  "tool": "string — the tool name exactly as you see it in your available tools"
46
46
  },
47
47
  "description": "string — human-readable description of what this action does",
48
- "payload": "object — arguments to pass to the tool"
48
+ "payload": "stringJSON-stringified arguments to pass to the tool"
49
49
  }
50
50
  ]
51
51
  }
@@ -57,7 +57,7 @@ Produce a single JSON object matching the schema in `references/output-schema.js
57
57
  | --------------- | ------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------ |
58
58
  | `reasoning` | Your analysis — what needs to happen and why. Cite actual data from your research, not assumptions. | First thing they read. Establishes trust. |
59
59
  | `sourceSummary` | Concise summary of what you found. Include entity names, IDs, and states. | Quick scan to verify you looked at the right things. |
60
- | `sourceRaw` | Optional. Raw API responses or data snapshots as a JSON object. | Expandable detail for reviewers who want to verify. |
60
+ | `sourceRaw` | Optional. JSON-stringified raw API responses or data snapshots. | Expandable detail for reviewers who want to verify. |
61
61
  | `impactSummary` | What changes if the plan is approved. Be specific — "creates org X with ISA ID Y" not "creates an org". | The core decision point. Reviewer approves based on this. |
62
62
  | `caveats` | Optional. Flag anything uncertain, auto-generated, or needing manual follow-up. | Prevents surprises. Reviewers appreciate honesty about gaps. |
63
63
 
@@ -68,7 +68,7 @@ Produce a single JSON object matching the schema in `references/output-schema.js
68
68
  | `type` | Action category. Use `mcp_call` for MCP tool invocations. |
69
69
  | `config` | Identifies which tool to call. For `mcp_call`: `{ "tool": "create_org" }`. Use the tool name exactly as it appears in your available tools. |
70
70
  | `description` | Human-readable summary. The reviewer sees this before expanding the payload. Write it for someone who won't read the raw payload. |
71
- | `payload` | Raw arguments passed directly to the tool. No wrapping or nestingexactly what the tool expects. |
71
+ | `payload` | JSON-stringified arguments passed to the tool. Stringify the object `JSON.stringify({...})` don't nest it raw. |
72
72
 
73
73
  ## Building Evidence From What You Know
74
74
 
@@ -116,15 +116,11 @@ At execution time, the system resolves these references using the actual results
116
116
  "type": "mcp_call",
117
117
  "config": { "tool": "create_billing_customer" },
118
118
  "description": "Create ChargeBee billing customer for Acme Corp using new org ID",
119
- "payload": {
120
- "orgId": "{{ actions.0.result.id }}",
121
- "orgName": "Acme Corp",
122
- "contactEmail": "jane@acme.com"
123
- }
119
+ "payload": "{\"orgId\":\"{{ actions.0.result.id }}\",\"orgName\":\"Acme Corp\",\"contactEmail\":\"jane@acme.com\"}"
124
120
  }
125
121
  ```
126
122
 
127
- Here `orgId` will be resolved at runtime from the result of action 0 (e.g., `create_org`). The reviewer sees that billing depends on the org creation step.
123
+ Here `orgId` will be resolved at runtime from the result of action 0 (e.g., `create_org`). The reviewer sees that billing depends on the org creation step. Note the payload is JSON-stringified — template references work inside the string and are resolved before parsing.
128
124
 
129
125
  ## Example
130
126
 
@@ -135,10 +131,7 @@ Say you've been asked to provision an Orderful org for a new customer. You've qu
135
131
  "evidence": {
136
132
  "reasoning": "Salesforce account Acme Corp (SF-001234) was signed on 2026-03-01 and has no Orderful OrgID. No existing Orderful org matches by name or ISA ID. The account's primary contact is jane@acme.com. ISA ID derived from Customer_ISA_ID__c field: ACME001.",
137
133
  "sourceSummary": "Salesforce: Acme Corp (SF-001234), signed 2026-03-01, no OrgID. Orderful: no org named 'Acme Corp', no ISA ID 'ACME001' in use.",
138
- "sourceRaw": {
139
- "salesforce_account": { "Id": "SF-001234", "Name": "Acme Corp", "OrgID__c": null, "Customer_ISA_ID__c": "ACME001" },
140
- "orderful_org_search": { "results": [] }
141
- },
134
+ "sourceRaw": "{\"salesforce_account\":{\"Id\":\"SF-001234\",\"Name\":\"Acme Corp\",\"OrgID__c\":null,\"Customer_ISA_ID__c\":\"ACME001\"},\"orderful_org_search\":{\"results\":[]}}",
142
135
  "impactSummary": "Creates Orderful org 'Acme Corp' with ISA ID 'ACME001', creates billing customer in ChargeBee, and sends welcome email to jane@acme.com.",
143
136
  "caveats": ["ARR not found in Salesforce — billing customer will be created without revenue data. Manual update may be needed."]
144
137
  },
@@ -147,30 +140,19 @@ Say you've been asked to provision an Orderful org for a new customer. You've qu
147
140
  "type": "mcp_call",
148
141
  "config": { "tool": "create_org" },
149
142
  "description": "Create Orderful org 'Acme Corp' with ISA ID 'ACME001'",
150
- "payload": {
151
- "name": "Acme Corp",
152
- "isaId": "ACME001",
153
- "contactEmail": "jane@acme.com"
154
- }
143
+ "payload": "{\"name\":\"Acme Corp\",\"isaId\":\"ACME001\",\"contactEmail\":\"jane@acme.com\"}"
155
144
  },
156
145
  {
157
146
  "type": "mcp_call",
158
147
  "config": { "tool": "create_billing_customer" },
159
148
  "description": "Create ChargeBee billing customer for Acme Corp using new org ID",
160
- "payload": {
161
- "orgId": "{{ actions.0.result.id }}",
162
- "orgName": "Acme Corp",
163
- "contactEmail": "jane@acme.com"
164
- }
149
+ "payload": "{\"orgId\":\"{{ actions.0.result.id }}\",\"orgName\":\"Acme Corp\",\"contactEmail\":\"jane@acme.com\"}"
165
150
  },
166
151
  {
167
152
  "type": "mcp_call",
168
153
  "config": { "tool": "invite_user" },
169
154
  "description": "Send welcome email to jane@acme.com for Acme Corp org",
170
- "payload": {
171
- "email": "jane@acme.com",
172
- "orgId": "{{ actions.0.result.id }}"
173
- }
155
+ "payload": "{\"email\":\"jane@acme.com\",\"orgId\":\"{{ actions.0.result.id }}\"}"
174
156
  }
175
157
  ]
176
158
  }
@@ -27,9 +27,8 @@
27
27
  "description": "Concise summary of research findings with entity names and IDs"
28
28
  },
29
29
  "sourceRaw": {
30
- "type": "object",
31
- "description": "Raw source data from research",
32
- "additionalProperties": true
30
+ "type": "string",
31
+ "description": "JSON-stringified raw source data from research"
33
32
  },
34
33
  "impactSummary": {
35
34
  "type": "string",
@@ -72,9 +71,8 @@
72
71
  "description": "Human-readable description of what this action does"
73
72
  },
74
73
  "payload": {
75
- "type": "object",
76
- "description": "Arguments to pass to the MCP tool",
77
- "additionalProperties": true
74
+ "type": "string",
75
+ "description": "JSON-stringified arguments to pass to the MCP tool"
78
76
  }
79
77
  },
80
78
  "additionalProperties": false
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@orderful/droid",
3
- "version": "0.52.0",
3
+ "version": "0.52.1",
4
4
  "description": "AI workflow toolkit for sharing skills, commands, and agents across the team",
5
5
  "type": "module",
6
6
  "bin": {
@@ -34,7 +34,7 @@ Produce a single JSON object matching the schema in `references/output-schema.js
34
34
  "evidence": {
35
35
  "reasoning": "string — your analysis of what needs to happen and why",
36
36
  "sourceSummary": "string — concise summary of what you found during research",
37
- "sourceRaw": "object — raw source data from research (optional)",
37
+ "sourceRaw": "stringJSON-stringified raw source data from research (optional)",
38
38
  "impactSummary": "string — what will change if this plan is approved",
39
39
  "caveats": ["string — anything uncertain, auto-generated, or requiring follow-up"]
40
40
  },
@@ -45,7 +45,7 @@ Produce a single JSON object matching the schema in `references/output-schema.js
45
45
  "tool": "string — the tool name exactly as you see it in your available tools"
46
46
  },
47
47
  "description": "string — human-readable description of what this action does",
48
- "payload": "object — arguments to pass to the tool"
48
+ "payload": "stringJSON-stringified arguments to pass to the tool"
49
49
  }
50
50
  ]
51
51
  }
@@ -57,7 +57,7 @@ Produce a single JSON object matching the schema in `references/output-schema.js
57
57
  | --------------- | ------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------ |
58
58
  | `reasoning` | Your analysis — what needs to happen and why. Cite actual data from your research, not assumptions. | First thing they read. Establishes trust. |
59
59
  | `sourceSummary` | Concise summary of what you found. Include entity names, IDs, and states. | Quick scan to verify you looked at the right things. |
60
- | `sourceRaw` | Optional. Raw API responses or data snapshots as a JSON object. | Expandable detail for reviewers who want to verify. |
60
+ | `sourceRaw` | Optional. JSON-stringified raw API responses or data snapshots. | Expandable detail for reviewers who want to verify. |
61
61
  | `impactSummary` | What changes if the plan is approved. Be specific — "creates org X with ISA ID Y" not "creates an org". | The core decision point. Reviewer approves based on this. |
62
62
  | `caveats` | Optional. Flag anything uncertain, auto-generated, or needing manual follow-up. | Prevents surprises. Reviewers appreciate honesty about gaps. |
63
63
 
@@ -68,7 +68,7 @@ Produce a single JSON object matching the schema in `references/output-schema.js
68
68
  | `type` | Action category. Use `mcp_call` for MCP tool invocations. |
69
69
  | `config` | Identifies which tool to call. For `mcp_call`: `{ "tool": "create_org" }`. Use the tool name exactly as it appears in your available tools. |
70
70
  | `description` | Human-readable summary. The reviewer sees this before expanding the payload. Write it for someone who won't read the raw payload. |
71
- | `payload` | Raw arguments passed directly to the tool. No wrapping or nestingexactly what the tool expects. |
71
+ | `payload` | JSON-stringified arguments passed to the tool. Stringify the object `JSON.stringify({...})` don't nest it raw. |
72
72
 
73
73
  ## Building Evidence From What You Know
74
74
 
@@ -116,15 +116,11 @@ At execution time, the system resolves these references using the actual results
116
116
  "type": "mcp_call",
117
117
  "config": { "tool": "create_billing_customer" },
118
118
  "description": "Create ChargeBee billing customer for Acme Corp using new org ID",
119
- "payload": {
120
- "orgId": "{{ actions.0.result.id }}",
121
- "orgName": "Acme Corp",
122
- "contactEmail": "jane@acme.com"
123
- }
119
+ "payload": "{\"orgId\":\"{{ actions.0.result.id }}\",\"orgName\":\"Acme Corp\",\"contactEmail\":\"jane@acme.com\"}"
124
120
  }
125
121
  ```
126
122
 
127
- Here `orgId` will be resolved at runtime from the result of action 0 (e.g., `create_org`). The reviewer sees that billing depends on the org creation step.
123
+ Here `orgId` will be resolved at runtime from the result of action 0 (e.g., `create_org`). The reviewer sees that billing depends on the org creation step. Note the payload is JSON-stringified — template references work inside the string and are resolved before parsing.
128
124
 
129
125
  ## Example
130
126
 
@@ -135,10 +131,7 @@ Say you've been asked to provision an Orderful org for a new customer. You've qu
135
131
  "evidence": {
136
132
  "reasoning": "Salesforce account Acme Corp (SF-001234) was signed on 2026-03-01 and has no Orderful OrgID. No existing Orderful org matches by name or ISA ID. The account's primary contact is jane@acme.com. ISA ID derived from Customer_ISA_ID__c field: ACME001.",
137
133
  "sourceSummary": "Salesforce: Acme Corp (SF-001234), signed 2026-03-01, no OrgID. Orderful: no org named 'Acme Corp', no ISA ID 'ACME001' in use.",
138
- "sourceRaw": {
139
- "salesforce_account": { "Id": "SF-001234", "Name": "Acme Corp", "OrgID__c": null, "Customer_ISA_ID__c": "ACME001" },
140
- "orderful_org_search": { "results": [] }
141
- },
134
+ "sourceRaw": "{\"salesforce_account\":{\"Id\":\"SF-001234\",\"Name\":\"Acme Corp\",\"OrgID__c\":null,\"Customer_ISA_ID__c\":\"ACME001\"},\"orderful_org_search\":{\"results\":[]}}",
142
135
  "impactSummary": "Creates Orderful org 'Acme Corp' with ISA ID 'ACME001', creates billing customer in ChargeBee, and sends welcome email to jane@acme.com.",
143
136
  "caveats": ["ARR not found in Salesforce — billing customer will be created without revenue data. Manual update may be needed."]
144
137
  },
@@ -147,30 +140,19 @@ Say you've been asked to provision an Orderful org for a new customer. You've qu
147
140
  "type": "mcp_call",
148
141
  "config": { "tool": "create_org" },
149
142
  "description": "Create Orderful org 'Acme Corp' with ISA ID 'ACME001'",
150
- "payload": {
151
- "name": "Acme Corp",
152
- "isaId": "ACME001",
153
- "contactEmail": "jane@acme.com"
154
- }
143
+ "payload": "{\"name\":\"Acme Corp\",\"isaId\":\"ACME001\",\"contactEmail\":\"jane@acme.com\"}"
155
144
  },
156
145
  {
157
146
  "type": "mcp_call",
158
147
  "config": { "tool": "create_billing_customer" },
159
148
  "description": "Create ChargeBee billing customer for Acme Corp using new org ID",
160
- "payload": {
161
- "orgId": "{{ actions.0.result.id }}",
162
- "orgName": "Acme Corp",
163
- "contactEmail": "jane@acme.com"
164
- }
149
+ "payload": "{\"orgId\":\"{{ actions.0.result.id }}\",\"orgName\":\"Acme Corp\",\"contactEmail\":\"jane@acme.com\"}"
165
150
  },
166
151
  {
167
152
  "type": "mcp_call",
168
153
  "config": { "tool": "invite_user" },
169
154
  "description": "Send welcome email to jane@acme.com for Acme Corp org",
170
- "payload": {
171
- "email": "jane@acme.com",
172
- "orgId": "{{ actions.0.result.id }}"
173
- }
155
+ "payload": "{\"email\":\"jane@acme.com\",\"orgId\":\"{{ actions.0.result.id }}\"}"
174
156
  }
175
157
  ]
176
158
  }
@@ -27,9 +27,8 @@
27
27
  "description": "Concise summary of research findings with entity names and IDs"
28
28
  },
29
29
  "sourceRaw": {
30
- "type": "object",
31
- "description": "Raw source data from research",
32
- "additionalProperties": true
30
+ "type": "string",
31
+ "description": "JSON-stringified raw source data from research"
33
32
  },
34
33
  "impactSummary": {
35
34
  "type": "string",
@@ -72,9 +71,8 @@
72
71
  "description": "Human-readable description of what this action does"
73
72
  },
74
73
  "payload": {
75
- "type": "object",
76
- "description": "Arguments to pass to the MCP tool",
77
- "additionalProperties": true
74
+ "type": "string",
75
+ "description": "JSON-stringified arguments to pass to the MCP tool"
78
76
  }
79
77
  },
80
78
  "additionalProperties": false