@autobe/filesystem 0.14.0-dev.20250727 β 0.14.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.
- package/LICENSE +21 -0
- package/package.json +67 -34
- package/src/FileSystemIterator.ts +53 -53
- package/src/RepositoryFileSystem.ts +92 -92
- package/src/index.ts +2 -2
- package/README.md +0 -212
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 Wrtn Technologies
|
|
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/package.json
CHANGED
|
@@ -1,34 +1,67 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@autobe/filesystem",
|
|
3
|
-
"version": "0.14.
|
|
4
|
-
"description": "
|
|
5
|
-
"main": "
|
|
6
|
-
"
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
"
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
"
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
"
|
|
26
|
-
"
|
|
27
|
-
"
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
"
|
|
33
|
-
|
|
34
|
-
|
|
1
|
+
{
|
|
2
|
+
"name": "@autobe/filesystem",
|
|
3
|
+
"version": "0.14.3",
|
|
4
|
+
"description": "AI backend server code generator",
|
|
5
|
+
"main": "lib/index.js",
|
|
6
|
+
"author": "Wrtn Technologies",
|
|
7
|
+
"license": "MIT",
|
|
8
|
+
"repository": {
|
|
9
|
+
"type": "git",
|
|
10
|
+
"url": "https://github.com/wrtnlabs/autobe"
|
|
11
|
+
},
|
|
12
|
+
"bugs": {
|
|
13
|
+
"url": "https://github.com/wrtnlabs/autobe/issues"
|
|
14
|
+
},
|
|
15
|
+
"dependencies": {
|
|
16
|
+
"@samchon/openapi": "^4.6.0",
|
|
17
|
+
"tstl": "^3.0.0"
|
|
18
|
+
},
|
|
19
|
+
"devDependencies": {
|
|
20
|
+
"@types/node": "^22.15.19",
|
|
21
|
+
"rimraf": "^6.0.1",
|
|
22
|
+
"typescript": "~5.8.3"
|
|
23
|
+
},
|
|
24
|
+
"files": [
|
|
25
|
+
"lib",
|
|
26
|
+
"src",
|
|
27
|
+
"package.json",
|
|
28
|
+
"LICENSE",
|
|
29
|
+
"README.md"
|
|
30
|
+
],
|
|
31
|
+
"keywords": [
|
|
32
|
+
"ai",
|
|
33
|
+
"api",
|
|
34
|
+
"api-design",
|
|
35
|
+
"auto-generation",
|
|
36
|
+
"autobe",
|
|
37
|
+
"automation",
|
|
38
|
+
"backend",
|
|
39
|
+
"backend-development",
|
|
40
|
+
"code-generation",
|
|
41
|
+
"documentation",
|
|
42
|
+
"e2e-testing",
|
|
43
|
+
"erd",
|
|
44
|
+
"nestjs",
|
|
45
|
+
"openapi",
|
|
46
|
+
"orm",
|
|
47
|
+
"postgres",
|
|
48
|
+
"postgresql",
|
|
49
|
+
"prisma",
|
|
50
|
+
"requirements-analysis",
|
|
51
|
+
"rest",
|
|
52
|
+
"server",
|
|
53
|
+
"spiral-model",
|
|
54
|
+
"swagger",
|
|
55
|
+
"testing",
|
|
56
|
+
"typescript",
|
|
57
|
+
"vibe-coding",
|
|
58
|
+
"waterfall"
|
|
59
|
+
],
|
|
60
|
+
"publishConfig": {
|
|
61
|
+
"access": "public"
|
|
62
|
+
},
|
|
63
|
+
"scripts": {
|
|
64
|
+
"build": "rimraf lib && tsc"
|
|
65
|
+
},
|
|
66
|
+
"typings": "lib/index.d.ts"
|
|
67
|
+
}
|
|
@@ -1,53 +1,53 @@
|
|
|
1
|
-
import fs from "fs";
|
|
2
|
-
import path from "path";
|
|
3
|
-
import { VariadicSingleton } from "tstl";
|
|
4
|
-
|
|
5
|
-
/** @internal */
|
|
6
|
-
export namespace FileSystemIterator {
|
|
7
|
-
export const read = async (props: {
|
|
8
|
-
root: string;
|
|
9
|
-
extension?: string;
|
|
10
|
-
prefix?: string;
|
|
11
|
-
}): Promise<Record<string, string>> => {
|
|
12
|
-
const output: Record<string, string> = {};
|
|
13
|
-
const iterate = async (location: string) => {
|
|
14
|
-
const directory: string[] = await fs.promises.readdir(location);
|
|
15
|
-
for (const file of directory) {
|
|
16
|
-
const next: string = `${location}/${file}`;
|
|
17
|
-
const stat: fs.Stats = await fs.promises.stat(next);
|
|
18
|
-
if (stat.isDirectory()) await iterate(next);
|
|
19
|
-
else if (
|
|
20
|
-
!props.extension?.length ||
|
|
21
|
-
file.endsWith(`.${props.extension}`)
|
|
22
|
-
)
|
|
23
|
-
output[
|
|
24
|
-
`${props.prefix ?? ""}${next.substring(props.root.length + 1)}`
|
|
25
|
-
] = await fs.promises.readFile(next, "utf-8");
|
|
26
|
-
}
|
|
27
|
-
};
|
|
28
|
-
await iterate(props.root);
|
|
29
|
-
return output;
|
|
30
|
-
};
|
|
31
|
-
|
|
32
|
-
export const save = async (props: {
|
|
33
|
-
root: string;
|
|
34
|
-
files: Record<string, string>;
|
|
35
|
-
}): Promise<void> => {
|
|
36
|
-
if (fs.existsSync(props.root))
|
|
37
|
-
await fs.promises.rm(props.root, {
|
|
38
|
-
recursive: true,
|
|
39
|
-
});
|
|
40
|
-
const directory = new VariadicSingleton(async (location: string) => {
|
|
41
|
-
try {
|
|
42
|
-
await fs.promises.mkdir(location, {
|
|
43
|
-
recursive: true,
|
|
44
|
-
});
|
|
45
|
-
} catch {}
|
|
46
|
-
});
|
|
47
|
-
for (const [key, value] of Object.entries(props.files)) {
|
|
48
|
-
const file: string = path.resolve(`${props.root}/${key}`);
|
|
49
|
-
await directory.get(path.dirname(file));
|
|
50
|
-
await fs.promises.writeFile(file, value ?? "", "utf8");
|
|
51
|
-
}
|
|
52
|
-
};
|
|
53
|
-
}
|
|
1
|
+
import fs from "fs";
|
|
2
|
+
import path from "path";
|
|
3
|
+
import { VariadicSingleton } from "tstl";
|
|
4
|
+
|
|
5
|
+
/** @internal */
|
|
6
|
+
export namespace FileSystemIterator {
|
|
7
|
+
export const read = async (props: {
|
|
8
|
+
root: string;
|
|
9
|
+
extension?: string;
|
|
10
|
+
prefix?: string;
|
|
11
|
+
}): Promise<Record<string, string>> => {
|
|
12
|
+
const output: Record<string, string> = {};
|
|
13
|
+
const iterate = async (location: string) => {
|
|
14
|
+
const directory: string[] = await fs.promises.readdir(location);
|
|
15
|
+
for (const file of directory) {
|
|
16
|
+
const next: string = `${location}/${file}`;
|
|
17
|
+
const stat: fs.Stats = await fs.promises.stat(next);
|
|
18
|
+
if (stat.isDirectory()) await iterate(next);
|
|
19
|
+
else if (
|
|
20
|
+
!props.extension?.length ||
|
|
21
|
+
file.endsWith(`.${props.extension}`)
|
|
22
|
+
)
|
|
23
|
+
output[
|
|
24
|
+
`${props.prefix ?? ""}${next.substring(props.root.length + 1)}`
|
|
25
|
+
] = await fs.promises.readFile(next, "utf-8");
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
await iterate(props.root);
|
|
29
|
+
return output;
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
export const save = async (props: {
|
|
33
|
+
root: string;
|
|
34
|
+
files: Record<string, string>;
|
|
35
|
+
}): Promise<void> => {
|
|
36
|
+
if (fs.existsSync(props.root))
|
|
37
|
+
await fs.promises.rm(props.root, {
|
|
38
|
+
recursive: true,
|
|
39
|
+
});
|
|
40
|
+
const directory = new VariadicSingleton(async (location: string) => {
|
|
41
|
+
try {
|
|
42
|
+
await fs.promises.mkdir(location, {
|
|
43
|
+
recursive: true,
|
|
44
|
+
});
|
|
45
|
+
} catch {}
|
|
46
|
+
});
|
|
47
|
+
for (const [key, value] of Object.entries(props.files)) {
|
|
48
|
+
const file: string = path.resolve(`${props.root}/${key}`);
|
|
49
|
+
await directory.get(path.dirname(file));
|
|
50
|
+
await fs.promises.writeFile(file, value ?? "", "utf8");
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
}
|
|
@@ -1,92 +1,92 @@
|
|
|
1
|
-
import { OpenApi } from "@samchon/openapi";
|
|
2
|
-
import cp from "child_process";
|
|
3
|
-
import fs from "fs";
|
|
4
|
-
import { VariadicSingleton } from "tstl";
|
|
5
|
-
|
|
6
|
-
import { FileSystemIterator } from "./FileSystemIterator";
|
|
7
|
-
|
|
8
|
-
/** @internal */
|
|
9
|
-
export namespace RepositoryFileSystem {
|
|
10
|
-
export const analyze = async (
|
|
11
|
-
account: string,
|
|
12
|
-
project: string,
|
|
13
|
-
): Promise<Record<string, string>> => {
|
|
14
|
-
await vs.get(account, project);
|
|
15
|
-
return FileSystemIterator.read({
|
|
16
|
-
root: `${ROOT}/internals/repositories/${account}/${project}/docs/requirements`,
|
|
17
|
-
extension: "md",
|
|
18
|
-
});
|
|
19
|
-
};
|
|
20
|
-
|
|
21
|
-
export const prisma = async (
|
|
22
|
-
account: string,
|
|
23
|
-
project: string,
|
|
24
|
-
): Promise<Record<string, string>> => {
|
|
25
|
-
await vs.get(account, project);
|
|
26
|
-
const result: Record<string, string> = await FileSystemIterator.read({
|
|
27
|
-
root: `${ROOT}/internals/repositories/${account}/${project}/prisma/schema`,
|
|
28
|
-
extension: "prisma",
|
|
29
|
-
});
|
|
30
|
-
for (const [key, value] of Object.entries(result))
|
|
31
|
-
result[key] = value.split("@author Samchon").join("@author AutoBE");
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
|
|
35
|
-
export const src = async (
|
|
36
|
-
account: string,
|
|
37
|
-
project: string,
|
|
38
|
-
): Promise<Record<string, string>> => {
|
|
39
|
-
await vs.get(account, project);
|
|
40
|
-
return FileSystemIterator.read({
|
|
41
|
-
root: `${ROOT}/internals/repositories/${account}/${project}/src`,
|
|
42
|
-
prefix: "src/",
|
|
43
|
-
extension: "ts",
|
|
44
|
-
});
|
|
45
|
-
};
|
|
46
|
-
|
|
47
|
-
export const swagger = async (
|
|
48
|
-
account: string,
|
|
49
|
-
project: string,
|
|
50
|
-
): Promise<OpenApi.IDocument> => {
|
|
51
|
-
await vs.get(account, project);
|
|
52
|
-
return OpenApi.convert(
|
|
53
|
-
JSON.parse(
|
|
54
|
-
await fs.promises.readFile(
|
|
55
|
-
`${ROOT}/internals/repositories/${account}/${project}/packages/api/swagger.json`,
|
|
56
|
-
"utf8",
|
|
57
|
-
),
|
|
58
|
-
),
|
|
59
|
-
);
|
|
60
|
-
};
|
|
61
|
-
|
|
62
|
-
export const clone = async (
|
|
63
|
-
account: string,
|
|
64
|
-
project: string,
|
|
65
|
-
): Promise<void> => {
|
|
66
|
-
await vs.get(account, project);
|
|
67
|
-
};
|
|
68
|
-
|
|
69
|
-
const vs = new VariadicSingleton(
|
|
70
|
-
async (account: string, project: string): Promise<void> => {
|
|
71
|
-
const location: string = `${ROOT}/internals/repositories/${account}/${project}`;
|
|
72
|
-
if (fs.existsSync(location))
|
|
73
|
-
cp.execSync("git pull", {
|
|
74
|
-
cwd: location,
|
|
75
|
-
stdio: "ignore",
|
|
76
|
-
});
|
|
77
|
-
else {
|
|
78
|
-
try {
|
|
79
|
-
await fs.promises.mkdir(`${ROOT}/internals/repositories/${account}`, {
|
|
80
|
-
recursive: true,
|
|
81
|
-
});
|
|
82
|
-
} catch {}
|
|
83
|
-
cp.execSync(`git clone https://github.com/${account}/${project}`, {
|
|
84
|
-
cwd: `${ROOT}/internals/repositories/${account}`,
|
|
85
|
-
stdio: "ignore",
|
|
86
|
-
});
|
|
87
|
-
}
|
|
88
|
-
},
|
|
89
|
-
);
|
|
90
|
-
|
|
91
|
-
const ROOT = `${__dirname}/../../..`;
|
|
92
|
-
}
|
|
1
|
+
import { OpenApi } from "@samchon/openapi";
|
|
2
|
+
import cp from "child_process";
|
|
3
|
+
import fs from "fs";
|
|
4
|
+
import { VariadicSingleton } from "tstl";
|
|
5
|
+
|
|
6
|
+
import { FileSystemIterator } from "./FileSystemIterator";
|
|
7
|
+
|
|
8
|
+
/** @internal */
|
|
9
|
+
export namespace RepositoryFileSystem {
|
|
10
|
+
export const analyze = async (
|
|
11
|
+
account: string,
|
|
12
|
+
project: string,
|
|
13
|
+
): Promise<Record<string, string>> => {
|
|
14
|
+
await vs.get(account, project);
|
|
15
|
+
return FileSystemIterator.read({
|
|
16
|
+
root: `${ROOT}/internals/repositories/${account}/${project}/docs/requirements`,
|
|
17
|
+
extension: "md",
|
|
18
|
+
});
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
export const prisma = async (
|
|
22
|
+
account: string,
|
|
23
|
+
project: string,
|
|
24
|
+
): Promise<Record<string, string>> => {
|
|
25
|
+
await vs.get(account, project);
|
|
26
|
+
const result: Record<string, string> = await FileSystemIterator.read({
|
|
27
|
+
root: `${ROOT}/internals/repositories/${account}/${project}/prisma/schema`,
|
|
28
|
+
extension: "prisma",
|
|
29
|
+
});
|
|
30
|
+
for (const [key, value] of Object.entries(result))
|
|
31
|
+
result[key] = value.split("@author Samchon").join("@author AutoBE");
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
export const src = async (
|
|
36
|
+
account: string,
|
|
37
|
+
project: string,
|
|
38
|
+
): Promise<Record<string, string>> => {
|
|
39
|
+
await vs.get(account, project);
|
|
40
|
+
return FileSystemIterator.read({
|
|
41
|
+
root: `${ROOT}/internals/repositories/${account}/${project}/src`,
|
|
42
|
+
prefix: "src/",
|
|
43
|
+
extension: "ts",
|
|
44
|
+
});
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
export const swagger = async (
|
|
48
|
+
account: string,
|
|
49
|
+
project: string,
|
|
50
|
+
): Promise<OpenApi.IDocument> => {
|
|
51
|
+
await vs.get(account, project);
|
|
52
|
+
return OpenApi.convert(
|
|
53
|
+
JSON.parse(
|
|
54
|
+
await fs.promises.readFile(
|
|
55
|
+
`${ROOT}/internals/repositories/${account}/${project}/packages/api/swagger.json`,
|
|
56
|
+
"utf8",
|
|
57
|
+
),
|
|
58
|
+
),
|
|
59
|
+
);
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
export const clone = async (
|
|
63
|
+
account: string,
|
|
64
|
+
project: string,
|
|
65
|
+
): Promise<void> => {
|
|
66
|
+
await vs.get(account, project);
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
const vs = new VariadicSingleton(
|
|
70
|
+
async (account: string, project: string): Promise<void> => {
|
|
71
|
+
const location: string = `${ROOT}/internals/repositories/${account}/${project}`;
|
|
72
|
+
if (fs.existsSync(location))
|
|
73
|
+
cp.execSync("git pull", {
|
|
74
|
+
cwd: location,
|
|
75
|
+
stdio: "ignore",
|
|
76
|
+
});
|
|
77
|
+
else {
|
|
78
|
+
try {
|
|
79
|
+
await fs.promises.mkdir(`${ROOT}/internals/repositories/${account}`, {
|
|
80
|
+
recursive: true,
|
|
81
|
+
});
|
|
82
|
+
} catch {}
|
|
83
|
+
cp.execSync(`git clone https://github.com/${account}/${project}`, {
|
|
84
|
+
cwd: `${ROOT}/internals/repositories/${account}`,
|
|
85
|
+
stdio: "ignore",
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
},
|
|
89
|
+
);
|
|
90
|
+
|
|
91
|
+
const ROOT = `${__dirname}/../../..`;
|
|
92
|
+
}
|
package/src/index.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export * from "./FileSystemIterator";
|
|
2
|
-
export * from "./RepositoryFileSystem";
|
|
1
|
+
export * from "./FileSystemIterator";
|
|
2
|
+
export * from "./RepositoryFileSystem";
|
package/README.md
DELETED
|
@@ -1,212 +0,0 @@
|
|
|
1
|
-
# AutoBE - No-Code Agent for Backend Applications
|
|
2
|
-
|
|
3
|
-
<div align="center">
|
|
4
|
-
|
|
5
|
-
```mermaid
|
|
6
|
-
flowchart
|
|
7
|
-
subgraph "Backend Coding Agent"
|
|
8
|
-
coder("Facade Controller")
|
|
9
|
-
end
|
|
10
|
-
subgraph "Functional Agents"
|
|
11
|
-
coder --"Requirements Analysis"--> analyze("Analyze")
|
|
12
|
-
coder --"ERD"--> prisma("Prisma")
|
|
13
|
-
coder --"API Design"--> interface("Interface")
|
|
14
|
-
coder --"Test Codes" --> test("Test")
|
|
15
|
-
coder --"Main Program" --> realize("Realize")
|
|
16
|
-
end
|
|
17
|
-
subgraph "Compiler Feedback"
|
|
18
|
-
prisma --"validates" --> prismaCompiler("Prisma Compiler")
|
|
19
|
-
interface --"validates" --> openapiValidator("OpenAPI Validator")
|
|
20
|
-
interface --"generates" --> tsCompiler("TypeScript Compiler")
|
|
21
|
-
test --"validates" --> tsCompiler("TypeScript Compiler")
|
|
22
|
-
realize --"validates" --> tsCompiler("TypeScript Compiler")
|
|
23
|
-
end
|
|
24
|
-
```
|
|
25
|
-
|
|
26
|
-
[](https://github.com/wrtnlabs/autobe/blob/master/LICENSE)
|
|
27
|
-
[](https://www.npmjs.com/package/@autobe/agent)
|
|
28
|
-
[](https://www.npmjs.com/package/@autobe/agent)
|
|
29
|
-
[](https://github.com/wrtnlabs/autobe/actions?query=workflow%3Abuild)
|
|
30
|
-
[](https://wrtnlabs.io/autobe/docs/)
|
|
31
|
-
[](https://discord.gg/aMhRmzkqCx)
|
|
32
|
-
|
|
33
|
-
[](https://www.bloomberg.com/news/videos/2025-03-31/wtrn-on-series-b-funding-growth-strategy-video)
|
|
34
|
-
[](https://github.com/wrtnlabs)
|
|
35
|
-
|
|
36
|
-
</div>
|
|
37
|
-
|
|
38
|
-
An AI-powered no-code agent that builds backend applications, enhanced by compiler feedback.
|
|
39
|
-
|
|
40
|
-
`@autobe` is a no-code AI agent that analyzes user requirements and automatically generates backend applications using the stack below, following a waterfall development model. Since `@autobe`-generated code is validated by review agents and OpenAPI/TypeScript/Prisma compilers, it delivers 100% working code.
|
|
41
|
-
|
|
42
|
-
- TypeScript
|
|
43
|
-
- NestJS
|
|
44
|
-
- Prisma (Postgres / SQLite)
|
|
45
|
-
|
|
46
|
-
## Playground
|
|
47
|
-
|
|
48
|
-
https://github.com/user-attachments/assets/b995dd2a-23bd-43c9-96cb-96d5c805f19f
|
|
49
|
-
|
|
50
|
-
[https://stackblitz.com/github/wrtnlabs/autobe-playground-stackblitz](https://stackblitz.com/github/wrtnlabs/autobe-playground-stackblitz?file=md!README.md)
|
|
51
|
-
|
|
52
|
-
Experience the `@autobe` agent through our interactive playground above.
|
|
53
|
-
|
|
54
|
-
To see examples of backend applications generated by `@autobe`, explore these interactive demos. These showcase `@autobe`'s ability to generate production-ready backend code with proper structure, API documentation, and TypeScript interfaces. If you're unsure what to try, start with the BBS example script below.
|
|
55
|
-
|
|
56
|
-
- [BBS (Bulletin Board System)](https://github.com/wrtnlabs/autobe-example-bbs)
|
|
57
|
-
1. I want to create a political/economic discussion board. Since I'm not familiar with programming, please write a requirements analysis report as you see fit.
|
|
58
|
-
2. Design the database schema.
|
|
59
|
-
3. Create the API interface specification.
|
|
60
|
-
4. Make the e2e test functions.
|
|
61
|
-
- [E-Commerce](https://github.com/wrtnlabs/autobe-example-shopping)
|
|
62
|
-
|
|
63
|
-
## Documentation Resources
|
|
64
|
-
|
|
65
|
-
Find comprehensive resources at our [official website](https://wrtnlabs.io/autobe).
|
|
66
|
-
|
|
67
|
-
### π Home
|
|
68
|
-
|
|
69
|
-
- ππ»ββοΈ [Introduction](https://wrtnlabs.io/autobe/docs)
|
|
70
|
-
- π¦ [Setup](https://wrtnlabs.io/autobe/docs/setup)
|
|
71
|
-
- π Concepts
|
|
72
|
-
- [Waterfall Model](https://wrtnlabs.io/autobe/docs/concepts/waterfall)
|
|
73
|
-
- [Compiler Strategy](https://wrtnlabs.io/autobe/docs/concepts/compiler)
|
|
74
|
-
- [AI Function Calling](https://wrtnlabs.io/autobe/docs/concepts/function-calling)
|
|
75
|
-
|
|
76
|
-
### π Features
|
|
77
|
-
|
|
78
|
-
- π€ Agent Library
|
|
79
|
-
- [Facade Controller](https://wrtnlabs.io/autobe/docs/agent/facade)
|
|
80
|
-
- [Configuration](https://wrtnlabs.io/autobe/docs/agent/config)
|
|
81
|
-
- [Event Handling](https://wrtnlabs.io/autobe/docs/agent/event)
|
|
82
|
-
- [Prompt Histories](https://wrtnlabs.io/autobe/docs/agent/history)
|
|
83
|
-
- π‘ WebSocket Protocol
|
|
84
|
-
- [Remote Procedure Call](https://wrtnlabs.io/autobe/docs/websocket/rpc)
|
|
85
|
-
- [NestJS Server](https://wrtnlabs.io/autobe/docs/websocket/nestjs)
|
|
86
|
-
- [NodeJS Server](https://wrtnlabs.io/autobe/docs/websocket/nodejs)
|
|
87
|
-
- [Client Application](https://wrtnlabs.io/autobe/docs/websocket/client)
|
|
88
|
-
- π οΈ Backend Stack
|
|
89
|
-
- [TypeScript](https://wrtnlabs.io/autobe/docs/stack/typescript)
|
|
90
|
-
- [Prisma ORM](https://wrtnlabs.io/autobe/docs/stack/prisma)
|
|
91
|
-
- [NestJS Framework](https://wrtnlabs.io/autobe/docs/stack/nestjs)
|
|
92
|
-
|
|
93
|
-
### π Appendix
|
|
94
|
-
|
|
95
|
-
- π [No-Code Ecosystem](https://wrtnlabs.io/autobe/docs/ecosystem)
|
|
96
|
-
- π
Roadmap
|
|
97
|
-
- [Alpha Release (completed)](https://wrtnlabs.io/autobe/docs/roadmap/alpha)
|
|
98
|
-
- [Beta Release (in progress)](https://wrtnlabs.io/autobe/docs/roadmap/beta)
|
|
99
|
-
- [v1.0 Official Release (planned)](https://wrtnlabs.io/autobe/docs/roadmap/v1.0)
|
|
100
|
-
- π§ [API Documentation](https://wrtnlabs.io/autobe/api)
|
|
101
|
-
|
|
102
|
-
## No-Code Ecosystem
|
|
103
|
-
|
|
104
|
-

|
|
105
|
-
|
|
106
|
-
> A 70-year-old grandmother who grows tomatoes in the countryside created an online debate website in just 10 minutes. Despite being unfamiliar with coding or computers, she built this current affairs and [economics discussion community](https://github.dev/wrtnlabs/autobe-example-bbs) simply by talking with Wrtn's AI. What's remarkable is that users can write posts and comments entirely through voice commands and even engage in current affairs debates with AI.
|
|
107
|
-
>
|
|
108
|
-
> The next day, the grandmother spent another 20 minutes launching an [agricultural products shopping mall](https://github.dev/wrtnlabs/autobe-example-shopping). Customers can simply say "I'd like to order 2kg of tomatoes" to complete their purchase, while the grandmother manages everything from orders and shipping to inventory through simple chat conversations.
|
|
109
|
-
|
|
110
|
-
This is the vision that we, the [WrtnLabs](https://github.com/wrtnlabs) team, are pursuing. We aim to create a world where anyone can build backend servers, AI chatbots, and frontend applications without any coding knowledgeβsimply by conversing with AI.
|
|
111
|
-
|
|
112
|
-
To realize this vision, the [WrtnLabs](https://github.com/wrtnlabs) team is developing two additional projects: [`@agentica`](https://github.com/wrtnlabs/agentica) and [`@autoview`](https://github.com/wrtnlabs/autoview).
|
|
113
|
-
|
|
114
|
-
- **`@agentica`**: Automatically creates AI chatbots when you provide a `swagger.json` file
|
|
115
|
-
- **`@autoview`**: Automatically generates frontend applications when you provide a `swagger.json` file
|
|
116
|
-
|
|
117
|
-
You're not limited to just creating backends with `@autobe`. Once you've built a no-code backend application through `@autobe`, you can immediately create an AI chatbot and frontend applications alongside it.
|
|
118
|
-
|
|
119
|
-
Can you converse? Then you're a full-stack developer.
|
|
120
|
-
|
|
121
|
-
```typescript
|
|
122
|
-
import { Agentica, assertHttpController } from "@agentica/core";
|
|
123
|
-
import OpenAI from "openai";
|
|
124
|
-
import typia from "typia";
|
|
125
|
-
|
|
126
|
-
import { MobileFileSystem } from "./services/MobileFileSystem";
|
|
127
|
-
|
|
128
|
-
const agent = new Agentica({
|
|
129
|
-
vendor: {
|
|
130
|
-
api: new OpenAI({ apiKey: "********" }),
|
|
131
|
-
model: "gpt-4o-mini",
|
|
132
|
-
},
|
|
133
|
-
controllers: [
|
|
134
|
-
// functions from TypeScript class
|
|
135
|
-
typia.llm.controller<MobileFileSystem, "chatgpt">(
|
|
136
|
-
"filesystem",
|
|
137
|
-
MobileFileSystem(),
|
|
138
|
-
),
|
|
139
|
-
// functions from Swagger/OpenAPI
|
|
140
|
-
assertHttpController({
|
|
141
|
-
name: "shopping",
|
|
142
|
-
model: "chatgpt",
|
|
143
|
-
document: await fetch(
|
|
144
|
-
"https://shopping-be.wrtn.ai/editor/swagger.json",
|
|
145
|
-
).then(r => r.json()),
|
|
146
|
-
connection: {
|
|
147
|
-
host: "https://shopping-be.wrtn.ai",
|
|
148
|
-
headers: { Authorization: "Bearer ********" },
|
|
149
|
-
},
|
|
150
|
-
}),
|
|
151
|
-
],
|
|
152
|
-
});
|
|
153
|
-
await agent.conversate("I wanna buy MacBook Pro");
|
|
154
|
-
```
|
|
155
|
-
|
|
156
|
-
## Roadmap Schedule
|
|
157
|
-
|
|
158
|
-
```mermaid
|
|
159
|
-
gantt
|
|
160
|
-
dateFormat YYYY-MM-DD
|
|
161
|
-
title AutoBE Roadmap for Beta Release
|
|
162
|
-
|
|
163
|
-
section Analyze Agent
|
|
164
|
-
Debate Enhancement: done, 2025-06-01, 7d
|
|
165
|
-
Prefix Rule: done, 2025-06-12, 7d
|
|
166
|
-
Multimodal: planned, 2025-07-02, 31d
|
|
167
|
-
|
|
168
|
-
section Prisma Agent
|
|
169
|
-
Compiler Development: done, 2025-06-01, 14d
|
|
170
|
-
Prohibition Rule: done, 2025-06-08, 7d
|
|
171
|
-
SQLite Support: done, 2025-06-16, 7d
|
|
172
|
-
|
|
173
|
-
section Interface Agent
|
|
174
|
-
Keyworded SDK: done, 2025-06-01, 10d
|
|
175
|
-
Authorization: done, 2025-06-19, 18d
|
|
176
|
-
Snapshot Logic: planned, 2025-06-23, 14d
|
|
177
|
-
|
|
178
|
-
section Test Agent
|
|
179
|
-
Scenario Agent: done, 2025-06-01, 10d
|
|
180
|
-
Coding Agent: done, 2025-06-12, 14d
|
|
181
|
-
Compiler Feedback: done, 2025-06-12, 14d
|
|
182
|
-
Function Calling: done, 2025-06-18, 14d
|
|
183
|
-
Compiler Development: done, 2025-07-02, 60d
|
|
184
|
-
|
|
185
|
-
section Realize Agent
|
|
186
|
-
Planner Agent: done, 2025-07-02, 30d
|
|
187
|
-
Coding Agent: done, 2025-07-02, 30d
|
|
188
|
-
Compiler Feedback: done, 2025-07-17, 15d
|
|
189
|
-
Function Calling: done, 2025-07-17, 31d
|
|
190
|
-
Runtime Validation: active, 2025-08-01, 30d
|
|
191
|
-
|
|
192
|
-
section Complementation
|
|
193
|
-
Benchmark: done, 2025-06-12, 50d
|
|
194
|
-
Demonstration: done, 2025-06-16, 14d
|
|
195
|
-
Documentation: done, 2025-06-16, 45d
|
|
196
|
-
Articles: active, 2025-07-02, 61d
|
|
197
|
-
Review Agent: active, 2025-07-02, 45d
|
|
198
|
-
Maintenance: active, 2025-08-01, 30d
|
|
199
|
-
|
|
200
|
-
section Ecosystem
|
|
201
|
-
Agentica Prerequisite: active, 2025-06-18, 13d
|
|
202
|
-
WebSocket Streaming: planned, 2025-07-02, 14d
|
|
203
|
-
History Manipulation: planned, 2025-07-16, 30d
|
|
204
|
-
AI Chatbot Development: planned, 2025-07-16, 30d
|
|
205
|
-
Data Seeder Agent: planned, 2025-08-01, 30d
|
|
206
|
-
```
|
|
207
|
-
|
|
208
|
-
`@autobe`'s comprehensive three-month beta development roadmap spans from 2025-06-01 through 2025-08-31, marking a critical phase in our journey toward production readiness.
|
|
209
|
-
|
|
210
|
-
Following the successful completion of our alpha release on 2025-05-31, we have established a robust foundation with fully developed Analysis, Prisma, and Interface Agents. These core components have successfully automated the most complex challenges in backend development: comprehensive requirements analysis, intelligent database architecture, and seamless API design. This achievement represents a significant milestone in our mission to completely automate backend application design.
|
|
211
|
-
|
|
212
|
-
The upcoming beta phase strategically focuses on delivering and refining the Test Agent and Realization Agent while ensuring system-wide stability and performance optimization across the entire `@autobe` ecosystem. Our ambitious target for 2025-08-31 is to achieve a breakthrough: a 100% reliable No-Code Agent platform that can autonomously handle any backend application development challenge without human intervention.
|