@fabrika/builder 0.9.0-dev.3 → 0.9.0-dev.5
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/cli/src/inject-skills.ts +2 -2
- package/cli/src/skeletons.ts +2 -2
- package/daemon/src/handlers.ts +1 -1
- package/daemon/src/platform-remote.ts +1 -1
- package/decisions/technologies/zerops-fabrika-auth.md +1 -1
- package/decisions/technologies/zerops-platform.md +1 -1
- package/package.json +8 -8
- package/types/daemon/src/platform-remote.d.ts +96 -0
- package/types/shared/index.d.ts +55 -55
- package/ui/dist/assets/client.y7kwbs9q.js +214 -0
- package/ui/dist/index.html +1 -1
- package/ui/dist/assets/client.j37h210g.js +0 -214
package/cli/src/inject-skills.ts
CHANGED
|
@@ -237,8 +237,8 @@ function tomlString(value: string): string {
|
|
|
237
237
|
}
|
|
238
238
|
|
|
239
239
|
function tomlMultiline(value: string): string {
|
|
240
|
-
const escaped = value.replace(/\\/g, '\\\\').replace(
|
|
241
|
-
return
|
|
240
|
+
const escaped = value.replace(/\\/g, '\\\\').replace(/"""/g, '\\"\\"\\"')
|
|
241
|
+
return `"""\n${escaped}"""`
|
|
242
242
|
}
|
|
243
243
|
|
|
244
244
|
function installManagedFile(
|
package/cli/src/skeletons.ts
CHANGED
|
@@ -15,7 +15,7 @@ export function readSkeletons(testsBrowserDir: string): Skeleton[] {
|
|
|
15
15
|
if (!existsSync(testsBrowserDir) || !statSync(testsBrowserDir).isDirectory()) return []
|
|
16
16
|
const out: Skeleton[] = []
|
|
17
17
|
for (const entry of readdirSync(testsBrowserDir).sort()) {
|
|
18
|
-
if (
|
|
18
|
+
if (!entry.endsWith('.test.ts')) continue
|
|
19
19
|
const file = join(testsBrowserDir, entry)
|
|
20
20
|
if (!statSync(file).isFile() || statSync(file).size === 0) continue
|
|
21
21
|
out.push(...parseSkeletons(file))
|
|
@@ -51,7 +51,7 @@ export function parseSkeletons(file: string): Skeleton[] {
|
|
|
51
51
|
}
|
|
52
52
|
|
|
53
53
|
function strField(meta: string, key: string): string | undefined {
|
|
54
|
-
const re = new RegExp(`\\b${key}\\s*:\\s*([\`'
|
|
54
|
+
const re = new RegExp(`\\b${key}\\s*:\\s*([\`'"])([\\s\\S]*?)\\1`)
|
|
55
55
|
const m = meta.match(re)
|
|
56
56
|
return m ? m[2] : undefined
|
|
57
57
|
}
|
package/daemon/src/handlers.ts
CHANGED
|
@@ -298,7 +298,7 @@ export function createHandlers(ctx: HandlerContext): Route[] {
|
|
|
298
298
|
|
|
299
299
|
const skeletons: unknown[] = []
|
|
300
300
|
for (const entry of readdirSync(dir).sort()) {
|
|
301
|
-
if (
|
|
301
|
+
if (!entry.endsWith('.test.ts')) continue
|
|
302
302
|
try {
|
|
303
303
|
platform.storage.artifact(session.projectRoot, join('tests', 'browser', entry))
|
|
304
304
|
platform.storage.assertPublicFile(join(dir, entry))
|
|
@@ -101,7 +101,7 @@ export async function boundedJson(response: Response): Promise<unknown> {
|
|
|
101
101
|
}
|
|
102
102
|
|
|
103
103
|
export class PlatformRemote {
|
|
104
|
-
constructor(private readonly fetcher: RpcFetch = fetch, readonly signal: AbortSignal) {}
|
|
104
|
+
constructor(private readonly fetcher: RpcFetch = (input, init) => fetch(input, init), readonly signal: AbortSignal) {}
|
|
105
105
|
|
|
106
106
|
async json(url: string, body?: unknown): Promise<unknown> {
|
|
107
107
|
try {
|
|
@@ -7,7 +7,7 @@ provides: [authentication, authorization, proxy-enforcement]
|
|
|
7
7
|
requires: [zerops-platform]
|
|
8
8
|
recommends: []
|
|
9
9
|
conflicts: [propustka, cloudflare-access, auth-password-kv]
|
|
10
|
-
npm: ["@fabrika/app@0.9.0-dev.
|
|
10
|
+
npm: ["@fabrika/app@0.9.0-dev.5", "@fabrika/db@0.9.0-dev.5", "zod@^3.25.76"]
|
|
11
11
|
status: wip
|
|
12
12
|
sources:
|
|
13
13
|
- where: "packages/app/skill/SKILL.md in fabrika-platform (the `fabrika-app` skill)"
|
|
@@ -7,7 +7,7 @@ provides: [platform, private-services, managed-deploy]
|
|
|
7
7
|
requires: [bun, postgres]
|
|
8
8
|
recommends: []
|
|
9
9
|
conflicts: [cloudflare]
|
|
10
|
-
npm: ["@fabrika/provider-zerops@0.9.0-dev.
|
|
10
|
+
npm: ["@fabrika/provider-zerops@0.9.0-dev.5", "@fabrika/app@0.9.0-dev.5", "@fabrika/cli@0.9.0-dev.5"]
|
|
11
11
|
status: wip
|
|
12
12
|
sources:
|
|
13
13
|
- where: "examples/zerops-app/fabrika.config.ts + zerops.yaml in fabrika-platform"
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fabrika/builder",
|
|
3
|
-
"version": "0.9.0-dev.
|
|
3
|
+
"version": "0.9.0-dev.5",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Local-first guided application design and agent-assisted implementation.",
|
|
6
6
|
"license": "MIT",
|
|
@@ -48,13 +48,13 @@
|
|
|
48
48
|
},
|
|
49
49
|
"dependencies": {
|
|
50
50
|
"zod": "^3.25.76",
|
|
51
|
-
"@fabrika/annotations": "0.9.0-dev.
|
|
52
|
-
"@fabrika/app": "0.9.0-dev.
|
|
53
|
-
"@fabrika/auth-core": "0.9.0-dev.
|
|
54
|
-
"@fabrika/canvas-kernel": "0.9.0-dev.
|
|
55
|
-
"@fabrika/control-contract": "0.9.0-dev.
|
|
56
|
-
"@fabrika/daemon-kit": "0.9.0-dev.
|
|
57
|
-
"@fabrika/provider-zerops": "0.9.0-dev.
|
|
51
|
+
"@fabrika/annotations": "0.9.0-dev.5",
|
|
52
|
+
"@fabrika/app": "0.9.0-dev.5",
|
|
53
|
+
"@fabrika/auth-core": "0.9.0-dev.5",
|
|
54
|
+
"@fabrika/canvas-kernel": "0.9.0-dev.5",
|
|
55
|
+
"@fabrika/control-contract": "0.9.0-dev.5",
|
|
56
|
+
"@fabrika/daemon-kit": "0.9.0-dev.5",
|
|
57
|
+
"@fabrika/provider-zerops": "0.9.0-dev.5",
|
|
58
58
|
"preact": "^10.25.0"
|
|
59
59
|
}
|
|
60
60
|
}
|
|
@@ -72,6 +72,8 @@ export declare class PlatformRemote {
|
|
|
72
72
|
reconcile: (input: import("@fabrika/control-contract").NamespaceIdInput) => Promise<import("@fabrika/control-contract").DeploymentNamespaceDetailDto>;
|
|
73
73
|
update: (input: import("@fabrika/control-contract").UpdateNamespaceInput) => Promise<import("@fabrika/control-contract").DeploymentNamespaceDetailDto>;
|
|
74
74
|
remove: (input: import("@fabrika/control-contract").NamespaceIdInput) => Promise<import("@fabrika/control-contract").RemoveDeploymentNamespaceResponse>;
|
|
75
|
+
republishAll: (input: void) => Promise<import("@fabrika/control-contract").RepublishAllNamespacesResponse>;
|
|
76
|
+
releaseClaims: (input: import("@fabrika/control-contract").ReleaseNamespaceClaimsInput) => Promise<import("@fabrika/control-contract").ReleaseNamespaceClaimsResponse>;
|
|
75
77
|
};
|
|
76
78
|
runs: {
|
|
77
79
|
list: (input: import("@fabrika/control-contract").RunListInput) => Promise<import("@fabrika/control-contract").CursorList<import("@fabrika/control-contract").RunDto>>;
|
|
@@ -105,6 +107,52 @@ export declare class PlatformRemote {
|
|
|
105
107
|
remove: (input: import("@fabrika/control-contract").MailRuleIdInput) => Promise<import("@fabrika/control-contract").OkResponse>;
|
|
106
108
|
};
|
|
107
109
|
};
|
|
110
|
+
data: {
|
|
111
|
+
operations: {
|
|
112
|
+
list: (input: {
|
|
113
|
+
env: string;
|
|
114
|
+
appId: string;
|
|
115
|
+
before?: string | undefined;
|
|
116
|
+
limit?: number | undefined;
|
|
117
|
+
}) => Promise<import("@fabrika/control-contract").CursorList<import("@fabrika/control-contract").DataOperationDto>>;
|
|
118
|
+
get: (input: {
|
|
119
|
+
operationId: string;
|
|
120
|
+
}) => Promise<import("@fabrika/control-contract").DataOperationDto>;
|
|
121
|
+
};
|
|
122
|
+
view: (input: import("@fabrika/control-contract").AppEnvironmentInput) => Promise<import("@fabrika/auth-core").OpsView>;
|
|
123
|
+
content: (input: import("@fabrika/control-contract").AppEnvironmentInput) => Promise<import("@fabrika/auth-core").OpsContentView>;
|
|
124
|
+
start: (input: {
|
|
125
|
+
env: string;
|
|
126
|
+
kind: "maintenance";
|
|
127
|
+
mode: "open" | "inspect" | "read-only" | "closed";
|
|
128
|
+
appId: string;
|
|
129
|
+
} | {
|
|
130
|
+
env: string;
|
|
131
|
+
kind: "backup";
|
|
132
|
+
appId: string;
|
|
133
|
+
} | {
|
|
134
|
+
env: string;
|
|
135
|
+
at: string;
|
|
136
|
+
kind: "restore";
|
|
137
|
+
appId: string;
|
|
138
|
+
}) => Promise<import("@fabrika/control-contract").DataOperationDto>;
|
|
139
|
+
recover: (input: {
|
|
140
|
+
env: string;
|
|
141
|
+
appId: string;
|
|
142
|
+
operationId: string;
|
|
143
|
+
resolution: "open" | "resume";
|
|
144
|
+
}) => Promise<import("@fabrika/control-contract").DataOperationDto>;
|
|
145
|
+
backups: {
|
|
146
|
+
list: (input: {
|
|
147
|
+
env: string;
|
|
148
|
+
appId: string;
|
|
149
|
+
before?: string | undefined;
|
|
150
|
+
limit?: number | undefined;
|
|
151
|
+
}) => Promise<import("@fabrika/control-contract").CursorList<import("@fabrika/control-contract").DataBackupDto>>;
|
|
152
|
+
schedule: (input: import("@fabrika/control-contract").AppEnvironmentInput) => Promise<import("@fabrika/control-contract").DataBackupScheduleDto>;
|
|
153
|
+
setSchedule: (input: import("@fabrika/control-contract").SetDataBackupScheduleInput) => Promise<import("@fabrika/control-contract").DataBackupScheduleDto>;
|
|
154
|
+
};
|
|
155
|
+
};
|
|
108
156
|
};
|
|
109
157
|
controlForReceipt(controlOrigin: string, token: string): {
|
|
110
158
|
installation: (input: void) => Promise<import("@fabrika/control-contract").InstallationDto>;
|
|
@@ -167,6 +215,8 @@ export declare class PlatformRemote {
|
|
|
167
215
|
reconcile: (input: import("@fabrika/control-contract").NamespaceIdInput) => Promise<import("@fabrika/control-contract").DeploymentNamespaceDetailDto>;
|
|
168
216
|
update: (input: import("@fabrika/control-contract").UpdateNamespaceInput) => Promise<import("@fabrika/control-contract").DeploymentNamespaceDetailDto>;
|
|
169
217
|
remove: (input: import("@fabrika/control-contract").NamespaceIdInput) => Promise<import("@fabrika/control-contract").RemoveDeploymentNamespaceResponse>;
|
|
218
|
+
republishAll: (input: void) => Promise<import("@fabrika/control-contract").RepublishAllNamespacesResponse>;
|
|
219
|
+
releaseClaims: (input: import("@fabrika/control-contract").ReleaseNamespaceClaimsInput) => Promise<import("@fabrika/control-contract").ReleaseNamespaceClaimsResponse>;
|
|
170
220
|
};
|
|
171
221
|
runs: {
|
|
172
222
|
list: (input: import("@fabrika/control-contract").RunListInput) => Promise<import("@fabrika/control-contract").CursorList<import("@fabrika/control-contract").RunDto>>;
|
|
@@ -200,6 +250,52 @@ export declare class PlatformRemote {
|
|
|
200
250
|
remove: (input: import("@fabrika/control-contract").MailRuleIdInput) => Promise<import("@fabrika/control-contract").OkResponse>;
|
|
201
251
|
};
|
|
202
252
|
};
|
|
253
|
+
data: {
|
|
254
|
+
operations: {
|
|
255
|
+
list: (input: {
|
|
256
|
+
env: string;
|
|
257
|
+
appId: string;
|
|
258
|
+
before?: string | undefined;
|
|
259
|
+
limit?: number | undefined;
|
|
260
|
+
}) => Promise<import("@fabrika/control-contract").CursorList<import("@fabrika/control-contract").DataOperationDto>>;
|
|
261
|
+
get: (input: {
|
|
262
|
+
operationId: string;
|
|
263
|
+
}) => Promise<import("@fabrika/control-contract").DataOperationDto>;
|
|
264
|
+
};
|
|
265
|
+
view: (input: import("@fabrika/control-contract").AppEnvironmentInput) => Promise<import("@fabrika/auth-core").OpsView>;
|
|
266
|
+
content: (input: import("@fabrika/control-contract").AppEnvironmentInput) => Promise<import("@fabrika/auth-core").OpsContentView>;
|
|
267
|
+
start: (input: {
|
|
268
|
+
env: string;
|
|
269
|
+
kind: "maintenance";
|
|
270
|
+
mode: "open" | "inspect" | "read-only" | "closed";
|
|
271
|
+
appId: string;
|
|
272
|
+
} | {
|
|
273
|
+
env: string;
|
|
274
|
+
kind: "backup";
|
|
275
|
+
appId: string;
|
|
276
|
+
} | {
|
|
277
|
+
env: string;
|
|
278
|
+
at: string;
|
|
279
|
+
kind: "restore";
|
|
280
|
+
appId: string;
|
|
281
|
+
}) => Promise<import("@fabrika/control-contract").DataOperationDto>;
|
|
282
|
+
recover: (input: {
|
|
283
|
+
env: string;
|
|
284
|
+
appId: string;
|
|
285
|
+
operationId: string;
|
|
286
|
+
resolution: "open" | "resume";
|
|
287
|
+
}) => Promise<import("@fabrika/control-contract").DataOperationDto>;
|
|
288
|
+
backups: {
|
|
289
|
+
list: (input: {
|
|
290
|
+
env: string;
|
|
291
|
+
appId: string;
|
|
292
|
+
before?: string | undefined;
|
|
293
|
+
limit?: number | undefined;
|
|
294
|
+
}) => Promise<import("@fabrika/control-contract").CursorList<import("@fabrika/control-contract").DataBackupDto>>;
|
|
295
|
+
schedule: (input: import("@fabrika/control-contract").AppEnvironmentInput) => Promise<import("@fabrika/control-contract").DataBackupScheduleDto>;
|
|
296
|
+
setSchedule: (input: import("@fabrika/control-contract").SetDataBackupScheduleInput) => Promise<import("@fabrika/control-contract").DataBackupScheduleDto>;
|
|
297
|
+
};
|
|
298
|
+
};
|
|
203
299
|
};
|
|
204
300
|
}
|
|
205
301
|
export declare function parseEnvironments(value: unknown): AppEnvDto[];
|