cool-workflow 0.1.83 → 0.1.84

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.
Files changed (53) hide show
  1. package/.claude-plugin/plugin.json +1 -1
  2. package/.codex-plugin/plugin.json +1 -1
  3. package/README.md +4 -0
  4. package/apps/architecture-review/app.json +1 -1
  5. package/apps/architecture-review-fast/app.json +1 -1
  6. package/apps/end-to-end-golden-path/app.json +1 -1
  7. package/apps/pr-review-fix-ci/app.json +1 -1
  8. package/apps/release-cut/app.json +1 -1
  9. package/apps/research-synthesis/app.json +1 -1
  10. package/dist/capability-registry.js +262 -0
  11. package/dist/cli/command-surface.js +1320 -0
  12. package/dist/cli.js +2 -1318
  13. package/dist/mcp-server.js +5 -1452
  14. package/dist/mcp-surface.js +1441 -0
  15. package/dist/version.js +1 -1
  16. package/dist/worker-accept/acceptance.js +114 -0
  17. package/dist/worker-accept/blackboard-fanout.js +80 -0
  18. package/dist/worker-accept/blackboard-linkage.js +19 -0
  19. package/dist/worker-accept/context.js +2 -0
  20. package/dist/worker-accept/telemetry-ledger.js +116 -0
  21. package/dist/worker-accept/validation.js +77 -0
  22. package/dist/worker-accept/verifier-completion.js +73 -0
  23. package/dist/worker-isolation.js +19 -444
  24. package/docs/agent-delegation-drive.7.md +4 -0
  25. package/docs/cli-mcp-parity.7.md +4 -0
  26. package/docs/contract-migration-tooling.7.md +4 -0
  27. package/docs/control-plane-scheduling.7.md +4 -0
  28. package/docs/durable-state-and-locking.7.md +4 -0
  29. package/docs/evidence-adoption-reasoning-chain.7.md +4 -0
  30. package/docs/execution-backends.7.md +4 -0
  31. package/docs/multi-agent-cli-mcp-surface.7.md +4 -0
  32. package/docs/multi-agent-eval-replay-harness.7.md +4 -0
  33. package/docs/multi-agent-operator-ux.7.md +4 -0
  34. package/docs/node-snapshot-diff-replay.7.md +4 -0
  35. package/docs/observability-cost-accounting.7.md +4 -0
  36. package/docs/project-index.md +11 -5
  37. package/docs/real-execution-backends.7.md +4 -0
  38. package/docs/release-and-migration.7.md +4 -0
  39. package/docs/release-tooling.7.md +14 -1
  40. package/docs/run-registry-control-plane.7.md +4 -0
  41. package/docs/run-retention-reclamation.7.md +4 -0
  42. package/docs/state-explosion-management.7.md +4 -0
  43. package/docs/team-collaboration.7.md +4 -0
  44. package/docs/web-desktop-workbench.7.md +4 -0
  45. package/manifest/plugin.manifest.json +1 -1
  46. package/package.json +1 -1
  47. package/scripts/bump-version.js +9 -1
  48. package/scripts/canonical-apps.js +4 -4
  49. package/scripts/dogfood-release.js +1 -1
  50. package/scripts/golden-path.js +4 -4
  51. package/scripts/parity-check.js +27 -57
  52. package/scripts/release-flow.js +7 -6
  53. package/scripts/sync-project-index.js +1 -1
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "cool-workflow",
3
3
  "description": "A workflow control plane and run-time you are able to check: it sends out jobs in TypeScript, makes certain of work against facts before it goes through, puts state into fixed records, orders jobs by time, runs jobs again and again, gets a group of agents to do their parts together, and talks MCP. It gives the doing of the work to outside agents — it never runs the models itself.",
4
- "version": "0.1.83",
4
+ "version": "0.1.84",
5
5
  "author": {
6
6
  "name": "COOLWHITE LLC"
7
7
  },
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cool-workflow",
3
- "version": "0.1.83",
3
+ "version": "0.1.84",
4
4
  "description": "A workflow control plane and run-time you are able to check: it sends out jobs in TypeScript, makes certain of work against facts before it goes through, puts state into fixed records, orders jobs by time, runs jobs again and again, gets a group of agents to do their parts together, and talks MCP. It gives the doing of the work to outside agents — it never runs the models itself.",
5
5
  "author": {
6
6
  "name": "COOLWHITE LLC"
package/README.md CHANGED
@@ -706,3 +706,7 @@ _This documentation tracks Cool Workflow v0.1.82. See [CHANGELOG](../../CHANGELO
706
706
  ## Hardening and Onboarding (v0.1.83)
707
707
 
708
708
  Loaders fail closed on corrupt state; store writes are made safe under more than one writer; a new cw doctor checks your setup; help lists every command; and the docs are put into Basic English.
709
+
710
+ ## Privacy Release (v0.1.84)
711
+
712
+ This release removes local user path text from saved release review input and adds a scan that keeps those words out of tracked files.
@@ -3,7 +3,7 @@
3
3
  "id": "architecture-review",
4
4
  "title": "Architecture Review",
5
5
  "summary": "Map a repository architecture, assess risks, verify important findings, and synthesize an evidence-backed verdict.",
6
- "version": "0.1.83",
6
+ "version": "0.1.84",
7
7
  "author": "COOLWHITE LLC",
8
8
  "inputs": [
9
9
  {
@@ -3,7 +3,7 @@
3
3
  "id": "architecture-review-fast",
4
4
  "title": "Architecture Review Fast",
5
5
  "summary": "Run a shorter architecture review with parallel map and assess phases for faster first results.",
6
- "version": "0.1.83",
6
+ "version": "0.1.84",
7
7
  "author": "COOLWHITE LLC",
8
8
  "inputs": [
9
9
  {
@@ -3,7 +3,7 @@
3
3
  "id": "end-to-end-golden-path",
4
4
  "title": "End-to-End Golden Path",
5
5
  "summary": "Deterministic one-worker workflow app for proving the CW integration chain.",
6
- "version": "0.1.83",
6
+ "version": "0.1.84",
7
7
  "author": "COOLWHITE LLC",
8
8
  "inputs": [
9
9
  {
@@ -3,7 +3,7 @@
3
3
  "id": "pr-review-fix-ci",
4
4
  "title": "PR Review Fix CI",
5
5
  "summary": "Review a pull request or branch, inspect CI failures, diagnose actionable issues, optionally patch, verify, and summarize with evidence.",
6
- "version": "0.1.83",
6
+ "version": "0.1.84",
7
7
  "author": "COOLWHITE LLC",
8
8
  "inputs": [
9
9
  {
@@ -3,7 +3,7 @@
3
3
  "id": "release-cut",
4
4
  "title": "Release Cut",
5
5
  "summary": "Prepare a release with checklist discipline: version checks, changelog, tests, packaging, release notes, and final verification.",
6
- "version": "0.1.83",
6
+ "version": "0.1.84",
7
7
  "author": "COOLWHITE LLC",
8
8
  "inputs": [
9
9
  {
@@ -3,7 +3,7 @@
3
3
  "id": "research-synthesis",
4
4
  "title": "Research Synthesis",
5
5
  "summary": "Split a research question into claims, investigate sources, cross-check evidence, verify claims, and synthesize a concise answer.",
6
- "version": "0.1.83",
6
+ "version": "0.1.84",
7
7
  "author": "COOLWHITE LLC",
8
8
  "inputs": [
9
9
  {
@@ -26,10 +26,17 @@
26
26
  Object.defineProperty(exports, "__esModule", { value: true });
27
27
  exports.CAPABILITY_REGISTRY = void 0;
28
28
  exports.declaredMcpTools = declaredMcpTools;
29
+ exports.mcpCapabilityForTool = mcpCapabilityForTool;
30
+ exports.mcpCapabilityForId = mcpCapabilityForId;
31
+ exports.mcpRequiredArgsForTool = mcpRequiredArgsForTool;
32
+ exports.mcpToolDefinition = mcpToolDefinition;
29
33
  exports.declaredCliTokens = declaredCliTokens;
30
34
  exports.requiresReason = requiresReason;
31
35
  exports.isPayloadProbeOptOut = isPayloadProbeOptOut;
32
36
  exports.payloadIdenticalCapabilities = payloadIdenticalCapabilities;
37
+ exports.payloadProbeTargets = payloadProbeTargets;
38
+ exports.deferredPayloadProbeCapabilities = deferredPayloadProbeCapabilities;
39
+ exports.payloadProbePlan = payloadProbePlan;
33
40
  exports.buildParityReport = buildParityReport;
34
41
  // ---------------------------------------------------------------------------
35
42
  // Builtin entries. Grouped to mirror the CLI dispatch and the MCP tool list.
@@ -412,12 +419,236 @@ const BUILTIN_CAPABILITIES = [
412
419
  * silently-dead duplicate the way the old snapshot-then-register design allowed. */
413
420
  exports.CAPABILITY_REGISTRY = Array.from(new Map(BUILTIN_CAPABILITIES.map((cap) => [cap.capability, cap])).values());
414
421
  // ---------------------------------------------------------------------------
422
+ // Payload probe classification.
423
+ // ---------------------------------------------------------------------------
424
+ const GLOBAL_PAYLOAD_PROBE_CAPABILITIES = [
425
+ "list",
426
+ "app.list",
427
+ "topology.list",
428
+ "sandbox.list",
429
+ "backend.list",
430
+ "backend.agent.config.show",
431
+ "metrics.summary"
432
+ ];
433
+ const RUN_PAYLOAD_PROBE_CAPABILITIES = [
434
+ "status",
435
+ "operator.status",
436
+ "operator.report",
437
+ "graph",
438
+ "report",
439
+ "next",
440
+ "state.check",
441
+ "contract.show",
442
+ "node.list",
443
+ "node.graph",
444
+ "worker.summary",
445
+ "candidate.summary",
446
+ "feedback.summary",
447
+ "commit.summary",
448
+ "audit.summary",
449
+ "multi-agent.summary",
450
+ "workbench.view",
451
+ "metrics.show",
452
+ "review.status",
453
+ "comment.list",
454
+ "run.drive",
455
+ "gc.plan",
456
+ "gc.verify"
457
+ ];
458
+ const PAYLOAD_PROBE_DEFERRED_GROUPS = [
459
+ {
460
+ reason: "Not safe for the deterministic bootstrap parity probe yet: this capability needs extra target ids/files, mutates durable state, depends on external state, or needs a dedicated fixture beyond cwd/runId.",
461
+ capabilities: [
462
+ "init",
463
+ "plan",
464
+ "dispatch",
465
+ "result",
466
+ "app.show",
467
+ "app.validate",
468
+ "app.init",
469
+ "app.package",
470
+ "app.run",
471
+ "node.show",
472
+ "node.snapshot",
473
+ "node.diff",
474
+ "node.replay",
475
+ "node.replay.verify",
476
+ "migration.list",
477
+ "migration.check",
478
+ "migration.prove",
479
+ "topology.show",
480
+ "topology.validate",
481
+ "topology.apply",
482
+ "topology.summary",
483
+ "topology.graph",
484
+ "summary.refresh",
485
+ "summary.show",
486
+ "multi-agent.run",
487
+ "multi-agent.status",
488
+ "multi-agent.step",
489
+ "multi-agent.blackboard",
490
+ "multi-agent.score",
491
+ "multi-agent.select",
492
+ "multi-agent.summarize",
493
+ "multi-agent.graph",
494
+ "multi-agent.graph.compact",
495
+ "multi-agent.dependencies",
496
+ "multi-agent.failures",
497
+ "multi-agent.evidence",
498
+ "multi-agent.reasoning",
499
+ "multi-agent.reasoning.refresh",
500
+ "multi-agent.run.create",
501
+ "multi-agent.run.transition",
502
+ "multi-agent.run.show",
503
+ "multi-agent.role.create",
504
+ "multi-agent.role.show",
505
+ "multi-agent.group.create",
506
+ "multi-agent.group.show",
507
+ "multi-agent.membership.create",
508
+ "multi-agent.membership.show",
509
+ "multi-agent.fanout.create",
510
+ "multi-agent.fanout.show",
511
+ "multi-agent.fanin.collect",
512
+ "multi-agent.fanin.show",
513
+ "eval.snapshot",
514
+ "eval.replay",
515
+ "eval.compare",
516
+ "eval.score",
517
+ "eval.gate",
518
+ "eval.report",
519
+ "blackboard.summary",
520
+ "blackboard.summarize",
521
+ "blackboard.graph",
522
+ "blackboard.resolve",
523
+ "blackboard.topic.create",
524
+ "blackboard.message.post",
525
+ "blackboard.message.list",
526
+ "blackboard.context.put",
527
+ "blackboard.artifact.add",
528
+ "blackboard.artifact.list",
529
+ "blackboard.snapshot",
530
+ "coordinator.summary",
531
+ "coordinator.decision",
532
+ "audit.verify",
533
+ "audit.worker",
534
+ "audit.provenance",
535
+ "audit.multi-agent",
536
+ "audit.policy",
537
+ "audit.role",
538
+ "audit.blackboard",
539
+ "audit.judge",
540
+ "audit.attest",
541
+ "audit.decision",
542
+ "sandbox.show",
543
+ "sandbox.validate",
544
+ "sandbox.choose",
545
+ "sandbox.resolve",
546
+ "backend.show",
547
+ "backend.probe",
548
+ "worker.list",
549
+ "worker.show",
550
+ "worker.manifest",
551
+ "worker.output",
552
+ "worker.fail",
553
+ "worker.validate",
554
+ "candidate.list",
555
+ "candidate.show",
556
+ "candidate.register",
557
+ "candidate.score",
558
+ "candidate.rank",
559
+ "candidate.select",
560
+ "candidate.reject",
561
+ "feedback.list",
562
+ "feedback.show",
563
+ "feedback.collect",
564
+ "feedback.task",
565
+ "feedback.resolve",
566
+ "schedule.create",
567
+ "schedule.list",
568
+ "schedule.delete",
569
+ "schedule.due",
570
+ "schedule.complete",
571
+ "schedule.pause",
572
+ "schedule.resume",
573
+ "schedule.run-now",
574
+ "schedule.history",
575
+ "routine.create",
576
+ "routine.list",
577
+ "routine.delete",
578
+ "routine.fire",
579
+ "routine.events",
580
+ "registry.refresh",
581
+ "registry.show",
582
+ "run.search",
583
+ "run.list",
584
+ "run.show",
585
+ "run.resume",
586
+ "run.archive",
587
+ "run.rerun",
588
+ "run.export",
589
+ "run.import",
590
+ "run.verify-import",
591
+ "run.inspect-archive",
592
+ "queue.add",
593
+ "queue.list",
594
+ "queue.drain",
595
+ "queue.show",
596
+ "sched.plan",
597
+ "sched.lease",
598
+ "sched.release",
599
+ "sched.complete",
600
+ "sched.reclaim",
601
+ "sched.reset",
602
+ "sched.policy.show",
603
+ "sched.policy.set",
604
+ "telemetry.verify",
605
+ "history",
606
+ "approve",
607
+ "reject",
608
+ "comment.add",
609
+ "handoff",
610
+ "review.policy"
611
+ ]
612
+ }
613
+ ];
614
+ // ---------------------------------------------------------------------------
415
615
  // Derivations + the fail-closed parity report builder.
416
616
  // ---------------------------------------------------------------------------
417
617
  /** The MCP tool names this registry declares. */
418
618
  function declaredMcpTools() {
419
619
  return exports.CAPABILITY_REGISTRY.filter((cap) => cap.mcp).map((cap) => cap.mcp.tool);
420
620
  }
621
+ /** The descriptor for a registry-declared MCP tool name. */
622
+ function mcpCapabilityForTool(tool) {
623
+ return exports.CAPABILITY_REGISTRY.find((capability) => capability.mcp?.tool === tool);
624
+ }
625
+ /** The descriptor for a registry-declared capability id. */
626
+ function mcpCapabilityForId(capabilityId) {
627
+ const descriptor = exports.CAPABILITY_REGISTRY.find((capability) => capability.capability === capabilityId);
628
+ return descriptor?.mcp ? descriptor : undefined;
629
+ }
630
+ /** Required MCP argument groups for a registry-declared tool. */
631
+ function mcpRequiredArgsForTool(tool) {
632
+ return mcpCapabilityForTool(tool)?.mcp?.requiredArgs ?? [];
633
+ }
634
+ function mcpToolDefinition(capabilityId, descriptionOrProperties, maybeProperties) {
635
+ const descriptor = mcpCapabilityForId(capabilityId);
636
+ if (!descriptor?.mcp)
637
+ throw new Error(`MCP capability not declared: ${capabilityId}`);
638
+ const description = typeof descriptionOrProperties === "string" ? descriptionOrProperties : descriptor.summary;
639
+ const properties = typeof descriptionOrProperties === "string" ? maybeProperties : descriptionOrProperties;
640
+ if (!properties)
641
+ throw new Error(`MCP capability ${capabilityId} missing input schema properties.`);
642
+ return {
643
+ name: descriptor.mcp.tool,
644
+ description,
645
+ inputSchema: {
646
+ type: "object",
647
+ properties,
648
+ additionalProperties: true
649
+ }
650
+ };
651
+ }
421
652
  /** The CLI `case` tokens this registry declares (deduped). */
422
653
  function declaredCliTokens() {
423
654
  const tokens = new Set();
@@ -460,6 +691,30 @@ function isPayloadProbeOptOut(cap) {
460
691
  function payloadIdenticalCapabilities() {
461
692
  return exports.CAPABILITY_REGISTRY.filter((cap) => cap.surface === "both" && cap.cli && cap.mcp && !isPayloadProbeOptOut(cap));
462
693
  }
694
+ function payloadProbeTargets() {
695
+ return [
696
+ ...GLOBAL_PAYLOAD_PROBE_CAPABILITIES.map((capability) => ({ capability, kind: "global" })),
697
+ ...RUN_PAYLOAD_PROBE_CAPABILITIES.map((capability) => ({ capability, kind: "run" }))
698
+ ];
699
+ }
700
+ function deferredPayloadProbeCapabilities() {
701
+ return PAYLOAD_PROBE_DEFERRED_GROUPS.flatMap((group) => group.capabilities.map((capability) => ({ capability, reason: group.reason })));
702
+ }
703
+ function payloadProbePlan() {
704
+ const candidateIds = new Set(payloadIdenticalCapabilities().map((cap) => cap.capability));
705
+ const counts = new Map();
706
+ const classified = [...payloadProbeTargets().map((entry) => entry.capability), ...deferredPayloadProbeCapabilities().map((entry) => entry.capability)];
707
+ for (const capability of classified)
708
+ counts.set(capability, (counts.get(capability) || 0) + 1);
709
+ const classifiedIds = new Set(classified);
710
+ return {
711
+ targets: payloadProbeTargets(),
712
+ deferred: deferredPayloadProbeCapabilities(),
713
+ unclassified: [...candidateIds].filter((capability) => !classifiedIds.has(capability)).sort(),
714
+ duplicateClassifications: [...counts.entries()].filter(([, count]) => count > 1).map(([capability]) => capability).sort(),
715
+ invalidClassifications: [...classifiedIds].filter((capability) => !candidateIds.has(capability)).sort()
716
+ };
717
+ }
463
718
  function lintRegistry() {
464
719
  const issues = [];
465
720
  const seenCaps = new Set();
@@ -502,12 +757,16 @@ function buildParityReport(input) {
502
757
  const reasonlessExceptions = exports.CAPABILITY_REGISTRY.filter((cap) => requiresReason(cap) && !(cap.reason && cap.reason.trim()))
503
758
  .map((cap) => cap.capability)
504
759
  .sort();
760
+ const payloadPlan = payloadProbePlan();
505
761
  const registryLint = lintRegistry();
506
762
  const ok = missingMcpTools.length === 0 &&
507
763
  undeclaredMcpTools.length === 0 &&
508
764
  missingCliTokens.length === 0 &&
509
765
  undeclaredCliTokens.length === 0 &&
510
766
  reasonlessExceptions.length === 0 &&
767
+ payloadPlan.unclassified.length === 0 &&
768
+ payloadPlan.duplicateClassifications.length === 0 &&
769
+ payloadPlan.invalidClassifications.length === 0 &&
511
770
  registryLint.length === 0;
512
771
  return {
513
772
  ok,
@@ -517,6 +776,9 @@ function buildParityReport(input) {
517
776
  missingCliTokens,
518
777
  undeclaredCliTokens,
519
778
  reasonlessExceptions,
779
+ payloadProbeUnclassified: payloadPlan.unclassified,
780
+ payloadProbeDuplicateClassifications: payloadPlan.duplicateClassifications,
781
+ payloadProbeInvalidClassifications: payloadPlan.invalidClassifications,
520
782
  registryLint
521
783
  };
522
784
  }