@autobe/agent 0.9.0 → 0.9.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. package/lib/AutoBeAgent.js +7 -1
  2. package/lib/AutoBeAgent.js.map +1 -1
  3. package/lib/constants/AutoBeSystemPromptConstant.d.ts +5 -3
  4. package/lib/constants/AutoBeSystemPromptConstant.js.map +1 -1
  5. package/lib/context/IAutoBeApplicationProps.d.ts +0 -61
  6. package/lib/factory/createAutoBeApplication.js +15 -135
  7. package/lib/factory/createAutoBeApplication.js.map +1 -1
  8. package/lib/index.mjs +1054 -1037
  9. package/lib/index.mjs.map +1 -1
  10. package/lib/orchestrate/analyze/orchestrateAnalyze.js +4 -30
  11. package/lib/orchestrate/analyze/orchestrateAnalyze.js.map +1 -1
  12. package/lib/orchestrate/interface/orchestrateInterface.js +9 -3
  13. package/lib/orchestrate/interface/orchestrateInterface.js.map +1 -1
  14. package/lib/orchestrate/test/compileTestScenario.d.ts +5 -0
  15. package/lib/orchestrate/test/compileTestScenario.js +57 -0
  16. package/lib/orchestrate/test/compileTestScenario.js.map +1 -0
  17. package/lib/orchestrate/test/filterTestFileName.d.ts +1 -0
  18. package/lib/orchestrate/test/filterTestFileName.js +13 -0
  19. package/lib/orchestrate/test/filterTestFileName.js.map +1 -0
  20. package/lib/orchestrate/test/orchestrateTest.js +6 -3
  21. package/lib/orchestrate/test/orchestrateTest.js.map +1 -1
  22. package/lib/orchestrate/test/orchestrateTestCorrect.d.ts +2 -2
  23. package/lib/orchestrate/test/orchestrateTestCorrect.js +172 -87
  24. package/lib/orchestrate/test/orchestrateTestCorrect.js.map +1 -1
  25. package/lib/orchestrate/test/orchestrateTestScenario.js +98 -83
  26. package/lib/orchestrate/test/orchestrateTestScenario.js.map +1 -1
  27. package/lib/orchestrate/test/orchestrateTestWrite.d.ts +4 -0
  28. package/lib/orchestrate/test/{orchestrateTestProgress.js → orchestrateTestWrite.js} +27 -54
  29. package/lib/orchestrate/test/orchestrateTestWrite.js.map +1 -0
  30. package/lib/orchestrate/test/structures/IAutoBeTestScenarioApplication.d.ts +18 -20
  31. package/lib/orchestrate/test/structures/IAutoBeTestScenarioArtifacts.d.ts +7 -0
  32. package/lib/orchestrate/test/structures/IAutoBeTestScenarioArtifacts.js +3 -0
  33. package/lib/orchestrate/test/structures/IAutoBeTestScenarioArtifacts.js.map +1 -0
  34. package/lib/orchestrate/test/transformTestCorrectHistories.d.ts +2 -2
  35. package/lib/orchestrate/test/transformTestCorrectHistories.js +38 -16
  36. package/lib/orchestrate/test/transformTestCorrectHistories.js.map +1 -1
  37. package/lib/orchestrate/test/transformTestWriteHistories.d.ts +7 -0
  38. package/lib/orchestrate/test/transformTestWriteHistories.js +59 -0
  39. package/lib/orchestrate/test/transformTestWriteHistories.js.map +1 -0
  40. package/lib/structures/IAutoBeProps.d.ts +12 -1
  41. package/package.json +4 -5
  42. package/src/AutoBeAgent.ts +14 -2
  43. package/src/constants/AutoBeSystemPromptConstant.ts +5 -3
  44. package/src/context/IAutoBeApplicationProps.ts +0 -62
  45. package/src/orchestrate/analyze/orchestrateAnalyze.ts +4 -34
  46. package/src/orchestrate/interface/orchestrateInterface.ts +7 -0
  47. package/src/orchestrate/test/compileTestScenario.ts +64 -0
  48. package/src/orchestrate/test/filterTestFileName.ts +9 -0
  49. package/src/orchestrate/test/orchestrateTest.ts +15 -9
  50. package/src/orchestrate/test/orchestrateTestCorrect.ts +288 -128
  51. package/src/orchestrate/test/orchestrateTestScenario.ts +23 -6
  52. package/src/orchestrate/test/{orchestrateTestProgress.ts → orchestrateTestWrite.ts} +56 -87
  53. package/src/orchestrate/test/structures/IAutoBeTestScenarioApplication.ts +18 -20
  54. package/src/orchestrate/test/structures/IAutoBeTestScenarioArtifacts.ts +8 -0
  55. package/src/orchestrate/test/transformTestCorrectHistories.ts +41 -17
  56. package/src/orchestrate/test/{transformTestProgressHistories.ts → transformTestWriteHistories.ts} +21 -10
  57. package/src/structures/IAutoBeProps.ts +17 -1
  58. package/lib/orchestrate/test/orchestrateTestProgress.d.ts +0 -5
  59. package/lib/orchestrate/test/orchestrateTestProgress.js.map +0 -1
  60. package/lib/orchestrate/test/transformTestProgressHistories.d.ts +0 -8
  61. package/lib/orchestrate/test/transformTestProgressHistories.js +0 -47
  62. package/lib/orchestrate/test/transformTestProgressHistories.js.map +0 -1
@@ -22,6 +22,13 @@ export const orchestrateInterface =
22
22
  ): Promise<AutoBeAssistantMessageHistory | AutoBeInterfaceHistory> => {
23
23
  // ENDPOINTS
24
24
  const start: Date = new Date();
25
+ ctx.dispatch({
26
+ type: "interfaceStart",
27
+ created_at: start.toISOString(),
28
+ reason: props.reason,
29
+ step: ctx.state().analyze?.step ?? 0,
30
+ });
31
+
25
32
  const init: AutoBeAssistantMessageHistory | AutoBeInterfaceEndpointsEvent =
26
33
  await orchestrateInterfaceEndpoints(ctx);
27
34
  if (init.type === "assistantMessage") {
@@ -0,0 +1,64 @@
1
+ import { AutoBeOpenApi, AutoBeTestScenario } from "@autobe/interface";
2
+ import { ILlmSchema, OpenApiTypeChecker } from "@samchon/openapi";
3
+
4
+ import { AutoBeContext } from "../../context/AutoBeContext";
5
+ import { IAutoBeTestScenarioArtifacts } from "./structures/IAutoBeTestScenarioArtifacts";
6
+
7
+ export async function compileTestScenario<Model extends ILlmSchema.Model>(
8
+ ctx: AutoBeContext<Model>,
9
+ scenario: AutoBeTestScenario,
10
+ ): Promise<IAutoBeTestScenarioArtifacts> {
11
+ const document: AutoBeOpenApi.IDocument = filterDocument(
12
+ scenario,
13
+ ctx.state().interface!.document,
14
+ );
15
+ const entries: [string, string][] = Object.entries(
16
+ await ctx.compiler.interface.compile(document),
17
+ );
18
+ const filter = (prefix: string) =>
19
+ Object.fromEntries(entries.filter(([key]) => key.startsWith(prefix)));
20
+ return {
21
+ document,
22
+ sdk: filter("src/api/functional"),
23
+ dto: filter("src/api/structures"),
24
+ e2e: filter("test/features"),
25
+ };
26
+ }
27
+
28
+ function filterDocument(
29
+ scenario: AutoBeTestScenario,
30
+ document: AutoBeOpenApi.IDocument,
31
+ ): AutoBeOpenApi.IDocument {
32
+ const operations: AutoBeOpenApi.IOperation[] = document.operations.filter(
33
+ (op) =>
34
+ (scenario.endpoint.method === op.method &&
35
+ scenario.endpoint.path === op.path) ||
36
+ scenario.dependencies.some(
37
+ (dp) =>
38
+ dp.endpoint.method === op.method && dp.endpoint.path === op.path,
39
+ ),
40
+ );
41
+ const components: AutoBeOpenApi.IComponents = {
42
+ schemas: {},
43
+ };
44
+ const visit = (typeName: string) => {
45
+ OpenApiTypeChecker.visit({
46
+ components: document.components,
47
+ schema: { $ref: `#/components/schemas/${typeName}` },
48
+ closure: (s) => {
49
+ if (OpenApiTypeChecker.isReference(s)) {
50
+ const key: string = s.$ref.split("/").pop()!;
51
+ components.schemas[key] = document.components.schemas[key];
52
+ }
53
+ },
54
+ });
55
+ };
56
+ for (const op of operations) {
57
+ if (op.requestBody) visit(op.requestBody.typeName);
58
+ if (op.responseBody) visit(op.responseBody.typeName);
59
+ }
60
+ return {
61
+ operations,
62
+ components,
63
+ };
64
+ }
@@ -0,0 +1,9 @@
1
+ export function filterTestFileName(key: string): boolean {
2
+ if (key.endsWith(".ts") === false) return false;
3
+ else if (key.startsWith("src/") === true) return true;
4
+ return (
5
+ key.startsWith("test/") === true &&
6
+ key.startsWith("test/features/") === false &&
7
+ key.startsWith("test/benchmark/") === false
8
+ );
9
+ }
@@ -1,6 +1,8 @@
1
1
  import {
2
2
  AutoBeAssistantMessageHistory,
3
+ AutoBeOpenApi,
3
4
  AutoBeTestHistory,
5
+ AutoBeTestValidateEvent,
4
6
  AutoBeTestWriteEvent,
5
7
  } from "@autobe/interface";
6
8
  import { ILlmSchema } from "@samchon/openapi";
@@ -9,8 +11,8 @@ import { v4 } from "uuid";
9
11
  import { AutoBeContext } from "../../context/AutoBeContext";
10
12
  import { IAutoBeApplicationProps } from "../../context/IAutoBeApplicationProps";
11
13
  import { orchestrateTestCorrect } from "./orchestrateTestCorrect";
12
- import { orchestrateTestProgress } from "./orchestrateTestProgress";
13
14
  import { orchestrateTestScenario } from "./orchestrateTestScenario";
15
+ import { orchestrateTestWrite } from "./orchestrateTestWrite";
14
16
 
15
17
  export const orchestrateTest =
16
18
  <Model extends ILlmSchema.Model>(ctx: AutoBeContext<Model>) =>
@@ -25,7 +27,8 @@ export const orchestrateTest =
25
27
  step: ctx.state().analyze?.step ?? 0,
26
28
  });
27
29
 
28
- const operations = ctx.state().interface?.document.operations ?? [];
30
+ const operations: AutoBeOpenApi.IOperation[] =
31
+ ctx.state().interface?.document.operations ?? [];
29
32
  if (operations.length === 0) {
30
33
  const history: AutoBeAssistantMessageHistory = {
31
34
  id: v4(),
@@ -36,10 +39,8 @@ export const orchestrateTest =
36
39
  "Unable to write test code because there are no Operations, " +
37
40
  "please check if the Interface agent is called.",
38
41
  };
39
-
40
42
  ctx.histories().push(history);
41
43
  ctx.dispatch(history);
42
-
43
44
  return history;
44
45
  }
45
46
 
@@ -47,13 +48,16 @@ export const orchestrateTest =
47
48
  const { scenarios } = await orchestrateTestScenario(ctx);
48
49
 
49
50
  // TEST CODE
50
- const codes: AutoBeTestWriteEvent[] = await orchestrateTestProgress(
51
+ const codes: AutoBeTestWriteEvent[] = await orchestrateTestWrite(
51
52
  ctx,
52
53
  scenarios,
53
54
  );
54
55
 
55
- const correct = await orchestrateTestCorrect(ctx, codes, scenarios);
56
-
56
+ const correct: AutoBeTestValidateEvent = await orchestrateTestCorrect(
57
+ ctx,
58
+ codes,
59
+ scenarios,
60
+ );
57
61
  const history: AutoBeTestHistory = {
58
62
  type: "test",
59
63
  id: v4(),
@@ -64,11 +68,13 @@ export const orchestrateTest =
64
68
  reason: "Step to the test generation referencing the interface",
65
69
  step: ctx.state().interface?.step ?? 0,
66
70
  };
67
-
68
71
  ctx.dispatch({
69
72
  type: "testComplete",
70
73
  created_at: start.toISOString(),
71
- files: correct.files,
74
+ files: correct.files
75
+ .map((f) => ({ [f.location]: f.content }))
76
+ .reduce((acc, cur) => Object.assign(acc, cur), {}),
77
+ compiled: correct.result,
72
78
  step: ctx.state().interface?.step ?? 0,
73
79
  });
74
80