cool-workflow 0.1.78
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/.claude-plugin/plugin.json +20 -0
- package/.codex-plugin/mcp.json +10 -0
- package/.codex-plugin/plugin.json +38 -0
- package/.mcp.json +10 -0
- package/LICENSE +24 -0
- package/README.md +638 -0
- package/apps/architecture-review/app.json +51 -0
- package/apps/architecture-review/workflow.js +116 -0
- package/apps/end-to-end-golden-path/app.json +30 -0
- package/apps/end-to-end-golden-path/workflow.js +33 -0
- package/apps/pr-review-fix-ci/app.json +59 -0
- package/apps/pr-review-fix-ci/workflow.js +90 -0
- package/apps/release-cut/app.json +54 -0
- package/apps/release-cut/workflow.js +82 -0
- package/apps/research-synthesis/app.json +50 -0
- package/apps/research-synthesis/workflow.js +76 -0
- package/apps/workflow-app-framework-demo/app.json +29 -0
- package/apps/workflow-app-framework-demo/workflow.js +44 -0
- package/dist/agent-config.js +223 -0
- package/dist/candidate-scoring.js +715 -0
- package/dist/capability-core.js +630 -0
- package/dist/capability-dispatcher.js +86 -0
- package/dist/capability-registry.js +523 -0
- package/dist/cli.js +1276 -0
- package/dist/collaboration.js +727 -0
- package/dist/commit.js +570 -0
- package/dist/contract-migration.js +234 -0
- package/dist/coordinator.js +1163 -0
- package/dist/daemon.js +44 -0
- package/dist/dispatch.js +201 -0
- package/dist/drive.js +503 -0
- package/dist/error-feedback.js +415 -0
- package/dist/evidence-grounding.js +179 -0
- package/dist/evidence-reasoning.js +733 -0
- package/dist/execution-backend.js +1279 -0
- package/dist/harness.js +61 -0
- package/dist/mcp-server.js +1615 -0
- package/dist/multi-agent-eval.js +857 -0
- package/dist/multi-agent-host.js +764 -0
- package/dist/multi-agent-operator-ux.js +537 -0
- package/dist/multi-agent-trust.js +366 -0
- package/dist/multi-agent.js +1173 -0
- package/dist/node-snapshot.js +270 -0
- package/dist/observability.js +922 -0
- package/dist/operator-ux.js +971 -0
- package/dist/orchestrator/audit-operations.js +182 -0
- package/dist/orchestrator/candidate-operations.js +117 -0
- package/dist/orchestrator/cli-options.js +288 -0
- package/dist/orchestrator/collaboration-operations.js +86 -0
- package/dist/orchestrator/feedback-operations.js +81 -0
- package/dist/orchestrator/host-operations.js +78 -0
- package/dist/orchestrator/lifecycle-operations.js +462 -0
- package/dist/orchestrator/migration-operations.js +44 -0
- package/dist/orchestrator/multi-agent-operations.js +362 -0
- package/dist/orchestrator/report.js +369 -0
- package/dist/orchestrator/topology-operations.js +84 -0
- package/dist/orchestrator.js +874 -0
- package/dist/pipeline-contract.js +92 -0
- package/dist/pipeline-runner.js +285 -0
- package/dist/reclamation.js +882 -0
- package/dist/result-normalize.js +194 -0
- package/dist/run-export.js +64 -0
- package/dist/run-registry.js +1347 -0
- package/dist/run-state-schema.js +67 -0
- package/dist/sandbox-profile.js +471 -0
- package/dist/scheduler.js +266 -0
- package/dist/scheduling.js +184 -0
- package/dist/schema-validate.js +98 -0
- package/dist/state-explosion.js +1213 -0
- package/dist/state-migrations.js +463 -0
- package/dist/state-node.js +301 -0
- package/dist/state.js +308 -0
- package/dist/telemetry-attestation.js +156 -0
- package/dist/telemetry-ledger.js +145 -0
- package/dist/topology.js +527 -0
- package/dist/triggers.js +159 -0
- package/dist/trust-audit.js +475 -0
- package/dist/types/blackboard.js +2 -0
- package/dist/types/boundary.js +29 -0
- package/dist/types/candidate.js +2 -0
- package/dist/types/collaboration.js +2 -0
- package/dist/types/core.js +2 -0
- package/dist/types/drive.js +10 -0
- package/dist/types/error-feedback.js +2 -0
- package/dist/types/evidence-reasoning.js +2 -0
- package/dist/types/execution-backend.js +2 -0
- package/dist/types/multi-agent.js +2 -0
- package/dist/types/observability.js +2 -0
- package/dist/types/pipeline.js +2 -0
- package/dist/types/reclamation.js +8 -0
- package/dist/types/result.js +2 -0
- package/dist/types/run-registry.js +2 -0
- package/dist/types/run.js +2 -0
- package/dist/types/sandbox.js +2 -0
- package/dist/types/schedule.js +2 -0
- package/dist/types/state-node.js +2 -0
- package/dist/types/topology.js +2 -0
- package/dist/types/trust.js +2 -0
- package/dist/types/workbench.js +2 -0
- package/dist/types/worker.js +2 -0
- package/dist/types/workflow-app.js +2 -0
- package/dist/types.js +43 -0
- package/dist/verifier-registry.js +46 -0
- package/dist/verifier.js +78 -0
- package/dist/version.js +8 -0
- package/dist/workbench-host.js +172 -0
- package/dist/workbench.js +190 -0
- package/dist/worker-isolation.js +1028 -0
- package/dist/workflow-api.js +98 -0
- package/dist/workflow-app-framework.js +626 -0
- package/docs/agent-delegation-drive.7.md +190 -0
- package/docs/agent-framework.md +176 -0
- package/docs/candidate-scoring.7.md +106 -0
- package/docs/canonical-workflow-apps.7.md +137 -0
- package/docs/capability-topology-registry.7.md +168 -0
- package/docs/cli-mcp-parity.7.md +373 -0
- package/docs/contract-migration-tooling.7.md +123 -0
- package/docs/control-plane-scheduling.7.md +110 -0
- package/docs/coordinator-blackboard.7.md +183 -0
- package/docs/dogfood/architecture-review-cool-workflow.md +16 -0
- package/docs/dogfood-one-real-repo.7.md +168 -0
- package/docs/durable-state-and-locking.7.md +107 -0
- package/docs/end-to-end-golden-path.7.md +117 -0
- package/docs/error-feedback.7.md +153 -0
- package/docs/evidence-adoption-reasoning-chain.7.md +270 -0
- package/docs/execution-backends.7.md +300 -0
- package/docs/getting-started.md +99 -0
- package/docs/index.md +41 -0
- package/docs/mcp-app-surface.7.md +235 -0
- package/docs/multi-agent-cli-mcp-surface.7.md +265 -0
- package/docs/multi-agent-eval-replay-harness.7.md +302 -0
- package/docs/multi-agent-operator-ux.7.md +314 -0
- package/docs/multi-agent-runtime-core.7.md +231 -0
- package/docs/multi-agent-topologies.7.md +103 -0
- package/docs/multi-agent-trust-policy-audit.7.md +154 -0
- package/docs/node-snapshot-diff-replay.7.md +135 -0
- package/docs/observability-cost-accounting.7.md +194 -0
- package/docs/operator-ux.7.md +180 -0
- package/docs/pipeline-runner.7.md +136 -0
- package/docs/project-index.md +261 -0
- package/docs/real-execution-backends.7.md +142 -0
- package/docs/release-and-migration.7.md +280 -0
- package/docs/release-tooling.7.md +159 -0
- package/docs/routines.md +48 -0
- package/docs/run-registry-control-plane.7.md +312 -0
- package/docs/run-retention-reclamation.7.md +191 -0
- package/docs/sandbox-profiles.7.md +137 -0
- package/docs/scheduled-tasks.md +80 -0
- package/docs/security-trust-hardening.7.md +117 -0
- package/docs/state-explosion-management.7.md +264 -0
- package/docs/state-node.7.md +96 -0
- package/docs/team-collaboration.7.md +207 -0
- package/docs/unix-principles.md +192 -0
- package/docs/verifier-gated-commit.7.md +140 -0
- package/docs/web-desktop-workbench.7.md +215 -0
- package/docs/worker-isolation.7.md +167 -0
- package/docs/workflow-app-framework.7.md +274 -0
- package/manifest/README.md +43 -0
- package/manifest/plugin.manifest.json +316 -0
- package/manifest/pricing.policy.json +14 -0
- package/package.json +79 -0
- package/scripts/agents/claude-p-agent.js +104 -0
- package/scripts/agents/claude-p-agent.sh +9 -0
- package/scripts/agents/cw-attest-keygen.js +55 -0
- package/scripts/agents/cw-attest-wrap.js +143 -0
- package/scripts/block-unapproved-tag.sh +39 -0
- package/scripts/bump-version.js +249 -0
- package/scripts/canonical-apps.js +171 -0
- package/scripts/cw.js +4 -0
- package/scripts/dist-drift-check.js +79 -0
- package/scripts/dogfood-architecture-review.js +237 -0
- package/scripts/dogfood-release.js +624 -0
- package/scripts/forward-ref-docs.js +73 -0
- package/scripts/gen-manifests.js +232 -0
- package/scripts/golden-path.js +300 -0
- package/scripts/mcp-server.js +4 -0
- package/scripts/new-feature.js +121 -0
- package/scripts/parity-check.js +213 -0
- package/scripts/release-check.js +118 -0
- package/scripts/release-flow.js +272 -0
- package/scripts/release-gate.sh +85 -0
- package/scripts/sync-project-index.js +387 -0
- package/scripts/validate-run-state-schema.js +126 -0
- package/scripts/verify-container-selfref.js +64 -0
- package/scripts/version-sync-check.js +237 -0
- package/skills/cool-workflow/SKILL.md +162 -0
- package/skills/cool-workflow/references/commands.md +282 -0
- package/tsconfig.json +16 -0
- package/ui/workbench/app.css +76 -0
- package/ui/workbench/app.js +159 -0
- package/ui/workbench/index.html +32 -0
- package/workflows/architecture-review.workflow.js +84 -0
- package/workflows/research-synthesis.workflow.js +47 -0
|
@@ -0,0 +1,316 @@
|
|
|
1
|
+
{
|
|
2
|
+
"_comment": "SINGLE SOURCE OF TRUTH for every vendor manifest. Edit THIS file, then run `npm run gen:manifests`. Do NOT hand-edit the generated vendor manifests (.claude-plugin/, .codex-plugin/, .agents/, .mcp.json) — `npm run gen:manifests -- --check` (run by release:check) will fail if they drift from this source.",
|
|
3
|
+
"identity": {
|
|
4
|
+
"name": "cool-workflow",
|
|
5
|
+
"version": "0.1.78",
|
|
6
|
+
"license": "BSD-2-Clause",
|
|
7
|
+
"homepage": "https://github.com/coo1white/cool-workflow",
|
|
8
|
+
"author": {
|
|
9
|
+
"name": "COOLWHITE LLC"
|
|
10
|
+
},
|
|
11
|
+
"keywords": [
|
|
12
|
+
"workflow",
|
|
13
|
+
"control-plane",
|
|
14
|
+
"dynamic-workflows",
|
|
15
|
+
"subagents",
|
|
16
|
+
"orchestration",
|
|
17
|
+
"agents",
|
|
18
|
+
"multi-agent",
|
|
19
|
+
"mcp"
|
|
20
|
+
]
|
|
21
|
+
},
|
|
22
|
+
"descriptions": {
|
|
23
|
+
"short": "Auditable workflow control-plane.",
|
|
24
|
+
"standard": "Auditable workflow control-plane and orchestration runtime: TypeScript dispatch, evidence-gated verification, state commits, scheduling, routines, multi-agent coordination, and MCP. Delegates execution to external agents — never runs models.",
|
|
25
|
+
"long": "Cool Workflow (CW) is an auditable workflow control-plane and orchestration runtime. It provides a TypeScript COL runtime, Workflow App framework contracts, Router/Orchestrator, Subagent Dispatch, Deterministic Harness, Adversarial Verifier, Git/State Commit, Sandbox Profiles, scheduled tasks, routine triggers, a high-level Multi-Agent CLI/MCP host surface, and an MCP JSON-RPC 2.0 bridge. Developers write reusable workflow apps; CW delegates execution to an external agent host and records verified, replayable state — it never embeds a model API."
|
|
26
|
+
},
|
|
27
|
+
"interface": {
|
|
28
|
+
"displayName": "Cool Workflow",
|
|
29
|
+
"category": "Productivity",
|
|
30
|
+
"capabilities": [
|
|
31
|
+
"Interactive",
|
|
32
|
+
"Read",
|
|
33
|
+
"Write"
|
|
34
|
+
],
|
|
35
|
+
"brandColor": "#2563EB",
|
|
36
|
+
"defaultPrompt": [
|
|
37
|
+
"Use Cool Workflow to plan this as phases and agents.",
|
|
38
|
+
"Run the architecture review workflow with CW.",
|
|
39
|
+
"Create a reusable CW workflow for this task."
|
|
40
|
+
]
|
|
41
|
+
},
|
|
42
|
+
"layout": {
|
|
43
|
+
"pluginPathFromRepoRoot": "./plugins/cool-workflow",
|
|
44
|
+
"skillsDir": "./skills/",
|
|
45
|
+
"mcpServerScript": "dist/mcp-server.js"
|
|
46
|
+
},
|
|
47
|
+
"mcp": {
|
|
48
|
+
"serverName": "cool-workflow",
|
|
49
|
+
"command": "node"
|
|
50
|
+
},
|
|
51
|
+
"targets": {
|
|
52
|
+
"claude": {
|
|
53
|
+
"marketplace": ".claude-plugin/marketplace.json",
|
|
54
|
+
"plugin": "plugins/cool-workflow/.claude-plugin/plugin.json",
|
|
55
|
+
"mcp": "plugins/cool-workflow/.mcp.json",
|
|
56
|
+
"pluginRootVar": "${CLAUDE_PLUGIN_ROOT}/"
|
|
57
|
+
},
|
|
58
|
+
"codex": {
|
|
59
|
+
"marketplace": ".agents/plugins/marketplace.json",
|
|
60
|
+
"plugin": "plugins/cool-workflow/.codex-plugin/plugin.json",
|
|
61
|
+
"mcp": "plugins/cool-workflow/.codex-plugin/mcp.json",
|
|
62
|
+
"pluginRootVar": "./"
|
|
63
|
+
},
|
|
64
|
+
"agents": {
|
|
65
|
+
"plugin": ".agents/plugins/cool-workflow/plugin.json",
|
|
66
|
+
"mcp": ".agents/plugins/cool-workflow/mcp.json",
|
|
67
|
+
"pluginRootVar": "./"
|
|
68
|
+
},
|
|
69
|
+
"gemini": {
|
|
70
|
+
"plugin": "plugins/cool-workflow/.gemini-plugin/plugin.json",
|
|
71
|
+
"mcp": "plugins/cool-workflow/.gemini-plugin/mcp.json",
|
|
72
|
+
"pluginRootVar": "./"
|
|
73
|
+
},
|
|
74
|
+
"opencode": {
|
|
75
|
+
"plugin": "plugins/cool-workflow/.opencode-plugin/plugin.json",
|
|
76
|
+
"mcp": "plugins/cool-workflow/.opencode-plugin/mcp.json",
|
|
77
|
+
"pluginRootVar": "./"
|
|
78
|
+
}
|
|
79
|
+
},
|
|
80
|
+
"_comment_vendors": "VENDOR ADAPTER REGISTRY (v0.1.47). Each vendor declares its outputs as templates over the source fields above. Adding a new AI platform: add ONE entry here — no gen-manifests.js changes needed. Templates use {{path.to.field}} interpolation; {{pluginRootVar}} resolves to the vendor's pluginRootVar.",
|
|
81
|
+
"vendors": {
|
|
82
|
+
"claude": {
|
|
83
|
+
"outputs": [
|
|
84
|
+
{
|
|
85
|
+
"path": "{{targets.claude.marketplace}}",
|
|
86
|
+
"json": {
|
|
87
|
+
"name": "{{identity.name}}",
|
|
88
|
+
"owner": "{{identity.author}}",
|
|
89
|
+
"metadata": {
|
|
90
|
+
"description": "{{descriptions.standard}}",
|
|
91
|
+
"version": "{{identity.version}}"
|
|
92
|
+
},
|
|
93
|
+
"plugins": [
|
|
94
|
+
{
|
|
95
|
+
"name": "{{identity.name}}",
|
|
96
|
+
"source": "{{layout.pluginPathFromRepoRoot}}",
|
|
97
|
+
"description": "{{descriptions.standard}}",
|
|
98
|
+
"category": "{{interface.category|lowercase}}"
|
|
99
|
+
}
|
|
100
|
+
]
|
|
101
|
+
}
|
|
102
|
+
},
|
|
103
|
+
{
|
|
104
|
+
"path": "{{targets.claude.plugin}}",
|
|
105
|
+
"json": {
|
|
106
|
+
"name": "{{identity.name}}",
|
|
107
|
+
"description": "{{descriptions.standard}}",
|
|
108
|
+
"version": "{{identity.version}}",
|
|
109
|
+
"author": "{{identity.author}}",
|
|
110
|
+
"homepage": "{{identity.homepage}}",
|
|
111
|
+
"license": "{{identity.license}}",
|
|
112
|
+
"keywords": "{{identity.keywords}}"
|
|
113
|
+
}
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
"path": "{{targets.claude.mcp}}",
|
|
117
|
+
"json": {
|
|
118
|
+
"mcpServers": {
|
|
119
|
+
"{{mcp.serverName}}": {
|
|
120
|
+
"command": "{{mcp.command}}",
|
|
121
|
+
"args": [
|
|
122
|
+
"{{pluginRootVar}}{{layout.mcpServerScript}}"
|
|
123
|
+
]
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
]
|
|
129
|
+
},
|
|
130
|
+
"codex": {
|
|
131
|
+
"outputs": [
|
|
132
|
+
{
|
|
133
|
+
"path": "{{targets.codex.marketplace}}",
|
|
134
|
+
"json": {
|
|
135
|
+
"name": "{{identity.name}}",
|
|
136
|
+
"interface": {
|
|
137
|
+
"displayName": "{{interface.displayName}}"
|
|
138
|
+
},
|
|
139
|
+
"plugins": [
|
|
140
|
+
{
|
|
141
|
+
"name": "{{identity.name}}",
|
|
142
|
+
"source": {
|
|
143
|
+
"source": "local",
|
|
144
|
+
"path": "{{layout.pluginPathFromRepoRoot}}"
|
|
145
|
+
},
|
|
146
|
+
"policy": {
|
|
147
|
+
"installation": "AVAILABLE",
|
|
148
|
+
"authentication": "ON_INSTALL"
|
|
149
|
+
},
|
|
150
|
+
"category": "{{interface.category}}"
|
|
151
|
+
}
|
|
152
|
+
]
|
|
153
|
+
}
|
|
154
|
+
},
|
|
155
|
+
{
|
|
156
|
+
"path": "{{targets.codex.plugin}}",
|
|
157
|
+
"json": {
|
|
158
|
+
"name": "{{identity.name}}",
|
|
159
|
+
"version": "{{identity.version}}",
|
|
160
|
+
"description": "{{descriptions.standard}}",
|
|
161
|
+
"author": "{{identity.author}}",
|
|
162
|
+
"keywords": "{{identity.keywords}}",
|
|
163
|
+
"skills": "{{layout.skillsDir}}",
|
|
164
|
+
"mcpServers": "./.codex-plugin/mcp.json",
|
|
165
|
+
"interface": {
|
|
166
|
+
"displayName": "{{interface.displayName}}",
|
|
167
|
+
"shortDescription": "{{descriptions.short}}",
|
|
168
|
+
"longDescription": "{{descriptions.long}}",
|
|
169
|
+
"developerName": "{{identity.author.name}}",
|
|
170
|
+
"category": "{{interface.category}}",
|
|
171
|
+
"capabilities": "{{interface.capabilities}}",
|
|
172
|
+
"brandColor": "{{interface.brandColor}}",
|
|
173
|
+
"defaultPrompt": "{{interface.defaultPrompt}}"
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
},
|
|
177
|
+
{
|
|
178
|
+
"path": "{{targets.codex.mcp}}",
|
|
179
|
+
"json": {
|
|
180
|
+
"mcpServers": {
|
|
181
|
+
"{{mcp.serverName}}": {
|
|
182
|
+
"command": "{{mcp.command}}",
|
|
183
|
+
"args": [
|
|
184
|
+
"{{pluginRootVar}}{{layout.mcpServerScript}}"
|
|
185
|
+
]
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
]
|
|
191
|
+
},
|
|
192
|
+
"agents": {
|
|
193
|
+
"outputs": [
|
|
194
|
+
{
|
|
195
|
+
"path": "{{targets.agents.plugin}}",
|
|
196
|
+
"json": {
|
|
197
|
+
"name": "{{identity.name}}",
|
|
198
|
+
"description": "{{descriptions.standard}}",
|
|
199
|
+
"version": "{{identity.version}}",
|
|
200
|
+
"author": "{{identity.author}}",
|
|
201
|
+
"homepage": "{{identity.homepage}}",
|
|
202
|
+
"license": "{{identity.license}}",
|
|
203
|
+
"keywords": "{{identity.keywords}}",
|
|
204
|
+
"skills": "{{layout.skillsDir}}",
|
|
205
|
+
"mcpServers": "./.codex-plugin/mcp.json",
|
|
206
|
+
"interface": {
|
|
207
|
+
"displayName": "{{interface.displayName}}",
|
|
208
|
+
"shortDescription": "{{descriptions.short}}",
|
|
209
|
+
"longDescription": "{{descriptions.long}}",
|
|
210
|
+
"developerName": "{{identity.author.name}}",
|
|
211
|
+
"category": "{{interface.category}}",
|
|
212
|
+
"capabilities": "{{interface.capabilities}}",
|
|
213
|
+
"brandColor": "{{interface.brandColor}}",
|
|
214
|
+
"defaultPrompt": "{{interface.defaultPrompt}}"
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
},
|
|
218
|
+
{
|
|
219
|
+
"path": "{{targets.agents.mcp}}",
|
|
220
|
+
"json": {
|
|
221
|
+
"mcpServers": {
|
|
222
|
+
"{{mcp.serverName}}": {
|
|
223
|
+
"command": "{{mcp.command}}",
|
|
224
|
+
"args": [
|
|
225
|
+
"{{pluginRootVar}}{{layout.mcpServerScript}}"
|
|
226
|
+
]
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
]
|
|
232
|
+
},
|
|
233
|
+
"gemini": {
|
|
234
|
+
"outputs": [
|
|
235
|
+
{
|
|
236
|
+
"path": "{{targets.gemini.plugin}}",
|
|
237
|
+
"json": {
|
|
238
|
+
"name": "{{identity.name}}",
|
|
239
|
+
"description": "{{descriptions.standard}}",
|
|
240
|
+
"version": "{{identity.version}}",
|
|
241
|
+
"author": "{{identity.author}}",
|
|
242
|
+
"homepage": "{{identity.homepage}}",
|
|
243
|
+
"license": "{{identity.license}}",
|
|
244
|
+
"keywords": "{{identity.keywords}}",
|
|
245
|
+
"skills": "{{layout.skillsDir}}",
|
|
246
|
+
"mcpServers": "./.gemini-plugin/mcp.json",
|
|
247
|
+
"interface": {
|
|
248
|
+
"displayName": "{{interface.displayName}}",
|
|
249
|
+
"shortDescription": "{{descriptions.short}}",
|
|
250
|
+
"longDescription": "{{descriptions.long}}",
|
|
251
|
+
"developerName": "{{identity.author.name}}",
|
|
252
|
+
"category": "{{interface.category}}",
|
|
253
|
+
"capabilities": "{{interface.capabilities}}",
|
|
254
|
+
"brandColor": "{{interface.brandColor}}",
|
|
255
|
+
"defaultPrompt": "{{interface.defaultPrompt}}"
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
},
|
|
259
|
+
{
|
|
260
|
+
"path": "{{targets.gemini.mcp}}",
|
|
261
|
+
"json": {
|
|
262
|
+
"mcpServers": {
|
|
263
|
+
"{{mcp.serverName}}": {
|
|
264
|
+
"command": "{{mcp.command}}",
|
|
265
|
+
"args": [
|
|
266
|
+
"{{pluginRootVar}}{{layout.mcpServerScript}}"
|
|
267
|
+
]
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
]
|
|
273
|
+
},
|
|
274
|
+
"opencode": {
|
|
275
|
+
"outputs": [
|
|
276
|
+
{
|
|
277
|
+
"path": "{{targets.opencode.plugin}}",
|
|
278
|
+
"json": {
|
|
279
|
+
"name": "{{identity.name}}",
|
|
280
|
+
"description": "{{descriptions.standard}}",
|
|
281
|
+
"version": "{{identity.version}}",
|
|
282
|
+
"author": "{{identity.author}}",
|
|
283
|
+
"homepage": "{{identity.homepage}}",
|
|
284
|
+
"license": "{{identity.license}}",
|
|
285
|
+
"keywords": "{{identity.keywords}}",
|
|
286
|
+
"skills": "{{layout.skillsDir}}",
|
|
287
|
+
"mcpServers": "./.opencode-plugin/mcp.json",
|
|
288
|
+
"interface": {
|
|
289
|
+
"displayName": "{{interface.displayName}}",
|
|
290
|
+
"shortDescription": "{{descriptions.short}}",
|
|
291
|
+
"longDescription": "{{descriptions.long}}",
|
|
292
|
+
"developerName": "{{identity.author.name}}",
|
|
293
|
+
"category": "{{interface.category}}",
|
|
294
|
+
"capabilities": "{{interface.capabilities}}",
|
|
295
|
+
"brandColor": "{{interface.brandColor}}",
|
|
296
|
+
"defaultPrompt": "{{interface.defaultPrompt}}"
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
},
|
|
300
|
+
{
|
|
301
|
+
"path": "{{targets.opencode.mcp}}",
|
|
302
|
+
"json": {
|
|
303
|
+
"mcpServers": {
|
|
304
|
+
"{{mcp.serverName}}": {
|
|
305
|
+
"command": "{{mcp.command}}",
|
|
306
|
+
"args": [
|
|
307
|
+
"{{pluginRootVar}}{{layout.mcpServerScript}}"
|
|
308
|
+
]
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
]
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"id": "bundled-example-v1",
|
|
4
|
+
"currency": "USD",
|
|
5
|
+
"source": "Bundled EXAMPLE pricing policy (data, not kernel). Prices are USD per 1e6 tokens and are an editable starting point, NOT a live price feed. Copy this file, edit the numbers for your contract, and pass it with `--pricing <path>` to override. When no policy is supplied at all, cost is reported `unreported`/`unpriced`, never guessed.",
|
|
6
|
+
"models": [
|
|
7
|
+
{ "model": "claude-opus-4-8", "inputPerMillion": 15, "outputPerMillion": 75 },
|
|
8
|
+
{ "model": "claude-opus-4-1", "inputPerMillion": 15, "outputPerMillion": 75 },
|
|
9
|
+
{ "model": "claude-sonnet-4-6", "inputPerMillion": 3, "outputPerMillion": 15 },
|
|
10
|
+
{ "model": "claude-sonnet-4-5", "inputPerMillion": 3, "outputPerMillion": 15 },
|
|
11
|
+
{ "model": "claude-haiku-4-5", "inputPerMillion": 1, "outputPerMillion": 5 }
|
|
12
|
+
],
|
|
13
|
+
"defaultPrice": { "inputPerMillion": 3, "outputPerMillion": 15 }
|
|
14
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "cool-workflow",
|
|
3
|
+
"version": "0.1.78",
|
|
4
|
+
"bin": {
|
|
5
|
+
"cool-workflow": "scripts/cw.js",
|
|
6
|
+
"cw": "scripts/cw.js"
|
|
7
|
+
},
|
|
8
|
+
"repository": {
|
|
9
|
+
"type": "git",
|
|
10
|
+
"url": "git+https://github.com/coo1white/cool-workflow.git",
|
|
11
|
+
"directory": "plugins/cool-workflow"
|
|
12
|
+
},
|
|
13
|
+
"homepage": "https://github.com/coo1white/cool-workflow#readme",
|
|
14
|
+
"bugs": {
|
|
15
|
+
"url": "https://github.com/coo1white/cool-workflow/issues"
|
|
16
|
+
},
|
|
17
|
+
"description": "Auditable workflow control-plane and orchestration runtime: TypeScript dispatch, evidence-gated verification, state commits, scheduling, routines, multi-agent coordination, and MCP. Delegates execution to external agents — never runs models.",
|
|
18
|
+
"type": "commonjs",
|
|
19
|
+
"license": "BSD-2-Clause",
|
|
20
|
+
"author": {
|
|
21
|
+
"name": "COOLWHITE LLC"
|
|
22
|
+
},
|
|
23
|
+
"files": [
|
|
24
|
+
".claude-plugin/",
|
|
25
|
+
".codex-plugin/",
|
|
26
|
+
".mcp.json",
|
|
27
|
+
"manifest/",
|
|
28
|
+
"README.md",
|
|
29
|
+
"apps/",
|
|
30
|
+
"dist/",
|
|
31
|
+
"docs/",
|
|
32
|
+
"scripts/",
|
|
33
|
+
"skills/",
|
|
34
|
+
"ui/",
|
|
35
|
+
"workflows/",
|
|
36
|
+
"package.json",
|
|
37
|
+
"tsconfig.json"
|
|
38
|
+
],
|
|
39
|
+
"scripts": {
|
|
40
|
+
"build": "tsc -p tsconfig.json",
|
|
41
|
+
"check": "tsc -p tsconfig.json --noEmit",
|
|
42
|
+
"dist:check": "node scripts/dist-drift-check.js",
|
|
43
|
+
"golden-path": "node scripts/golden-path.js",
|
|
44
|
+
"dogfood:release": "node scripts/dogfood-release.js",
|
|
45
|
+
"canonical-apps": "node scripts/canonical-apps.js",
|
|
46
|
+
"fixture-compat": "node test/run-fixture-compat-smoke.js",
|
|
47
|
+
"sync:project-index": "node scripts/sync-project-index.js",
|
|
48
|
+
"index:check": "node scripts/sync-project-index.js --check",
|
|
49
|
+
"bump:version": "node scripts/bump-version.js",
|
|
50
|
+
"new:feature": "node scripts/new-feature.js",
|
|
51
|
+
"forward-ref": "node scripts/forward-ref-docs.js",
|
|
52
|
+
"verify:container": "node scripts/verify-container-selfref.js",
|
|
53
|
+
"gen:manifests": "node scripts/gen-manifests.js",
|
|
54
|
+
"parity:check": "node scripts/parity-check.js --check",
|
|
55
|
+
"version:sync": "node scripts/version-sync-check.js",
|
|
56
|
+
"release:check": "node scripts/release-check.js",
|
|
57
|
+
"test": "node dist/cli.js list && node test/run-all.js",
|
|
58
|
+
"test:fast": "npm run build --if-present && node dist/cli.js list && node test/run-all.js --concurrency auto",
|
|
59
|
+
"eval:replay": "tsc -p tsconfig.json && node test/multi-agent-eval-replay-harness-smoke.js",
|
|
60
|
+
"ci": "npm run build && npm run check && npm run test && npm run release:check",
|
|
61
|
+
"validate:schema": "node scripts/validate-run-state-schema.js"
|
|
62
|
+
},
|
|
63
|
+
"devDependencies": {
|
|
64
|
+
"@types/node": "^24.0.0",
|
|
65
|
+
"typescript": "^5.9.0"
|
|
66
|
+
},
|
|
67
|
+
"keywords": [
|
|
68
|
+
"agent",
|
|
69
|
+
"workflow",
|
|
70
|
+
"control-plane",
|
|
71
|
+
"mcp",
|
|
72
|
+
"multi-agent",
|
|
73
|
+
"orchestration",
|
|
74
|
+
"audit",
|
|
75
|
+
"llm-pipeline",
|
|
76
|
+
"claude",
|
|
77
|
+
"delegation"
|
|
78
|
+
]
|
|
79
|
+
}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
|
|
4
|
+
// claude-p-agent.js — EXAMPLE operator agent config for CW Agent Delegation Drive.
|
|
5
|
+
//
|
|
6
|
+
// This is a CONFIG, NOT a CW dependency: CW spawns it out-of-process (argv-style,
|
|
7
|
+
// shell:false, cwd = the target repo) and records its attested output; the model
|
|
8
|
+
// runs in claude's process, never in CW. Node port of claude-p-agent.sh (which now
|
|
9
|
+
// delegates here) so the documented onboarding path is portable (node-only repo
|
|
10
|
+
// convention, Windows included).
|
|
11
|
+
//
|
|
12
|
+
// It fulfills ONE worker: read the worker's input.md ({{input}}), delegate the
|
|
13
|
+
// analysis to headless claude READ-ONLY, persist claude's final markdown to the
|
|
14
|
+
// worker's result.md ({{result}}), and forward claude's JSON (model + usage) on
|
|
15
|
+
// stdout so CW records the agent-REPORTED model and token usage as provenance.
|
|
16
|
+
//
|
|
17
|
+
// READ-ONLY by design: claude gets NO Write tool. The architecture-review app
|
|
18
|
+
// declares the `readonly` sandbox profile — the agent must not touch the repo.
|
|
19
|
+
// This wrapper (the transport) writes the single result.md artifact itself, so
|
|
20
|
+
// the worker completes WITHOUT granting the model file-write access.
|
|
21
|
+
//
|
|
22
|
+
// Point CW at it (from plugins/cool-workflow/):
|
|
23
|
+
// CW_AGENT_COMMAND="node $(pwd)/scripts/agents/claude-p-agent.js {{input}} {{result}}"
|
|
24
|
+
// or per-invocation:
|
|
25
|
+
// --agent-command "node $(pwd)/scripts/agents/claude-p-agent.js {{input}} {{result}}"
|
|
26
|
+
|
|
27
|
+
const fs = require("node:fs");
|
|
28
|
+
const { spawnSync } = require("node:child_process");
|
|
29
|
+
|
|
30
|
+
const inputPath = process.argv[2];
|
|
31
|
+
const resultPath = process.argv[3];
|
|
32
|
+
if (!inputPath || !resultPath) {
|
|
33
|
+
process.stderr.write("usage: claude-p-agent.js <inputPath> <resultPath> (CW substitutes {{input}} {{result}})\n");
|
|
34
|
+
process.exit(2);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
const CONTRACT = `
|
|
38
|
+
=== HOW TO RETURN YOUR ANSWER (overrides any 'write to result.md' instruction above) ===
|
|
39
|
+
You have NO file-write access. Do NOT attempt to write, create, or edit any file —
|
|
40
|
+
result.md is persisted FOR YOU from your final message, so writing it yourself is
|
|
41
|
+
neither needed nor possible. Use ONLY read-only tools (read files, grep, list).
|
|
42
|
+
Respond with ONLY your FINAL answer as Markdown, and it MUST END WITH a fenced
|
|
43
|
+
cw:result block that EXACTLY follows this schema:
|
|
44
|
+
|
|
45
|
+
\`\`\`cw:result
|
|
46
|
+
{
|
|
47
|
+
"summary": "one-paragraph direct answer",
|
|
48
|
+
"findings": [
|
|
49
|
+
{
|
|
50
|
+
"id": "unique-kebab-id",
|
|
51
|
+
"title": "short risk title",
|
|
52
|
+
"severity": "P0",
|
|
53
|
+
"classification": "real",
|
|
54
|
+
"evidence": ["path/to/file.ts:42"]
|
|
55
|
+
}
|
|
56
|
+
],
|
|
57
|
+
"evidence": ["path/to/file.ts:42", "path/to/other.ts:10"]
|
|
58
|
+
}
|
|
59
|
+
\`\`\`
|
|
60
|
+
|
|
61
|
+
HARD RULES (the result is REJECTED otherwise):
|
|
62
|
+
- Every object in "findings" MUST have a unique "id" (non-empty string).
|
|
63
|
+
- "classification", if present, MUST be one of: real, conditional, non-issue, unknown.
|
|
64
|
+
- Any finding with "severity" P0, P1, or P2 MUST include a NON-EMPTY "evidence" array.
|
|
65
|
+
- The top-level "evidence" array MUST be NON-EMPTY with REAL file:line locators from this repo.
|
|
66
|
+
- If you have no structured findings, use "findings": [] (empty) — never omit a finding's id.
|
|
67
|
+
`;
|
|
68
|
+
|
|
69
|
+
const prompt = `${fs.readFileSync(inputPath, "utf8")}\n${CONTRACT}`;
|
|
70
|
+
|
|
71
|
+
// Read-only analysis: NO Write tool, so claude cannot touch the repo. This wrapper
|
|
72
|
+
// (the transport) persists claude's final markdown to the worker's result.md.
|
|
73
|
+
// --output-format json so CW can read the agent-REPORTED model + usage from stdout
|
|
74
|
+
// (the attested model; CW never uses CW_AGENT_MODEL as the attested model).
|
|
75
|
+
const child = spawnSync("claude", ["-p", prompt, "--output-format", "json", "--allowedTools", "Read,Grep,Glob,Bash"], {
|
|
76
|
+
encoding: "utf8",
|
|
77
|
+
maxBuffer: 32 * 1024 * 1024,
|
|
78
|
+
shell: false
|
|
79
|
+
});
|
|
80
|
+
if (child.error) {
|
|
81
|
+
process.stderr.write(`claude spawn failed: ${child.error.message}\n`);
|
|
82
|
+
process.exit(1);
|
|
83
|
+
}
|
|
84
|
+
if (child.status !== 0) {
|
|
85
|
+
process.stderr.write(String(child.stderr || `claude exited ${child.status}`));
|
|
86
|
+
process.exit(child.status === null ? 1 : child.status);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
const out = String(child.stdout || "");
|
|
90
|
+
let parsed;
|
|
91
|
+
try {
|
|
92
|
+
parsed = JSON.parse(out);
|
|
93
|
+
} catch (error) {
|
|
94
|
+
// Fail closed: no parsable agent JSON ⇒ no result.md ⇒ CW records a failed hop.
|
|
95
|
+
process.stderr.write(`claude output was not JSON: ${error.message}\n`);
|
|
96
|
+
process.exit(1);
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
// Persist the AGENT's final markdown to the worker's result.md for CW's separate
|
|
100
|
+
// acceptance layer. CW is only the transport; the content is the agent's.
|
|
101
|
+
fs.writeFileSync(resultPath, String(parsed.result || ""), "utf8");
|
|
102
|
+
|
|
103
|
+
// Hand the agent's JSON (model + usage + result) back to CW on stdout.
|
|
104
|
+
process.stdout.write(out);
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# EXAMPLE operator agent config for CW Agent Delegation Drive — bash entry point.
|
|
3
|
+
#
|
|
4
|
+
# The single source of truth is claude-p-agent.js (the portable node version);
|
|
5
|
+
# this shim only delegates so the two can never drift. Point CW at either:
|
|
6
|
+
# CW_AGENT_COMMAND="node $(pwd)/scripts/agents/claude-p-agent.js {{input}} {{result}}"
|
|
7
|
+
# CW_AGENT_COMMAND="bash $(pwd)/scripts/agents/claude-p-agent.sh {{input}} {{result}}"
|
|
8
|
+
set -euo pipefail
|
|
9
|
+
exec node "$(dirname "$0")/claude-p-agent.js" "$@"
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
|
|
4
|
+
// cw-attest-keygen (Track 1) — generate the ed25519 keypair for telemetry
|
|
5
|
+
// attestation. The PRIVATE key stays with the executor/signing wrapper
|
|
6
|
+
// (CW_AGENT_ATTEST_PRIVKEY); the PUBLIC key is handed to CW to VERIFY with
|
|
7
|
+
// (CW_AGENT_ATTEST_PUBKEY / agent attestPublicKey). CW never holds the private
|
|
8
|
+
// half — it can verify attribution but never forge a signature.
|
|
9
|
+
//
|
|
10
|
+
// Usage:
|
|
11
|
+
// node cw-attest-keygen.js [--out-dir DIR] # writes cw-attest.key + cw-attest.pub
|
|
12
|
+
// node cw-attest-keygen.js --print # print both PEMs to stdout, write nothing
|
|
13
|
+
|
|
14
|
+
const fs = require("node:fs");
|
|
15
|
+
const crypto = require("node:crypto");
|
|
16
|
+
const path = require("node:path");
|
|
17
|
+
|
|
18
|
+
function arg(name, fallback) {
|
|
19
|
+
const i = process.argv.indexOf(name);
|
|
20
|
+
return i >= 0 ? process.argv[i + 1] : fallback;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
const { publicKey, privateKey } = crypto.generateKeyPairSync("ed25519");
|
|
24
|
+
const privatePem = privateKey.export({ type: "pkcs8", format: "pem" }).toString();
|
|
25
|
+
const publicPem = publicKey.export({ type: "spki", format: "pem" }).toString();
|
|
26
|
+
|
|
27
|
+
if (process.argv.includes("--print")) {
|
|
28
|
+
process.stdout.write(`# PRIVATE (executor / wrapper — CW_AGENT_ATTEST_PRIVKEY)\n${privatePem}\n# PUBLIC (CW verify — CW_AGENT_ATTEST_PUBKEY)\n${publicPem}\n`);
|
|
29
|
+
process.exit(0);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
const outDir = path.resolve(arg("--out-dir", process.cwd()));
|
|
33
|
+
const keyPath = path.join(outDir, "cw-attest.key");
|
|
34
|
+
const pubPath = path.join(outDir, "cw-attest.pub");
|
|
35
|
+
fs.mkdirSync(outDir, { recursive: true });
|
|
36
|
+
// Private key: owner-only perms (0600). It is NEVER committed to .cw/ or config.
|
|
37
|
+
fs.writeFileSync(keyPath, privatePem, { mode: 0o600 });
|
|
38
|
+
fs.writeFileSync(pubPath, publicPem);
|
|
39
|
+
|
|
40
|
+
process.stdout.write(
|
|
41
|
+
[
|
|
42
|
+
`Wrote ed25519 keypair:`,
|
|
43
|
+
` private (executor): ${keyPath} (chmod 0600)`,
|
|
44
|
+
` public (CW verify): ${pubPath}`,
|
|
45
|
+
``,
|
|
46
|
+
`Executor / signing wrapper:`,
|
|
47
|
+
` export CW_AGENT_ATTEST_PRIVKEY="${keyPath}"`,
|
|
48
|
+
``,
|
|
49
|
+
`CW (verify side):`,
|
|
50
|
+
` export CW_AGENT_ATTEST_PUBKEY="${pubPath}"`,
|
|
51
|
+
``,
|
|
52
|
+
`Keep the PRIVATE key off any committed state. CW only needs the PUBLIC key.`,
|
|
53
|
+
``
|
|
54
|
+
].join("\n")
|
|
55
|
+
);
|