forgeos 0.1.0-alpha.7 → 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.
Files changed (185) hide show
  1. package/AGENTS.md +1 -1
  2. package/CHANGELOG.md +14 -0
  3. package/adapters/go/README.md +23 -0
  4. package/adapters/go/go.mod +3 -0
  5. package/adapters/go/http.go +149 -0
  6. package/adapters/go/registry.go +234 -0
  7. package/adapters/go/types.go +136 -0
  8. package/docs/changelog.md +82 -0
  9. package/docs/forge-protocol.md +155 -0
  10. package/examples/go-billing/go.mod +7 -0
  11. package/examples/go-billing/main.go +120 -0
  12. package/package.json +5 -1
  13. package/schemas/forge-manifest.schema.json +57 -0
  14. package/src/forge/_generated/actionSubscriptions.json +2 -2
  15. package/src/forge/_generated/actionSubscriptions.ts +3 -3
  16. package/src/forge/_generated/agentAdapterManifest.json +2 -2
  17. package/src/forge/_generated/agentAdapterManifest.ts +3 -3
  18. package/src/forge/_generated/agentContract.json +2 -2
  19. package/src/forge/_generated/agentContract.ts +5 -2
  20. package/src/forge/_generated/agentQuickstart.md +1 -1
  21. package/src/forge/_generated/agentTools.json +2 -2
  22. package/src/forge/_generated/agentTools.md +1 -1
  23. package/src/forge/_generated/agentTools.ts +2 -2
  24. package/src/forge/_generated/aiContext.ts +1 -1
  25. package/src/forge/_generated/aiModels.json +1 -1
  26. package/src/forge/_generated/aiModels.ts +1 -1
  27. package/src/forge/_generated/aiProviders.json +1 -1
  28. package/src/forge/_generated/aiProviders.ts +1 -1
  29. package/src/forge/_generated/aiRegistry.json +2 -2
  30. package/src/forge/_generated/aiRegistry.ts +3 -3
  31. package/src/forge/_generated/api.json +2 -2
  32. package/src/forge/_generated/api.ts +7 -2
  33. package/src/forge/_generated/appGraph.json +2 -2
  34. package/src/forge/_generated/appGraph.ts +661 -254
  35. package/src/forge/_generated/appMap.md +1 -1
  36. package/src/forge/_generated/artifactManifest.json +2 -2
  37. package/src/forge/_generated/artifactManifest.ts +2 -2
  38. package/src/forge/_generated/authClaims.json +1 -1
  39. package/src/forge/_generated/authClaims.ts +1 -1
  40. package/src/forge/_generated/authConfig.json +1 -1
  41. package/src/forge/_generated/authConfig.ts +1 -1
  42. package/src/forge/_generated/authContext.ts +1 -1
  43. package/src/forge/_generated/authRegistry.json +1 -1
  44. package/src/forge/_generated/authRegistry.ts +1 -1
  45. package/src/forge/_generated/buildInfo.json +2 -2
  46. package/src/forge/_generated/buildInfo.ts +4 -4
  47. package/src/forge/_generated/capabilityMap.json +2 -2
  48. package/src/forge/_generated/capabilityMap.md +1 -1
  49. package/src/forge/_generated/capabilityMap.ts +2 -2
  50. package/src/forge/_generated/client.ts +88 -1
  51. package/src/forge/_generated/clientApi.ts +2 -1
  52. package/src/forge/_generated/clientManifest.json +2 -2
  53. package/src/forge/_generated/clientManifest.ts +6 -4
  54. package/src/forge/_generated/clientTypes.ts +19 -1
  55. package/src/forge/_generated/configRegistry.json +1 -1
  56. package/src/forge/_generated/configRegistry.ts +1 -1
  57. package/src/forge/_generated/dataGraph.json +2 -2
  58. package/src/forge/_generated/dataGraph.ts +3 -3
  59. package/src/forge/_generated/db.json +1 -1
  60. package/src/forge/_generated/db.ts +1 -1
  61. package/src/forge/_generated/dbSecurityManifest.json +1 -1
  62. package/src/forge/_generated/dbSecurityManifest.ts +1 -1
  63. package/src/forge/_generated/dbSessionContext.json +1 -1
  64. package/src/forge/_generated/dbSessionContext.ts +1 -1
  65. package/src/forge/_generated/deployManifest.json +2 -2
  66. package/src/forge/_generated/deployManifest.ts +7 -7
  67. package/src/forge/_generated/devManifest.json +2 -2
  68. package/src/forge/_generated/devManifest.ts +3 -3
  69. package/src/forge/_generated/envSchema.json +1 -1
  70. package/src/forge/_generated/envSchema.ts +1 -1
  71. package/src/forge/_generated/externalServices.json +2 -0
  72. package/src/forge/_generated/externalServices.ts +9 -0
  73. package/src/forge/_generated/frontendGraph.json +1 -1
  74. package/src/forge/_generated/frontendGraph.ts +1 -1
  75. package/src/forge/_generated/importGuards.json +1 -1
  76. package/src/forge/_generated/importGuards.ts +1 -1
  77. package/src/forge/_generated/index.ts +2 -1
  78. package/src/forge/_generated/liveProductionManifest.json +1 -1
  79. package/src/forge/_generated/liveProductionManifest.ts +1 -1
  80. package/src/forge/_generated/liveProtocol.json +1 -1
  81. package/src/forge/_generated/liveProtocol.ts +1 -1
  82. package/src/forge/_generated/liveQueryRegistry.json +2 -2
  83. package/src/forge/_generated/liveQueryRegistry.ts +3 -3
  84. package/src/forge/_generated/liveTransportConfig.json +1 -1
  85. package/src/forge/_generated/liveTransportConfig.ts +1 -1
  86. package/src/forge/_generated/makeRegistry.json +2 -2
  87. package/src/forge/_generated/makeRegistry.ts +2 -2
  88. package/src/forge/_generated/makeTemplates.json +1 -1
  89. package/src/forge/_generated/makeTemplates.ts +1 -1
  90. package/src/forge/_generated/mockMap.json +1 -1
  91. package/src/forge/_generated/mockMap.ts +1 -1
  92. package/src/forge/_generated/operationPlaybooks.md +1 -1
  93. package/src/forge/_generated/packageGraph.json +2 -2
  94. package/src/forge/_generated/packageGraph.ts +2 -2
  95. package/src/forge/_generated/packageUpgradeRegistry.json +2 -2
  96. package/src/forge/_generated/packageUpgradeRegistry.ts +2 -2
  97. package/src/forge/_generated/permissionMatrix.json +2 -2
  98. package/src/forge/_generated/permissionMatrix.ts +3 -3
  99. package/src/forge/_generated/policyRegistry.json +2 -2
  100. package/src/forge/_generated/policyRegistry.ts +3 -3
  101. package/src/forge/_generated/queryRegistry.json +2 -2
  102. package/src/forge/_generated/queryRegistry.ts +3 -3
  103. package/src/forge/_generated/react.d.ts +1 -1
  104. package/src/forge/_generated/react.ts +1 -1
  105. package/src/forge/_generated/reactManifest.json +2 -2
  106. package/src/forge/_generated/reactManifest.ts +3 -3
  107. package/src/forge/_generated/releaseManifest.json +2 -2
  108. package/src/forge/_generated/releaseManifest.ts +3 -3
  109. package/src/forge/_generated/rlsPolicies.json +1 -1
  110. package/src/forge/_generated/rlsPolicies.sql +1 -1
  111. package/src/forge/_generated/rlsPolicies.ts +1 -1
  112. package/src/forge/_generated/runtimeGraph.json +2 -2
  113. package/src/forge/_generated/runtimeGraph.ts +3 -3
  114. package/src/forge/_generated/runtimeMatrix.json +1 -1
  115. package/src/forge/_generated/runtimeMatrix.ts +1 -1
  116. package/src/forge/_generated/runtimeRegistry.ts +1 -1
  117. package/src/forge/_generated/runtimeRules.md +1 -1
  118. package/src/forge/_generated/secretRegistry.json +1 -1
  119. package/src/forge/_generated/secretRegistry.ts +1 -1
  120. package/src/forge/_generated/secretsContext.ts +1 -1
  121. package/src/forge/_generated/serverApi.ts +2 -1
  122. package/src/forge/_generated/sourceMapManifest.json +2 -2
  123. package/src/forge/_generated/sourceMapManifest.ts +2 -2
  124. package/src/forge/_generated/sqlPlan.json +1 -1
  125. package/src/forge/_generated/sqlPlan.ts +1 -1
  126. package/src/forge/_generated/subscriptionManifest.json +2 -2
  127. package/src/forge/_generated/subscriptionManifest.ts +3 -3
  128. package/src/forge/_generated/symbolicationManifest.json +2 -2
  129. package/src/forge/_generated/symbolicationManifest.ts +2 -2
  130. package/src/forge/_generated/telemetryRegistry.json +2 -2
  131. package/src/forge/_generated/telemetryRegistry.ts +3 -3
  132. package/src/forge/_generated/telemetrySinks.json +2 -2
  133. package/src/forge/_generated/telemetrySinks.ts +2 -2
  134. package/src/forge/_generated/tenantScope.json +2 -2
  135. package/src/forge/_generated/tenantScope.ts +3 -3
  136. package/src/forge/_generated/testGraph.json +2 -2
  137. package/src/forge/_generated/testGraph.ts +57 -3
  138. package/src/forge/_generated/testPlanRegistry.json +2 -2
  139. package/src/forge/_generated/testPlanRegistry.ts +2 -2
  140. package/src/forge/_generated/uiRoutes.json +1 -1
  141. package/src/forge/_generated/uiRoutes.ts +1 -1
  142. package/src/forge/_generated/uiScenarios.json +1 -1
  143. package/src/forge/_generated/uiScenarios.ts +1 -1
  144. package/src/forge/_generated/uiTestManifest.json +2 -2
  145. package/src/forge/_generated/uiTestManifest.ts +2 -2
  146. package/src/forge/_generated/workflowRegistry.json +2 -2
  147. package/src/forge/_generated/workflowRegistry.ts +3 -3
  148. package/src/forge/_generated/workflowSubscriptions.json +2 -2
  149. package/src/forge/_generated/workflowSubscriptions.ts +3 -3
  150. package/src/forge/bench.ts +248 -0
  151. package/src/forge/cli/ai.ts +16 -1
  152. package/src/forge/cli/build.ts +1 -1
  153. package/src/forge/cli/commands.ts +118 -0
  154. package/src/forge/cli/main.ts +3 -1
  155. package/src/forge/cli/parse.ts +84 -0
  156. package/src/forge/cli/run.ts +41 -0
  157. package/src/forge/cli/verify.ts +201 -24
  158. package/src/forge/compiler/agent-contract/build.ts +121 -7
  159. package/src/forge/compiler/agent-contract/types.ts +30 -1
  160. package/src/forge/compiler/api-surface/build.ts +47 -0
  161. package/src/forge/compiler/app-graph/build.ts +33 -5
  162. package/src/forge/compiler/app-graph/module-graph.ts +73 -78
  163. package/src/forge/compiler/app-graph/parser.ts +24 -24
  164. package/src/forge/compiler/app-graph/profile.ts +26 -0
  165. package/src/forge/compiler/classifier/capabilities.ts +3 -2
  166. package/src/forge/compiler/classifier/classify.ts +32 -8
  167. package/src/forge/compiler/classifier/secrets.ts +3 -2
  168. package/src/forge/compiler/classifier/signals.ts +91 -1
  169. package/src/forge/compiler/client-sdk/build-manifest.ts +4 -0
  170. package/src/forge/compiler/client-sdk/render-client.ts +105 -0
  171. package/src/forge/compiler/diagnostics/codes.ts +12 -0
  172. package/src/forge/compiler/external-manifest/registry.ts +204 -0
  173. package/src/forge/compiler/external-manifest/types.ts +89 -0
  174. package/src/forge/compiler/external-manifest/validate.ts +335 -0
  175. package/src/forge/compiler/orchestrator/plan-profile.ts +23 -0
  176. package/src/forge/compiler/orchestrator/plan.ts +52 -11
  177. package/src/forge/compiler/orchestrator/profile.ts +65 -0
  178. package/src/forge/compiler/orchestrator/run.ts +97 -31
  179. package/src/forge/compiler/orchestrator/serialize.ts +13 -6
  180. package/src/forge/compiler/policy-registry/build.ts +44 -1
  181. package/src/forge/compiler/test-graph/build.ts +11 -3
  182. package/src/forge/compiler/types/cli.ts +3 -0
  183. package/src/forge/dev/server.ts +68 -0
  184. package/src/forge/runtime/external/bridge.ts +553 -0
  185. 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,7 @@
1
+ module github.com/Stahldavid/forge/examples/go-billing
2
+
3
+ go 1.22
4
+
5
+ require github.com/Stahldavid/forge/adapters/go v0.0.0
6
+
7
+ replace github.com/Stahldavid/forge/adapters/go => ../../adapters/go
@@ -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.7",
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.7 input=4fe172e9300b7393cef5b37bfef064fb779c42d420e54af7e07045ad230330a9 content=96f161634b46dc482e7c224a891236df209c07dce51ed22342816b22ef584b8c
2
- {"analyzerVersion":"0.1.0","byEvent":{},"diagnostics":[],"generatorVersion":"0.1.0-alpha.7","inputHash":"0b8ff4b3a8f4274274c8d35b86fbcc35601a900d30032359ef872626a1a0799d","schemaVersion":"0.1.0","subscriptions":[]}
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.7 input=4fe172e9300b7393cef5b37bfef064fb779c42d420e54af7e07045ad230330a9 content=ab6f84b9a2e3beeeb574e3a6f4b3dfcaa28196823a4d2cc8b186b7c63312c19d
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",
7
- "inputHash": "0b8ff4b3a8f4274274c8d35b86fbcc35601a900d30032359ef872626a1a0799d",
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.7 input=4fe172e9300b7393cef5b37bfef064fb779c42d420e54af7e07045ad230330a9 content=6b1cb26a76e2390a0a22565b81b6a4f2a7399ab30d2648e138a09378cd332f73
2
- {"generatorVersion":"0.1.0-alpha.7","schemaVersion":"0.1.0","sourceHash":"sha256:01518191a5f8679c59902da645fe49a0ffad2dceb01ab2f7093ace6fa79ef579","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
+ // @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.7 input=4fe172e9300b7393cef5b37bfef064fb779c42d420e54af7e07045ad230330a9 content=6a570cfb940de0ebe0cc3a15e3788ea6845b98b4a1a083d3b9e5c9722eb72463
1
+ // @forge-generated generator=0.1.0-alpha.9 input=f9063a03ef56a20a89f1418951bede5ab5ed87d800bb0512a0d0445309642a36 content=f36afd529102056d863ddd230ef5782084a29e1fdfa2863a7c02668e9f1798d3
2
2
  export const agentAdapterManifest = {
3
- "generatorVersion": "0.1.0-alpha.7",
3
+ "generatorVersion": "0.1.0-alpha.9",
4
4
  "schemaVersion": "0.1.0",
5
- "sourceHash": "sha256:01518191a5f8679c59902da645fe49a0ffad2dceb01ab2f7093ace6fa79ef579",
5
+ "sourceHash": "sha256:44ca56cd05d6dc2a8f4845990c0ecd6d54d7a209e04f9bcf190656f0da09ea7a",
6
6
  "targets": [
7
7
  {
8
8
  "adapterVersion": "agent-adapter-0.1.0",