forgeos 0.1.0-alpha.23 → 0.1.0-alpha.24

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 CHANGED
@@ -1,4 +1,4 @@
1
- // @forge-generated generator=0.1.0-alpha.23 input=43fbd897d0f0a003e2f63e7048eb3281a5871034827653640e010161c0385d44 content=0d493cf0e41b71cb652d5e0e1b0c1f83d2a1281b748321f0b00f0773ba93074e
1
+ // @forge-generated generator=0.1.0-alpha.24 input=1257771517e723f30d9c8c6bdc328f3a9d0bfde1e673d859837f93f0f1bd15c4 content=0d493cf0e41b71cb652d5e0e1b0c1f83d2a1281b748321f0b00f0773ba93074e
2
2
  # AGENTS.md
3
3
 
4
4
  <!-- forge-generated:start -->
package/CHANGELOG.md CHANGED
@@ -2,6 +2,18 @@
2
2
 
3
3
  ## Unreleased
4
4
 
5
+ ## 0.1.0-alpha.24
6
+
7
+ ### Patch Changes
8
+
9
+ - Consolidate the public alpha adoption surface and agent-contract positioning.
10
+
11
+ - Add an explicit MIT `LICENSE`, package license metadata, and a private GitHub Security Advisory disclosure path.
12
+ - Add stable-alpha, AI-coding, agent demo, Convex, and agent-eval documentation pages, plus a runner-agnostic eval task scaffold.
13
+ - Fix `forge new --json` so scaffold automation receives structured JSON instead of human next-step text.
14
+ - Add the first `forge add convex` app-contract recipe with runtime placement guardrails, optional Convex environment names, generated docs, and a mock testkit.
15
+ - Expand field-report expectations and package/release tests for license, security disclosure, docs, create-app help, Convex recipes, and JSON scaffold output.
16
+
5
17
  ## 0.1.0-alpha.23
6
18
 
7
19
  ### Patch Changes
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 ForgeOS contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # ForgeOS
2
2
 
3
- Agent-native application framework and compiler for building Forge apps without a mandatory dashboard. ForgeOS turns application source into deterministic runtime contracts, generated clients, safety checks, and machine-readable context that humans and AI coding agents can use safely.
3
+ The contract layer for agentic software development. ForgeOS turns application source into deterministic runtime contracts, generated clients, safety checks, and machine-readable context that humans and AI coding agents can use safely.
4
4
 
5
5
  **Status:** private/public alpha MVP, implemented through H49. ForgeOS already includes the compiler, local runtime, frontend SDK, production auth, RLS compiler, liveQuery, self-host artifacts, generated agent contract, guided dev loop, repair/review/test tooling, AST-aware codemods, package intelligence, native AI tools/agents, DeltaDB work memory, external agent memory ingestion, brownfield import analysis, npm alpha publishing, and Read the Docs public docs. Public release hardening is still focused on deeper semantic codemods, broader field reports, and more production mileage.
6
6
 
@@ -8,7 +8,7 @@ Public docs live at [forgeos.readthedocs.io](https://forgeos.readthedocs.io/). T
8
8
 
9
9
  Start with [Why ForgeOS](https://forgeos.readthedocs.io/en/latest/why-forgeos/) to understand the agent-native design.
10
10
 
11
- For the short version, read [The Five-Minute ForgeOS Model](https://forgeos.readthedocs.io/en/latest/five-minute-model/) and [Alpha Golden Path](https://forgeos.readthedocs.io/en/latest/golden-path/). The important distinction is that external coding agents are the primary ForgeOS workflow; integrated AI SDK features are available for apps that need in-product AI, but they are not the main development loop.
11
+ For the short version, read [The Five-Minute ForgeOS Model](https://forgeos.readthedocs.io/en/latest/five-minute-model/), [Alpha Golden Path](https://forgeos.readthedocs.io/en/latest/golden-path/), and [Stable Alpha Surface](https://forgeos.readthedocs.io/en/latest/stable-alpha/). The important distinction is that external coding agents are the primary ForgeOS workflow; integrated AI SDK features are available for apps that need in-product AI, but they are not the main development loop.
12
12
 
13
13
  ## Agent-First Quickstart
14
14
 
package/docs/changelog.md CHANGED
@@ -6,6 +6,22 @@ The canonical source file in the repository is `CHANGELOG.md`.
6
6
 
7
7
  ## Unreleased
8
8
 
9
+ ## 0.1.0-alpha.24
10
+
11
+ - Consolidated the public alpha adoption surface: MIT license, package license
12
+ metadata, private GitHub Security Advisory disclosure, stable-alpha status
13
+ matrix, AI-coding loop, three short agent demos, and repeatable agent eval
14
+ task specs.
15
+ - `forge new --json` now returns structured JSON for scaffold automation
16
+ instead of human next-step text.
17
+ - Added the initial `forge add convex` app-contract recipe with runtime
18
+ placement guardrails, optional Convex environment names, generated docs, and
19
+ a mock testkit. The deeper Convex schema/API importer is documented as
20
+ planned rather than implied.
21
+ - Expanded field-report expectations and release/doc tests for license,
22
+ security disclosure, create-app help, Convex recipes, and public docs
23
+ navigation.
24
+
9
25
  ## 0.1.0-alpha.23
10
26
 
11
27
  - Tightened the post-alpha.22 release surface and package evidence:
package/package.json CHANGED
@@ -1,8 +1,9 @@
1
1
  {
2
2
  "name": "forgeos",
3
- "version": "0.1.0-alpha.23",
3
+ "version": "0.1.0-alpha.24",
4
4
  "description": "Agent-native application framework and compiler for building Forge apps without a mandatory dashboard.",
5
5
  "type": "module",
6
+ "license": "MIT",
6
7
  "files": [
7
8
  "adapters/",
8
9
  "bin/",
@@ -18,6 +19,7 @@
18
19
  "src/forge/_generated/releaseManifest.ts",
19
20
  "templates/",
20
21
  "README.md",
22
+ "LICENSE",
21
23
  "CHANGELOG.md",
22
24
  "CONTRIBUTING.md",
23
25
  "AGENTS.md",
@@ -1 +1 @@
1
- {"defaultProvider":"local","diagnostics":[],"env":{"deployEnv":"FORGE_DEPLOY_ENV","deployId":"FORGE_DEPLOY_ID","publicReleaseId":"NEXT_PUBLIC_FORGE_RELEASE_ID","releaseId":"FORGE_RELEASE_ID"},"gitSha":"unknown","optionalProviders":["local","sentry-compatible","sentry","glitchtip","bugsink","otel","custom"],"packageName":"forgeos","packageVersion":"0.1.0-alpha.23","releaseId":"forgeos@0.1.0-alpha.23+unknown","schemaVersion":"0.1.0"}
1
+ {"defaultProvider":"local","diagnostics":[],"env":{"deployEnv":"FORGE_DEPLOY_ENV","deployId":"FORGE_DEPLOY_ID","publicReleaseId":"NEXT_PUBLIC_FORGE_RELEASE_ID","releaseId":"FORGE_RELEASE_ID"},"gitSha":"unknown","optionalProviders":["local","sentry-compatible","sentry","glitchtip","bugsink","otel","custom"],"packageName":"forgeos","packageVersion":"0.1.0-alpha.24","releaseId":"forgeos@0.1.0-alpha.24+unknown","schemaVersion":"0.1.0"}
@@ -1,4 +1,4 @@
1
- // @forge-generated generator=0.1.0-alpha.23 input=43fbd897d0f0a003e2f63e7048eb3281a5871034827653640e010161c0385d44 content=8b537f90580f28c1630850bc7b7199e17d0bc62d05e9565fdf84da4bdbf9f6dc
1
+ // @forge-generated generator=0.1.0-alpha.24 input=1257771517e723f30d9c8c6bdc328f3a9d0bfde1e673d859837f93f0f1bd15c4 content=4170e33ff26cbaa55732ed4f507f83f2ece3812a1c2184614337c8be91110499
2
2
  export const releaseManifest = {
3
3
  "defaultProvider": "local",
4
4
  "diagnostics": [],
@@ -19,7 +19,7 @@ export const releaseManifest = {
19
19
  "custom"
20
20
  ],
21
21
  "packageName": "forgeos",
22
- "packageVersion": "0.1.0-alpha.23",
23
- "releaseId": "forgeos@0.1.0-alpha.23+unknown",
22
+ "packageVersion": "0.1.0-alpha.24",
23
+ "releaseId": "forgeos@0.1.0-alpha.24+unknown",
24
24
  "schemaVersion": "0.1.0"
25
25
  } as const;
@@ -168,7 +168,7 @@ import {
168
168
  runSecretsCommand,
169
169
  } from "./secrets.ts";
170
170
  import { formatAiHuman, formatAiJson, runAiCommand } from "./ai.ts";
171
- import { formatNewHuman, runNewCommand } from "./new.ts";
171
+ import { formatNewHuman, formatNewJson, runNewCommand } from "./new.ts";
172
172
  import { formatBuildHuman, runBuildCommand } from "./build.ts";
173
173
  import { runServeCommand } from "./serve.ts";
174
174
  import { runWorkerCommand } from "./worker.ts";
@@ -1559,7 +1559,7 @@ export async function executeCommand(command: ForgeCommand): Promise<number> {
1559
1559
  localForge: command.localForge,
1560
1560
  workspaceRoot: command.workspaceRoot,
1561
1561
  });
1562
- process.stdout.write(formatNewHuman(result));
1562
+ process.stdout.write(command.json ? formatNewJson(result) : formatNewHuman(result));
1563
1563
  return result.exitCode;
1564
1564
  }
1565
1565
  case "build": {
@@ -535,3 +535,11 @@ export function formatNewHuman(result: NewCommandResult): string {
535
535
  "",
536
536
  ].join("\n");
537
537
  }
538
+
539
+ export function formatNewJson(result: NewCommandResult): string {
540
+ return `${JSON.stringify({
541
+ schemaVersion: "0.1.0",
542
+ ok: result.exitCode === 0,
543
+ ...result,
544
+ }, null, 2)}\n`;
545
+ }
@@ -63,6 +63,7 @@ export type ForgeCommand =
63
63
  git: boolean;
64
64
  forgePackageSpec?: string;
65
65
  localForge: boolean;
66
+ json: boolean;
66
67
  workspaceRoot: string;
67
68
  }
68
69
  | { kind: "build"; json: boolean; workspaceRoot: string }
@@ -860,6 +861,7 @@ export function parseCli(argv: string[]): ParsedCli {
860
861
  git: !parseFlag(argv, "--no-git"),
861
862
  forgePackageSpec,
862
863
  localForge,
864
+ json: parseFlag(argv, "--json"),
863
865
  workspaceRoot,
864
866
  },
865
867
  workspaceRoot,
@@ -549,7 +549,7 @@ export async function forgeAdd(
549
549
  const error = createDiagnostic({
550
550
  severity: "error",
551
551
  code: "FORGE_UNKNOWN_ALIAS",
552
- message: `unknown integration alias '${alias}'; supported: stripe, posthog, sentry, zod, ai. For npm packages, use 'forge add package ${alias}' or 'forge add ${alias}'.`,
552
+ message: `unknown integration alias '${alias}'; supported: stripe, posthog, sentry, zod, convex, ai. For npm packages, use 'forge add package ${alias}' or 'forge add ${alias}'.`,
553
553
  suggestedCommands: [`forge add package ${alias} --dry-run --json`, "forge add --help"],
554
554
  });
555
555
  return finalizeAddResult({
@@ -0,0 +1,70 @@
1
+ import type { IntegrationTemplateInput } from "./types.ts";
2
+
3
+ export function renderConvexTestkit(_input: IntegrationTemplateInput): string {
4
+ return [
5
+ "/** Forge generated mock testkit for Convex app-contract evaluation. */",
6
+ "export interface ConvexFunctionRef {",
7
+ " readonly kind: \"query\" | \"mutation\" | \"action\";",
8
+ " readonly path: string;",
9
+ "}",
10
+ "",
11
+ "export function createConvexMock(functions: ConvexFunctionRef[] = []) {",
12
+ " const calls: Array<{ path: string; args: unknown }> = [];",
13
+ " return {",
14
+ " functions,",
15
+ " calls,",
16
+ " call(path: string, args: unknown = {}) {",
17
+ " calls.push({ path, args });",
18
+ " return { ok: true, path, args } as const;",
19
+ " },",
20
+ " } as const;",
21
+ "}",
22
+ "",
23
+ ].join("\n");
24
+ }
25
+
26
+ export function renderConvexDoc(input: IntegrationTemplateInput): string {
27
+ return [
28
+ "# Convex integration",
29
+ "",
30
+ "Generated by Forge (recipe v1).",
31
+ "",
32
+ "Convex is treated as an agent-friendly backend package. ForgeOS treats it as an app-contract integration surface: package placement, frontend/backend usage, generated docs, and future function-map import.",
33
+ "",
34
+ "## Runtime placement",
35
+ "",
36
+ "- Use Convex client hooks and generated Convex APIs in frontend/client code.",
37
+ "- Use Convex server/admin clients only from server, action, workflow, or endpoint contexts.",
38
+ "- Do not import Convex runtime clients from Forge commands, queries, or liveQueries.",
39
+ "- Type-only imports are acceptable when the TypeScript compiler erases them.",
40
+ "",
41
+ "## App-contract import targets",
42
+ "",
43
+ "Future Convex import support should inspect:",
44
+ "",
45
+ "- `convex/schema.ts` for table names and fields;",
46
+ "- `convex/_generated/api.d.ts` for query, mutation, and action references;",
47
+ "- frontend `useQuery`, `useMutation`, and `useAction` calls for route/component capability mapping;",
48
+ "- auth and deployment notes from Convex config files.",
49
+ "",
50
+ "## Commands",
51
+ "",
52
+ "```bash",
53
+ "forge add convex",
54
+ "forge deps inspect convex --json",
55
+ "forge inspect runtime-matrix --json",
56
+ "forge check --json",
57
+ "```",
58
+ "",
59
+ "## Generated evidence",
60
+ "",
61
+ `Compatible contexts: ${input.compatible.join(", ")}`,
62
+ "",
63
+ `Incompatible contexts: ${input.incompatible.join(", ")}`,
64
+ "",
65
+ "Optional environment names:",
66
+ "",
67
+ ...input.secrets.map((secret) => `- ${secret.envVar}`),
68
+ "",
69
+ ].join("\n");
70
+ }
@@ -1,5 +1,6 @@
1
1
  import type { IntegrationTemplateInput } from "./types.ts";
2
2
  import * as ai from "./ai.ts";
3
+ import * as convex from "./convex.ts";
3
4
  import * as posthog from "./posthog.ts";
4
5
  import * as sentry from "./sentry.ts";
5
6
  import * as stripe from "./stripe.ts";
@@ -52,6 +53,7 @@ const TESTKIT_RENDERERS: Record<string, Record<string, TemplateRenderer>> = {
52
53
  stripe: { "stripe.mock.ts": stripe.renderStripeTestkit },
53
54
  posthog: { "posthog.mock.ts": posthog.renderPosthogTestkit },
54
55
  sentry: { "sentry.mock.ts": sentry.renderSentryTestkit },
56
+ convex: { "convex.mock.ts": convex.renderConvexTestkit },
55
57
  ai: { "ai.mock.ts": ai.renderAiTestkitLegacy },
56
58
  };
57
59
 
@@ -60,6 +62,7 @@ const DOC_RENDERERS: Record<string, Record<string, TemplateRenderer>> = {
60
62
  stripe: { "stripe.md": stripe.renderStripeDoc },
61
63
  posthog: { "posthog.md": posthog.renderPosthogDoc },
62
64
  sentry: { "sentry.md": sentry.renderSentryDoc },
65
+ convex: { "convex.md": convex.renderConvexDoc },
63
66
  ai: { "ai.md": ai.renderAiDoc },
64
67
  };
65
68
 
@@ -190,6 +190,30 @@ export const ZOD_RECIPE: IntegrationRecipe = {
190
190
  docs: ["zod.md"],
191
191
  };
192
192
 
193
+ export const CONVEX_RECIPE: IntegrationRecipe = {
194
+ alias: "convex",
195
+ packages: [{ packageName: "convex" }],
196
+ supportedVersionRange: ">=1.0.0",
197
+ recipeVersion: "1.0.0",
198
+ contexts: {
199
+ allowed: ["client", "server", "action", "workflow", "endpoint", "test", "build"],
200
+ denied: ["shared", "query", "liveQuery", "command", "edge"],
201
+ },
202
+ capabilities: networkCapability(
203
+ ["*.convex.cloud", "*.convex.site"],
204
+ ["recipe:convex", "Convex client/server package connects to Convex deployments"],
205
+ ),
206
+ secrets: [
207
+ secret("NEXT_PUBLIC_CONVEX_URL", false),
208
+ secret("CONVEX_URL", false),
209
+ secret("CONVEX_DEPLOYMENT", false),
210
+ secret("CONVEX_DEPLOY_KEY", false),
211
+ ],
212
+ adapters: [],
213
+ testkits: ["convex.mock.ts"],
214
+ docs: ["convex.md"],
215
+ };
216
+
193
217
  export const FORGE_RECIPE: IntegrationRecipe = {
194
218
  alias: "forge",
195
219
  packages: [{ packageName: "forge" }],
@@ -283,6 +307,7 @@ export const REFERENCE_ALIASES = [
283
307
  "posthog",
284
308
  "sentry",
285
309
  "zod",
310
+ "convex",
286
311
  "ai",
287
312
  ] as const;
288
313
 
@@ -15,6 +15,7 @@ export {
15
15
  POSTHOG_RECIPE,
16
16
  SENTRY_RECIPE,
17
17
  ZOD_RECIPE,
18
+ CONVEX_RECIPE,
18
19
  AI_RECIPE,
19
20
  AI_PROVIDER_RECIPES,
20
21
  } from "./definitions.ts";
@@ -3,6 +3,7 @@ import type { PackageRecipe } from "../types/integration.ts";
3
3
  import {
4
4
  AI_PROVIDER_RECIPES,
5
5
  AI_RECIPE,
6
+ CONVEX_RECIPE,
6
7
  FORGE_RECIPE,
7
8
  POSTHOG_RECIPE,
8
9
  REFERENCE_ALIASES,
@@ -23,6 +24,7 @@ const REFERENCE_RECIPES: Record<string, IntegrationRecipe> = {
23
24
  posthog: POSTHOG_RECIPE,
24
25
  sentry: SENTRY_RECIPE,
25
26
  zod: ZOD_RECIPE,
27
+ convex: CONVEX_RECIPE,
26
28
  forge: FORGE_RECIPE,
27
29
  ai: AI_RECIPE,
28
30
  };
@@ -32,6 +34,7 @@ const ALL_RECIPES: IntegrationRecipe[] = [
32
34
  POSTHOG_RECIPE,
33
35
  SENTRY_RECIPE,
34
36
  ZOD_RECIPE,
37
+ CONVEX_RECIPE,
35
38
  FORGE_RECIPE,
36
39
  AI_RECIPE,
37
40
  ...AI_PROVIDER_RECIPES,
@@ -1,3 +1,3 @@
1
- export const FORGEOS_VERSION = "0.1.0-alpha.23";
1
+ export const FORGEOS_VERSION = "0.1.0-alpha.24";
2
2
  export const GENERATOR_VERSION = FORGEOS_VERSION;
3
3
  export const CLI_VERSION = FORGEOS_VERSION;