forgeos 0.1.0-alpha.2 → 0.1.0-alpha.3

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 (163) hide show
  1. package/AGENTS.md +38 -3
  2. package/README.md +6 -5
  3. package/package.json +5 -4
  4. package/src/forge/_generated/actionSubscriptions.json +2 -2
  5. package/src/forge/_generated/actionSubscriptions.ts +3 -3
  6. package/src/forge/_generated/agentAdapterManifest.json +2 -2
  7. package/src/forge/_generated/agentAdapterManifest.ts +3 -3
  8. package/src/forge/_generated/agentContract.json +2 -2
  9. package/src/forge/_generated/agentContract.ts +183 -50
  10. package/src/forge/_generated/agentQuickstart.md +3 -1
  11. package/src/forge/_generated/agentTools.json +2 -0
  12. package/src/forge/_generated/agentTools.md +16 -0
  13. package/src/forge/_generated/agentTools.ts +12 -0
  14. package/src/forge/_generated/aiContext.ts +67 -1
  15. package/src/forge/_generated/aiModels.json +2 -2
  16. package/src/forge/_generated/aiModels.ts +17 -1
  17. package/src/forge/_generated/aiProviders.json +1 -1
  18. package/src/forge/_generated/aiProviders.ts +1 -1
  19. package/src/forge/_generated/aiRegistry.json +2 -2
  20. package/src/forge/_generated/aiRegistry.ts +7 -5
  21. package/src/forge/_generated/api.json +2 -2
  22. package/src/forge/_generated/api.ts +1 -1
  23. package/src/forge/_generated/appGraph.json +2 -2
  24. package/src/forge/_generated/appGraph.ts +288 -180
  25. package/src/forge/_generated/appMap.md +21 -1
  26. package/src/forge/_generated/artifactManifest.json +2 -2
  27. package/src/forge/_generated/artifactManifest.ts +2 -2
  28. package/src/forge/_generated/authClaims.json +1 -1
  29. package/src/forge/_generated/authClaims.ts +1 -1
  30. package/src/forge/_generated/authConfig.json +1 -1
  31. package/src/forge/_generated/authConfig.ts +1 -1
  32. package/src/forge/_generated/authContext.ts +1 -1
  33. package/src/forge/_generated/authRegistry.json +1 -1
  34. package/src/forge/_generated/authRegistry.ts +1 -1
  35. package/src/forge/_generated/buildInfo.json +2 -2
  36. package/src/forge/_generated/buildInfo.ts +4 -4
  37. package/src/forge/_generated/capabilityMap.json +2 -2
  38. package/src/forge/_generated/capabilityMap.md +1 -1
  39. package/src/forge/_generated/capabilityMap.ts +2 -2
  40. package/src/forge/_generated/client.ts +1 -1
  41. package/src/forge/_generated/clientApi.ts +1 -1
  42. package/src/forge/_generated/clientManifest.json +2 -2
  43. package/src/forge/_generated/clientManifest.ts +3 -3
  44. package/src/forge/_generated/clientTypes.ts +1 -1
  45. package/src/forge/_generated/configRegistry.json +1 -1
  46. package/src/forge/_generated/configRegistry.ts +1 -1
  47. package/src/forge/_generated/dataGraph.json +2 -2
  48. package/src/forge/_generated/dataGraph.ts +3 -3
  49. package/src/forge/_generated/db.json +1 -1
  50. package/src/forge/_generated/db.ts +1 -1
  51. package/src/forge/_generated/dbSecurityManifest.json +1 -1
  52. package/src/forge/_generated/dbSecurityManifest.ts +1 -1
  53. package/src/forge/_generated/dbSessionContext.json +1 -1
  54. package/src/forge/_generated/dbSessionContext.ts +1 -1
  55. package/src/forge/_generated/deployManifest.json +2 -2
  56. package/src/forge/_generated/deployManifest.ts +7 -7
  57. package/src/forge/_generated/devManifest.json +2 -2
  58. package/src/forge/_generated/devManifest.ts +18 -3
  59. package/src/forge/_generated/envSchema.json +1 -1
  60. package/src/forge/_generated/envSchema.ts +1 -1
  61. package/src/forge/_generated/frontendGraph.json +1 -1
  62. package/src/forge/_generated/frontendGraph.ts +1 -1
  63. package/src/forge/_generated/importGuards.json +1 -1
  64. package/src/forge/_generated/importGuards.ts +1 -1
  65. package/src/forge/_generated/index.ts +2 -1
  66. package/src/forge/_generated/liveProductionManifest.json +1 -1
  67. package/src/forge/_generated/liveProductionManifest.ts +1 -1
  68. package/src/forge/_generated/liveProtocol.json +1 -1
  69. package/src/forge/_generated/liveProtocol.ts +1 -1
  70. package/src/forge/_generated/liveQueryRegistry.json +2 -2
  71. package/src/forge/_generated/liveQueryRegistry.ts +3 -3
  72. package/src/forge/_generated/liveTransportConfig.json +1 -1
  73. package/src/forge/_generated/liveTransportConfig.ts +1 -1
  74. package/src/forge/_generated/makeRegistry.json +2 -2
  75. package/src/forge/_generated/makeRegistry.ts +16 -2
  76. package/src/forge/_generated/makeTemplates.json +2 -2
  77. package/src/forge/_generated/makeTemplates.ts +6 -1
  78. package/src/forge/_generated/mockMap.json +1 -1
  79. package/src/forge/_generated/mockMap.ts +1 -1
  80. package/src/forge/_generated/operationPlaybooks.md +34 -14
  81. package/src/forge/_generated/packageGraph.json +2 -2
  82. package/src/forge/_generated/packageGraph.ts +8808 -4723
  83. package/src/forge/_generated/packageUpgradeRegistry.json +2 -2
  84. package/src/forge/_generated/packageUpgradeRegistry.ts +2 -2
  85. package/src/forge/_generated/permissionMatrix.json +2 -2
  86. package/src/forge/_generated/permissionMatrix.ts +3 -3
  87. package/src/forge/_generated/policyRegistry.json +2 -2
  88. package/src/forge/_generated/policyRegistry.ts +3 -3
  89. package/src/forge/_generated/queryRegistry.json +2 -2
  90. package/src/forge/_generated/queryRegistry.ts +3 -3
  91. package/src/forge/_generated/react.d.ts +1 -1
  92. package/src/forge/_generated/react.ts +1 -1
  93. package/src/forge/_generated/reactManifest.json +2 -2
  94. package/src/forge/_generated/reactManifest.ts +3 -3
  95. package/src/forge/_generated/releaseManifest.json +2 -2
  96. package/src/forge/_generated/releaseManifest.ts +3 -3
  97. package/src/forge/_generated/rlsPolicies.json +1 -1
  98. package/src/forge/_generated/rlsPolicies.sql +1 -1
  99. package/src/forge/_generated/rlsPolicies.ts +1 -1
  100. package/src/forge/_generated/runtimeGraph.json +2 -2
  101. package/src/forge/_generated/runtimeGraph.ts +3 -3
  102. package/src/forge/_generated/runtimeMatrix.json +2 -2
  103. package/src/forge/_generated/runtimeMatrix.ts +8684 -1939
  104. package/src/forge/_generated/runtimeRegistry.ts +1 -1
  105. package/src/forge/_generated/runtimeRules.md +13 -1
  106. package/src/forge/_generated/secretRegistry.json +1 -1
  107. package/src/forge/_generated/secretRegistry.ts +1 -1
  108. package/src/forge/_generated/secretsContext.ts +1 -1
  109. package/src/forge/_generated/serverApi.ts +1 -1
  110. package/src/forge/_generated/sourceMapManifest.json +2 -2
  111. package/src/forge/_generated/sourceMapManifest.ts +2 -2
  112. package/src/forge/_generated/sqlPlan.json +1 -1
  113. package/src/forge/_generated/sqlPlan.ts +1 -1
  114. package/src/forge/_generated/subscriptionManifest.json +2 -2
  115. package/src/forge/_generated/subscriptionManifest.ts +3 -3
  116. package/src/forge/_generated/symbolicationManifest.json +2 -2
  117. package/src/forge/_generated/symbolicationManifest.ts +2 -2
  118. package/src/forge/_generated/telemetryRegistry.json +2 -2
  119. package/src/forge/_generated/telemetryRegistry.ts +3 -3
  120. package/src/forge/_generated/telemetrySinks.json +2 -2
  121. package/src/forge/_generated/telemetrySinks.ts +2 -2
  122. package/src/forge/_generated/tenantScope.json +2 -2
  123. package/src/forge/_generated/tenantScope.ts +3 -3
  124. package/src/forge/_generated/testGraph.json +2 -2
  125. package/src/forge/_generated/testGraph.ts +17 -7
  126. package/src/forge/_generated/testPlanRegistry.json +2 -2
  127. package/src/forge/_generated/testPlanRegistry.ts +2 -2
  128. package/src/forge/_generated/uiRoutes.json +1 -1
  129. package/src/forge/_generated/uiRoutes.ts +1 -1
  130. package/src/forge/_generated/uiScenarios.json +1 -1
  131. package/src/forge/_generated/uiScenarios.ts +1 -1
  132. package/src/forge/_generated/uiTestManifest.json +2 -2
  133. package/src/forge/_generated/uiTestManifest.ts +2 -2
  134. package/src/forge/_generated/workflowRegistry.json +2 -2
  135. package/src/forge/_generated/workflowRegistry.ts +3 -3
  136. package/src/forge/_generated/workflowSubscriptions.json +2 -2
  137. package/src/forge/_generated/workflowSubscriptions.ts +3 -3
  138. package/src/forge/cli/ai.ts +186 -1
  139. package/src/forge/cli/commands.ts +5 -0
  140. package/src/forge/cli/parse.ts +30 -3
  141. package/src/forge/compiler/agent-contract/build.ts +281 -8
  142. package/src/forge/compiler/agent-contract/types.ts +41 -0
  143. package/src/forge/compiler/ai-registry/build.ts +62 -1
  144. package/src/forge/compiler/ai-registry/constants.ts +1 -1
  145. package/src/forge/compiler/ai-registry/parse.ts +98 -4
  146. package/src/forge/compiler/app-graph/forge-apis.ts +1 -0
  147. package/src/forge/compiler/dev-manifest/build.ts +3 -0
  148. package/src/forge/compiler/make-registry/build.ts +13 -0
  149. package/src/forge/compiler/orchestrator/plan.ts +11 -0
  150. package/src/forge/compiler/orchestrator/serialize.ts +68 -0
  151. package/src/forge/compiler/types/ai-registry.ts +25 -1
  152. package/src/forge/compiler/types/app-graph.ts +1 -0
  153. package/src/forge/compiler/types/cli.ts +1 -0
  154. package/src/forge/compiler/types/dev-manifest.ts +3 -0
  155. package/src/forge/dev/server.ts +508 -1
  156. package/src/forge/make/index.ts +126 -3
  157. package/src/forge/make/templates.ts +188 -0
  158. package/src/forge/make/types.ts +1 -0
  159. package/src/forge/runtime/ai/context.ts +210 -5
  160. package/src/forge/runtime/ai/types.ts +70 -0
  161. package/src/forge/runtime/context/create-context.ts +30 -6
  162. package/src/forge/server.ts +82 -0
  163. package/src/forge/version.ts +1 -1
@@ -1,15 +1,16 @@
1
- // @forge-generated generator=0.1.0-alpha.2 input=2ce189e4d3555acfca07eb3bb3d103b22a8da52f3c26f9ac2197254f0563234f content=ac7e00509f59ee0543d9795b37cbf863448d161671f87a35c39f8d3f7b402d05
1
+ // @forge-generated generator=0.1.0-alpha.3 input=c6d07cc92a729a46f2ff02a05c005e7fe0d71a3a5800be6f670a3fca2db04d6f content=dde1c607540ce0e2bbe022af128639deef1eb84a01e094935fa3ac7e193f6ea6
2
2
  export const makeRegistry = {
3
3
  "commands": [
4
4
  "forge make list --json",
5
5
  "forge make explain <primitive> --json",
6
6
  "forge make ui --framework vite --dry-run --json",
7
+ "forge make ai-chat support --dry-run --json",
7
8
  "forge make resource <name> --fields title:text,status:enum(open,closed) --dry-run --json",
8
9
  "forge make resource <name> --fields title:text --with-ui --yes",
9
10
  "forge make apply <planId>",
10
11
  "forge make rollback <planId>"
11
12
  ],
12
- "generatorVersion": "0.1.0-alpha.2",
13
+ "generatorVersion": "0.1.0-alpha.3",
13
14
  "planDirectory": ".forge/make-plans",
14
15
  "primitives": [
15
16
  {
@@ -139,6 +140,19 @@ export const makeRegistry = {
139
140
  "name": "ui",
140
141
  "summary": "Add a Vite React frontend shell with ForgeProvider devAuth and a generated client bridge."
141
142
  },
143
+ {
144
+ "creates": [
145
+ "src/ai/<name>Agent.ts",
146
+ "web/components/<Name>AiChat.tsx",
147
+ "web/app/<name>-ai/page.tsx when web/app exists"
148
+ ],
149
+ "examples": [
150
+ "forge make ai-chat support --yes"
151
+ ],
152
+ "modifies": [],
153
+ "name": "ai-chat",
154
+ "summary": "Add a Forge AI agent and React chat component backed by /ai/agents/run."
155
+ },
142
156
  {
143
157
  "creates": [
144
158
  "src/commands/*",
@@ -1,2 +1,2 @@
1
- // @forge-generated generator=0.1.0-alpha.2 input=2ce189e4d3555acfca07eb3bb3d103b22a8da52f3c26f9ac2197254f0563234f content=3ded5d373abd46034055220ea12a715a71c2f706cf4a87a75e7d66d72bf79f33
2
- {"schemaVersion":"0.1.0","templates":[{"name":"schema-table","outputPattern":"src/forge/schema.ts","sourceKind":"schema"},{"name":"policy","outputPattern":"src/policies.ts","sourceKind":"policy"},{"name":"command","outputPattern":"src/commands/<name>.ts","sourceKind":"runtime"},{"name":"query","outputPattern":"src/queries/<name>.ts","sourceKind":"runtime"},{"name":"livequery","outputPattern":"src/queries/live<Name>.ts","sourceKind":"runtime"},{"name":"action","outputPattern":"src/actions/<name>.ts","sourceKind":"runtime"},{"name":"workflow","outputPattern":"src/workflows/<name>.ts","sourceKind":"runtime"},{"name":"component","outputPattern":"web/components/<name>.tsx","sourceKind":"frontend"},{"name":"page","outputPattern":"web/app/<route>/page.tsx","sourceKind":"frontend"},{"name":"ui","outputPattern":"web/src/App.tsx","sourceKind":"frontend"},{"name":"placeholder-test","outputPattern":"tests/make-generated/<name>.test.ts","sourceKind":"test"}]}
1
+ // @forge-generated generator=0.1.0-alpha.3 input=c6d07cc92a729a46f2ff02a05c005e7fe0d71a3a5800be6f670a3fca2db04d6f content=10dbc136889e8edfea67f3f41e7820590b0c52914b15184dfab1d58579353bd9
2
+ {"schemaVersion":"0.1.0","templates":[{"name":"schema-table","outputPattern":"src/forge/schema.ts","sourceKind":"schema"},{"name":"policy","outputPattern":"src/policies.ts","sourceKind":"policy"},{"name":"command","outputPattern":"src/commands/<name>.ts","sourceKind":"runtime"},{"name":"query","outputPattern":"src/queries/<name>.ts","sourceKind":"runtime"},{"name":"livequery","outputPattern":"src/queries/live<Name>.ts","sourceKind":"runtime"},{"name":"action","outputPattern":"src/actions/<name>.ts","sourceKind":"runtime"},{"name":"workflow","outputPattern":"src/workflows/<name>.ts","sourceKind":"runtime"},{"name":"component","outputPattern":"web/components/<name>.tsx","sourceKind":"frontend"},{"name":"page","outputPattern":"web/app/<route>/page.tsx","sourceKind":"frontend"},{"name":"ui","outputPattern":"web/src/App.tsx","sourceKind":"frontend"},{"name":"ai-chat","outputPattern":"web/components/<name>AiChat.tsx","sourceKind":"frontend"},{"name":"placeholder-test","outputPattern":"tests/make-generated/<name>.test.ts","sourceKind":"test"}]}
@@ -1,4 +1,4 @@
1
- // @forge-generated generator=0.1.0-alpha.2 input=2ce189e4d3555acfca07eb3bb3d103b22a8da52f3c26f9ac2197254f0563234f content=bec3e76f4a2feb0f6a1f4e3fb74d038a13ce13c7da0796fe16f4567ca0594f6e
1
+ // @forge-generated generator=0.1.0-alpha.3 input=c6d07cc92a729a46f2ff02a05c005e7fe0d71a3a5800be6f670a3fca2db04d6f content=d77484c9887220010cac51e14aaa010154cd261244eea7bf22a2aaaedca6afb4
2
2
  export const makeTemplates = {
3
3
  "schemaVersion": "0.1.0",
4
4
  "templates": [
@@ -52,6 +52,11 @@ export const makeTemplates = {
52
52
  "outputPattern": "web/src/App.tsx",
53
53
  "sourceKind": "frontend"
54
54
  },
55
+ {
56
+ "name": "ai-chat",
57
+ "outputPattern": "web/components/<name>AiChat.tsx",
58
+ "sourceKind": "frontend"
59
+ },
55
60
  {
56
61
  "name": "placeholder-test",
57
62
  "outputPattern": "tests/make-generated/<name>.test.ts",
@@ -1,2 +1,2 @@
1
- // @forge-generated generator=0.1.0-alpha.2 input=2ce189e4d3555acfca07eb3bb3d103b22a8da52f3c26f9ac2197254f0563234f content=ce79e45d4228d202a492670aa76f238986b5500c8bb53774b328c216a1ccc6d8
1
+ // @forge-generated generator=0.1.0-alpha.3 input=c6d07cc92a729a46f2ff02a05c005e7fe0d71a3a5800be6f670a3fca2db04d6f content=ce79e45d4228d202a492670aa76f238986b5500c8bb53774b328c216a1ccc6d8
2
2
  {"entries":[{"mockFile":"src/forge/_generated/testkits/ai.anthropic.mock.ts","packageName":"@ai-sdk/anthropic"},{"mockFile":"src/forge/_generated/testkits/ai.openai.mock.ts","packageName":"@ai-sdk/openai"},{"mockFile":"src/forge/_generated/testkits/ai.gateway.mock.ts","packageName":"ai"},{"mockFile":"src/forge/_generated/testkits/zod.mock.ts","packageName":"zod"}]}
@@ -1,4 +1,4 @@
1
- // @forge-generated generator=0.1.0-alpha.2 input=2ce189e4d3555acfca07eb3bb3d103b22a8da52f3c26f9ac2197254f0563234f content=4c569da5df387f6bb7fe7fd94d42b4cc6b05f5218ab0bc129d9637c184625057
1
+ // @forge-generated generator=0.1.0-alpha.3 input=c6d07cc92a729a46f2ff02a05c005e7fe0d71a3a5800be6f670a3fca2db04d6f content=4c569da5df387f6bb7fe7fd94d42b4cc6b05f5218ab0bc129d9637c184625057
2
2
  export const mockMap = {
3
3
  "@ai-sdk/anthropic": "src/forge/_generated/testkits/ai.anthropic.mock.ts",
4
4
  "@ai-sdk/openai": "src/forge/_generated/testkits/ai.openai.mock.ts",
@@ -1,4 +1,4 @@
1
- // @forge-generated generator=0.1.0-alpha.2 input=2ce189e4d3555acfca07eb3bb3d103b22a8da52f3c26f9ac2197254f0563234f content=462309a5bbe9b5c87581faf1755900bdfac7a1b938a89a5dc90472dff9de4340
1
+ // @forge-generated generator=0.1.0-alpha.3 input=c6d07cc92a729a46f2ff02a05c005e7fe0d71a3a5800be6f670a3fca2db04d6f content=58dad7f03d9e378e327fddb0676d079950c8f000752667cffb022f3b7e217265
2
2
  # Operation Playbooks
3
3
 
4
4
  ## Choose the right workflow
@@ -39,6 +39,24 @@
39
39
  4. Check that _forge_live_invalidations has revisions newer than the last sent snapshot.
40
40
  5. Reconnect with Last-Event-ID or ?lastRevision=<revision> to verify resume behavior.
41
41
 
42
+ ## Add an AI tool
43
+
44
+ 1. Add a server-only file under src/ai or src/tools.
45
+ 2. Export aiTool({ description, inputSchema, outputSchema, risk, needsApproval, handler }).
46
+ 3. Use zod schemas for inputSchema and outputSchema.
47
+ 4. Access secrets through the tool context, not process.env.
48
+ 5. Mark destructive or external side effects with risk and needsApproval.
49
+ 6. Run forge generate and inspect src/forge/_generated/aiRegistry.json.
50
+
51
+ ## Add an agent
52
+
53
+ 1. Export agent({ provider, model, instructions, tools, stopWhen }) from server-only source.
54
+ 2. Prefer AI SDK ToolLoopAgent semantics through ctx.agent.run or ctx.ai.runAgent instead of custom loops.
55
+ 3. Use stopWhen with stepCount or terminal tool calls to prevent unbounded loops.
56
+ 4. Run agents only in actions, workflows, endpoints, or server code.
57
+ 5. Run forge inspect all --json and confirm agentContract.ai.agents lists the agent.
58
+ 6. Use forge ai trace <traceId> --json to inspect agent runs and tool calls.
59
+
42
60
  ## Add a table
43
61
 
44
62
  1. Edit src/forge/schema.ts.
@@ -67,13 +85,14 @@
67
85
  ## Safely refactor a feature
68
86
 
69
87
  1. Run forge refactor rename field <table.field> <table.field> --dry-run --json.
70
- 2. Rename codemods are AST-aware for extract-action, rename field, and rename table.
71
- 3. Field renames are scoped to the target table, so tickets.priority only rewrites references linked to tickets.
72
- 4. Review filesToModify, migrationPlan, diagnostics, and risk.
73
- 5. Use --allow-high-risk only for intentional high-risk refactors.
74
- 6. Apply with forge refactor rename field <table.field> <table.field> --yes.
75
- 7. Run forge generate.
76
- 8. Run forge verify --strict.
88
+ 2. Run forge refactor rename command <oldName> <newName> --dry-run --json when renaming runtime entrypoints.
89
+ 3. Rename codemods are AST-aware for extract-action, rename command, rename field, and rename table.
90
+ 4. Field renames are scoped to the target table, so tickets.priority only rewrites references linked to tickets.
91
+ 5. Review filesToModify, migrationPlan, diagnostics, and risk.
92
+ 6. Use --allow-high-risk only for intentional high-risk refactors.
93
+ 7. Apply with forge refactor rename field <table.field> <table.field> --yes.
94
+ 8. Run forge generate.
95
+ 9. Run forge verify --strict.
77
96
 
78
97
  ## Plan impact-based tests
79
98
 
@@ -126,12 +145,13 @@
126
145
  ## Add or update frontend
127
146
 
128
147
  1. Run forge make ui --framework vite --dry-run --json when the app does not have a web root.
129
- 2. Use web/lib/forge.ts as the generated client bridge.
130
- 3. Mount ForgeProvider once in the web app provider/layout layer; use devAuth for local development.
131
- 4. Use useQuery, useCommand, and useLiveQuery instead of raw /commands or /queries fetches.
132
- 5. Run forge generate so frontendGraph and agentContract include routes and bindings.
133
- 6. Run forge inspect capabilities --json to confirm UI actions map to runtime capabilities.
134
- 7. Run forge dev --once --json and forge doctor --json.
148
+ 2. Run forge make ai-chat support --dry-run --json to add a chat surface backed by /ai/agents/chat streaming and /ai/agents/run JSON automation.
149
+ 3. Use web/lib/forge.ts as the generated client bridge.
150
+ 4. Mount ForgeProvider once in the web app provider/layout layer; use devAuth for local development.
151
+ 5. Use useQuery, useCommand, and useLiveQuery instead of raw /commands or /queries fetches.
152
+ 6. Run forge generate so frontendGraph and agentContract include routes and bindings.
153
+ 7. Run forge inspect capabilities --json to confirm UI actions map to runtime capabilities.
154
+ 8. Run forge dev --once --json and forge doctor --json.
135
155
 
136
156
  ## Self-host
137
157