forgeos 0.1.0-alpha.65 → 0.1.0-alpha.67
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/.npmignore +19 -19
- package/AGENTS.md +1 -1
- package/CHANGELOG.md +24 -0
- package/LICENSE +21 -21
- package/README.md +525 -525
- package/adapters/java/README.md +68 -68
- package/adapters/java/pom.xml +47 -47
- package/adapters/java/src/main/java/dev/forgeos/adapter/Auth.java +20 -20
- package/adapters/java/src/main/java/dev/forgeos/adapter/Diagnostic.java +16 -16
- package/adapters/java/src/main/java/dev/forgeos/adapter/Entry.java +38 -38
- package/adapters/java/src/main/java/dev/forgeos/adapter/EntryKind.java +16 -16
- package/adapters/java/src/main/java/dev/forgeos/adapter/ErrorInfo.java +4 -4
- package/adapters/java/src/main/java/dev/forgeos/adapter/Forge.java +94 -94
- package/adapters/java/src/main/java/dev/forgeos/adapter/ForgeCall.java +12 -12
- package/adapters/java/src/main/java/dev/forgeos/adapter/ForgeContext.java +11 -11
- package/adapters/java/src/main/java/dev/forgeos/adapter/ForgeHandler.java +8 -8
- package/adapters/java/src/main/java/dev/forgeos/adapter/ForgeHttpHandler.java +179 -179
- package/adapters/java/src/main/java/dev/forgeos/adapter/ForgeRegistry.java +121 -121
- package/adapters/java/src/main/java/dev/forgeos/adapter/Json.java +14 -14
- package/adapters/java/src/main/java/dev/forgeos/adapter/Manifest.java +14 -14
- package/adapters/java/src/main/java/dev/forgeos/adapter/RequestEnvelope.java +6 -6
- package/adapters/java/src/main/java/dev/forgeos/adapter/ResponseEnvelope.java +25 -25
- package/adapters/java/src/main/java/dev/forgeos/adapter/Risk.java +18 -18
- package/adapters/java/src/main/java/dev/forgeos/adapter/Schemas.java +36 -36
- package/adapters/java/src/main/java/dev/forgeos/adapter/Service.java +65 -65
- package/adapters/java/src/main/java/dev/forgeos/adapter/TransactionMode.java +18 -18
- package/adapters/java/src/main/java/dev/forgeos/adapter/TypedForgeHandler.java +6 -6
- package/adapters/java-spring-boot-starter/README.md +32 -32
- package/adapters/java-spring-boot-starter/pom.xml +49 -49
- package/adapters/java-spring-boot-starter/src/main/java/dev/forgeos/adapter/spring/ForgeCommand.java +22 -22
- package/adapters/java-spring-boot-starter/src/main/java/dev/forgeos/adapter/spring/ForgeExternalService.java +15 -15
- package/adapters/java-spring-boot-starter/src/main/java/dev/forgeos/adapter/spring/ForgeQuery.java +16 -16
- package/adapters/java-spring-boot-starter/src/main/java/dev/forgeos/adapter/spring/ForgeServiceBeanCondition.java +18 -18
- package/adapters/java-spring-boot-starter/src/main/java/dev/forgeos/adapter/spring/ForgeSpringAutoConfiguration.java +16 -16
- package/adapters/java-spring-boot-starter/src/main/java/dev/forgeos/adapter/spring/ForgeSpringRuntime.java +104 -104
- package/adapters/java-spring-boot-starter/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports +1 -1
- package/bin/forge.mjs +38 -38
- package/docs/agent-fabric.md +131 -0
- package/examples/java-billing/pom.xml +60 -60
- package/examples/java-billing/src/main/java/dev/forgeos/examples/billing/CreateInvoiceInput.java +4 -4
- package/examples/java-billing/src/main/java/dev/forgeos/examples/billing/Invoice.java +11 -11
- package/examples/java-billing/src/main/java/dev/forgeos/examples/billing/Main.java +127 -127
- package/package.json +5 -4
- package/packages/eslint-plugin-forge/index.ts +15 -15
- package/packages/eslint-plugin-forge/package.json +10 -10
- package/packages/eslint-plugin-forge/src/check-source.ts +95 -95
- package/packages/eslint-plugin-forge/src/load-artifacts.ts +24 -24
- package/packages/eslint-plugin-forge/src/rule-no-forge-guard-violation.ts +93 -93
- package/schemas/agent-fabric/v0.1/control-event.schema.json +281 -281
- package/scripts/field-test-forgeos.mjs +1021 -1021
- package/src/forge/_generated/releaseManifest.json +1 -1
- package/src/forge/_generated/releaseManifest.ts +3 -3
- package/src/forge/agent-adapters/index.ts +7 -3
- package/src/forge/agent-adapters/types.ts +1 -0
- package/src/forge/agent-fabric/attached-snapshot.ts +55 -0
- package/src/forge/agent-fabric/attached-task-contract.ts +105 -0
- package/src/forge/agent-fabric/attached-task-service.ts +127 -0
- package/src/forge/agent-fabric/attached-task-store.ts +109 -0
- package/src/forge/agent-fabric/codex-adversarial-review.ts +229 -0
- package/src/forge/agent-fabric/codex-sdk-worker.ts +163 -0
- package/src/forge/agent-fabric/index.ts +19 -0
- package/src/forge/agent-fabric/local-adaptive-digest-worker.mjs +26 -26
- package/src/forge/agent-fabric/local-change-review-service.ts +374 -0
- package/src/forge/agent-fabric/local-task-server.ts +324 -249
- package/src/forge/agent-fabric/managed-environment.ts +205 -0
- package/src/forge/agent-fabric/managed-run-contract.ts +102 -0
- package/src/forge/agent-fabric/managed-run-service.ts +392 -0
- package/src/forge/agent-fabric/managed-run-store.ts +135 -0
- package/src/forge/agent-fabric/managed-workspace.ts +214 -0
- package/src/forge/agent-fabric/readiness.ts +26 -0
- package/src/forge/agent-fabric/workflow-engine.ts +218 -0
- package/src/forge/agent-fabric/workflow-task-actions.ts +104 -0
- package/src/forge/agent-fabric/workflow-templates.ts +11 -0
- package/src/forge/agent-memory/bridge.ts +309 -47
- package/src/forge/agent-memory/context-pack.ts +8 -1
- package/src/forge/agent-memory/hook-runner.ts +38 -19
- package/src/forge/agent-memory/mcp.ts +500 -286
- package/src/forge/agent-memory/sources/codex-hook-runner.mjs +343 -234
- package/src/forge/agent-memory/sources/codex.ts +49 -7
- package/src/forge/agent-memory/types.ts +11 -0
- package/src/forge/bench.ts +154 -154
- package/src/forge/cair/action-journal.ts +61 -61
- package/src/forge/cair/action-parser.ts +314 -314
- package/src/forge/cair/action-validator.ts +40 -40
- package/src/forge/cair/actions.ts +1818 -1818
- package/src/forge/cair/format.ts +77 -77
- package/src/forge/cair/index.ts +106 -106
- package/src/forge/cair/query.ts +478 -478
- package/src/forge/cair/snapshot.ts +315 -315
- package/src/forge/cair/types.ts +248 -248
- package/src/forge/cli/ai.ts +816 -816
- package/src/forge/cli/codex-app-server.ts +877 -877
- package/src/forge/cli/fabric.ts +205 -131
- package/src/forge/cli/index.ts +26 -26
- package/src/forge/cli/main.ts +259 -245
- package/src/forge/cli/next-actions.ts +23 -23
- package/src/forge/cli/parse.ts +3574 -3542
- package/src/forge/cli/release.ts +309 -309
- package/src/forge/cli/self-host.ts +510 -510
- package/src/forge/compiler/ai-registry/parse.ts +219 -219
- package/src/forge/compiler/app-graph/classify.ts +10 -10
- package/src/forge/compiler/app-graph/dup-symbol.ts +29 -29
- package/src/forge/compiler/app-graph/extract.ts +231 -231
- package/src/forge/compiler/app-graph/forge-apis.ts +25 -25
- package/src/forge/compiler/app-graph/index.ts +11 -11
- package/src/forge/compiler/app-graph/module-graph.ts +151 -151
- package/src/forge/compiler/app-graph/parser.ts +71 -71
- package/src/forge/compiler/app-graph/symbols.ts +48 -48
- package/src/forge/compiler/app-graph/types.ts +43 -43
- package/src/forge/compiler/app-graph/versions.ts +14 -14
- package/src/forge/compiler/cache/index.ts +17 -17
- package/src/forge/compiler/cache/key.ts +46 -46
- package/src/forge/compiler/cache/scheduler.ts +72 -72
- package/src/forge/compiler/cache/store.ts +78 -78
- package/src/forge/compiler/classifier/capabilities.ts +64 -64
- package/src/forge/compiler/classifier/classify.ts +76 -76
- package/src/forge/compiler/classifier/contexts.ts +188 -188
- package/src/forge/compiler/classifier/index.ts +18 -18
- package/src/forge/compiler/classifier/runtime-matrix.ts +45 -45
- package/src/forge/compiler/classifier/secrets.ts +31 -31
- package/src/forge/compiler/classifier/signals.ts +95 -95
- package/src/forge/compiler/client-sdk/build-manifest.ts +210 -210
- package/src/forge/compiler/data-graph/sql/serialize.ts +89 -89
- package/src/forge/compiler/data-graph/sql/types.ts +38 -38
- package/src/forge/compiler/diagnostics/index.ts +57 -57
- package/src/forge/compiler/emitter/artifact-kind.ts +14 -14
- package/src/forge/compiler/emitter/barrel.ts +47 -47
- package/src/forge/compiler/emitter/constants.ts +7 -7
- package/src/forge/compiler/emitter/emit.ts +223 -223
- package/src/forge/compiler/emitter/index.ts +24 -24
- package/src/forge/compiler/emitter/lock.ts +61 -61
- package/src/forge/compiler/external-manifest/registry.ts +205 -205
- package/src/forge/compiler/external-manifest/types.ts +91 -91
- package/src/forge/compiler/external-manifest/validate.ts +373 -373
- package/src/forge/compiler/frontend-graph/build.ts +623 -623
- package/src/forge/compiler/guards/artifacts.ts +96 -96
- package/src/forge/compiler/guards/check-import-guards.ts +106 -106
- package/src/forge/compiler/guards/index.ts +11 -11
- package/src/forge/compiler/guards/propagate-contexts.ts +57 -57
- package/src/forge/compiler/index.ts +17 -17
- package/src/forge/compiler/integration/index.ts +17 -17
- package/src/forge/compiler/integration/snapshot.ts +54 -54
- package/src/forge/compiler/integration/templates/convex.ts +70 -70
- package/src/forge/compiler/orchestrator/discover.ts +214 -214
- package/src/forge/compiler/orchestrator/guards.ts +5 -5
- package/src/forge/compiler/orchestrator/index.ts +27 -27
- package/src/forge/compiler/orchestrator/orphans.ts +51 -51
- package/src/forge/compiler/orchestrator/profile.ts +23 -23
- package/src/forge/compiler/orchestrator/serialize.ts +979 -979
- package/src/forge/compiler/orchestrator/verify.ts +35 -35
- package/src/forge/compiler/package-graph/capabilities-stub.ts +33 -33
- package/src/forge/compiler/package-graph/checksum.ts +107 -107
- package/src/forge/compiler/package-graph/exports-discovery.ts +91 -91
- package/src/forge/compiler/package-graph/extract-dts.ts +32 -32
- package/src/forge/compiler/package-graph/index.ts +24 -24
- package/src/forge/compiler/package-graph/jsdoc.ts +50 -50
- package/src/forge/compiler/package-graph/oracle.ts +326 -326
- package/src/forge/compiler/package-graph/read-file.ts +21 -21
- package/src/forge/compiler/package-graph/resolve.ts +131 -131
- package/src/forge/compiler/package-manager/adapter.ts +240 -240
- package/src/forge/compiler/package-manager/commands.ts +51 -51
- package/src/forge/compiler/package-manager/detect.ts +65 -65
- package/src/forge/compiler/package-manager/executor.ts +146 -146
- package/src/forge/compiler/package-manager/index.ts +22 -22
- package/src/forge/compiler/package-manager/parse-spec.ts +16 -16
- package/src/forge/compiler/primitives/compare.ts +26 -26
- package/src/forge/compiler/primitives/hash.ts +29 -29
- package/src/forge/compiler/primitives/header.ts +43 -43
- package/src/forge/compiler/primitives/index.ts +45 -45
- package/src/forge/compiler/primitives/paths.ts +24 -24
- package/src/forge/compiler/primitives/serialize.ts +66 -66
- package/src/forge/compiler/primitives/sort.ts +87 -87
- package/src/forge/compiler/recipes/helpers.ts +37 -37
- package/src/forge/compiler/sandbox/artifact-sanitize.ts +26 -26
- package/src/forge/compiler/sandbox/backends/child.ts +123 -123
- package/src/forge/compiler/sandbox/backends/docker.ts +173 -173
- package/src/forge/compiler/sandbox/index.ts +51 -51
- package/src/forge/compiler/sandbox/inspect.ts +143 -143
- package/src/forge/compiler/sandbox/inspector-entry.ts +115 -115
- package/src/forge/compiler/sandbox/limits.ts +31 -31
- package/src/forge/compiler/sandbox/scrub-env.ts +60 -60
- package/src/forge/compiler/sandbox/secret-scan.ts +54 -54
- package/src/forge/compiler/sandbox/serialize.ts +106 -106
- package/src/forge/compiler/sandbox/types.ts +7 -7
- package/src/forge/compiler/test-graph/build.ts +285 -285
- package/src/forge/compiler/types/app-graph.ts +87 -87
- package/src/forge/compiler/types/capability.ts +29 -29
- package/src/forge/compiler/types/classification.ts +9 -9
- package/src/forge/compiler/types/diagnostic.ts +2 -2
- package/src/forge/compiler/types/frontend-graph.ts +81 -81
- package/src/forge/compiler/types/import-guards.ts +19 -19
- package/src/forge/compiler/types/index.ts +98 -98
- package/src/forge/compiler/types/json.ts +3 -3
- package/src/forge/compiler/types/lock.ts +37 -37
- package/src/forge/compiler/types/runtime-matrix.ts +16 -16
- package/src/forge/compiler/types/runtime.ts +30 -30
- package/src/forge/compiler/types/sandbox.ts +24 -24
- package/src/forge/delta/broker-runner.mjs +5 -0
- package/src/forge/delta/broker.ts +429 -0
- package/src/forge/delta/classifier.ts +52 -52
- package/src/forge/delta/explain.ts +238 -238
- package/src/forge/delta/git-observer.ts +24 -0
- package/src/forge/delta/ids.ts +40 -40
- package/src/forge/delta/index.ts +25 -25
- package/src/forge/delta/process-identity.ts +31 -0
- package/src/forge/delta/queue-status.ts +190 -0
- package/src/forge/delta/redaction.ts +50 -50
- package/src/forge/delta/schema.ts +135 -135
- package/src/forge/delta/session.ts +142 -142
- package/src/forge/delta/status.ts +82 -145
- package/src/forge/delta/store.ts +77 -32
- package/src/forge/delta/timeline.ts +178 -178
- package/src/forge/dev/types.ts +63 -63
- package/src/forge/dev/watch.ts +119 -119
- package/src/forge/intent/index.ts +509 -509
- package/src/forge/make/types.ts +153 -153
- package/src/forge/refactor/index.ts +1937 -1937
- package/src/forge/refactor/runtime-rename.ts +598 -598
- package/src/forge/repair/rules/index.ts +476 -476
- package/src/forge/review/types.ts +211 -211
- package/src/forge/runtime/db/generated-client.ts +305 -305
- package/src/forge/runtime/db/pglite-adapter.ts +33 -11
- package/src/forge/runtime/runner/run-entry.ts +236 -236
- package/src/forge/version.ts +1 -1
- package/templates/agent-workroom/AGENTS.md +29 -29
- package/templates/agent-workroom/README.md +34 -34
- package/templates/agent-workroom/forge.config.ts +3 -3
- package/templates/agent-workroom/package.json +34 -34
- package/templates/agent-workroom/pnpm-workspace.yaml +2 -2
- package/templates/agent-workroom/src/actions/indexAgentSignal.ts +10 -10
- package/templates/agent-workroom/src/commands/openWorkroom.ts +61 -61
- package/templates/agent-workroom/src/commands/recordAgentSignal.ts +119 -119
- package/templates/agent-workroom/src/commands/recordCheckRun.ts +52 -52
- package/templates/agent-workroom/src/forge/schema.ts +54 -54
- package/templates/agent-workroom/src/policies.ts +6 -6
- package/templates/agent-workroom/src/queries/listWorkrooms.ts +11 -11
- package/templates/agent-workroom/src/queries/liveWorkroom.ts +63 -63
- package/templates/agent-workroom/tsconfig.json +16 -16
- package/templates/agent-workroom/web/index.html +13 -13
- package/templates/agent-workroom/web/package.json +21 -21
- package/templates/agent-workroom/web/src/App.tsx +345 -345
- package/templates/agent-workroom/web/src/main.tsx +13 -13
- package/templates/agent-workroom/web/src/styles.css +545 -545
- package/templates/agent-workroom/web/tsconfig.json +27 -27
- package/templates/b2b-support-web/package.json +37 -37
- package/templates/b2b-support-web/pnpm-workspace.yaml +2 -2
- package/templates/b2b-support-web/web/package.json +21 -21
- package/templates/minimal-web/package.json +34 -34
- package/templates/minimal-web/pnpm-workspace.yaml +2 -2
- package/templates/minimal-web/web/index.html +13 -13
- package/templates/minimal-web/web/src/styles.css +190 -190
- package/templates/nuxt-web/.vscode/settings.json +14 -14
- package/templates/nuxt-web/.yarnrc.yml +1 -1
- package/templates/nuxt-web/README.md +30 -30
- package/templates/nuxt-web/forge.config.ts +3 -3
- package/templates/nuxt-web/package.json +34 -34
- package/templates/nuxt-web/pnpm-workspace.yaml +2 -2
- package/templates/nuxt-web/src/actions/logNoteCreated.ts +11 -11
- package/templates/nuxt-web/src/commands/createNote.ts +26 -26
- package/templates/nuxt-web/src/forge/schema.ts +12 -12
- package/templates/nuxt-web/src/policies.ts +6 -6
- package/templates/nuxt-web/src/queries/listNotes.ts +8 -8
- package/templates/nuxt-web/src/queries/liveNotes.ts +8 -8
- package/templates/nuxt-web/tsconfig.json +17 -17
- package/templates/nuxt-web/web/app.vue +67 -67
- package/templates/nuxt-web/web/components/LiveNotes.vue +89 -89
- package/templates/nuxt-web/web/components/NoteComposer.vue +100 -100
- package/templates/nuxt-web/web/composables/forge.ts +13 -13
- package/templates/nuxt-web/web/composables/useNotes.ts +24 -24
- package/templates/nuxt-web/web/nuxt.config.ts +11 -11
- package/templates/nuxt-web/web/package.json +19 -19
- package/templates/nuxt-web/web/plugins/forge.client.ts +10 -10
- package/templates/nuxt-web/web/plugins/forge.server.ts +10 -10
- package/templates/nuxt-web/web/server/api/forge-health.get.ts +7 -7
- package/templates/nuxt-web/web/tsconfig.json +6 -6
- package/templates/vendor-access/.vscode/settings.json +14 -14
- package/templates/vendor-access/README.md +30 -30
- package/templates/vendor-access/package.json +35 -35
- package/templates/vendor-access/pnpm-workspace.yaml +2 -2
- package/templates/vendor-access/tsconfig.json +17 -17
- package/templates/vendor-access/web/index.html +13 -13
- package/templates/vendor-access/web/package.json +21 -21
- package/templates/vendor-access/web/src/styles.css +682 -682
- package/templates/vendor-access/web/tsconfig.json +18 -18
package/adapters/java/README.md
CHANGED
|
@@ -1,68 +1,68 @@
|
|
|
1
|
-
# Forge Java Adapter
|
|
2
|
-
|
|
3
|
-
`adapters/java` is the minimal Java SDK for external Forge runtimes. It mirrors
|
|
4
|
-
the Go adapter: register commands and queries, emit a `forge.manifest.json`, and
|
|
5
|
-
serve Forge-compatible HTTP envelopes.
|
|
6
|
-
|
|
7
|
-
```java
|
|
8
|
-
ForgeRegistry app = Forge.service("billing",
|
|
9
|
-
Forge.framework("java/jdk-http"),
|
|
10
|
-
Forge.baseUrl("http://127.0.0.1:8788"));
|
|
11
|
-
|
|
12
|
-
app.command("createInvoice",
|
|
13
|
-
Forge.handle(CreateInvoiceInput.class, Billing::createInvoice),
|
|
14
|
-
Forge.policy("billing.manage"),
|
|
15
|
-
Forge.tenantScoped(true),
|
|
16
|
-
Forge.needsApproval(true),
|
|
17
|
-
Forge.inputSchema(Schemas.object(Map.of("title", Schemas.string()), "title")));
|
|
18
|
-
|
|
19
|
-
app.query("listInvoices",
|
|
20
|
-
Forge.handle(EmptyInput.class, Billing::listInvoices),
|
|
21
|
-
Forge.policy("billing.manage"),
|
|
22
|
-
Forge.tenantScoped(true),
|
|
23
|
-
Forge.readOnly());
|
|
24
|
-
|
|
25
|
-
ForgeHttpHandler.listen(app, "127.0.0.1", 8788);
|
|
26
|
-
```
|
|
27
|
-
|
|
28
|
-
The HTTP handler exposes:
|
|
29
|
-
|
|
30
|
-
```text
|
|
31
|
-
GET /health
|
|
32
|
-
GET /manifest?baseUrl=http://127.0.0.1:8788
|
|
33
|
-
POST /commands/:name
|
|
34
|
-
POST /queries/:name
|
|
35
|
-
```
|
|
36
|
-
|
|
37
|
-
The handler accepts Forge runtime envelopes and returns Forge response
|
|
38
|
-
envelopes:
|
|
39
|
-
|
|
40
|
-
```json
|
|
41
|
-
{
|
|
42
|
-
"args": { "title": "Invoice" },
|
|
43
|
-
"auth": { "kind": "user", "userId": "u1", "tenantId": "t1", "role": "admin" },
|
|
44
|
-
"forge": { "service": "billing", "entry": "createInvoice", "kind": "command", "traceId": "trace_..." }
|
|
45
|
-
}
|
|
46
|
-
```
|
|
47
|
-
|
|
48
|
-
Build locally:
|
|
49
|
-
|
|
50
|
-
```bash
|
|
51
|
-
mvn -f adapters/java/pom.xml install
|
|
52
|
-
mvn -f examples/java-billing/pom.xml package
|
|
53
|
-
```
|
|
54
|
-
|
|
55
|
-
Emit and import a manifest:
|
|
56
|
-
|
|
57
|
-
```bash
|
|
58
|
-
java -jar examples/java-billing/target/java-billing-0.1.0-alpha.11-all.jar --manifest --base-url http://127.0.0.1:8788 > java-billing.manifest.json
|
|
59
|
-
forge manifest import java-billing.manifest.json --json
|
|
60
|
-
forge generate
|
|
61
|
-
```
|
|
62
|
-
|
|
63
|
-
Invoke through Forge:
|
|
64
|
-
|
|
65
|
-
```bash
|
|
66
|
-
forge run billing.createInvoice --args '{"title":"Invoice"}' --role admin --tenant-id tenant-a
|
|
67
|
-
forge query billing.listInvoices --args '{}' --role admin --tenant-id tenant-a
|
|
68
|
-
```
|
|
1
|
+
# Forge Java Adapter
|
|
2
|
+
|
|
3
|
+
`adapters/java` is the minimal Java SDK for external Forge runtimes. It mirrors
|
|
4
|
+
the Go adapter: register commands and queries, emit a `forge.manifest.json`, and
|
|
5
|
+
serve Forge-compatible HTTP envelopes.
|
|
6
|
+
|
|
7
|
+
```java
|
|
8
|
+
ForgeRegistry app = Forge.service("billing",
|
|
9
|
+
Forge.framework("java/jdk-http"),
|
|
10
|
+
Forge.baseUrl("http://127.0.0.1:8788"));
|
|
11
|
+
|
|
12
|
+
app.command("createInvoice",
|
|
13
|
+
Forge.handle(CreateInvoiceInput.class, Billing::createInvoice),
|
|
14
|
+
Forge.policy("billing.manage"),
|
|
15
|
+
Forge.tenantScoped(true),
|
|
16
|
+
Forge.needsApproval(true),
|
|
17
|
+
Forge.inputSchema(Schemas.object(Map.of("title", Schemas.string()), "title")));
|
|
18
|
+
|
|
19
|
+
app.query("listInvoices",
|
|
20
|
+
Forge.handle(EmptyInput.class, Billing::listInvoices),
|
|
21
|
+
Forge.policy("billing.manage"),
|
|
22
|
+
Forge.tenantScoped(true),
|
|
23
|
+
Forge.readOnly());
|
|
24
|
+
|
|
25
|
+
ForgeHttpHandler.listen(app, "127.0.0.1", 8788);
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
The HTTP handler exposes:
|
|
29
|
+
|
|
30
|
+
```text
|
|
31
|
+
GET /health
|
|
32
|
+
GET /manifest?baseUrl=http://127.0.0.1:8788
|
|
33
|
+
POST /commands/:name
|
|
34
|
+
POST /queries/:name
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
The handler accepts Forge runtime envelopes and returns Forge response
|
|
38
|
+
envelopes:
|
|
39
|
+
|
|
40
|
+
```json
|
|
41
|
+
{
|
|
42
|
+
"args": { "title": "Invoice" },
|
|
43
|
+
"auth": { "kind": "user", "userId": "u1", "tenantId": "t1", "role": "admin" },
|
|
44
|
+
"forge": { "service": "billing", "entry": "createInvoice", "kind": "command", "traceId": "trace_..." }
|
|
45
|
+
}
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
Build locally:
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
mvn -f adapters/java/pom.xml install
|
|
52
|
+
mvn -f examples/java-billing/pom.xml package
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
Emit and import a manifest:
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
java -jar examples/java-billing/target/java-billing-0.1.0-alpha.11-all.jar --manifest --base-url http://127.0.0.1:8788 > java-billing.manifest.json
|
|
59
|
+
forge manifest import java-billing.manifest.json --json
|
|
60
|
+
forge generate
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
Invoke through Forge:
|
|
64
|
+
|
|
65
|
+
```bash
|
|
66
|
+
forge run billing.createInvoice --args '{"title":"Invoice"}' --role admin --tenant-id tenant-a
|
|
67
|
+
forge query billing.listInvoices --args '{}' --role admin --tenant-id tenant-a
|
|
68
|
+
```
|
package/adapters/java/pom.xml
CHANGED
|
@@ -1,47 +1,47 @@
|
|
|
1
|
-
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
-
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
|
3
|
-
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
4
|
-
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
|
|
5
|
-
<modelVersion>4.0.0</modelVersion>
|
|
6
|
-
|
|
7
|
-
<groupId>dev.forgeos</groupId>
|
|
8
|
-
<artifactId>forge-java-adapter</artifactId>
|
|
9
|
-
<version>0.1.0-alpha.11</version>
|
|
10
|
-
<name>Forge Java Adapter</name>
|
|
11
|
-
<description>Minimal Java SDK for Forge external runtimes.</description>
|
|
12
|
-
<url>https://forgeos.dev</url>
|
|
13
|
-
|
|
14
|
-
<licenses>
|
|
15
|
-
<license>
|
|
16
|
-
<name>Apache License, Version 2.0</name>
|
|
17
|
-
<url>https://www.apache.org/licenses/LICENSE-2.0.txt</url>
|
|
18
|
-
</license>
|
|
19
|
-
</licenses>
|
|
20
|
-
|
|
21
|
-
<properties>
|
|
22
|
-
<maven.compiler.release>17</maven.compiler.release>
|
|
23
|
-
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
|
24
|
-
<jackson.version>2.17.2</jackson.version>
|
|
25
|
-
</properties>
|
|
26
|
-
|
|
27
|
-
<dependencies>
|
|
28
|
-
<dependency>
|
|
29
|
-
<groupId>com.fasterxml.jackson.core</groupId>
|
|
30
|
-
<artifactId>jackson-databind</artifactId>
|
|
31
|
-
<version>${jackson.version}</version>
|
|
32
|
-
</dependency>
|
|
33
|
-
</dependencies>
|
|
34
|
-
|
|
35
|
-
<build>
|
|
36
|
-
<plugins>
|
|
37
|
-
<plugin>
|
|
38
|
-
<groupId>org.apache.maven.plugins</groupId>
|
|
39
|
-
<artifactId>maven-compiler-plugin</artifactId>
|
|
40
|
-
<version>3.13.0</version>
|
|
41
|
-
<configuration>
|
|
42
|
-
<release>${maven.compiler.release}</release>
|
|
43
|
-
</configuration>
|
|
44
|
-
</plugin>
|
|
45
|
-
</plugins>
|
|
46
|
-
</build>
|
|
47
|
-
</project>
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
|
3
|
+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
4
|
+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
|
|
5
|
+
<modelVersion>4.0.0</modelVersion>
|
|
6
|
+
|
|
7
|
+
<groupId>dev.forgeos</groupId>
|
|
8
|
+
<artifactId>forge-java-adapter</artifactId>
|
|
9
|
+
<version>0.1.0-alpha.11</version>
|
|
10
|
+
<name>Forge Java Adapter</name>
|
|
11
|
+
<description>Minimal Java SDK for Forge external runtimes.</description>
|
|
12
|
+
<url>https://forgeos.dev</url>
|
|
13
|
+
|
|
14
|
+
<licenses>
|
|
15
|
+
<license>
|
|
16
|
+
<name>Apache License, Version 2.0</name>
|
|
17
|
+
<url>https://www.apache.org/licenses/LICENSE-2.0.txt</url>
|
|
18
|
+
</license>
|
|
19
|
+
</licenses>
|
|
20
|
+
|
|
21
|
+
<properties>
|
|
22
|
+
<maven.compiler.release>17</maven.compiler.release>
|
|
23
|
+
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
|
24
|
+
<jackson.version>2.17.2</jackson.version>
|
|
25
|
+
</properties>
|
|
26
|
+
|
|
27
|
+
<dependencies>
|
|
28
|
+
<dependency>
|
|
29
|
+
<groupId>com.fasterxml.jackson.core</groupId>
|
|
30
|
+
<artifactId>jackson-databind</artifactId>
|
|
31
|
+
<version>${jackson.version}</version>
|
|
32
|
+
</dependency>
|
|
33
|
+
</dependencies>
|
|
34
|
+
|
|
35
|
+
<build>
|
|
36
|
+
<plugins>
|
|
37
|
+
<plugin>
|
|
38
|
+
<groupId>org.apache.maven.plugins</groupId>
|
|
39
|
+
<artifactId>maven-compiler-plugin</artifactId>
|
|
40
|
+
<version>3.13.0</version>
|
|
41
|
+
<configuration>
|
|
42
|
+
<release>${maven.compiler.release}</release>
|
|
43
|
+
</configuration>
|
|
44
|
+
</plugin>
|
|
45
|
+
</plugins>
|
|
46
|
+
</build>
|
|
47
|
+
</project>
|
|
@@ -1,20 +1,20 @@
|
|
|
1
|
-
package dev.forgeos.adapter;
|
|
2
|
-
|
|
3
|
-
import java.util.List;
|
|
4
|
-
import java.util.Map;
|
|
5
|
-
|
|
6
|
-
public record Auth(
|
|
7
|
-
String kind,
|
|
8
|
-
String userId,
|
|
9
|
-
String tenantId,
|
|
10
|
-
String role,
|
|
11
|
-
List<String> roles,
|
|
12
|
-
List<String> permissions,
|
|
13
|
-
String email,
|
|
14
|
-
String name,
|
|
15
|
-
Map<String, Object> claims
|
|
16
|
-
) {
|
|
17
|
-
public static Auth anonymous() {
|
|
18
|
-
return new Auth("anonymous", null, null, null, null, null, null, null, null);
|
|
19
|
-
}
|
|
20
|
-
}
|
|
1
|
+
package dev.forgeos.adapter;
|
|
2
|
+
|
|
3
|
+
import java.util.List;
|
|
4
|
+
import java.util.Map;
|
|
5
|
+
|
|
6
|
+
public record Auth(
|
|
7
|
+
String kind,
|
|
8
|
+
String userId,
|
|
9
|
+
String tenantId,
|
|
10
|
+
String role,
|
|
11
|
+
List<String> roles,
|
|
12
|
+
List<String> permissions,
|
|
13
|
+
String email,
|
|
14
|
+
String name,
|
|
15
|
+
Map<String, Object> claims
|
|
16
|
+
) {
|
|
17
|
+
public static Auth anonymous() {
|
|
18
|
+
return new Auth("anonymous", null, null, null, null, null, null, null, null);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
package dev.forgeos.adapter;
|
|
2
|
-
|
|
3
|
-
import java.util.List;
|
|
4
|
-
|
|
5
|
-
public record Diagnostic(
|
|
6
|
-
String severity,
|
|
7
|
-
String code,
|
|
8
|
-
String message,
|
|
9
|
-
String file,
|
|
10
|
-
String fixHint,
|
|
11
|
-
List<String> docs
|
|
12
|
-
) {
|
|
13
|
-
public static Diagnostic error(String code, String message) {
|
|
14
|
-
return new Diagnostic("error", code, message, null, null, List.of("docs/forge-protocol.md"));
|
|
15
|
-
}
|
|
16
|
-
}
|
|
1
|
+
package dev.forgeos.adapter;
|
|
2
|
+
|
|
3
|
+
import java.util.List;
|
|
4
|
+
|
|
5
|
+
public record Diagnostic(
|
|
6
|
+
String severity,
|
|
7
|
+
String code,
|
|
8
|
+
String message,
|
|
9
|
+
String file,
|
|
10
|
+
String fixHint,
|
|
11
|
+
List<String> docs
|
|
12
|
+
) {
|
|
13
|
+
public static Diagnostic error(String code, String message) {
|
|
14
|
+
return new Diagnostic("error", code, message, null, null, List.of("docs/forge-protocol.md"));
|
|
15
|
+
}
|
|
16
|
+
}
|
|
@@ -1,38 +1,38 @@
|
|
|
1
|
-
package dev.forgeos.adapter;
|
|
2
|
-
|
|
3
|
-
import java.util.ArrayList;
|
|
4
|
-
import java.util.List;
|
|
5
|
-
|
|
6
|
-
public final class Entry {
|
|
7
|
-
public String name;
|
|
8
|
-
public String kind;
|
|
9
|
-
public String description;
|
|
10
|
-
public String path;
|
|
11
|
-
public String method;
|
|
12
|
-
public Object inputSchema;
|
|
13
|
-
public Object outputSchema;
|
|
14
|
-
public String policy;
|
|
15
|
-
public Boolean tenantScoped;
|
|
16
|
-
public String transaction;
|
|
17
|
-
public String risk;
|
|
18
|
-
public Boolean needsApproval;
|
|
19
|
-
public List<String> effects;
|
|
20
|
-
|
|
21
|
-
public Entry copy() {
|
|
22
|
-
Entry copy = new Entry();
|
|
23
|
-
copy.name = name;
|
|
24
|
-
copy.kind = kind;
|
|
25
|
-
copy.description = description;
|
|
26
|
-
copy.path = path;
|
|
27
|
-
copy.method = method;
|
|
28
|
-
copy.inputSchema = inputSchema;
|
|
29
|
-
copy.outputSchema = outputSchema;
|
|
30
|
-
copy.policy = policy;
|
|
31
|
-
copy.tenantScoped = tenantScoped;
|
|
32
|
-
copy.transaction = transaction;
|
|
33
|
-
copy.risk = risk;
|
|
34
|
-
copy.needsApproval = needsApproval;
|
|
35
|
-
copy.effects = effects == null ? null : new ArrayList<>(effects);
|
|
36
|
-
return copy;
|
|
37
|
-
}
|
|
38
|
-
}
|
|
1
|
+
package dev.forgeos.adapter;
|
|
2
|
+
|
|
3
|
+
import java.util.ArrayList;
|
|
4
|
+
import java.util.List;
|
|
5
|
+
|
|
6
|
+
public final class Entry {
|
|
7
|
+
public String name;
|
|
8
|
+
public String kind;
|
|
9
|
+
public String description;
|
|
10
|
+
public String path;
|
|
11
|
+
public String method;
|
|
12
|
+
public Object inputSchema;
|
|
13
|
+
public Object outputSchema;
|
|
14
|
+
public String policy;
|
|
15
|
+
public Boolean tenantScoped;
|
|
16
|
+
public String transaction;
|
|
17
|
+
public String risk;
|
|
18
|
+
public Boolean needsApproval;
|
|
19
|
+
public List<String> effects;
|
|
20
|
+
|
|
21
|
+
public Entry copy() {
|
|
22
|
+
Entry copy = new Entry();
|
|
23
|
+
copy.name = name;
|
|
24
|
+
copy.kind = kind;
|
|
25
|
+
copy.description = description;
|
|
26
|
+
copy.path = path;
|
|
27
|
+
copy.method = method;
|
|
28
|
+
copy.inputSchema = inputSchema;
|
|
29
|
+
copy.outputSchema = outputSchema;
|
|
30
|
+
copy.policy = policy;
|
|
31
|
+
copy.tenantScoped = tenantScoped;
|
|
32
|
+
copy.transaction = transaction;
|
|
33
|
+
copy.risk = risk;
|
|
34
|
+
copy.needsApproval = needsApproval;
|
|
35
|
+
copy.effects = effects == null ? null : new ArrayList<>(effects);
|
|
36
|
+
return copy;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
package dev.forgeos.adapter;
|
|
2
|
-
|
|
3
|
-
public enum EntryKind {
|
|
4
|
-
COMMAND("command"),
|
|
5
|
-
QUERY("query");
|
|
6
|
-
|
|
7
|
-
private final String value;
|
|
8
|
-
|
|
9
|
-
EntryKind(String value) {
|
|
10
|
-
this.value = value;
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
public String value() {
|
|
14
|
-
return value;
|
|
15
|
-
}
|
|
16
|
-
}
|
|
1
|
+
package dev.forgeos.adapter;
|
|
2
|
+
|
|
3
|
+
public enum EntryKind {
|
|
4
|
+
COMMAND("command"),
|
|
5
|
+
QUERY("query");
|
|
6
|
+
|
|
7
|
+
private final String value;
|
|
8
|
+
|
|
9
|
+
EntryKind(String value) {
|
|
10
|
+
this.value = value;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
public String value() {
|
|
14
|
+
return value;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
package dev.forgeos.adapter;
|
|
2
|
-
|
|
3
|
-
public record ErrorInfo(String code, String message) {
|
|
4
|
-
}
|
|
1
|
+
package dev.forgeos.adapter;
|
|
2
|
+
|
|
3
|
+
public record ErrorInfo(String code, String message) {
|
|
4
|
+
}
|
|
@@ -1,94 +1,94 @@
|
|
|
1
|
-
package dev.forgeos.adapter;
|
|
2
|
-
|
|
3
|
-
import com.fasterxml.jackson.databind.JsonNode;
|
|
4
|
-
import java.util.Arrays;
|
|
5
|
-
import java.util.List;
|
|
6
|
-
|
|
7
|
-
public final class Forge {
|
|
8
|
-
private Forge() {
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
public static ForgeRegistry service(String serviceName, ForgeRegistry.RegistryOption... options) {
|
|
12
|
-
return new ForgeRegistry(serviceName, options);
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
public static ForgeRegistry.RegistryOption framework(String value) {
|
|
16
|
-
return registry -> registry.setFramework(value);
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
public static ForgeRegistry.RegistryOption baseUrl(String value) {
|
|
20
|
-
return registry -> registry.setBaseUrl(value);
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
public static ForgeRegistry.RegistryOption health(String path) {
|
|
24
|
-
return registry -> registry.setHealth(path);
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
public static ForgeRegistry.RegistryOption schemaRef(String name, Object schema) {
|
|
28
|
-
return registry -> registry.addSchema(name, schema);
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
public static ForgeRegistry.EntryOption description(String value) {
|
|
32
|
-
return entry -> entry.description = value;
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
public static ForgeRegistry.EntryOption path(String value) {
|
|
36
|
-
return entry -> entry.path = value;
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
public static ForgeRegistry.EntryOption method(String value) {
|
|
40
|
-
return entry -> entry.method = value;
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
public static ForgeRegistry.EntryOption inputSchema(Object schema) {
|
|
44
|
-
return entry -> entry.inputSchema = schema;
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
public static ForgeRegistry.EntryOption outputSchema(Object schema) {
|
|
48
|
-
return entry -> entry.outputSchema = schema;
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
public static ForgeRegistry.EntryOption policy(String value) {
|
|
52
|
-
return entry -> entry.policy = value;
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
public static ForgeRegistry.EntryOption tenantScoped(boolean value) {
|
|
56
|
-
return entry -> entry.tenantScoped = value;
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
public static ForgeRegistry.EntryOption transaction(TransactionMode value) {
|
|
60
|
-
return entry -> entry.transaction = value.value();
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
public static ForgeRegistry.EntryOption risk(Risk value) {
|
|
64
|
-
return entry -> entry.risk = value.value();
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
public static ForgeRegistry.EntryOption needsApproval(boolean value) {
|
|
68
|
-
return entry -> entry.needsApproval = value;
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
public static ForgeRegistry.EntryOption effects(String... values) {
|
|
72
|
-
return entry -> entry.effects = List.copyOf(Arrays.asList(values));
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
public static ForgeRegistry.EntryOption readOnly() {
|
|
76
|
-
return entry -> {
|
|
77
|
-
entry.transaction = TransactionMode.READ_ONLY.value();
|
|
78
|
-
entry.risk = Risk.READ.value();
|
|
79
|
-
};
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
public static <In, Out> ForgeHandler handle(
|
|
83
|
-
Class<In> inputClass,
|
|
84
|
-
TypedForgeHandler<In, Out> handler
|
|
85
|
-
) {
|
|
86
|
-
return (context, rawArgs) -> {
|
|
87
|
-
JsonNode args = rawArgs == null || rawArgs.isNull()
|
|
88
|
-
? Json.MAPPER.createObjectNode()
|
|
89
|
-
: rawArgs;
|
|
90
|
-
In input = Json.MAPPER.treeToValue(args, inputClass);
|
|
91
|
-
return handler.handle(context, input);
|
|
92
|
-
};
|
|
93
|
-
}
|
|
94
|
-
}
|
|
1
|
+
package dev.forgeos.adapter;
|
|
2
|
+
|
|
3
|
+
import com.fasterxml.jackson.databind.JsonNode;
|
|
4
|
+
import java.util.Arrays;
|
|
5
|
+
import java.util.List;
|
|
6
|
+
|
|
7
|
+
public final class Forge {
|
|
8
|
+
private Forge() {
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
public static ForgeRegistry service(String serviceName, ForgeRegistry.RegistryOption... options) {
|
|
12
|
+
return new ForgeRegistry(serviceName, options);
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
public static ForgeRegistry.RegistryOption framework(String value) {
|
|
16
|
+
return registry -> registry.setFramework(value);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
public static ForgeRegistry.RegistryOption baseUrl(String value) {
|
|
20
|
+
return registry -> registry.setBaseUrl(value);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
public static ForgeRegistry.RegistryOption health(String path) {
|
|
24
|
+
return registry -> registry.setHealth(path);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
public static ForgeRegistry.RegistryOption schemaRef(String name, Object schema) {
|
|
28
|
+
return registry -> registry.addSchema(name, schema);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
public static ForgeRegistry.EntryOption description(String value) {
|
|
32
|
+
return entry -> entry.description = value;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
public static ForgeRegistry.EntryOption path(String value) {
|
|
36
|
+
return entry -> entry.path = value;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
public static ForgeRegistry.EntryOption method(String value) {
|
|
40
|
+
return entry -> entry.method = value;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
public static ForgeRegistry.EntryOption inputSchema(Object schema) {
|
|
44
|
+
return entry -> entry.inputSchema = schema;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
public static ForgeRegistry.EntryOption outputSchema(Object schema) {
|
|
48
|
+
return entry -> entry.outputSchema = schema;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
public static ForgeRegistry.EntryOption policy(String value) {
|
|
52
|
+
return entry -> entry.policy = value;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
public static ForgeRegistry.EntryOption tenantScoped(boolean value) {
|
|
56
|
+
return entry -> entry.tenantScoped = value;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
public static ForgeRegistry.EntryOption transaction(TransactionMode value) {
|
|
60
|
+
return entry -> entry.transaction = value.value();
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
public static ForgeRegistry.EntryOption risk(Risk value) {
|
|
64
|
+
return entry -> entry.risk = value.value();
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
public static ForgeRegistry.EntryOption needsApproval(boolean value) {
|
|
68
|
+
return entry -> entry.needsApproval = value;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
public static ForgeRegistry.EntryOption effects(String... values) {
|
|
72
|
+
return entry -> entry.effects = List.copyOf(Arrays.asList(values));
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
public static ForgeRegistry.EntryOption readOnly() {
|
|
76
|
+
return entry -> {
|
|
77
|
+
entry.transaction = TransactionMode.READ_ONLY.value();
|
|
78
|
+
entry.risk = Risk.READ.value();
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
public static <In, Out> ForgeHandler handle(
|
|
83
|
+
Class<In> inputClass,
|
|
84
|
+
TypedForgeHandler<In, Out> handler
|
|
85
|
+
) {
|
|
86
|
+
return (context, rawArgs) -> {
|
|
87
|
+
JsonNode args = rawArgs == null || rawArgs.isNull()
|
|
88
|
+
? Json.MAPPER.createObjectNode()
|
|
89
|
+
: rawArgs;
|
|
90
|
+
In input = Json.MAPPER.treeToValue(args, inputClass);
|
|
91
|
+
return handler.handle(context, input);
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
package dev.forgeos.adapter;
|
|
2
|
-
|
|
3
|
-
public record ForgeCall(String service, String entry, String kind, String traceId) {
|
|
4
|
-
public ForgeCall withDefaults(String serviceName, String entryName, String entryKind, String fallbackTraceId) {
|
|
5
|
-
return new ForgeCall(
|
|
6
|
-
service == null || service.isBlank() ? serviceName : service,
|
|
7
|
-
entry == null || entry.isBlank() ? entryName : entry,
|
|
8
|
-
kind == null || kind.isBlank() ? entryKind : kind,
|
|
9
|
-
traceId == null || traceId.isBlank() ? fallbackTraceId : traceId
|
|
10
|
-
);
|
|
11
|
-
}
|
|
12
|
-
}
|
|
1
|
+
package dev.forgeos.adapter;
|
|
2
|
+
|
|
3
|
+
public record ForgeCall(String service, String entry, String kind, String traceId) {
|
|
4
|
+
public ForgeCall withDefaults(String serviceName, String entryName, String entryKind, String fallbackTraceId) {
|
|
5
|
+
return new ForgeCall(
|
|
6
|
+
service == null || service.isBlank() ? serviceName : service,
|
|
7
|
+
entry == null || entry.isBlank() ? entryName : entry,
|
|
8
|
+
kind == null || kind.isBlank() ? entryKind : kind,
|
|
9
|
+
traceId == null || traceId.isBlank() ? fallbackTraceId : traceId
|
|
10
|
+
);
|
|
11
|
+
}
|
|
12
|
+
}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
package dev.forgeos.adapter;
|
|
2
|
-
|
|
3
|
-
import java.util.List;
|
|
4
|
-
import java.util.Map;
|
|
5
|
-
|
|
6
|
-
public record ForgeContext(
|
|
7
|
-
Auth auth,
|
|
8
|
-
ForgeCall forge,
|
|
9
|
-
Map<String, List<String>> headers
|
|
10
|
-
) {
|
|
11
|
-
}
|
|
1
|
+
package dev.forgeos.adapter;
|
|
2
|
+
|
|
3
|
+
import java.util.List;
|
|
4
|
+
import java.util.Map;
|
|
5
|
+
|
|
6
|
+
public record ForgeContext(
|
|
7
|
+
Auth auth,
|
|
8
|
+
ForgeCall forge,
|
|
9
|
+
Map<String, List<String>> headers
|
|
10
|
+
) {
|
|
11
|
+
}
|