Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
db3d947
chore(tests): switch Ollama model to qwen2.5:1.5b, enforce serial E2E…
JerrettDavis Apr 29, 2026
4c087fc
feat(dashboard): surface AI DSL Emitter demo as featured template and…
JerrettDavis Apr 29, 2026
986b7c8
fix: remove stale {provider} placeholder from seeded AI DSL Emitter w…
JerrettDavis Apr 29, 2026
4ab401f
Merge branch 'main' of https://github.com/JerrettDavis/WorkflowFramework
JerrettDavis May 22, 2026
e309b13
Merge branch 'main' of https://github.com/JerrettDavis/WorkflowFramework
JerrettDavis May 22, 2026
3b36ae6
Merge branch 'main' of https://github.com/JerrettDavis/WorkflowFramework
JerrettDavis May 22, 2026
ebabfaf
Merge branch 'main' of https://github.com/JerrettDavis/WorkflowFramework
JerrettDavis May 22, 2026
6525fc1
Merge branch 'main' of https://github.com/JerrettDavis/WorkflowFramework
JerrettDavis May 22, 2026
3de2aae
Merge branch 'main' of https://github.com/JerrettDavis/WorkflowFramework
JerrettDavis May 22, 2026
13b2047
Merge branch 'main' of https://github.com/JerrettDavis/WorkflowFramework
JerrettDavis May 22, 2026
79fbeaf
Merge branch 'main' of https://github.com/JerrettDavis/WorkflowFramework
JerrettDavis May 22, 2026
2499164
Merge branch 'main' of https://github.com/JerrettDavis/WorkflowFramework
JerrettDavis May 22, 2026
3a174cf
Merge branch 'main' of https://github.com/JerrettDavis/WorkflowFramework
JerrettDavis May 22, 2026
010a179
Merge branch 'main' of https://github.com/JerrettDavis/WorkflowFramework
JerrettDavis May 23, 2026
917a655
Merge branch 'main' of https://github.com/JerrettDavis/WorkflowFramework
JerrettDavis May 23, 2026
a3dd85b
chore(deps): bump PatternKit.Core to 0.113.0
JerrettDavis May 23, 2026
d6ef07e
refactor(integration-transform): adopt PatternKit KeyedNormalizer in …
JerrettDavis May 23, 2026
f7f2e9e
refactor(integration-endpoint): adopt PatternKit AsyncPollingConsumer…
JerrettDavis May 23, 2026
b0ecafc
refactor(integration-endpoint): adopt PatternKit IdempotentReceiver
JerrettDavis May 23, 2026
77adf7f
docs(patternkit-adoption): move Normalizer/Polling/Idempotent steps t…
JerrettDavis May 23, 2026
5ff2f34
chore(ci): bundle PatternKit.Core 0.113.0 in eng/local-feed for CI bo…
JerrettDavis May 23, 2026
207494d
fix(ci): remove erroneously committed lock files for projects with Re…
JerrettDavis May 23, 2026
024ffdb
chore(deps): remove temporary local PatternKit feed
JerrettDavis May 23, 2026
33585c5
fix(deps): update lock file hashes to match PatternKit.Core 0.113.0 o…
JerrettDavis May 23, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 6 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,8 @@ bld/
*.nupkg
*.snupkg
**/artifacts/
# Exception: pre-release packages committed for CI bootstrap (removed once upstream publishes)
!eng/local-feed/*.nupkg

# Test Results
[Tt]est[Rr]esult*/
Expand All @@ -50,7 +52,9 @@ docs/api/
*.db-shm
*.db-wal

# Aspire AppHost and UITests use RestorePackagesWithLockFile=false; exclude their
# ephemeral lock files that --use-lock-file can create at restore time.
# These projects use RestorePackagesWithLockFile=false; exclude their ephemeral
# lock files that --use-lock-file can create at restore time.
src/WorkflowFramework.Dashboard.AppHost/packages.lock.json
tests/WorkflowFramework.Dashboard.UITests/packages.lock.json
tests/WorkflowFramework.Extensions.Approvals.Acceptance/packages.lock.json
tests/WorkflowFramework.Extensions.Approvals.Integration.Tests/packages.lock.json
569 changes: 569 additions & 0 deletions .plan/patternkit-extension-backlog.md

Large diffs are not rendered by default.

334 changes: 334 additions & 0 deletions .plan/patternkit-iteration-2.md

Large diffs are not rendered by default.

423 changes: 423 additions & 0 deletions .plan/tinybdd-patternkit-execution-plan.md

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion Directory.Packages.props
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@
<PackageVersion Include="Reqnroll.xUnit" Version="3.0.0" />

<!-- PatternKit -->
<PackageVersion Include="PatternKit.Core" Version="0.112.0" />
<PackageVersion Include="PatternKit.Core" Version="0.113.0" />

<!-- TinyBDD -->
<PackageVersion Include="TinyBDD" Version="0.19.16" />
Expand Down
27 changes: 24 additions & 3 deletions benchmarks/WorkflowFramework.Benchmarks/packages.lock.json
Original file line number Diff line number Diff line change
Expand Up @@ -174,7 +174,8 @@
"type": "Project",
"dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "[10.0.5, )",
"Microsoft.Extensions.Hosting.Abstractions": "[10.0.5, )"
"Microsoft.Extensions.Hosting.Abstractions": "[10.0.5, )",
"PatternKit.Core": "[0.113.0, )"
}
},
"workflowframework.extensions.diagnostics": {
Expand Down Expand Up @@ -246,6 +247,12 @@
"Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.5",
"Microsoft.Extensions.Primitives": "10.0.5"
}
},
"PatternKit.Core": {
"type": "CentralTransitive",
"requested": "[0.113.0, )",
"resolved": "0.113.0",
"contentHash": "gnHABPF+MK6UmTm3Q0q6UjN1ZLx+A260nDHdk8nq6BTL9m3oZXACmDDiBaYJV4lQjQj5Bg1uEUGqlzSLCBrX0Q=="
}
},
"net8.0": {
Expand Down Expand Up @@ -431,7 +438,8 @@
"type": "Project",
"dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "[10.0.5, )",
"Microsoft.Extensions.Hosting.Abstractions": "[10.0.5, )"
"Microsoft.Extensions.Hosting.Abstractions": "[10.0.5, )",
"PatternKit.Core": "[0.113.0, )"
}
},
"workflowframework.extensions.diagnostics": {
Expand Down Expand Up @@ -508,6 +516,12 @@
"Microsoft.Extensions.Primitives": "10.0.5"
}
},
"PatternKit.Core": {
"type": "CentralTransitive",
"requested": "[0.113.0, )",
"resolved": "0.113.0",
"contentHash": "gnHABPF+MK6UmTm3Q0q6UjN1ZLx+A260nDHdk8nq6BTL9m3oZXACmDDiBaYJV4lQjQj5Bg1uEUGqlzSLCBrX0Q=="
},
"System.Diagnostics.DiagnosticSource": {
"type": "CentralTransitive",
"requested": "[10.0.5, )",
Expand Down Expand Up @@ -683,7 +697,8 @@
"type": "Project",
"dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "[10.0.5, )",
"Microsoft.Extensions.Hosting.Abstractions": "[10.0.5, )"
"Microsoft.Extensions.Hosting.Abstractions": "[10.0.5, )",
"PatternKit.Core": "[0.113.0, )"
}
},
"workflowframework.extensions.diagnostics": {
Expand Down Expand Up @@ -758,6 +773,12 @@
"Microsoft.Extensions.Primitives": "10.0.5"
}
},
"PatternKit.Core": {
"type": "CentralTransitive",
"requested": "[0.113.0, )",
"resolved": "0.113.0",
"contentHash": "gnHABPF+MK6UmTm3Q0q6UjN1ZLx+A260nDHdk8nq6BTL9m3oZXACmDDiBaYJV4lQjQj5Bg1uEUGqlzSLCBrX0Q=="
},
"System.Diagnostics.DiagnosticSource": {
"type": "CentralTransitive",
"requested": "[10.0.5, )",
Expand Down
61 changes: 50 additions & 11 deletions docs/patternkit-adoption.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# PatternKit Adoption Inventory

**PatternKit version:** 0.112.0
**Last updated:** 2026-05-22 (feat/consume-patternkit-0.112WireTapStep adopted)
**PatternKit version:** 0.113.0
**Last updated:** 2026-05-22 (feat/iter2-minor-refactorsNormalizerStep / PollingConsumerStep / IdempotentReceiverStep adopted)

This document lists every point in the WorkflowFramework codebase where a PatternKit primitive is used, and every point where a step is intentionally kept bespoke with the rationale for that decision. This is the canonical reference for Phase I and future phases.

Expand Down Expand Up @@ -57,6 +57,46 @@ This document lists every point in the WorkflowFramework codebase where a Patter
| **Public API change** | None — swap is internal-only. |
| **Net delta** | −15 lines of bespoke logic (try/catch error-swallowing replaced by `TapErrorPolicy`). |

### 5. `NormalizerStep` — Keyed normalizer pattern

| Item | Detail |
|------|--------|
| **File** | `src/WorkflowFramework.Extensions.Integration/Transformation/NormalizerStep.cs` |
| **PatternKit namespace** | `PatternKit.Messaging.Transformation` |
| **Primitive** | `KeyedNormalizer<string, IWorkflowContext, IWorkflowContext>` (new in 0.113.0) |
| **Purpose** | Delegates O(1) key-based dispatch to `KeyedNormalizer`. Each `IStep` translator is wrapped as an async handler. The original `InvalidOperationException` contract is preserved by catching `KeyNotFoundException` from the PatternKit miss path and wrapping it with the bespoke message. |
| **Phase introduced** | feat/iter2-minor-refactors |
| **Test coverage** | `tests/WorkflowFramework.Tests.TinyBDD/Integration/Transformation/NormalizerStepScenarios.cs` — all 9 scenarios pass without modification. |
| **Public API change** | None — swap is internal-only. |
| **Net delta** | −10 lines of bespoke dict-lookup logic (absorbed into KeyedNormalizer). |

### 6. `PollingConsumerStep` — Async polling consumer pattern

| Item | Detail |
|------|--------|
| **File** | `src/WorkflowFramework.Extensions.Integration/Endpoint/PollingConsumerStep.cs` |
| **PatternKit namespace** | `PatternKit.Messaging.Consumers` |
| **Primitive** | `AsyncPollingConsumer<IReadOnlyList<T>>.PollOnceAsync` (new in 0.113.0) |
| **Purpose** | Bridges `IPollingSource<T>` (which returns `IReadOnlyList<T>`) to `AsyncPollingConsumer`'s `AsyncPollSource` delegate via `WithSource`. Calls `PollOnceAsync` for a single-shot poll without entering the consumer's run loop. The `ResultKey` write contract and `IReadOnlyList<T>` output type are unchanged. |
| **Phase introduced** | feat/iter2-minor-refactors |
| **Test coverage** | `tests/WorkflowFramework.Tests.TinyBDD/Integration/Endpoint/PollingConsumerStepScenarios.cs` — all 8 scenarios pass without modification. |
| **Public API change** | None — swap is internal-only. |
| **Net delta** | −4 lines (bespoke poll call replaced by consumer delegation). |

### 7. `IdempotentReceiverStep` — Idempotent receiver pattern

| Item | Detail |
|------|--------|
| **File** | `src/WorkflowFramework.Extensions.Integration/Endpoint/IdempotentReceiverStep.cs` |
| **PatternKit namespace** | `PatternKit.Messaging.Reliability` |
| **Primitive** | `IIdempotencyStore` (in 0.112.0+) with `TryClaimAsync` / `MarkCompletedAsync` / `MarkFailedAsync` |
| **Purpose** | Replaces the bespoke `HashSet<string>` with claim/complete/fail semantics. The default store (`RetryAfterFailureIdempotencyStore`) resets Failed keys to Processing on re-claim, allowing retry after transient failure. Completed keys are still suppressed, preserving the successful-dedup contract. |
| **Phase introduced** | feat/iter2-minor-refactors |
| **Behavior change** | **BUG FIX:** Previously, a step failure permanently locked the idempotency key, preventing retries. A transient inner-step failure should not lock future attempts. The new semantics: `Failed` → retry allowed; `Completed` → deduplicated. |
| **Test coverage** | `tests/WorkflowFramework.Tests.TinyBDD/Integration/Endpoint/IdempotentReceiverStepScenarios.cs` — 9 scenarios; `ReAttemptAfterExceptionIsSkipped` renamed to `ReAttemptAfterExceptionIsAllowed` with assertion flipped. |
| **Public API change** | Added optional `IIdempotencyStore` overload in the constructor. Default two-arg constructor preserved. |
| **Net delta** | +83 lines net (bespoke `HashSet` replaced by `IIdempotencyStore` + internal default impl). |

---

## Intentionally Bespoke
Expand Down Expand Up @@ -197,16 +237,15 @@ When evaluating a bespoke component for PatternKit adoption, the following crite

The following components are candidates for PatternKit adoption in later phases if suitable primitives become available or interface alignment is achieved:

| Component | Potential Primitive | Blocking Reason (assessed against 0.112.0) |
| Component | Potential Primitive | Blocking Reason (assessed against 0.113.0) |
|-----------|--------------------|-----------------------|
| `NormalizerStep` | `Normalizer<TRaw,TCanonical>` (now in 0.112.0) | Behavioral mismatch: PatternKit uses content predicates (first match wins); bespoke uses O(1) dictionary keyed dispatch. Error message format differs — test pins format name in exception text. See `docs/patternkit-followup.md`. |
| `ContentEnricherStep` | `AsyncContentEnricher<TPayload>` (now in 0.112.0) | Semantic mismatch: PatternKit returns an enriched payload copy; bespoke mutates `IWorkflowContext` in place via a `Func<IWorkflowContext, Task>`. Wrapping adds indirection for zero functional benefit. |
| `IdempotentReceiverStep` | `IdempotentReceiver<TPayload,TResult>` (now in 0.112.0) | Behavioral breaking change: PatternKit marks failed attempts as `Failed` in the store (allowing retry); bespoke registers the ID in a `HashSet` before calling inner, so a failed first attempt DOES suppress the second. Test `ReAttemptAfterExceptionIsSkipped` pins this behavior. |
| `ClaimCheckStep` / `ClaimRetrieveStep` | `ClaimCheck<TPayload>` (now in 0.112.0) | Interface mismatch: bespoke `IClaimCheckStore` is untyped (`object`); PatternKit `IClaimCheckStore<TPayload>` is typed. Bridging requires an adapter class, adding indirection without deleting complexity. |
| `PollingConsumerStep` | `AsyncPollingConsumer<TPayload>` (now in 0.112.0) | Semantic mismatch: PatternKit is a continuous polling loop (run until cancelled); bespoke is a single-shot poll (`PollAsync` → store results → return). Incompatible lifecycle models. |
| `ScatterGatherStep` | `AsyncScatterGather<TRequest,TResponse,TResult>` (now in 0.112.0) | Integration complexity: handlers mutate a shared `IWorkflowContext` and write results to named context keys; PatternKit's per-recipient isolation model returns typed `TResponse` values. Adapting while preserving the `__Result_{handler.Name}` and `ResultsKey` contract would re-implement the existing complexity via a wrapper, defeating the purpose. |
| `TransactionalOutboxStep` | `IOutboxStore<TPayload>` (now in 0.112.0) | Interface mismatch: bespoke `IOutboxStore` uses `SaveAsync(object) → string`; PatternKit `IOutboxStore<TPayload>` uses `EnqueueAsync(Message<TPayload>) → OutboxMessage<TPayload>`. Different return types and message wrapper model. |
| `AggregatorStep` | PatternKit Aggregator (future) | No Aggregator primitive in 0.112.0 |
| `ContentEnricherStep` | `AsyncContentEnricher<TPayload>` (now in 0.113.0) | Path C — intentionally bespoke. PatternKit returns an enriched payload copy; bespoke mutates `IWorkflowContext` in place via a `Func<IWorkflowContext, Task>`. Wrapping adds indirection for zero functional benefit. See `.plan/patternkit-iteration-2.md` §2. |
| `ClaimCheckStep` / `ClaimRetrieveStep` | `ClaimCheck<TPayload>` (now in 0.113.0) | Interface mismatch: bespoke `IClaimCheckStore` is untyped (`object`); PatternKit `IClaimCheckStore<TPayload>` is typed. Deferred to Iteration 2 Phase 3 — requires adapter + interface migration. |
| `ScatterGatherStep` | `AsyncScatterGather<TRequest,TResponse,TResult>` (now in 0.113.0) | Integration complexity: handlers mutate a shared `IWorkflowContext` and write results to named context keys; PatternKit's per-recipient isolation model returns typed `TResponse` values. Deferred to Iteration 2 Phase 3. |
| `TransactionalOutboxStep` | `IOutboxStore<TPayload>` (now in 0.113.0) | Interface mismatch: bespoke `IOutboxStore` uses `SaveAsync(object) → string`; PatternKit `IOutboxStore<TPayload>` uses `EnqueueAsync(Message<TPayload>) → OutboxMessage<TPayload>`. Deferred to Iteration 2 Phase 3. |
| `AggregatorStep` | PatternKit Aggregator (future) | No Aggregator primitive in 0.113.0 |
| `PluginManager` | `Strategy` + `AbstractFactory` | Phase H.8 — not yet started |
| `AgentLoopStep` / `AgentDecisionStep` | TypeDispatcher | Phase H.7 — not yet started |
| `ResilienceMiddleware` (Polly) | `RetryPolicy` | Phase F pilot option B — deferred |

**Adopted in feat/iter2-minor-refactors (Iteration 2 Phase 2):** `NormalizerStep` (→ `KeyedNormalizer`), `PollingConsumerStep` (→ `PollOnceAsync`), `IdempotentReceiverStep` (→ `IIdempotencyStore` claim/complete/fail — includes bug fix).
27 changes: 24 additions & 3 deletions samples/WorkflowFramework.Samples.DataPipeline/packages.lock.json
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,8 @@
"type": "Project",
"dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "[10.0.5, )",
"Microsoft.Extensions.Hosting.Abstractions": "[10.0.5, )"
"Microsoft.Extensions.Hosting.Abstractions": "[10.0.5, )",
"PatternKit.Core": "[0.113.0, )"
}
},
"Microsoft.Extensions.DependencyInjection.Abstractions": {
Expand Down Expand Up @@ -96,6 +97,12 @@
"Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.5",
"Microsoft.Extensions.Primitives": "10.0.5"
}
},
"PatternKit.Core": {
"type": "CentralTransitive",
"requested": "[0.113.0, )",
"resolved": "0.113.0",
"contentHash": "gnHABPF+MK6UmTm3Q0q6UjN1ZLx+A260nDHdk8nq6BTL9m3oZXACmDDiBaYJV4lQjQj5Bg1uEUGqlzSLCBrX0Q=="
}
},
"net8.0": {
Expand Down Expand Up @@ -154,7 +161,8 @@
"type": "Project",
"dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "[10.0.5, )",
"Microsoft.Extensions.Hosting.Abstractions": "[10.0.5, )"
"Microsoft.Extensions.Hosting.Abstractions": "[10.0.5, )",
"PatternKit.Core": "[0.113.0, )"
}
},
"Microsoft.Extensions.DependencyInjection.Abstractions": {
Expand Down Expand Up @@ -196,6 +204,12 @@
"Microsoft.Extensions.Primitives": "10.0.5"
}
},
"PatternKit.Core": {
"type": "CentralTransitive",
"requested": "[0.113.0, )",
"resolved": "0.113.0",
"contentHash": "gnHABPF+MK6UmTm3Q0q6UjN1ZLx+A260nDHdk8nq6BTL9m3oZXACmDDiBaYJV4lQjQj5Bg1uEUGqlzSLCBrX0Q=="
},
"System.Diagnostics.DiagnosticSource": {
"type": "CentralTransitive",
"requested": "[10.0.5, )",
Expand Down Expand Up @@ -259,7 +273,8 @@
"type": "Project",
"dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "[10.0.5, )",
"Microsoft.Extensions.Hosting.Abstractions": "[10.0.5, )"
"Microsoft.Extensions.Hosting.Abstractions": "[10.0.5, )",
"PatternKit.Core": "[0.113.0, )"
}
},
"Microsoft.Extensions.DependencyInjection.Abstractions": {
Expand Down Expand Up @@ -301,6 +316,12 @@
"Microsoft.Extensions.Primitives": "10.0.5"
}
},
"PatternKit.Core": {
"type": "CentralTransitive",
"requested": "[0.113.0, )",
"resolved": "0.113.0",
"contentHash": "gnHABPF+MK6UmTm3Q0q6UjN1ZLx+A260nDHdk8nq6BTL9m3oZXACmDDiBaYJV4lQjQj5Bg1uEUGqlzSLCBrX0Q=="
},
"System.Diagnostics.DiagnosticSource": {
"type": "CentralTransitive",
"requested": "[10.0.5, )",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,8 @@
"type": "Project",
"dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "[10.0.5, )",
"Microsoft.Extensions.Hosting.Abstractions": "[10.0.5, )"
"Microsoft.Extensions.Hosting.Abstractions": "[10.0.5, )",
"PatternKit.Core": "[0.113.0, )"
}
},
"workflowframework.extensions.visualization": {
Expand Down Expand Up @@ -102,6 +103,12 @@
"Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.5",
"Microsoft.Extensions.Primitives": "10.0.5"
}
},
"PatternKit.Core": {
"type": "CentralTransitive",
"requested": "[0.113.0, )",
"resolved": "0.113.0",
"contentHash": "gnHABPF+MK6UmTm3Q0q6UjN1ZLx+A260nDHdk8nq6BTL9m3oZXACmDDiBaYJV4lQjQj5Bg1uEUGqlzSLCBrX0Q=="
}
},
"net8.0": {
Expand Down Expand Up @@ -160,7 +167,8 @@
"type": "Project",
"dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "[10.0.5, )",
"Microsoft.Extensions.Hosting.Abstractions": "[10.0.5, )"
"Microsoft.Extensions.Hosting.Abstractions": "[10.0.5, )",
"PatternKit.Core": "[0.113.0, )"
}
},
"workflowframework.extensions.visualization": {
Expand Down Expand Up @@ -208,6 +216,12 @@
"Microsoft.Extensions.Primitives": "10.0.5"
}
},
"PatternKit.Core": {
"type": "CentralTransitive",
"requested": "[0.113.0, )",
"resolved": "0.113.0",
"contentHash": "gnHABPF+MK6UmTm3Q0q6UjN1ZLx+A260nDHdk8nq6BTL9m3oZXACmDDiBaYJV4lQjQj5Bg1uEUGqlzSLCBrX0Q=="
},
"System.Diagnostics.DiagnosticSource": {
"type": "CentralTransitive",
"requested": "[10.0.5, )",
Expand Down Expand Up @@ -271,7 +285,8 @@
"type": "Project",
"dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "[10.0.5, )",
"Microsoft.Extensions.Hosting.Abstractions": "[10.0.5, )"
"Microsoft.Extensions.Hosting.Abstractions": "[10.0.5, )",
"PatternKit.Core": "[0.113.0, )"
}
},
"workflowframework.extensions.visualization": {
Expand Down Expand Up @@ -319,6 +334,12 @@
"Microsoft.Extensions.Primitives": "10.0.5"
}
},
"PatternKit.Core": {
"type": "CentralTransitive",
"requested": "[0.113.0, )",
"resolved": "0.113.0",
"contentHash": "gnHABPF+MK6UmTm3Q0q6UjN1ZLx+A260nDHdk8nq6BTL9m3oZXACmDDiBaYJV4lQjQj5Bg1uEUGqlzSLCBrX0Q=="
},
"System.Diagnostics.DiagnosticSource": {
"type": "CentralTransitive",
"requested": "[10.0.5, )",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -248,7 +248,8 @@
"type": "Project",
"dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "[10.0.5, )",
"Microsoft.Extensions.Hosting.Abstractions": "[10.0.5, )"
"Microsoft.Extensions.Hosting.Abstractions": "[10.0.5, )",
"PatternKit.Core": "[0.113.0, )"
}
},
"workflowframework.extensions.ai": {
Expand Down Expand Up @@ -300,6 +301,12 @@
"Microsoft.SemanticKernel.Connectors.AzureOpenAI": "1.71.0",
"Microsoft.SemanticKernel.Core": "1.71.0"
}
},
"PatternKit.Core": {
"type": "CentralTransitive",
"requested": "[0.113.0, )",
"resolved": "0.113.0",
"contentHash": "gnHABPF+MK6UmTm3Q0q6UjN1ZLx+A260nDHdk8nq6BTL9m3oZXACmDDiBaYJV4lQjQj5Bg1uEUGqlzSLCBrX0Q=="
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -248,7 +248,8 @@
"type": "Project",
"dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "[10.0.5, )",
"Microsoft.Extensions.Hosting.Abstractions": "[10.0.5, )"
"Microsoft.Extensions.Hosting.Abstractions": "[10.0.5, )",
"PatternKit.Core": "[0.113.0, )"
}
},
"workflowframework.extensions.agents": {
Expand Down Expand Up @@ -313,6 +314,12 @@
"Microsoft.SemanticKernel.Connectors.AzureOpenAI": "1.71.0",
"Microsoft.SemanticKernel.Core": "1.71.0"
}
},
"PatternKit.Core": {
"type": "CentralTransitive",
"requested": "[0.113.0, )",
"resolved": "0.113.0",
"contentHash": "gnHABPF+MK6UmTm3Q0q6UjN1ZLx+A260nDHdk8nq6BTL9m3oZXACmDDiBaYJV4lQjQj5Bg1uEUGqlzSLCBrX0Q=="
}
}
}
Expand Down
Loading
Loading