forgeos 0.1.0-alpha.13 → 0.1.0-alpha.15
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 +6 -5
- package/CHANGELOG.md +22 -0
- package/adapters/java/README.md +68 -0
- package/adapters/java/pom.xml +34 -0
- package/adapters/java/src/main/java/dev/forgeos/adapter/Auth.java +20 -0
- package/adapters/java/src/main/java/dev/forgeos/adapter/Diagnostic.java +16 -0
- package/adapters/java/src/main/java/dev/forgeos/adapter/Entry.java +38 -0
- package/adapters/java/src/main/java/dev/forgeos/adapter/EntryKind.java +16 -0
- package/adapters/java/src/main/java/dev/forgeos/adapter/ErrorInfo.java +4 -0
- package/adapters/java/src/main/java/dev/forgeos/adapter/Forge.java +94 -0
- package/adapters/java/src/main/java/dev/forgeos/adapter/ForgeCall.java +12 -0
- package/adapters/java/src/main/java/dev/forgeos/adapter/ForgeContext.java +11 -0
- package/adapters/java/src/main/java/dev/forgeos/adapter/ForgeHandler.java +8 -0
- package/adapters/java/src/main/java/dev/forgeos/adapter/ForgeHttpHandler.java +179 -0
- package/adapters/java/src/main/java/dev/forgeos/adapter/ForgeRegistry.java +121 -0
- package/adapters/java/src/main/java/dev/forgeos/adapter/Json.java +14 -0
- package/adapters/java/src/main/java/dev/forgeos/adapter/Manifest.java +14 -0
- package/adapters/java/src/main/java/dev/forgeos/adapter/RequestEnvelope.java +6 -0
- package/adapters/java/src/main/java/dev/forgeos/adapter/ResponseEnvelope.java +25 -0
- package/adapters/java/src/main/java/dev/forgeos/adapter/Risk.java +18 -0
- package/adapters/java/src/main/java/dev/forgeos/adapter/Schemas.java +36 -0
- package/adapters/java/src/main/java/dev/forgeos/adapter/Service.java +65 -0
- package/adapters/java/src/main/java/dev/forgeos/adapter/TransactionMode.java +18 -0
- package/adapters/java/src/main/java/dev/forgeos/adapter/TypedForgeHandler.java +6 -0
- package/adapters/java/target/classes/dev/forgeos/adapter/Auth.class +0 -0
- package/adapters/java/target/classes/dev/forgeos/adapter/Diagnostic.class +0 -0
- package/adapters/java/target/classes/dev/forgeos/adapter/Entry.class +0 -0
- package/adapters/java/target/classes/dev/forgeos/adapter/EntryKind.class +0 -0
- package/adapters/java/target/classes/dev/forgeos/adapter/ErrorInfo.class +0 -0
- package/adapters/java/target/classes/dev/forgeos/adapter/Forge.class +0 -0
- package/adapters/java/target/classes/dev/forgeos/adapter/ForgeCall.class +0 -0
- package/adapters/java/target/classes/dev/forgeos/adapter/ForgeContext.class +0 -0
- package/adapters/java/target/classes/dev/forgeos/adapter/ForgeHandler.class +0 -0
- package/adapters/java/target/classes/dev/forgeos/adapter/ForgeHttpHandler.class +0 -0
- package/adapters/java/target/classes/dev/forgeos/adapter/ForgeRegistry$EntryOption.class +0 -0
- package/adapters/java/target/classes/dev/forgeos/adapter/ForgeRegistry$RegisteredEntry.class +0 -0
- package/adapters/java/target/classes/dev/forgeos/adapter/ForgeRegistry$RegistryOption.class +0 -0
- package/adapters/java/target/classes/dev/forgeos/adapter/ForgeRegistry.class +0 -0
- package/adapters/java/target/classes/dev/forgeos/adapter/Json.class +0 -0
- package/adapters/java/target/classes/dev/forgeos/adapter/Manifest.class +0 -0
- package/adapters/java/target/classes/dev/forgeos/adapter/RequestEnvelope.class +0 -0
- package/adapters/java/target/classes/dev/forgeos/adapter/ResponseEnvelope.class +0 -0
- package/adapters/java/target/classes/dev/forgeos/adapter/Risk.class +0 -0
- package/adapters/java/target/classes/dev/forgeos/adapter/Schemas.class +0 -0
- package/adapters/java/target/classes/dev/forgeos/adapter/Service.class +0 -0
- package/adapters/java/target/classes/dev/forgeos/adapter/TransactionMode.class +0 -0
- package/adapters/java/target/classes/dev/forgeos/adapter/TypedForgeHandler.class +0 -0
- package/adapters/java/target/forge-java-adapter-0.1.0-alpha.11.jar +0 -0
- package/adapters/java/target/maven-archiver/pom.properties +3 -0
- package/adapters/java/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst +23 -0
- package/adapters/java/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst +20 -0
- package/adapters/java-spring-boot-starter/README.md +32 -0
- package/adapters/java-spring-boot-starter/pom.xml +36 -0
- package/adapters/java-spring-boot-starter/src/main/java/dev/forgeos/adapter/spring/ForgeCommand.java +22 -0
- package/adapters/java-spring-boot-starter/src/main/java/dev/forgeos/adapter/spring/ForgeExternalService.java +15 -0
- package/adapters/java-spring-boot-starter/src/main/java/dev/forgeos/adapter/spring/ForgeQuery.java +16 -0
- package/adapters/java-spring-boot-starter/src/main/java/dev/forgeos/adapter/spring/ForgeServiceBeanCondition.java +18 -0
- package/adapters/java-spring-boot-starter/src/main/java/dev/forgeos/adapter/spring/ForgeSpringAutoConfiguration.java +16 -0
- package/adapters/java-spring-boot-starter/src/main/java/dev/forgeos/adapter/spring/ForgeSpringRuntime.java +104 -0
- package/adapters/java-spring-boot-starter/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports +1 -0
- package/adapters/java-spring-boot-starter/target/classes/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports +1 -0
- package/adapters/java-spring-boot-starter/target/classes/dev/forgeos/adapter/spring/ForgeCommand.class +0 -0
- package/adapters/java-spring-boot-starter/target/classes/dev/forgeos/adapter/spring/ForgeExternalService.class +0 -0
- package/adapters/java-spring-boot-starter/target/classes/dev/forgeos/adapter/spring/ForgeQuery.class +0 -0
- package/adapters/java-spring-boot-starter/target/classes/dev/forgeos/adapter/spring/ForgeServiceBeanCondition.class +0 -0
- package/adapters/java-spring-boot-starter/target/classes/dev/forgeos/adapter/spring/ForgeSpringAutoConfiguration.class +0 -0
- package/adapters/java-spring-boot-starter/target/classes/dev/forgeos/adapter/spring/ForgeSpringRuntime.class +0 -0
- package/adapters/java-spring-boot-starter/target/forge-java-spring-boot-starter-0.1.0-alpha.11.jar +0 -0
- package/adapters/java-spring-boot-starter/target/maven-archiver/pom.properties +3 -0
- package/adapters/java-spring-boot-starter/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst +6 -0
- package/adapters/java-spring-boot-starter/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst +6 -0
- package/docs/changelog.md +8 -0
- package/docs/forge-protocol.md +33 -0
- package/examples/java-billing/pom.xml +52 -0
- package/examples/java-billing/src/main/java/dev/forgeos/examples/billing/CreateInvoiceInput.java +4 -0
- package/examples/java-billing/src/main/java/dev/forgeos/examples/billing/Invoice.java +11 -0
- package/examples/java-billing/src/main/java/dev/forgeos/examples/billing/Main.java +127 -0
- package/examples/java-billing/target/classes/dev/forgeos/examples/billing/CreateInvoiceInput.class +0 -0
- package/examples/java-billing/target/classes/dev/forgeos/examples/billing/Invoice.class +0 -0
- package/examples/java-billing/target/classes/dev/forgeos/examples/billing/Main$EmptyInput.class +0 -0
- package/examples/java-billing/target/classes/dev/forgeos/examples/billing/Main$Options.class +0 -0
- package/examples/java-billing/target/classes/dev/forgeos/examples/billing/Main.class +0 -0
- package/examples/java-billing/target/java-billing-0.1.0-alpha.11-all.jar +0 -0
- package/examples/java-billing/target/java-billing-0.1.0-alpha.11.jar +0 -0
- package/examples/java-billing/target/maven-archiver/pom.properties +3 -0
- package/examples/java-billing/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst +5 -0
- package/examples/java-billing/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst +3 -0
- package/package.json +4 -1
- package/src/forge/_generated/actionSubscriptions.json +1 -1
- package/src/forge/_generated/actionSubscriptions.ts +3 -3
- package/src/forge/_generated/agentAdapterManifest.json +1 -1
- package/src/forge/_generated/agentAdapterManifest.ts +3 -3
- package/src/forge/_generated/agentContract.json +1 -1
- package/src/forge/_generated/agentContract.ts +1274 -7
- package/src/forge/_generated/agentQuickstart.md +1 -1
- package/src/forge/_generated/agentTools.json +1 -1
- 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.ts +1 -1
- package/src/forge/_generated/aiProviders.ts +1 -1
- package/src/forge/_generated/aiRegistry.json +1 -1
- package/src/forge/_generated/aiRegistry.ts +3 -3
- package/src/forge/_generated/api.json +1 -1
- package/src/forge/_generated/api.ts +1 -1
- package/src/forge/_generated/appGraph.json +1 -1
- package/src/forge/_generated/appGraph.ts +165 -98
- package/src/forge/_generated/appMap.md +1 -1
- package/src/forge/_generated/artifactManifest.json +1 -1
- package/src/forge/_generated/artifactManifest.ts +2 -2
- package/src/forge/_generated/authClaims.ts +1 -1
- package/src/forge/_generated/authConfig.ts +1 -1
- package/src/forge/_generated/authContext.ts +1 -1
- package/src/forge/_generated/authRegistry.ts +1 -1
- package/src/forge/_generated/buildInfo.json +1 -1
- package/src/forge/_generated/buildInfo.ts +4 -4
- package/src/forge/_generated/capabilityMap.json +1 -1
- package/src/forge/_generated/capabilityMap.md +1 -1
- package/src/forge/_generated/capabilityMap.ts +2 -2
- package/src/forge/_generated/client.ts +1 -1
- package/src/forge/_generated/clientApi.ts +1 -1
- package/src/forge/_generated/clientManifest.json +1 -1
- package/src/forge/_generated/clientManifest.ts +14 -3
- package/src/forge/_generated/clientTypes.ts +1 -1
- package/src/forge/_generated/configRegistry.ts +1 -1
- package/src/forge/_generated/dataGraph.json +1 -1
- package/src/forge/_generated/dataGraph.ts +3 -3
- package/src/forge/_generated/db.ts +1 -1
- package/src/forge/_generated/dbSecurityManifest.ts +1 -1
- package/src/forge/_generated/dbSessionContext.ts +1 -1
- package/src/forge/_generated/deployManifest.json +1 -1
- package/src/forge/_generated/deployManifest.ts +7 -7
- package/src/forge/_generated/devManifest.json +1 -1
- package/src/forge/_generated/devManifest.ts +3 -3
- package/src/forge/_generated/envSchema.ts +1 -1
- package/src/forge/_generated/externalServices.ts +1 -1
- package/src/forge/_generated/frontendGraph.ts +1 -1
- package/src/forge/_generated/importGuards.json +1 -1
- package/src/forge/_generated/importGuards.ts +35 -1
- package/src/forge/_generated/index.ts +3 -1
- package/src/forge/_generated/liveProductionManifest.ts +1 -1
- package/src/forge/_generated/liveProtocol.ts +1 -1
- package/src/forge/_generated/liveQueryRegistry.json +1 -1
- package/src/forge/_generated/liveQueryRegistry.ts +3 -3
- package/src/forge/_generated/liveTransportConfig.ts +1 -1
- package/src/forge/_generated/makeRegistry.json +1 -1
- package/src/forge/_generated/makeRegistry.ts +8 -8
- package/src/forge/_generated/makeTemplates.json +1 -1
- package/src/forge/_generated/makeTemplates.ts +2 -2
- package/src/forge/_generated/mockMap.ts +1 -1
- package/src/forge/_generated/operationPlaybooks.md +6 -6
- package/src/forge/_generated/packageGraph.json +1 -1
- package/src/forge/_generated/packageGraph.ts +52412 -2
- package/src/forge/_generated/packageUpgradeRegistry.json +1 -1
- package/src/forge/_generated/packageUpgradeRegistry.ts +2 -2
- package/src/forge/_generated/permissionMatrix.json +1 -1
- package/src/forge/_generated/permissionMatrix.ts +3 -3
- package/src/forge/_generated/policyRegistry.json +1 -1
- package/src/forge/_generated/policyRegistry.ts +3 -3
- package/src/forge/_generated/queryRegistry.json +1 -1
- 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 +1 -1
- package/src/forge/_generated/reactManifest.ts +3 -3
- package/src/forge/_generated/releaseManifest.json +1 -1
- package/src/forge/_generated/releaseManifest.ts +3 -3
- package/src/forge/_generated/rlsPolicies.sql +1 -1
- package/src/forge/_generated/rlsPolicies.ts +1 -1
- package/src/forge/_generated/runtimeGraph.json +1 -1
- package/src/forge/_generated/runtimeGraph.ts +3 -3
- package/src/forge/_generated/runtimeMatrix.json +1 -1
- package/src/forge/_generated/runtimeMatrix.ts +70357 -1
- package/src/forge/_generated/runtimeRegistry.ts +1 -1
- package/src/forge/_generated/runtimeRules.md +1 -1
- package/src/forge/_generated/secretRegistry.ts +1 -1
- package/src/forge/_generated/secretsContext.ts +1 -1
- package/src/forge/_generated/serverApi.ts +1 -1
- package/src/forge/_generated/sourceMapManifest.json +1 -1
- package/src/forge/_generated/sourceMapManifest.ts +2 -2
- package/src/forge/_generated/sqlPlan.ts +1 -1
- package/src/forge/_generated/subscriptionManifest.json +1 -1
- package/src/forge/_generated/subscriptionManifest.ts +3 -3
- package/src/forge/_generated/symbolicationManifest.json +1 -1
- package/src/forge/_generated/symbolicationManifest.ts +2 -2
- package/src/forge/_generated/telemetryRegistry.json +1 -1
- package/src/forge/_generated/telemetryRegistry.ts +3 -3
- package/src/forge/_generated/telemetrySinks.json +1 -1
- package/src/forge/_generated/telemetrySinks.ts +2 -2
- package/src/forge/_generated/tenantScope.json +1 -1
- package/src/forge/_generated/tenantScope.ts +3 -3
- package/src/forge/_generated/testGraph.json +1 -1
- package/src/forge/_generated/testGraph.ts +95 -5
- package/src/forge/_generated/testPlanRegistry.json +1 -1
- package/src/forge/_generated/testPlanRegistry.ts +2 -2
- package/src/forge/_generated/uiRoutes.ts +1 -1
- package/src/forge/_generated/uiScenarios.ts +1 -1
- package/src/forge/_generated/uiTestManifest.json +1 -1
- package/src/forge/_generated/uiTestManifest.ts +2 -2
- package/src/forge/_generated/vue.d.ts +25 -0
- package/src/forge/_generated/vue.ts +30 -0
- package/src/forge/_generated/vueManifest.json +1 -0
- package/src/forge/_generated/vueManifest.ts +19 -0
- package/src/forge/_generated/workflowRegistry.json +1 -1
- package/src/forge/_generated/workflowRegistry.ts +3 -3
- package/src/forge/_generated/workflowSubscriptions.json +1 -1
- package/src/forge/_generated/workflowSubscriptions.ts +3 -3
- package/src/forge/agent-adapters/index.ts +1 -1
- package/src/forge/brownfield-import/index.ts +726 -0
- package/src/forge/brownfield-import/types.ts +127 -0
- package/src/forge/cli/commands.ts +27 -0
- package/src/forge/cli/parse.ts +27 -1
- package/src/forge/cli/verify.ts +2 -0
- package/src/forge/compiler/agent-contract/build.ts +10 -9
- package/src/forge/compiler/client-sdk/build-manifest.ts +55 -0
- package/src/forge/compiler/client-sdk/render-client.ts +66 -1
- package/src/forge/compiler/diagnostics/create.ts +6 -1
- package/src/forge/compiler/emitter/barrel.ts +3 -0
- package/src/forge/compiler/frontend-graph/build.ts +85 -13
- package/src/forge/compiler/make-registry/build.ts +6 -7
- package/src/forge/compiler/orchestrator/plan.ts +13 -0
- package/src/forge/compiler/orchestrator/serialize.ts +6 -0
- package/src/forge/compiler/types/cli.ts +1 -0
- package/src/forge/compiler/types/frontend-graph.ts +2 -2
- package/src/forge/intent/index.ts +11 -6
- package/src/forge/make/index.ts +23 -3
- package/src/forge/make/templates.ts +153 -0
- package/src/forge/make/types.ts +2 -1
- package/src/forge/version.ts +1 -1
- package/src/forge/vue/index.ts +407 -0
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
export type BrownfieldImportSubcommand = "analyze" | "inspect";
|
|
2
|
+
|
|
3
|
+
export interface BrownfieldImportCommandOptions {
|
|
4
|
+
subcommand: BrownfieldImportSubcommand;
|
|
5
|
+
json: boolean;
|
|
6
|
+
dryRun: boolean;
|
|
7
|
+
workspaceRoot: string;
|
|
8
|
+
entry?: string;
|
|
9
|
+
target?: string;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export type ImportedAssurance = "static-scan";
|
|
13
|
+
export type ImportedReviewStatus = "needs-review" | "approved" | "rejected";
|
|
14
|
+
export type ImportedEntryKind = "command" | "query" | "unknown";
|
|
15
|
+
export type ImportedRouteSource = "next-app-router" | "next-pages-api" | "express" | "nest" | "unknown";
|
|
16
|
+
|
|
17
|
+
export interface ImportedDependencyInventory {
|
|
18
|
+
dependencies: string[];
|
|
19
|
+
devDependencies: string[];
|
|
20
|
+
scripts: string[];
|
|
21
|
+
frameworks: string[];
|
|
22
|
+
dataPackages: string[];
|
|
23
|
+
externalPackages: string[];
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export interface ImportedInventory {
|
|
27
|
+
schemaVersion: "0.1.0";
|
|
28
|
+
origin: "imported";
|
|
29
|
+
assurance: ImportedAssurance;
|
|
30
|
+
workspaceRoot: string;
|
|
31
|
+
generatedAt: string;
|
|
32
|
+
packageName?: string;
|
|
33
|
+
dependencies: ImportedDependencyInventory;
|
|
34
|
+
filesScanned: number;
|
|
35
|
+
sourceFiles: string[];
|
|
36
|
+
env: {
|
|
37
|
+
processEnv: string[];
|
|
38
|
+
envFiles: string[];
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export interface ImportedRoute {
|
|
43
|
+
id: string;
|
|
44
|
+
method: string;
|
|
45
|
+
path: string;
|
|
46
|
+
file: string;
|
|
47
|
+
source: ImportedRouteSource;
|
|
48
|
+
handler?: string;
|
|
49
|
+
confidence: number;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
export interface ImportedFrontendCall {
|
|
53
|
+
id: string;
|
|
54
|
+
file: string;
|
|
55
|
+
client: "fetch" | "axios";
|
|
56
|
+
method: string;
|
|
57
|
+
url: string;
|
|
58
|
+
routeId?: string;
|
|
59
|
+
confidence: number;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
export interface ImportedCandidateEntry {
|
|
63
|
+
id: string;
|
|
64
|
+
name: string;
|
|
65
|
+
kind: ImportedEntryKind;
|
|
66
|
+
method: string;
|
|
67
|
+
path: string;
|
|
68
|
+
routeId: string;
|
|
69
|
+
file: string;
|
|
70
|
+
origin: "imported";
|
|
71
|
+
assurance: ImportedAssurance;
|
|
72
|
+
reviewStatus: ImportedReviewStatus;
|
|
73
|
+
visibleToAgent: boolean;
|
|
74
|
+
needsApproval: boolean;
|
|
75
|
+
confidence: number;
|
|
76
|
+
risks: string[];
|
|
77
|
+
evidence: string[];
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
export interface ImportedRiskFinding {
|
|
81
|
+
code: string;
|
|
82
|
+
severity: "info" | "warning" | "error";
|
|
83
|
+
file?: string;
|
|
84
|
+
routeId?: string;
|
|
85
|
+
message: string;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
export interface ImportedRiskReport {
|
|
89
|
+
schemaVersion: "0.1.0";
|
|
90
|
+
summary: {
|
|
91
|
+
routeCount: number;
|
|
92
|
+
frontendCallCount: number;
|
|
93
|
+
candidateCount: number;
|
|
94
|
+
commandCount: number;
|
|
95
|
+
queryCount: number;
|
|
96
|
+
hiddenFromAgents: number;
|
|
97
|
+
needsApproval: number;
|
|
98
|
+
};
|
|
99
|
+
findings: ImportedRiskFinding[];
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
export interface BrownfieldImportArtifacts {
|
|
103
|
+
inventory: string;
|
|
104
|
+
routes: string;
|
|
105
|
+
frontendCalls: string;
|
|
106
|
+
candidateEntries: string;
|
|
107
|
+
riskReport: string;
|
|
108
|
+
migrationPlan: string;
|
|
109
|
+
importedAgentContract: string;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
export interface BrownfieldImportResult {
|
|
113
|
+
schemaVersion: "0.1.0";
|
|
114
|
+
feature: "H49";
|
|
115
|
+
subcommand: BrownfieldImportSubcommand;
|
|
116
|
+
workspaceRoot: string;
|
|
117
|
+
wroteArtifacts: boolean;
|
|
118
|
+
artifacts: BrownfieldImportArtifacts;
|
|
119
|
+
inventory: ImportedInventory | null;
|
|
120
|
+
routes: ImportedRoute[];
|
|
121
|
+
frontendCalls: ImportedFrontendCall[];
|
|
122
|
+
candidateEntries: ImportedCandidateEntry[];
|
|
123
|
+
riskReport: ImportedRiskReport | null;
|
|
124
|
+
migrationPlan: string | null;
|
|
125
|
+
exitCode: 0 | 1;
|
|
126
|
+
failureKind?: string;
|
|
127
|
+
}
|
|
@@ -160,6 +160,12 @@ import {
|
|
|
160
160
|
formatForgeDoJson,
|
|
161
161
|
runForgeDoCommand,
|
|
162
162
|
} from "../intent/index.ts";
|
|
163
|
+
import {
|
|
164
|
+
formatBrownfieldImportHuman,
|
|
165
|
+
formatBrownfieldImportJson,
|
|
166
|
+
inspectBrownfieldImport,
|
|
167
|
+
runBrownfieldImportCommand,
|
|
168
|
+
} from "../brownfield-import/index.ts";
|
|
163
169
|
import {
|
|
164
170
|
formatAgentHuman,
|
|
165
171
|
formatAgentJson,
|
|
@@ -518,6 +524,18 @@ export async function runInspectCommand(
|
|
|
518
524
|
};
|
|
519
525
|
}
|
|
520
526
|
|
|
527
|
+
if (target === "imported") {
|
|
528
|
+
const result = inspectBrownfieldImport(workspaceRoot);
|
|
529
|
+
return {
|
|
530
|
+
target,
|
|
531
|
+
data: formatBrownfieldImportJson(result),
|
|
532
|
+
warnings: [],
|
|
533
|
+
errors: [],
|
|
534
|
+
exitCode: result.exitCode,
|
|
535
|
+
failureKind: result.failureKind,
|
|
536
|
+
};
|
|
537
|
+
}
|
|
538
|
+
|
|
521
539
|
if (target === "all") {
|
|
522
540
|
const aggregatePaths: Array<[string, string]> = [
|
|
523
541
|
["app", `${GENERATED_DIR}/appGraph.json`],
|
|
@@ -973,6 +991,15 @@ export async function executeCommand(command: ForgeCommand): Promise<number> {
|
|
|
973
991
|
}
|
|
974
992
|
return result.exitCode;
|
|
975
993
|
}
|
|
994
|
+
case "import": {
|
|
995
|
+
const result = runBrownfieldImportCommand(command.options);
|
|
996
|
+
if (command.options.json) {
|
|
997
|
+
process.stdout.write(formatJsonResult(formatBrownfieldImportJson(result)));
|
|
998
|
+
} else {
|
|
999
|
+
process.stdout.write(formatBrownfieldImportHuman(result));
|
|
1000
|
+
}
|
|
1001
|
+
return result.exitCode;
|
|
1002
|
+
}
|
|
976
1003
|
case "inspect": {
|
|
977
1004
|
const result = await runInspectCommand(
|
|
978
1005
|
command.target,
|
package/src/forge/cli/parse.ts
CHANGED
|
@@ -48,6 +48,7 @@ import type {
|
|
|
48
48
|
} from "../ui/types.ts";
|
|
49
49
|
import type { ForgeDoOptions } from "../intent/types.ts";
|
|
50
50
|
import type { BenchCommandOptions, BenchSubcommand } from "../bench.ts";
|
|
51
|
+
import type { BrownfieldImportCommandOptions } from "../brownfield-import/types.ts";
|
|
51
52
|
|
|
52
53
|
export type ForgeCommand =
|
|
53
54
|
| { kind: "version"; json: boolean }
|
|
@@ -168,6 +169,7 @@ export type ForgeCommand =
|
|
|
168
169
|
| { kind: "review"; options: ReviewCommandOptions }
|
|
169
170
|
| { kind: "ui"; options: UiCommandOptions }
|
|
170
171
|
| { kind: "manifest"; subcommand: "validate" | "import"; path: string; json: boolean; workspaceRoot: string }
|
|
172
|
+
| { kind: "import"; options: BrownfieldImportCommandOptions }
|
|
171
173
|
| { kind: "delta"; subcommand: "status"; json: boolean; workspaceRoot: string }
|
|
172
174
|
| { kind: "timeline"; target?: string; kindFilter?: string; sessionId?: string; limit?: number; json: boolean; rebuild: boolean; forAgent: boolean; workspaceRoot: string }
|
|
173
175
|
| { kind: "explain"; thing: string; json: boolean; workspaceRoot: string }
|
|
@@ -360,6 +362,7 @@ export const TOP_LEVEL_COMMANDS = [
|
|
|
360
362
|
"timeline",
|
|
361
363
|
"explain",
|
|
362
364
|
"manifest",
|
|
365
|
+
"import",
|
|
363
366
|
"generate",
|
|
364
367
|
"add",
|
|
365
368
|
"inspect",
|
|
@@ -416,6 +419,7 @@ export const INSPECT_TARGETS: InspectTarget[] = [
|
|
|
416
419
|
"agent-adapters",
|
|
417
420
|
"capability-map",
|
|
418
421
|
"framework",
|
|
422
|
+
"imported",
|
|
419
423
|
"ui",
|
|
420
424
|
"ui-scenarios",
|
|
421
425
|
"ui-routes",
|
|
@@ -1266,7 +1270,7 @@ export function parseCli(argv: string[]): ParsedCli {
|
|
|
1266
1270
|
event: parseOptionValue(argv, "--event"),
|
|
1267
1271
|
trigger: parseOptionValue(argv, "--trigger"),
|
|
1268
1272
|
component: parseOptionValue(argv, "--component"),
|
|
1269
|
-
framework: parseOptionValue(argv, "--framework") as "vite" | "next" | undefined,
|
|
1273
|
+
framework: parseOptionValue(argv, "--framework") as "vite" | "next" | "nuxt" | undefined,
|
|
1270
1274
|
withAi: parseFlag(argv, "--with-ai"),
|
|
1271
1275
|
withCrud: parseFlag(argv, "--with-crud"),
|
|
1272
1276
|
withLiveQuery: parseFlag(argv, "--with-livequery"),
|
|
@@ -1711,6 +1715,28 @@ export function parseCli(argv: string[]): ParsedCli {
|
|
|
1711
1715
|
errors,
|
|
1712
1716
|
};
|
|
1713
1717
|
}
|
|
1718
|
+
case "import": {
|
|
1719
|
+
const subcommand = rest[0];
|
|
1720
|
+
if (subcommand !== "analyze" && subcommand !== "inspect") {
|
|
1721
|
+
errors.push("forge import requires subcommand analyze or inspect");
|
|
1722
|
+
return { command: null, workspaceRoot, errors };
|
|
1723
|
+
}
|
|
1724
|
+
return {
|
|
1725
|
+
command: {
|
|
1726
|
+
kind: "import",
|
|
1727
|
+
options: {
|
|
1728
|
+
subcommand,
|
|
1729
|
+
json: parseFlag(argv, "--json"),
|
|
1730
|
+
dryRun: parseFlag(argv, "--dry-run"),
|
|
1731
|
+
workspaceRoot,
|
|
1732
|
+
entry: parseOptionValue(argv, "--entry"),
|
|
1733
|
+
target: parseOptionValue(argv, "--target"),
|
|
1734
|
+
},
|
|
1735
|
+
},
|
|
1736
|
+
workspaceRoot,
|
|
1737
|
+
errors,
|
|
1738
|
+
};
|
|
1739
|
+
}
|
|
1714
1740
|
case "add": {
|
|
1715
1741
|
const alias = rest[0];
|
|
1716
1742
|
if (!alias) {
|
package/src/forge/cli/verify.ts
CHANGED
|
@@ -350,6 +350,7 @@ const STRICT_TEST_FALLBACK_MS_BY_PATH: Array<{ pattern: RegExp; estimatedMs: num
|
|
|
350
350
|
{ pattern: /^tests\/external-manifest\/external-runtime-cli\.test\.ts$/, estimatedMs: 6_000 },
|
|
351
351
|
{ pattern: /^tests\/external-manifest\/external-runtime-node-cli\.test\.ts$/, estimatedMs: 12_000 },
|
|
352
352
|
{ pattern: /^tests\/external-manifest\/go-adapter-conformance\.test\.ts$/, estimatedMs: 5_000 },
|
|
353
|
+
{ pattern: /^tests\/external-manifest\/java-adapter-conformance\.test\.ts$/, estimatedMs: 20_000 },
|
|
353
354
|
{ pattern: /^tests\/impact\/h28-impact\.test\.ts$/, estimatedMs: 8_000 },
|
|
354
355
|
{ pattern: /^tests\/impact\/h28-impact-runner\.test\.ts$/, estimatedMs: 7_000 },
|
|
355
356
|
{ pattern: /^tests\/impact\/h28-impact-runner-diagnostics\.test\.ts$/, estimatedMs: 3_000 },
|
|
@@ -378,6 +379,7 @@ const STRICT_ISOLATED_TEST_PATTERNS = [
|
|
|
378
379
|
/^tests\/dev\//,
|
|
379
380
|
/^tests\/external-manifest\/external-manifest\.test\.ts$/,
|
|
380
381
|
/^tests\/external-manifest\/go-adapter-conformance\.test\.ts$/,
|
|
382
|
+
/^tests\/external-manifest\/java-adapter-conformance\.test\.ts$/,
|
|
381
383
|
/^tests\/external-manifest\/external-runtime-bridge\.test\.ts$/,
|
|
382
384
|
/^tests\/external-manifest\/external-runtime-node-cli\.test\.ts$/,
|
|
383
385
|
/^tests\/impact\/h28-impact\.test\.ts$/,
|
|
@@ -453,17 +453,17 @@ function playbooks(): AgentPlaybook[] {
|
|
|
453
453
|
"Run forge dev --once --json for a one-shot diagnostic cycle.",
|
|
454
454
|
"Use --api-only, --web-only, --no-watch, or --no-worker only when narrowing the loop intentionally.",
|
|
455
455
|
"When a web app exists, forge dev starts the API runtime and the web dev server together and prints both URLs.",
|
|
456
|
-
"Use generated client
|
|
456
|
+
"Use generated client bindings through web/lib/forge.ts, web/src/lib/forge.ts, or Nuxt web/composables/forge.ts.",
|
|
457
457
|
],
|
|
458
458
|
},
|
|
459
459
|
{
|
|
460
460
|
title: "Add or update frontend",
|
|
461
461
|
steps: [
|
|
462
|
-
"Run forge make ui --framework vite --dry-run --json when the app does not have a web root.",
|
|
462
|
+
"Run forge make ui --framework vite --dry-run --json or forge make ui --framework nuxt --dry-run --json when the app does not have a web root.",
|
|
463
463
|
"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.",
|
|
464
|
-
"Use web/lib/forge.ts as the generated client bridge.",
|
|
465
|
-
"Mount ForgeProvider once in the web app provider/layout layer; use devAuth for local development.",
|
|
466
|
-
"Use useQuery
|
|
464
|
+
"Use web/lib/forge.ts, web/src/lib/forge.ts, or web/composables/forge.ts as the generated client bridge.",
|
|
465
|
+
"Mount ForgeProvider or install the Nuxt Forge plugin once in the web app provider/layout layer; use devAuth for local development.",
|
|
466
|
+
"Use useQuery/useCommand/useLiveQuery or useForgeQuery/useForgeCommand/useForgeLiveQuery instead of raw /commands or /queries fetches.",
|
|
467
467
|
"Run forge generate so frontendGraph and agentContract include routes and bindings.",
|
|
468
468
|
"Run forge inspect capabilities --json to confirm UI actions map to runtime capabilities.",
|
|
469
469
|
"Run forge dev --once --json and forge doctor --json.",
|
|
@@ -1502,9 +1502,9 @@ ${contract.frontend.dev ? `- Web URL: ${contract.frontend.dev.url}
|
|
|
1502
1502
|
|
|
1503
1503
|
Rules:
|
|
1504
1504
|
|
|
1505
|
-
- Use the local \`web/**/lib/forge.ts\` bridge to generated
|
|
1506
|
-
- Mount \`<ForgeProvider devAuth>\` in local development.
|
|
1507
|
-
- Use \`useQuery
|
|
1505
|
+
- Use the local \`web/**/lib/forge.ts\` or Nuxt \`web/composables/forge.ts\` bridge to generated bindings.
|
|
1506
|
+
- Mount \`<ForgeProvider devAuth>\` or install the Nuxt Forge plugin in local development.
|
|
1507
|
+
- Use \`useQuery\`/\`useCommand\`/\`useLiveQuery\` or \`useForgeQuery\`/\`useForgeCommand\`/\`useForgeLiveQuery\` instead of raw Forge endpoint fetches in components.
|
|
1508
1508
|
- Keep frontend routes reflected in \`src/forge/_generated/frontendGraph.json\`.
|
|
1509
1509
|
|
|
1510
1510
|
## Common tasks
|
|
@@ -1537,6 +1537,7 @@ Use:
|
|
|
1537
1537
|
forge make resource <name> --fields title:text,status:enum(open,closed) --dry-run --json
|
|
1538
1538
|
forge make resource <name> --fields title:text,status:enum(open,closed) --with-ui --yes
|
|
1539
1539
|
forge make ui --framework vite --dry-run --json
|
|
1540
|
+
forge make ui --framework nuxt --dry-run --json
|
|
1540
1541
|
forge make ai-chat support --dry-run --json
|
|
1541
1542
|
\`\`\`
|
|
1542
1543
|
|
|
@@ -1553,7 +1554,7 @@ forge inspect frontend --json
|
|
|
1553
1554
|
forge inspect capabilities --json
|
|
1554
1555
|
\`\`\`
|
|
1555
1556
|
|
|
1556
|
-
\`forge dev\` starts the API runtime and web app together when \`web/\` exists. \`forge dev --once --json\` reports routes, components,
|
|
1557
|
+
\`forge dev\` starts the API runtime and web app together when \`web/\` exists. \`forge dev --once --json\` reports routes, components, providers/plugins, bridge files, generated client bindings, direct runtime fetch warnings, capability-map parity warnings, and fix hints.
|
|
1557
1558
|
|
|
1558
1559
|
### Apply a feature blueprint
|
|
1559
1560
|
|
|
@@ -23,6 +23,10 @@ export interface ClientManifest {
|
|
|
23
23
|
entrypoint: string;
|
|
24
24
|
hooks: string[];
|
|
25
25
|
};
|
|
26
|
+
vue: {
|
|
27
|
+
entrypoint: string;
|
|
28
|
+
composables: string[];
|
|
29
|
+
};
|
|
26
30
|
excluded: {
|
|
27
31
|
actions: string[];
|
|
28
32
|
workflows: string[];
|
|
@@ -43,6 +47,18 @@ export interface ReactManifest {
|
|
|
43
47
|
clientSafe: true;
|
|
44
48
|
}
|
|
45
49
|
|
|
50
|
+
export interface VueManifest {
|
|
51
|
+
schemaVersion: string;
|
|
52
|
+
generatorVersion: string;
|
|
53
|
+
inputHash: string;
|
|
54
|
+
entrypoint: string;
|
|
55
|
+
composables: string[];
|
|
56
|
+
queries: string[];
|
|
57
|
+
commands: string[];
|
|
58
|
+
liveQueries: string[];
|
|
59
|
+
clientSafe: true;
|
|
60
|
+
}
|
|
61
|
+
|
|
46
62
|
const SERVER_ADAPTER_SUFFIX = ".server.ts";
|
|
47
63
|
|
|
48
64
|
function collectServerAdapters(classified: ClassifiedPackage[]): string[] {
|
|
@@ -117,6 +133,17 @@ export function buildClientManifest(
|
|
|
117
133
|
"useLiveQuery",
|
|
118
134
|
],
|
|
119
135
|
},
|
|
136
|
+
vue: {
|
|
137
|
+
entrypoint: "src/forge/_generated/vue.ts",
|
|
138
|
+
composables: [
|
|
139
|
+
"provideForge",
|
|
140
|
+
"useForgeClient",
|
|
141
|
+
"useForgeAuth",
|
|
142
|
+
"useForgeQuery",
|
|
143
|
+
"useForgeCommand",
|
|
144
|
+
"useForgeLiveQuery",
|
|
145
|
+
],
|
|
146
|
+
},
|
|
120
147
|
excluded: {
|
|
121
148
|
actions,
|
|
122
149
|
workflows,
|
|
@@ -153,3 +180,31 @@ export function buildReactManifest(clientManifest: ClientManifest): ReactManifes
|
|
|
153
180
|
clientSafe: true,
|
|
154
181
|
};
|
|
155
182
|
}
|
|
183
|
+
|
|
184
|
+
export function buildVueManifest(clientManifest: ClientManifest): VueManifest {
|
|
185
|
+
const composables = [
|
|
186
|
+
"provideForge",
|
|
187
|
+
"useForgeClient",
|
|
188
|
+
"useForgeAuth",
|
|
189
|
+
"useForgeQuery",
|
|
190
|
+
"useForgeCommand",
|
|
191
|
+
"useForgeLiveQuery",
|
|
192
|
+
];
|
|
193
|
+
|
|
194
|
+
return {
|
|
195
|
+
schemaVersion: "1.0.0",
|
|
196
|
+
generatorVersion: GENERATOR_VERSION,
|
|
197
|
+
inputHash: hashStable(
|
|
198
|
+
canonicalJson({
|
|
199
|
+
clientInputHash: clientManifest.inputHash,
|
|
200
|
+
composables,
|
|
201
|
+
}),
|
|
202
|
+
),
|
|
203
|
+
entrypoint: "src/forge/_generated/vue.ts",
|
|
204
|
+
composables,
|
|
205
|
+
queries: clientManifest.queries,
|
|
206
|
+
commands: clientManifest.commands,
|
|
207
|
+
liveQueries: clientManifest.liveQueries,
|
|
208
|
+
clientSafe: true,
|
|
209
|
+
};
|
|
210
|
+
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { ClientManifest, ReactManifest } from "./build-manifest.ts";
|
|
1
|
+
import type { ClientManifest, ReactManifest, VueManifest } from "./build-manifest.ts";
|
|
2
2
|
|
|
3
3
|
export function renderClientTypesTs(): string {
|
|
4
4
|
return `export type ForgeStaticAuth = {
|
|
@@ -535,3 +535,68 @@ export declare const useLiveQuery: import("forge/react").ForgeReactBindings["use
|
|
|
535
535
|
export function renderReactManifestTs(manifest: ReactManifest): string {
|
|
536
536
|
return `export const reactManifest = ${JSON.stringify(manifest, null, 2)} as const;\n`;
|
|
537
537
|
}
|
|
538
|
+
|
|
539
|
+
export function renderVueTs(): string {
|
|
540
|
+
return `import { createForgeVueBindings } from "forge/vue";
|
|
541
|
+
import { createForgeClient } from "./client.ts";
|
|
542
|
+
|
|
543
|
+
export type {
|
|
544
|
+
ForgeDevAuthConfig,
|
|
545
|
+
ForgeVueAuth,
|
|
546
|
+
ForgeVueAuthProvider,
|
|
547
|
+
ForgeVueBindings,
|
|
548
|
+
ForgeVueClient,
|
|
549
|
+
ForgeVueClientConfig,
|
|
550
|
+
ForgeVueError,
|
|
551
|
+
ForgeVuePluginOptions,
|
|
552
|
+
UseForgeCommandOptions,
|
|
553
|
+
UseForgeCommandResult,
|
|
554
|
+
UseForgeLiveQueryOptions,
|
|
555
|
+
UseForgeLiveQueryResult,
|
|
556
|
+
UseForgeQueryOptions,
|
|
557
|
+
UseForgeQueryResult,
|
|
558
|
+
} from "forge/vue";
|
|
559
|
+
|
|
560
|
+
const forgeVue = createForgeVueBindings(createForgeClient);
|
|
561
|
+
|
|
562
|
+
export const ForgeVuePlugin = forgeVue.ForgeVuePlugin;
|
|
563
|
+
export const provideForge = forgeVue.provideForge;
|
|
564
|
+
export const useForgeClient = forgeVue.useForgeClient;
|
|
565
|
+
export const useForgeAuth = forgeVue.useForgeAuth;
|
|
566
|
+
export const useForgeQuery = forgeVue.useForgeQuery;
|
|
567
|
+
export const useForgeCommand = forgeVue.useForgeCommand;
|
|
568
|
+
export const useForgeLiveQuery = forgeVue.useForgeLiveQuery;
|
|
569
|
+
`;
|
|
570
|
+
}
|
|
571
|
+
|
|
572
|
+
export function renderVueDts(): string {
|
|
573
|
+
return `export type {
|
|
574
|
+
ForgeDevAuthConfig,
|
|
575
|
+
ForgeVueAuth,
|
|
576
|
+
ForgeVueAuthProvider,
|
|
577
|
+
ForgeVueBindings,
|
|
578
|
+
ForgeVueClient,
|
|
579
|
+
ForgeVueClientConfig,
|
|
580
|
+
ForgeVueError,
|
|
581
|
+
ForgeVuePluginOptions,
|
|
582
|
+
UseForgeCommandOptions,
|
|
583
|
+
UseForgeCommandResult,
|
|
584
|
+
UseForgeLiveQueryOptions,
|
|
585
|
+
UseForgeLiveQueryResult,
|
|
586
|
+
UseForgeQueryOptions,
|
|
587
|
+
UseForgeQueryResult,
|
|
588
|
+
} from "forge/vue";
|
|
589
|
+
|
|
590
|
+
export declare const ForgeVuePlugin: import("forge/vue").ForgeVueBindings["ForgeVuePlugin"];
|
|
591
|
+
export declare const provideForge: import("forge/vue").ForgeVueBindings["provideForge"];
|
|
592
|
+
export declare const useForgeClient: import("forge/vue").ForgeVueBindings["useForgeClient"];
|
|
593
|
+
export declare const useForgeAuth: import("forge/vue").ForgeVueBindings["useForgeAuth"];
|
|
594
|
+
export declare const useForgeQuery: import("forge/vue").ForgeVueBindings["useForgeQuery"];
|
|
595
|
+
export declare const useForgeCommand: import("forge/vue").ForgeVueBindings["useForgeCommand"];
|
|
596
|
+
export declare const useForgeLiveQuery: import("forge/vue").ForgeVueBindings["useForgeLiveQuery"];
|
|
597
|
+
`;
|
|
598
|
+
}
|
|
599
|
+
|
|
600
|
+
export function renderVueManifestTs(manifest: VueManifest): string {
|
|
601
|
+
return `export const vueManifest = ${JSON.stringify(manifest, null, 2)} as const;\n`;
|
|
602
|
+
}
|
|
@@ -106,7 +106,12 @@ function defaultGuidanceForCode(code: string): DiagnosticGuidance | null {
|
|
|
106
106
|
if (code.startsWith("FORGE_FRONTEND_")) {
|
|
107
107
|
return {
|
|
108
108
|
fixHint: "Use the generated frontend bridge and inspect src/forge/_generated/frontendGraph.json before editing UI wiring.",
|
|
109
|
-
suggestedCommands: [
|
|
109
|
+
suggestedCommands: [
|
|
110
|
+
"forge inspect frontend --json",
|
|
111
|
+
"forge make ui --framework vite --dry-run --json",
|
|
112
|
+
"forge make ui --framework nuxt --dry-run --json",
|
|
113
|
+
"forge generate",
|
|
114
|
+
],
|
|
110
115
|
docs: ["src/forge/_generated/frontendGraph.json", "AGENTS.md"],
|
|
111
116
|
};
|
|
112
117
|
}
|
|
@@ -33,6 +33,9 @@ export function buildBarrelIndexBody(exportFilePaths: string[]): string {
|
|
|
33
33
|
|
|
34
34
|
const lines = unique.map((path) => {
|
|
35
35
|
const exportPath = toBarrelExportPath(path);
|
|
36
|
+
if (exportPath === "./vue") {
|
|
37
|
+
return `export * as vue from "${exportPath}";`;
|
|
38
|
+
}
|
|
36
39
|
return `export * from "${exportPath}";`;
|
|
37
40
|
});
|
|
38
41
|
|