forgeos 0.1.0-alpha.8 → 0.1.0-alpha.9
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/AGENTS.md +1 -1
- package/CHANGELOG.md +8 -0
- package/adapters/go/README.md +23 -0
- package/adapters/go/go.mod +3 -0
- package/adapters/go/http.go +149 -0
- package/adapters/go/registry.go +234 -0
- package/adapters/go/types.go +136 -0
- package/docs/changelog.md +82 -0
- package/docs/forge-protocol.md +155 -0
- package/examples/go-billing/go.mod +7 -0
- package/examples/go-billing/main.go +120 -0
- package/package.json +5 -1
- package/schemas/forge-manifest.schema.json +57 -0
- package/src/forge/_generated/actionSubscriptions.json +2 -2
- package/src/forge/_generated/actionSubscriptions.ts +3 -3
- package/src/forge/_generated/agentAdapterManifest.json +2 -2
- package/src/forge/_generated/agentAdapterManifest.ts +3 -3
- package/src/forge/_generated/agentContract.json +2 -2
- package/src/forge/_generated/agentContract.ts +5 -2
- package/src/forge/_generated/agentQuickstart.md +1 -1
- package/src/forge/_generated/agentTools.json +2 -2
- package/src/forge/_generated/agentTools.md +1 -1
- package/src/forge/_generated/agentTools.ts +2 -2
- package/src/forge/_generated/aiContext.ts +1 -1
- package/src/forge/_generated/aiModels.json +1 -1
- package/src/forge/_generated/aiModels.ts +1 -1
- package/src/forge/_generated/aiProviders.json +1 -1
- package/src/forge/_generated/aiProviders.ts +1 -1
- package/src/forge/_generated/aiRegistry.json +2 -2
- package/src/forge/_generated/aiRegistry.ts +3 -3
- package/src/forge/_generated/api.json +2 -2
- package/src/forge/_generated/api.ts +7 -2
- package/src/forge/_generated/appGraph.json +2 -2
- package/src/forge/_generated/appGraph.ts +661 -254
- package/src/forge/_generated/appMap.md +1 -1
- package/src/forge/_generated/artifactManifest.json +2 -2
- package/src/forge/_generated/artifactManifest.ts +2 -2
- package/src/forge/_generated/authClaims.json +1 -1
- package/src/forge/_generated/authClaims.ts +1 -1
- package/src/forge/_generated/authConfig.json +1 -1
- package/src/forge/_generated/authConfig.ts +1 -1
- package/src/forge/_generated/authContext.ts +1 -1
- package/src/forge/_generated/authRegistry.json +1 -1
- package/src/forge/_generated/authRegistry.ts +1 -1
- package/src/forge/_generated/buildInfo.json +2 -2
- package/src/forge/_generated/buildInfo.ts +4 -4
- package/src/forge/_generated/capabilityMap.json +2 -2
- package/src/forge/_generated/capabilityMap.md +1 -1
- package/src/forge/_generated/capabilityMap.ts +2 -2
- package/src/forge/_generated/client.ts +88 -1
- package/src/forge/_generated/clientApi.ts +2 -1
- package/src/forge/_generated/clientManifest.json +2 -2
- package/src/forge/_generated/clientManifest.ts +6 -4
- package/src/forge/_generated/clientTypes.ts +19 -1
- package/src/forge/_generated/configRegistry.json +1 -1
- package/src/forge/_generated/configRegistry.ts +1 -1
- package/src/forge/_generated/dataGraph.json +2 -2
- package/src/forge/_generated/dataGraph.ts +3 -3
- package/src/forge/_generated/db.json +1 -1
- package/src/forge/_generated/db.ts +1 -1
- package/src/forge/_generated/dbSecurityManifest.json +1 -1
- package/src/forge/_generated/dbSecurityManifest.ts +1 -1
- package/src/forge/_generated/dbSessionContext.json +1 -1
- package/src/forge/_generated/dbSessionContext.ts +1 -1
- package/src/forge/_generated/deployManifest.json +2 -2
- package/src/forge/_generated/deployManifest.ts +7 -7
- package/src/forge/_generated/devManifest.json +2 -2
- package/src/forge/_generated/devManifest.ts +3 -3
- package/src/forge/_generated/envSchema.json +1 -1
- package/src/forge/_generated/envSchema.ts +1 -1
- package/src/forge/_generated/externalServices.json +2 -0
- package/src/forge/_generated/externalServices.ts +9 -0
- package/src/forge/_generated/frontendGraph.json +1 -1
- package/src/forge/_generated/frontendGraph.ts +1 -1
- package/src/forge/_generated/importGuards.json +1 -1
- package/src/forge/_generated/importGuards.ts +1 -1
- package/src/forge/_generated/index.ts +2 -1
- package/src/forge/_generated/liveProductionManifest.json +1 -1
- package/src/forge/_generated/liveProductionManifest.ts +1 -1
- package/src/forge/_generated/liveProtocol.json +1 -1
- package/src/forge/_generated/liveProtocol.ts +1 -1
- package/src/forge/_generated/liveQueryRegistry.json +2 -2
- package/src/forge/_generated/liveQueryRegistry.ts +3 -3
- package/src/forge/_generated/liveTransportConfig.json +1 -1
- package/src/forge/_generated/liveTransportConfig.ts +1 -1
- package/src/forge/_generated/makeRegistry.json +2 -2
- package/src/forge/_generated/makeRegistry.ts +2 -2
- package/src/forge/_generated/makeTemplates.json +1 -1
- package/src/forge/_generated/makeTemplates.ts +1 -1
- package/src/forge/_generated/mockMap.json +1 -1
- package/src/forge/_generated/mockMap.ts +1 -1
- package/src/forge/_generated/operationPlaybooks.md +1 -1
- package/src/forge/_generated/packageGraph.json +2 -2
- package/src/forge/_generated/packageGraph.ts +2 -2
- package/src/forge/_generated/packageUpgradeRegistry.json +2 -2
- package/src/forge/_generated/packageUpgradeRegistry.ts +2 -2
- package/src/forge/_generated/permissionMatrix.json +2 -2
- package/src/forge/_generated/permissionMatrix.ts +3 -3
- package/src/forge/_generated/policyRegistry.json +2 -2
- package/src/forge/_generated/policyRegistry.ts +3 -3
- package/src/forge/_generated/queryRegistry.json +2 -2
- package/src/forge/_generated/queryRegistry.ts +3 -3
- package/src/forge/_generated/react.d.ts +1 -1
- package/src/forge/_generated/react.ts +1 -1
- package/src/forge/_generated/reactManifest.json +2 -2
- package/src/forge/_generated/reactManifest.ts +3 -3
- package/src/forge/_generated/releaseManifest.json +2 -2
- package/src/forge/_generated/releaseManifest.ts +3 -3
- package/src/forge/_generated/rlsPolicies.json +1 -1
- package/src/forge/_generated/rlsPolicies.sql +1 -1
- package/src/forge/_generated/rlsPolicies.ts +1 -1
- package/src/forge/_generated/runtimeGraph.json +2 -2
- package/src/forge/_generated/runtimeGraph.ts +3 -3
- package/src/forge/_generated/runtimeMatrix.json +1 -1
- package/src/forge/_generated/runtimeMatrix.ts +1 -1
- package/src/forge/_generated/runtimeRegistry.ts +1 -1
- package/src/forge/_generated/runtimeRules.md +1 -1
- package/src/forge/_generated/secretRegistry.json +1 -1
- package/src/forge/_generated/secretRegistry.ts +1 -1
- package/src/forge/_generated/secretsContext.ts +1 -1
- package/src/forge/_generated/serverApi.ts +2 -1
- package/src/forge/_generated/sourceMapManifest.json +2 -2
- package/src/forge/_generated/sourceMapManifest.ts +2 -2
- package/src/forge/_generated/sqlPlan.json +1 -1
- package/src/forge/_generated/sqlPlan.ts +1 -1
- package/src/forge/_generated/subscriptionManifest.json +2 -2
- package/src/forge/_generated/subscriptionManifest.ts +3 -3
- package/src/forge/_generated/symbolicationManifest.json +2 -2
- package/src/forge/_generated/symbolicationManifest.ts +2 -2
- package/src/forge/_generated/telemetryRegistry.json +2 -2
- package/src/forge/_generated/telemetryRegistry.ts +3 -3
- package/src/forge/_generated/telemetrySinks.json +2 -2
- package/src/forge/_generated/telemetrySinks.ts +2 -2
- package/src/forge/_generated/tenantScope.json +2 -2
- package/src/forge/_generated/tenantScope.ts +3 -3
- package/src/forge/_generated/testGraph.json +2 -2
- package/src/forge/_generated/testGraph.ts +57 -3
- package/src/forge/_generated/testPlanRegistry.json +2 -2
- package/src/forge/_generated/testPlanRegistry.ts +2 -2
- package/src/forge/_generated/uiRoutes.json +1 -1
- package/src/forge/_generated/uiRoutes.ts +1 -1
- package/src/forge/_generated/uiScenarios.json +1 -1
- package/src/forge/_generated/uiScenarios.ts +1 -1
- package/src/forge/_generated/uiTestManifest.json +2 -2
- package/src/forge/_generated/uiTestManifest.ts +2 -2
- package/src/forge/_generated/workflowRegistry.json +2 -2
- package/src/forge/_generated/workflowRegistry.ts +3 -3
- package/src/forge/_generated/workflowSubscriptions.json +2 -2
- package/src/forge/_generated/workflowSubscriptions.ts +3 -3
- package/src/forge/bench.ts +248 -0
- package/src/forge/cli/ai.ts +16 -1
- package/src/forge/cli/build.ts +1 -1
- package/src/forge/cli/commands.ts +118 -0
- package/src/forge/cli/main.ts +3 -1
- package/src/forge/cli/parse.ts +84 -0
- package/src/forge/cli/run.ts +41 -0
- package/src/forge/cli/verify.ts +201 -24
- package/src/forge/compiler/agent-contract/build.ts +121 -7
- package/src/forge/compiler/agent-contract/types.ts +30 -1
- package/src/forge/compiler/api-surface/build.ts +47 -0
- package/src/forge/compiler/app-graph/build.ts +33 -5
- package/src/forge/compiler/app-graph/module-graph.ts +73 -78
- package/src/forge/compiler/app-graph/parser.ts +24 -24
- package/src/forge/compiler/app-graph/profile.ts +26 -0
- package/src/forge/compiler/classifier/capabilities.ts +3 -2
- package/src/forge/compiler/classifier/classify.ts +32 -8
- package/src/forge/compiler/classifier/secrets.ts +3 -2
- package/src/forge/compiler/classifier/signals.ts +91 -1
- package/src/forge/compiler/client-sdk/build-manifest.ts +4 -0
- package/src/forge/compiler/client-sdk/render-client.ts +105 -0
- package/src/forge/compiler/diagnostics/codes.ts +12 -0
- package/src/forge/compiler/external-manifest/registry.ts +204 -0
- package/src/forge/compiler/external-manifest/types.ts +89 -0
- package/src/forge/compiler/external-manifest/validate.ts +335 -0
- package/src/forge/compiler/orchestrator/plan-profile.ts +23 -0
- package/src/forge/compiler/orchestrator/plan.ts +52 -11
- package/src/forge/compiler/orchestrator/profile.ts +65 -0
- package/src/forge/compiler/orchestrator/run.ts +97 -31
- package/src/forge/compiler/orchestrator/serialize.ts +13 -6
- package/src/forge/compiler/policy-registry/build.ts +44 -1
- package/src/forge/compiler/test-graph/build.ts +11 -3
- package/src/forge/compiler/types/cli.ts +3 -0
- package/src/forge/dev/server.ts +68 -0
- package/src/forge/runtime/external/bridge.ts +553 -0
- package/src/forge/version.ts +1 -1
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
# Forge External Runtime Protocol
|
|
2
|
+
|
|
3
|
+
Forge apps can import and call services written outside TypeScript through a
|
|
4
|
+
`forge.manifest.json` compatible manifest. The manifest is the source of truth
|
|
5
|
+
for external commands and queries:
|
|
6
|
+
|
|
7
|
+
- validate and import external service metadata;
|
|
8
|
+
- expose external services in generated inspect/API/agent artifacts;
|
|
9
|
+
- execute external commands and queries through the Forge runtime bridge.
|
|
10
|
+
|
|
11
|
+
This lets Java/Spring, Go, Rust, C#, Python, and other runtimes join the Forge
|
|
12
|
+
contract without requiring the Forge compiler to parse every language AST.
|
|
13
|
+
|
|
14
|
+
## Manifest
|
|
15
|
+
|
|
16
|
+
External services publish JSON that matches
|
|
17
|
+
`schemas/forge-manifest.schema.json`.
|
|
18
|
+
|
|
19
|
+
```json
|
|
20
|
+
{
|
|
21
|
+
"forgeProtocol": "1.0",
|
|
22
|
+
"language": "java",
|
|
23
|
+
"framework": "spring-boot",
|
|
24
|
+
"service": {
|
|
25
|
+
"name": "billing",
|
|
26
|
+
"transport": "http",
|
|
27
|
+
"baseUrl": "http://localhost:8080",
|
|
28
|
+
"health": "/actuator/health"
|
|
29
|
+
},
|
|
30
|
+
"entries": [
|
|
31
|
+
{
|
|
32
|
+
"name": "createInvoice",
|
|
33
|
+
"kind": "command",
|
|
34
|
+
"path": "/invoices",
|
|
35
|
+
"policy": "billing.write",
|
|
36
|
+
"transaction": "external-managed",
|
|
37
|
+
"risk": "write",
|
|
38
|
+
"needsApproval": true,
|
|
39
|
+
"effects": ["invoice.created"]
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
"name": "listInvoices",
|
|
43
|
+
"kind": "query",
|
|
44
|
+
"path": "/invoices",
|
|
45
|
+
"policy": "billing.read",
|
|
46
|
+
"transaction": "read-only",
|
|
47
|
+
"risk": "read",
|
|
48
|
+
"tenantScoped": true
|
|
49
|
+
}
|
|
50
|
+
]
|
|
51
|
+
}
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
Queries must stay read-only. Commands can declare write, destructive, or
|
|
55
|
+
external risk. Policies are metadata until the runtime bridge enforces them for
|
|
56
|
+
the external transport.
|
|
57
|
+
|
|
58
|
+
## CLI
|
|
59
|
+
|
|
60
|
+
Validate a manifest:
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
forge manifest validate ./forge.manifest.json --json
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
Import or update a service in the app registry:
|
|
67
|
+
|
|
68
|
+
```bash
|
|
69
|
+
forge manifest import ./forge.manifest.json --json
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
Imports are stored in `.forge/external-manifests.json`. A root
|
|
73
|
+
`forge.manifest.json` is also discovered automatically for single-service
|
|
74
|
+
experiments.
|
|
75
|
+
|
|
76
|
+
## Generated Artifacts
|
|
77
|
+
|
|
78
|
+
After `forge generate`, external services are emitted to:
|
|
79
|
+
|
|
80
|
+
- `src/forge/_generated/externalServices.json`
|
|
81
|
+
- `src/forge/_generated/api.json` under `external`
|
|
82
|
+
- `src/forge/_generated/agentContract.json`
|
|
83
|
+
- `src/forge/_generated/agentTools.json`
|
|
84
|
+
- `src/forge/_generated/capabilityMap.json`
|
|
85
|
+
|
|
86
|
+
External auto-tools use `execution: "external-runtime-endpoint"`. Forge exposes
|
|
87
|
+
runtime bridge endpoints for these tools:
|
|
88
|
+
|
|
89
|
+
```text
|
|
90
|
+
POST /external/:service/commands/:name
|
|
91
|
+
POST /external/:service/queries/:name
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
The generated client exposes the same bridge through:
|
|
95
|
+
|
|
96
|
+
```ts
|
|
97
|
+
await client.externalCommand("billing.createInvoice", args);
|
|
98
|
+
await client.externalQuery(api.external.queries["billing.listInvoices"], args);
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
Command entries can also be invoked from the CLI with a qualified external
|
|
102
|
+
name:
|
|
103
|
+
|
|
104
|
+
```bash
|
|
105
|
+
forge run billing.createInvoice --args '{"title":"Invoice"}'
|
|
106
|
+
forge query billing.listInvoices --args '{}'
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
## Runtime Bridge
|
|
110
|
+
|
|
111
|
+
Forge accepts the normal JSON body:
|
|
112
|
+
|
|
113
|
+
```json
|
|
114
|
+
{ "args": {} }
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
For HTTP services, Forge forwards a JSON envelope:
|
|
118
|
+
|
|
119
|
+
```json
|
|
120
|
+
{
|
|
121
|
+
"args": {},
|
|
122
|
+
"auth": { "kind": "user", "userId": "u1", "tenantId": "t1", "role": "member" },
|
|
123
|
+
"forge": {
|
|
124
|
+
"service": "billing",
|
|
125
|
+
"entry": "createInvoice",
|
|
126
|
+
"kind": "command",
|
|
127
|
+
"traceId": "trace_..."
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
Forge also forwards runtime headers such as `x-forge-trace-id`,
|
|
133
|
+
`x-forge-auth-kind`, `x-forge-user-id`, `x-forge-tenant-id`, `x-forge-role`,
|
|
134
|
+
and the inbound `Authorization` header when present.
|
|
135
|
+
|
|
136
|
+
External services can return either a Forge envelope:
|
|
137
|
+
|
|
138
|
+
```json
|
|
139
|
+
{ "ok": true, "result": { "id": "inv_1" } }
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
or a raw JSON value, which Forge treats as the result for successful HTTP
|
|
143
|
+
responses. Error envelopes should include `ok: false`, `diagnostics`, or
|
|
144
|
+
`error`.
|
|
145
|
+
|
|
146
|
+
Supported runtime transports:
|
|
147
|
+
|
|
148
|
+
- `http`: calls `service.baseUrl + entry.path`.
|
|
149
|
+
- `stdio`: starts `service.command`, writes the JSON envelope to stdin, and
|
|
150
|
+
reads a JSON envelope or raw JSON result from stdout.
|
|
151
|
+
- `grpc`: accepted in manifests for forward compatibility, but not executable
|
|
152
|
+
by the built-in runtime bridge yet.
|
|
153
|
+
|
|
154
|
+
Manifest `policy` values are added to Forge policy bindings during generation.
|
|
155
|
+
Use a named Forge policy, or `public`, `user`, or `system`.
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
package main
|
|
2
|
+
|
|
3
|
+
import (
|
|
4
|
+
"context"
|
|
5
|
+
"errors"
|
|
6
|
+
"flag"
|
|
7
|
+
"log"
|
|
8
|
+
"net/http"
|
|
9
|
+
"os"
|
|
10
|
+
|
|
11
|
+
forge "github.com/Stahldavid/forge/adapters/go"
|
|
12
|
+
)
|
|
13
|
+
|
|
14
|
+
type CreateInvoiceInput struct {
|
|
15
|
+
Title string `json:"title"`
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
type Invoice struct {
|
|
19
|
+
ID string `json:"id"`
|
|
20
|
+
Title string `json:"title,omitempty"`
|
|
21
|
+
Tenant string `json:"tenant"`
|
|
22
|
+
TraceID string `json:"traceId,omitempty"`
|
|
23
|
+
AuthKind string `json:"authKind,omitempty"`
|
|
24
|
+
UserID string `json:"userId,omitempty"`
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
func main() {
|
|
28
|
+
addr := flag.String("addr", "127.0.0.1:8787", "address for the external billing service")
|
|
29
|
+
baseURL := flag.String("base-url", "", "base URL written into the Forge manifest")
|
|
30
|
+
manifest := flag.Bool("manifest", false, "write forge.manifest.json to stdout and exit")
|
|
31
|
+
flag.Parse()
|
|
32
|
+
|
|
33
|
+
if *baseURL == "" {
|
|
34
|
+
*baseURL = "http://" + *addr
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
app := newBillingApp(*baseURL)
|
|
38
|
+
if *manifest {
|
|
39
|
+
if err := app.WriteManifest(os.Stdout, *baseURL); err != nil {
|
|
40
|
+
log.Fatal(err)
|
|
41
|
+
}
|
|
42
|
+
return
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
log.Printf("go billing external service listening on http://%s", *addr)
|
|
46
|
+
if err := http.ListenAndServe(*addr, app.HTTPHandler()); err != nil {
|
|
47
|
+
log.Fatal(err)
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
func newBillingApp(baseURL string) *forge.Registry {
|
|
52
|
+
app := forge.New("billing",
|
|
53
|
+
forge.Framework("go/net-http"),
|
|
54
|
+
forge.BaseURL(baseURL),
|
|
55
|
+
forge.Health("/health"),
|
|
56
|
+
)
|
|
57
|
+
|
|
58
|
+
app.Command("createInvoice", forge.Handle(createInvoice),
|
|
59
|
+
forge.Description("Create an invoice in the external Go billing service."),
|
|
60
|
+
forge.Policy("billing.manage"),
|
|
61
|
+
forge.TenantScoped(true),
|
|
62
|
+
forge.TransactionMode(forge.TransactionExternalManaged),
|
|
63
|
+
forge.EntryRisk(forge.RiskWrite),
|
|
64
|
+
forge.NeedsApproval(true),
|
|
65
|
+
forge.Effects("invoice.created"),
|
|
66
|
+
forge.InputSchema(forge.Object(map[string]any{
|
|
67
|
+
"title": forge.String(),
|
|
68
|
+
}, "title")),
|
|
69
|
+
forge.OutputSchema(invoiceSchema()),
|
|
70
|
+
)
|
|
71
|
+
|
|
72
|
+
app.Query("listInvoices", forge.Handle(listInvoices),
|
|
73
|
+
forge.Description("List invoices visible to the current tenant."),
|
|
74
|
+
forge.Policy("billing.manage"),
|
|
75
|
+
forge.TenantScoped(true),
|
|
76
|
+
forge.ReadOnly(),
|
|
77
|
+
forge.OutputSchema(forge.Array(invoiceSchema())),
|
|
78
|
+
)
|
|
79
|
+
|
|
80
|
+
return app
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
func createInvoice(ctx context.Context, call *forge.Context, input CreateInvoiceInput) (Invoice, error) {
|
|
84
|
+
if input.Title == "" {
|
|
85
|
+
return Invoice{}, errors.New("title is required")
|
|
86
|
+
}
|
|
87
|
+
if call.Auth.TenantID == "" {
|
|
88
|
+
return Invoice{}, errors.New("tenant id is required")
|
|
89
|
+
}
|
|
90
|
+
return Invoice{
|
|
91
|
+
ID: "inv_go_1",
|
|
92
|
+
Title: input.Title,
|
|
93
|
+
Tenant: call.Auth.TenantID,
|
|
94
|
+
TraceID: call.Forge.TraceID,
|
|
95
|
+
AuthKind: call.Auth.Kind,
|
|
96
|
+
UserID: call.Auth.UserID,
|
|
97
|
+
}, nil
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
func listInvoices(ctx context.Context, call *forge.Context, input struct{}) ([]Invoice, error) {
|
|
101
|
+
if call.Auth.TenantID == "" {
|
|
102
|
+
return nil, errors.New("tenant id is required")
|
|
103
|
+
}
|
|
104
|
+
return []Invoice{{
|
|
105
|
+
ID: "inv_go_1",
|
|
106
|
+
Title: "Go adapter invoice",
|
|
107
|
+
Tenant: call.Auth.TenantID,
|
|
108
|
+
}}, nil
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
func invoiceSchema() forge.Schema {
|
|
112
|
+
return forge.Object(map[string]any{
|
|
113
|
+
"id": forge.String(),
|
|
114
|
+
"title": forge.String(),
|
|
115
|
+
"tenant": forge.String(),
|
|
116
|
+
"traceId": forge.String(),
|
|
117
|
+
"authKind": forge.String(),
|
|
118
|
+
"userId": forge.String(),
|
|
119
|
+
}, "id", "tenant")
|
|
120
|
+
}
|
package/package.json
CHANGED
|
@@ -1,11 +1,15 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "forgeos",
|
|
3
|
-
"version": "0.1.0-alpha.
|
|
3
|
+
"version": "0.1.0-alpha.9",
|
|
4
4
|
"description": "Agent-native application framework and compiler for building Forge apps without a mandatory dashboard.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"files": [
|
|
7
|
+
"adapters/",
|
|
7
8
|
"bin/",
|
|
9
|
+
"docs/forge-protocol.md",
|
|
10
|
+
"examples/go-billing/",
|
|
8
11
|
"packages/eslint-plugin-forge/",
|
|
12
|
+
"schemas/",
|
|
9
13
|
"src/",
|
|
10
14
|
"templates/",
|
|
11
15
|
"README.md",
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://forgeos.dev/schemas/forge-manifest.schema.json",
|
|
4
|
+
"title": "Forge external runtime manifest",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"required": ["forgeProtocol", "language", "service", "entries"],
|
|
7
|
+
"properties": {
|
|
8
|
+
"forgeProtocol": { "const": "1.0" },
|
|
9
|
+
"language": { "type": "string", "minLength": 1 },
|
|
10
|
+
"framework": { "type": "string", "minLength": 1 },
|
|
11
|
+
"service": {
|
|
12
|
+
"type": "object",
|
|
13
|
+
"required": ["name", "transport"],
|
|
14
|
+
"properties": {
|
|
15
|
+
"name": { "type": "string", "minLength": 1 },
|
|
16
|
+
"transport": { "enum": ["http", "grpc", "stdio"] },
|
|
17
|
+
"baseUrl": { "type": "string", "minLength": 1 },
|
|
18
|
+
"command": { "type": "string", "minLength": 1 },
|
|
19
|
+
"health": { "type": "string", "minLength": 1 }
|
|
20
|
+
},
|
|
21
|
+
"additionalProperties": false
|
|
22
|
+
},
|
|
23
|
+
"entries": {
|
|
24
|
+
"type": "array",
|
|
25
|
+
"items": {
|
|
26
|
+
"type": "object",
|
|
27
|
+
"required": ["name", "kind"],
|
|
28
|
+
"properties": {
|
|
29
|
+
"name": { "type": "string", "minLength": 1 },
|
|
30
|
+
"kind": { "enum": ["command", "query"] },
|
|
31
|
+
"description": { "type": "string" },
|
|
32
|
+
"path": { "type": "string", "minLength": 1 },
|
|
33
|
+
"method": { "enum": ["GET", "POST"] },
|
|
34
|
+
"inputSchema": {},
|
|
35
|
+
"outputSchema": {},
|
|
36
|
+
"policy": { "type": "string", "minLength": 1 },
|
|
37
|
+
"tenantScoped": { "type": "boolean" },
|
|
38
|
+
"transaction": {
|
|
39
|
+
"enum": ["read-only", "external-managed", "forge-managed", "saga"]
|
|
40
|
+
},
|
|
41
|
+
"risk": { "enum": ["read", "write", "destructive", "external"] },
|
|
42
|
+
"needsApproval": { "type": "boolean" },
|
|
43
|
+
"effects": {
|
|
44
|
+
"type": "array",
|
|
45
|
+
"items": { "type": "string" }
|
|
46
|
+
}
|
|
47
|
+
},
|
|
48
|
+
"additionalProperties": false
|
|
49
|
+
}
|
|
50
|
+
},
|
|
51
|
+
"schemas": {
|
|
52
|
+
"type": "object",
|
|
53
|
+
"additionalProperties": true
|
|
54
|
+
}
|
|
55
|
+
},
|
|
56
|
+
"additionalProperties": false
|
|
57
|
+
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
// @forge-generated generator=0.1.0-alpha.
|
|
2
|
-
{"analyzerVersion":"0.1.0","byEvent":{},"diagnostics":[],"generatorVersion":"0.1.0-alpha.
|
|
1
|
+
// @forge-generated generator=0.1.0-alpha.9 input=f9063a03ef56a20a89f1418951bede5ab5ed87d800bb0512a0d0445309642a36 content=c8c99213f5084424d71502987d05ae14288f88174ee2c4c9d46d7d5dc3d71d5d
|
|
2
|
+
{"analyzerVersion":"0.1.0","byEvent":{},"diagnostics":[],"generatorVersion":"0.1.0-alpha.9","inputHash":"d32670173917f0bc753936a6605c4345a1a51a9dfd187e3171e5bff881bcef1a","schemaVersion":"0.1.0","subscriptions":[]}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
// @forge-generated generator=0.1.0-alpha.
|
|
1
|
+
// @forge-generated generator=0.1.0-alpha.9 input=f9063a03ef56a20a89f1418951bede5ab5ed87d800bb0512a0d0445309642a36 content=01e5de0cead87f1785ce7afd777c960e141d2f42782db5d9a4ab6b3044353212
|
|
2
2
|
export const actionSubscriptions = {
|
|
3
3
|
"analyzerVersion": "0.1.0",
|
|
4
4
|
"byEvent": {},
|
|
5
5
|
"diagnostics": [],
|
|
6
|
-
"generatorVersion": "0.1.0-alpha.
|
|
7
|
-
"inputHash": "
|
|
6
|
+
"generatorVersion": "0.1.0-alpha.9",
|
|
7
|
+
"inputHash": "d32670173917f0bc753936a6605c4345a1a51a9dfd187e3171e5bff881bcef1a",
|
|
8
8
|
"schemaVersion": "0.1.0",
|
|
9
9
|
"subscriptions": []
|
|
10
10
|
} as const;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
// @forge-generated generator=0.1.0-alpha.
|
|
2
|
-
{"generatorVersion":"0.1.0-alpha.
|
|
1
|
+
// @forge-generated generator=0.1.0-alpha.9 input=f9063a03ef56a20a89f1418951bede5ab5ed87d800bb0512a0d0445309642a36 content=39cfb6cb79d2ae3e0970fd2ba9b0c89810c43765e187c5b2cfe3f26861ccc160
|
|
2
|
+
{"generatorVersion":"0.1.0-alpha.9","schemaVersion":"0.1.0","sourceHash":"sha256:44ca56cd05d6dc2a8f4845990c0ecd6d54d7a209e04f9bcf190656f0da09ea7a","targets":[{"adapterVersion":"agent-adapter-0.1.0","default":true,"files":["AGENTS.md",".forge/agent/context.json",".forge/agent/commands.json",".forge/agent/done-criteria.json",".forge/agent/playbooks/add-command.md",".forge/agent/playbooks/add-query.md",".forge/agent/playbooks/add-livequery.md",".forge/agent/playbooks/add-resource.md",".forge/agent/playbooks/refactor-field.md",".forge/agent/playbooks/fix-policy-denied.md",".forge/agent/playbooks/fix-guard-violation.md",".forge/agent/playbooks/upgrade-package.md",".forge/agent/playbooks/debug-trace.md",".forge/agent/playbooks/frontend-change.md",".forge/agent/playbooks/self-host-check.md"],"formatVersion":"2026-06","name":"generic"},{"adapterVersion":"agent-adapter-0.1.0","files":[".codex/skills/forge-add-command/SKILL.md",".codex/skills/forge-add-resource/SKILL.md",".codex/skills/forge-fix-guard-violation/SKILL.md",".codex/skills/forge-fix-policy-denied/SKILL.md",".codex/skills/forge-upgrade-package/SKILL.md",".codex/skills/forge-debug-trace/SKILL.md",".codex/agents/forge-explorer.toml",".codex/agents/forge-worker.toml",".codex/agents/forge-reviewer.toml",".codex/agents/forge-security.toml"],"formatVersion":"2026-06","name":"codex","optional":true},{"adapterVersion":"agent-adapter-0.1.0","files":[".cursor/rules/forge-runtime.mdc",".cursor/rules/forge-frontend.mdc",".cursor/rules/forge-security.mdc",".cursor/rules/forge-workflow.mdc"],"formatVersion":"2026-06","name":"cursor","optional":true},{"adapterVersion":"agent-adapter-0.1.0","files":["CLAUDE.md",".claude/forge-runtime.md",".claude/forge-playbooks.md",".claude/forge-security.md"],"formatVersion":"2026-06","name":"claude","optional":true}]}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
// @forge-generated generator=0.1.0-alpha.
|
|
1
|
+
// @forge-generated generator=0.1.0-alpha.9 input=f9063a03ef56a20a89f1418951bede5ab5ed87d800bb0512a0d0445309642a36 content=f36afd529102056d863ddd230ef5782084a29e1fdfa2863a7c02668e9f1798d3
|
|
2
2
|
export const agentAdapterManifest = {
|
|
3
|
-
"generatorVersion": "0.1.0-alpha.
|
|
3
|
+
"generatorVersion": "0.1.0-alpha.9",
|
|
4
4
|
"schemaVersion": "0.1.0",
|
|
5
|
-
"sourceHash": "sha256:
|
|
5
|
+
"sourceHash": "sha256:44ca56cd05d6dc2a8f4845990c0ecd6d54d7a209e04f9bcf190656f0da09ea7a",
|
|
6
6
|
"targets": [
|
|
7
7
|
{
|
|
8
8
|
"adapterVersion": "agent-adapter-0.1.0",
|