@agentuity/cli 0.0.41 → 0.0.42

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.
@@ -1 +1 @@
1
- {"version":3,"file":"banner.d.ts","sourceRoot":"","sources":["../src/banner.ts"],"names":[],"mappings":"AAEA,wBAAgB,UAAU,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAuBjD"}
1
+ {"version":3,"file":"banner.d.ts","sourceRoot":"","sources":["../src/banner.ts"],"names":[],"mappings":"AAMA,wBAAgB,UAAU,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAwBjD"}
@@ -1 +1 @@
1
- {"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../../src/cmd/auth/login.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,YAAY,sCAiEvB,CAAC"}
1
+ {"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../../src/cmd/auth/login.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,YAAY,sCA+DvB,CAAC"}
@@ -1,2 +1,4 @@
1
+ import { BuildMetadata } from '../../types';
1
2
  export declare function parseAgentMetadata(rootDir: string, filename: string, contents: string): [string, Map<string, string>];
3
+ export declare function parseRoute(rootDir: string, filename: string): Promise<BuildMetadata['routes']>;
2
4
  //# sourceMappingURL=ast.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ast.d.ts","sourceRoot":"","sources":["../../../src/cmd/bundle/ast.ts"],"names":[],"mappings":"AAwJA,wBAAgB,kBAAkB,CACjC,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,GACd,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CA0E/B"}
1
+ {"version":3,"file":"ast.d.ts","sourceRoot":"","sources":["../../../src/cmd/bundle/ast.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAoK5C,wBAAgB,kBAAkB,CACjC,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,GACd,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CA0E/B;AAID,wBAAsB,UAAU,CAC/B,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,GACd,OAAO,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CA+IlC"}
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../../src/cmd/bundle/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,KAAK,CAAC;AAyGrC,QAAA,MAAM,gBAAgB,EAAE,SAwKvB,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
1
+ {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../../src/cmd/bundle/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,KAAK,CAAC;AA0GrC,QAAA,MAAM,gBAAgB,EAAE,SAgNvB,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cmd/dev/index.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,OAAO,mCAuYlB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cmd/dev/index.ts"],"names":[],"mappings":"AASA,eAAO,MAAM,OAAO,mCAudlB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"delete.d.ts","sourceRoot":"","sources":["../../../src/cmd/project/delete.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,gBAAgB,sCAU3B,CAAC"}
1
+ {"version":3,"file":"delete.d.ts","sourceRoot":"","sources":["../../../src/cmd/project/delete.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,gBAAgB,sCA+C3B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/cmd/project/list.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,cAAc,sCAUzB,CAAC"}
1
+ {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/cmd/project/list.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,cAAc,sCAqCzB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"show.d.ts","sourceRoot":"","sources":["../../../src/cmd/project/show.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,cAAc,sCASzB,CAAC"}
1
+ {"version":3,"file":"show.d.ts","sourceRoot":"","sources":["../../../src/cmd/project/show.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,cAAc,sCAqCzB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"template-flow.d.ts","sourceRoot":"","sources":["../../../src/cmd/project/template-flow.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAM3C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAIpD,UAAU,iBAAiB;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,OAAO,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAsB,aAAa,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAoM7E"}
1
+ {"version":3,"file":"template-flow.d.ts","sourceRoot":"","sources":["../../../src/cmd/project/template-flow.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAM3C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAIpD,UAAU,iBAAiB;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,OAAO,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAsB,aAAa,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAqM7E"}
package/dist/config.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import type { Config, Profile, AuthData } from './types';
2
- import { ProjectSchema } from './types';
2
+ import { ProjectSchema, type BuildMetadata } from './types';
3
3
  import { z } from 'zod';
4
4
  export declare function getDefaultConfigDir(): string;
5
5
  export declare function getDefaultConfigPath(): string;
@@ -20,5 +20,6 @@ type InitialProjectConfig = ProjectConfig & {
20
20
  apiKey: string;
21
21
  };
22
22
  export declare function createProjectConfig(dir: string, config: InitialProjectConfig): Promise<void>;
23
+ export declare function loadBuildMetadata(dir: string): Promise<BuildMetadata>;
23
24
  export {};
24
25
  //# sourceMappingURL=config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACzD,OAAO,EAAgB,aAAa,EAAE,MAAM,SAAS,CAAC;AAEtD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,wBAAgB,mBAAmB,IAAI,MAAM,CAE5C;AAED,wBAAgB,oBAAoB,IAAI,MAAM,CAE7C;AAED,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED,wBAAsB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CAOrD;AAED,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAG7D;AAED,wBAAsB,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC,CAmBlD;AAED,wBAAsB,aAAa,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC,CAkCxD;AASD,wBAAsB,UAAU,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAsC5E;AA4CD,wBAAsB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAQnF;AAED,wBAAsB,QAAQ,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAU5D;AAED,wBAAsB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAU/C;AAED,wBAAsB,OAAO,IAAI,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAcxD;AA4BD,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CA0DzD;AAUD,KAAK,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;AAEnD,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAkB3E;AAED,KAAK,oBAAoB,GAAG,aAAa,GAAG;IAC3C,MAAM,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,wBAAsB,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,oBAAoB,iBAQlF"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACzD,OAAO,EAAgB,aAAa,EAAuB,KAAK,aAAa,EAAE,MAAM,SAAS,CAAC;AAE/F,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,wBAAgB,mBAAmB,IAAI,MAAM,CAE5C;AAED,wBAAgB,oBAAoB,IAAI,MAAM,CAE7C;AAED,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED,wBAAsB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CAOrD;AAED,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAG7D;AAED,wBAAsB,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC,CAmBlD;AAED,wBAAsB,aAAa,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC,CAkCxD;AASD,wBAAsB,UAAU,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAsC5E;AA4CD,wBAAsB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAQnF;AAED,wBAAsB,QAAQ,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAU5D;AAED,wBAAsB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAU/C;AAED,wBAAsB,OAAO,IAAI,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAcxD;AA4BD,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CA0DzD;AAUD,KAAK,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;AAEnD,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAkB3E;AAED,KAAK,oBAAoB,GAAG,aAAa,GAAG;IAC3C,MAAM,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,wBAAsB,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,oBAAoB,iBAWlF;AAED,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAkB3E"}
package/dist/logger.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import type { LogLevel } from './types';
2
2
  import type { ColorScheme } from './terminal';
3
3
  export declare class Logger {
4
- private level;
4
+ level: LogLevel;
5
5
  private showTimestamp;
6
6
  private colorScheme;
7
7
  private colors;
@@ -1 +1 @@
1
- {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AA8G9C,qBAAa,MAAM;IAClB,OAAO,CAAC,KAAK,CAAW;IACxB,OAAO,CAAC,aAAa,CAAU;IAC/B,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,MAAM,CAA8B;IAC5C,OAAO,CAAC,UAAU,CAAQ;gBAGzB,KAAK,GAAE,QAAiB,EACxB,aAAa,GAAE,OAAe,EAC9B,WAAW,GAAE,WAAoB;IAQlC,QAAQ,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI;IAI/B,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAIpC,cAAc,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI;IAKzC,aAAa,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI;IAIlC,OAAO,CAAC,SAAS;IAIjB,OAAO,CAAC,GAAG;IA0DX,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAIhD,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAIhD,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAI/C,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAI/C,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAIhD,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,KAAK;CAIjD;AAED,eAAO,MAAM,MAAM,QAAqB,CAAC"}
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AA8G9C,qBAAa,MAAM;IACX,KAAK,EAAE,QAAQ,CAAC;IACvB,OAAO,CAAC,aAAa,CAAU;IAC/B,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,MAAM,CAA8B;IAC5C,OAAO,CAAC,UAAU,CAAQ;gBAGzB,KAAK,GAAE,QAAiB,EACxB,aAAa,GAAE,OAAe,EAC9B,WAAW,GAAE,WAAoB;IAQlC,QAAQ,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI;IAI/B,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAIpC,cAAc,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI;IAKzC,aAAa,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI;IAIlC,OAAO,CAAC,SAAS;IAIjB,OAAO,CAAC,GAAG;IA0DX,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAIhD,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAIhD,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAI/C,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAI/C,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAIhD,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,KAAK;CAIjD;AAED,eAAO,MAAM,MAAM,QAAqB,CAAC"}
package/dist/tui.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"tui.d.ts","sourceRoot":"","sources":["../src/tui.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tui.d.ts","sourceRoot":"","sources":["../src/tui.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAmE9C,wBAAgB,cAAc,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,CAExD;AAWD;;GAEG;AACH,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAI7C;AAED;;GAEG;AACH,wBAAgB,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAI3C;AAED;;GAEG;AACH,wBAAgB,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,KAAK,CAK5C;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,UAAQ,GAAG,IAAI,CAI9D;AAED;;GAEG;AACH,wBAAgB,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAI1C;AAED;;GAEG;AACH,wBAAgB,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAI1C;AAED;;GAEG;AACH,wBAAgB,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAIzC;AAED;;GAEG;AACH,wBAAgB,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAUxC;AAuBD;;GAEG;AACH,wBAAgB,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE5C;AAED;;GAEG;AACH,wBAAgB,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE3C;AAED;;GAEG;AACH,wBAAgB,OAAO,IAAI,IAAI,CAE9B;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,SAAM,GAAG,MAAM,CAKvE;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,SAAM,GAAG,MAAM,CAKtE;AAED,UAAU,aAAa;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,WAAW,CAAC,EAAE,OAAO,CAAC;CACtB;AAED;;;;;;GAMG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,IAAI,CAmGjF;AAED;;;;GAIG;AACH,wBAAsB,aAAa,CAAC,OAAO,SAA+B,GAAG,OAAO,CAAC,IAAI,CAAC,CAiCzF;AAED;;;;GAIG;AACH,wBAAsB,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,UAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAkDpF;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,IAAI,IAAI,CAqBzC;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,IAAI,CAmB3C;AAED;;;GAGG;AACH,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CA8CpE;AAiHD;;GAEG;AACH,MAAM,MAAM,uBAAuB,GAAG,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;AAEjE;;GAEG;AACH,MAAM,WAAW,oBAAoB,CAAC,CAAC;IACtC,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,CAAC,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;CAC1C;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB,CAAC,CAAC;IACxC,IAAI,EAAE,UAAU,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,CAAC,QAAQ,EAAE,uBAAuB,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;CAC5D;AAED;;GAEG;AACH,MAAM,MAAM,cAAc,CAAC,CAAC,IAAI,oBAAoB,CAAC,CAAC,CAAC,GAAG,sBAAsB,CAAC,CAAC,CAAC,CAAC;AAEpF;;;;;;;;GAQG;AACH,wBAAsB,OAAO,CAAC,CAAC,EAC9B,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,CAAC,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GACvC,OAAO,CAAC,CAAC,CAAC,CAAC;AAEd;;;;;;;GAOG;AACH,wBAAsB,OAAO,CAAC,CAAC,EAAE,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;AAiHzE;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACpC;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB;;OAEG;IACH,GAAG,EAAE,MAAM,EAAE,CAAC;IACd;;OAEG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;;OAEG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B;;;OAGG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB;;OAEG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB;;OAEG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED;;;;;;;;;GASG;AACH,wBAAsB,UAAU,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,MAAM,CAAC,CA6M/E;AAED,wBAAsB,kBAAkB,CACvC,IAAI,EAAE,gBAAgB,EACtB,OAAO,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,MAAM,CAAC,CAqBjB"}
package/dist/types.d.ts CHANGED
@@ -215,4 +215,38 @@ export declare const ProjectSchema: z.ZodObject<{
215
215
  projectId: z.ZodString;
216
216
  orgId: z.ZodString;
217
217
  }, z.core.$strip>;
218
+ export declare const BuildMetadataSchema: z.ZodObject<{
219
+ routes: z.ZodArray<z.ZodObject<{
220
+ id: z.ZodString;
221
+ filename: z.ZodString;
222
+ path: z.ZodString;
223
+ method: z.ZodEnum<{
224
+ get: "get";
225
+ post: "post";
226
+ put: "put";
227
+ delete: "delete";
228
+ patch: "patch";
229
+ }>;
230
+ version: z.ZodString;
231
+ type: z.ZodEnum<{
232
+ api: "api";
233
+ sms: "sms";
234
+ email: "email";
235
+ cron: "cron";
236
+ websocket: "websocket";
237
+ sse: "sse";
238
+ stream: "stream";
239
+ }>;
240
+ config: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
241
+ }, z.core.$strip>>;
242
+ agents: z.ZodArray<z.ZodObject<{
243
+ id: z.ZodString;
244
+ filename: z.ZodString;
245
+ name: z.ZodString;
246
+ version: z.ZodString;
247
+ identifier: z.ZodString;
248
+ description: z.ZodOptional<z.ZodString>;
249
+ }, z.core.$strip>>;
250
+ }, z.core.$strip>;
251
+ export type BuildMetadata = zod.infer<typeof BuildMetadataSchema>;
218
252
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agentuity/cli",
3
- "version": "0.0.41",
3
+ "version": "0.0.42",
4
4
  "type": "module",
5
5
  "main": "./src/index.ts",
6
6
  "types": "./dist/index.d.ts",
package/src/banner.ts CHANGED
@@ -1,9 +1,14 @@
1
1
  import { getVersion } from './version';
2
2
 
3
+ function shouldUseColors(): boolean {
4
+ return !process.env.NO_COLOR && process.env.TERM !== 'dumb' && !!process.stdout.isTTY;
5
+ }
6
+
3
7
  export function showBanner(version?: string): void {
4
8
  const _version = version ?? getVersion();
5
- const CYAN = Bun.color('cyan', 'ansi-16m');
6
- const RESET = '\x1b[0m';
9
+ const USE_COLORS = shouldUseColors();
10
+ const CYAN = USE_COLORS ? Bun.color('cyan', 'ansi-16m') : '';
11
+ const RESET = USE_COLORS ? '\x1b[0m' : '';
7
12
 
8
13
  const width = 52; // Content width between pipes
9
14
  const versionLabel = ' Version: '; // Include leading space
package/src/cli.ts CHANGED
@@ -15,7 +15,7 @@ export async function createCLI(version: string): Promise<Command> {
15
15
 
16
16
  program
17
17
  .option('--config <path>', 'Config file path', '~/.config/agentuity/production.yaml')
18
- .option('--log-level <level>', 'Log level', 'info')
18
+ .option('--log-level <level>', 'Log level', process.env.AGENTUITY_LOG_LEVEL ?? 'info')
19
19
  .option('--log-timestamp', 'Show timestamps in log output', false)
20
20
  .option('--no-log-prefix', 'Hide log level prefixes', false)
21
21
  .option('--color-scheme <scheme>', 'Color scheme: light or dark');
@@ -16,10 +16,8 @@ export const loginCommand = createSubcommand({
16
16
  const appUrl = getAppBaseURL(config);
17
17
 
18
18
  try {
19
- let otp: string | undefined;
20
-
21
- await tui.spinner('Generating login one time code...', async () => {
22
- otp = await generateLoginOTP(apiUrl, config);
19
+ const otp = await tui.spinner('Generating login one time code...', () => {
20
+ return generateLoginOTP(apiUrl, config);
23
21
  });
24
22
 
25
23
  if (!otp) {
@@ -1,6 +1,7 @@
1
1
  import * as acornLoose from 'acorn-loose';
2
2
  import { basename, dirname, relative } from 'node:path';
3
3
  import { generate } from 'astring';
4
+ import { BuildMetadata } from '../../types';
4
5
 
5
6
  interface ASTNode {
6
7
  type: string;
@@ -12,9 +13,7 @@ interface ASTNodeIdentifier extends ASTNode {
12
13
 
13
14
  interface ASTCallExpression extends ASTNode {
14
15
  arguments: unknown[];
15
- callee: {
16
- name: string;
17
- };
16
+ callee: ASTMemberExpression;
18
17
  }
19
18
 
20
19
  interface ASTPropertyNode {
@@ -31,10 +30,22 @@ interface ASTObjectExpression extends ASTNode {
31
30
  properties: ASTPropertyNode[];
32
31
  }
33
32
 
34
- interface ASTLiteral {
33
+ interface ASTLiteral extends ASTNode {
35
34
  value: string;
36
35
  }
37
36
 
37
+ interface ASTMemberExpression extends ASTNode {
38
+ object: ASTNode;
39
+ property: ASTNode;
40
+ computed: boolean;
41
+ optional: boolean;
42
+ name?: string;
43
+ }
44
+
45
+ interface ASTExpressionStatement extends ASTNode {
46
+ expression: ASTCallExpression;
47
+ }
48
+
38
49
  function parseObjectExpressionToMap(expr: ASTObjectExpression): Map<string, string> {
39
50
  const result = new Map<string, string>();
40
51
  for (const prop of expr.properties) {
@@ -98,6 +109,10 @@ function getAgentId(identifier: string): string {
98
109
  return hash(projectId, identifier);
99
110
  }
100
111
 
112
+ function generateRouteId(method: string, path: string): string {
113
+ return hash(projectId, method, path);
114
+ }
115
+
101
116
  type AcornParseResultType = ReturnType<typeof acornLoose.parse>;
102
117
 
103
118
  function augmentAgentMetadataNode(
@@ -229,3 +244,153 @@ export function parseAgentMetadata(
229
244
  `error parsing: ${filename}. could not find an proper createAgent defined in this file`
230
245
  );
231
246
  }
247
+
248
+ type RouteDefinition = BuildMetadata['routes'];
249
+
250
+ export async function parseRoute(
251
+ rootDir: string,
252
+ filename: string
253
+ ): Promise<BuildMetadata['routes']> {
254
+ const contents = await Bun.file(filename).text();
255
+ const version = hash(contents);
256
+ const ast = acornLoose.parse(contents, { ecmaVersion: 'latest', sourceType: 'module' });
257
+ let exportName: string | undefined;
258
+ let variableName: string | undefined;
259
+ for (const body of ast.body) {
260
+ if (body.type === 'ExportDefaultDeclaration') {
261
+ const identifier = body.declaration as ASTNodeIdentifier;
262
+ exportName = identifier.name;
263
+ break;
264
+ }
265
+ }
266
+ if (!exportName) {
267
+ throw new Error(`could not find default export for ${filename} using ${rootDir}`);
268
+ }
269
+ for (const body of ast.body) {
270
+ if (body.type === 'VariableDeclaration') {
271
+ for (const vardecl of body.declarations) {
272
+ if (vardecl.type === 'VariableDeclarator' && vardecl.id.type === 'Identifier') {
273
+ const identifier = vardecl.id as ASTNodeIdentifier;
274
+ if (identifier.name === exportName) {
275
+ if (vardecl.init?.type === 'CallExpression') {
276
+ const call = vardecl.init as ASTCallExpression;
277
+ if (call.callee.name === 'createRouter') {
278
+ variableName = identifier.name;
279
+ break;
280
+ }
281
+ }
282
+ }
283
+ }
284
+ }
285
+ }
286
+ }
287
+ if (!variableName) {
288
+ throw new Error(
289
+ `error parsing: ${filename}. could not find an proper createRouter defined in this file`
290
+ );
291
+ }
292
+
293
+ const rel = relative(rootDir, filename);
294
+ const name = basename(dirname(filename));
295
+ const routes: RouteDefinition = [];
296
+ const routePrefix = filename.includes('src/agents') ? '/agent' : '/api';
297
+
298
+ for (const body of ast.body) {
299
+ if (body.type === 'ExpressionStatement') {
300
+ const statement = body as ASTExpressionStatement;
301
+ const callee = statement.expression.callee;
302
+ if (callee.object.type === 'Identifier') {
303
+ const identifier = callee.object as ASTNodeIdentifier;
304
+ if (identifier.name === variableName) {
305
+ let method = (callee.property as ASTNodeIdentifier).name;
306
+ let type = 'api';
307
+ const action = statement.expression.arguments[0];
308
+ let suffix = '';
309
+ let config: Record<string, unknown> | undefined;
310
+ switch (method) {
311
+ case 'get':
312
+ case 'put':
313
+ case 'post':
314
+ case 'patch':
315
+ case 'delete': {
316
+ const theaction = action as ASTLiteral;
317
+ if (theaction.type === 'Literal') {
318
+ suffix = theaction.value;
319
+ break;
320
+ }
321
+ break;
322
+ }
323
+ case 'stream':
324
+ case 'sse':
325
+ case 'websocket': {
326
+ type = method;
327
+ method = 'post';
328
+ const theaction = action as ASTLiteral;
329
+ if (theaction.type === 'Literal') {
330
+ suffix = theaction.value;
331
+ break;
332
+ }
333
+ break;
334
+ }
335
+ case 'sms': {
336
+ type = method;
337
+ method = 'post';
338
+ const theaction = action as ASTObjectExpression;
339
+ if (theaction.type === 'ObjectExpression') {
340
+ config = {};
341
+ theaction.properties.forEach((p) => {
342
+ if (p.value.type === 'Literal') {
343
+ const literal = p.value as ASTLiteral;
344
+ config![p.key.name] = literal.value;
345
+ }
346
+ });
347
+ const number = theaction.properties.find((p) => p.key.name === 'number');
348
+ if (number && number.value.type === 'Literal') {
349
+ const phoneNumber = number.value as ASTLiteral;
350
+ suffix = hash(phoneNumber.value);
351
+ break;
352
+ }
353
+ }
354
+ break;
355
+ }
356
+ case 'email': {
357
+ type = method;
358
+ method = 'post';
359
+ const theaction = action as ASTLiteral;
360
+ if (theaction.type === 'Literal') {
361
+ const email = theaction.value;
362
+ suffix = hash(email);
363
+ break;
364
+ }
365
+ break;
366
+ }
367
+ case 'cron': {
368
+ type = method;
369
+ method = 'post';
370
+ const theaction = action as ASTLiteral;
371
+ if (theaction.type === 'Literal') {
372
+ const number = theaction.value;
373
+ suffix = hash(number);
374
+ break;
375
+ }
376
+ break;
377
+ }
378
+ }
379
+ const thepath = `${routePrefix}/${name}/${suffix}`
380
+ .replaceAll(/\/{2,}/g, '/')
381
+ .replaceAll(/\/$/g, '');
382
+ routes.push({
383
+ id: generateRouteId(method, thepath),
384
+ method: method as 'get' | 'post' | 'put' | 'delete' | 'patch',
385
+ type: type as 'api' | 'sms' | 'email' | 'cron',
386
+ filename: rel,
387
+ path: thepath,
388
+ version,
389
+ config,
390
+ });
391
+ }
392
+ }
393
+ }
394
+ }
395
+ return routes;
396
+ }
@@ -1,7 +1,8 @@
1
1
  import type { BunPlugin } from 'bun';
2
2
  import { dirname, basename, join } from 'node:path';
3
3
  import { existsSync, writeFileSync } from 'node:fs';
4
- import { parseAgentMetadata } from './ast';
4
+ import type { BuildMetadata } from '../../types';
5
+ import { parseAgentMetadata, parseRoute } from './ast';
5
6
  import { applyPatch, generatePatches } from './patch';
6
7
 
7
8
  function toCamelCase(str: string): string {
@@ -115,6 +116,7 @@ const AgentuityBundler: BunPlugin = {
115
116
  Map<string, string>
116
117
  >();
117
118
  const transpiler = new Bun.Transpiler({ loader: 'ts' });
119
+ let routeDefinitions: BuildMetadata['routes'] = [];
118
120
 
119
121
  build.onResolve({ filter: /\/route\.ts$/, namespace: 'file' }, async (args) => {
120
122
  if (args.path.startsWith(srcDir)) {
@@ -194,6 +196,9 @@ const AgentuityBundler: BunPlugin = {
194
196
  .replace('/agents', '/agent')
195
197
  .replace('./', '/');
196
198
 
199
+ const definitions = await parseRoute(rootDir, join(srcDir, route + '.ts'));
200
+ routeDefinitions = [...routeDefinitions, ...definitions];
201
+
197
202
  let agentDetail: Record<string, string> = {};
198
203
 
199
204
  if (hasAgent) {
@@ -264,6 +269,42 @@ const AgentuityBundler: BunPlugin = {
264
269
  contents += `\n${inserts.join('\n')}`;
265
270
  }
266
271
 
272
+ // generate the build metadata
273
+ const metadata: BuildMetadata = {
274
+ routes: routeDefinitions,
275
+ agents: [],
276
+ };
277
+ for (const [, v] of agentMetadata) {
278
+ if (!v.has('filename')) {
279
+ throw new Error('agent metadata is missing expected filename property');
280
+ }
281
+ if (!v.has('id')) {
282
+ throw new Error('agent metadata is missing expected id property');
283
+ }
284
+ if (!v.has('identifier')) {
285
+ throw new Error('agent metadata is missing expected identifier property');
286
+ }
287
+ if (!v.has('version')) {
288
+ throw new Error('agent metadata is missing expected version property');
289
+ }
290
+ if (!v.has('name')) {
291
+ throw new Error('agent metadata is missing expected name property');
292
+ }
293
+ metadata.agents.push({
294
+ filename: v.get('filename')!,
295
+ id: v.get('id')!,
296
+ identifier: v.get('identifier')!,
297
+ version: v.get('version')!,
298
+ name: v.get('name')!,
299
+ description: v.get('description') ?? '<no description provided>',
300
+ });
301
+ }
302
+
303
+ const metadataFilename = Bun.file(
304
+ join(build.config.outdir!, 'agentuity.metadata.json')
305
+ );
306
+ await metadataFilename.write(JSON.stringify(metadata));
307
+
267
308
  return {
268
309
  contents,
269
310
  loader: 'ts',
@@ -3,6 +3,8 @@ import { z } from 'zod';
3
3
  import { resolve, join } from 'node:path';
4
4
  import { bundle } from '../bundle/bundler';
5
5
  import { existsSync, FSWatcher, watch } from 'node:fs';
6
+ import { loadBuildMetadata } from '../../config';
7
+ import type { BuildMetadata } from '../../types';
6
8
  import * as tui from '../../tui';
7
9
 
8
10
  export const command = createCommand({
@@ -38,14 +40,24 @@ export const command = createCommand({
38
40
  process.exit(1);
39
41
  }
40
42
 
41
- const devmodebody = tui.muted('Local: ') + tui.link('http://127.0.0.1:3000');
43
+ const devmodebody =
44
+ tui.muted('Local: ') +
45
+ tui.link('http://127.0.0.1:3000') +
46
+ '\n\n' +
47
+ tui.muted('Press ') +
48
+ tui.bold('h') +
49
+ tui.muted(' for keyboard shortcuts');
50
+
51
+ function showBanner() {
52
+ tui.banner('⨺ Agentuity DevMode', devmodebody, {
53
+ padding: 2,
54
+ topSpacer: false,
55
+ bottomSpacer: false,
56
+ centerTitle: false,
57
+ });
58
+ }
42
59
 
43
- tui.banner('⨺ Agentuity DevMode', devmodebody, {
44
- padding: 2,
45
- topSpacer: false,
46
- bottomSpacer: false,
47
- centerTitle: false,
48
- });
60
+ showBanner();
49
61
 
50
62
  const env = { ...process.env };
51
63
  env.AGENTUITY_SDK_DEV_MODE = 'true';
@@ -70,6 +82,7 @@ export const command = createCommand({
70
82
  let shuttingDownForRestart = false;
71
83
  let pendingRestart = false;
72
84
  let building = false;
85
+ let metadata: BuildMetadata | undefined;
73
86
 
74
87
  // Track restart timestamps to detect restart loops
75
88
  const restartTimestamps: number[] = [];
@@ -216,6 +229,10 @@ export const command = createCommand({
216
229
  return;
217
230
  }
218
231
 
232
+ metadata = await loadBuildMetadata(agentuityDir);
233
+
234
+ env.AGENTUITY_LOG_LEVEL = logger.level;
235
+
219
236
  logger.trace('Starting dev server: %s', appPath);
220
237
  // Use shell to run in a process group for proper cleanup
221
238
  // The 'exec' ensures the shell is replaced by the actual process
@@ -223,7 +240,7 @@ export const command = createCommand({
223
240
  cwd: rootDir,
224
241
  stdout: 'inherit',
225
242
  stderr: 'inherit',
226
- stdin: 'inherit',
243
+ stdin: process.stdin.isTTY ? 'ignore' : 'inherit', // Don't inherit stdin, we handle it ourselves
227
244
  env,
228
245
  });
229
246
 
@@ -303,6 +320,71 @@ export const command = createCommand({
303
320
  await restart();
304
321
  logger.trace('Initial restart completed, setting up watchers');
305
322
 
323
+ // Setup keyboard shortcuts (only if we have a TTY)
324
+ if (process.stdin.isTTY) {
325
+ logger.trace('Setting up keyboard shortcuts');
326
+ process.stdin.setRawMode(true);
327
+ process.stdin.resume();
328
+ process.stdin.setEncoding('utf8');
329
+
330
+ const showHelp = () => {
331
+ console.log('\n' + tui.bold('Keyboard Shortcuts:'));
332
+ console.log(tui.muted(' h') + ' - show this help');
333
+ console.log(tui.muted(' c') + ' - clear console');
334
+ console.log(tui.muted(' r') + ' - restart server');
335
+ console.log(tui.muted(' o') + ' - show routes');
336
+ console.log(tui.muted(' a') + ' - show agents');
337
+ console.log(tui.muted(' q') + ' - quit\n');
338
+ };
339
+
340
+ const showRoutes = () => {
341
+ tui.info('API Route Detail');
342
+ console.table(metadata?.routes, ['method', 'path', 'filename']);
343
+ };
344
+
345
+ const showAgents = () => {
346
+ tui.info('Agent Detail');
347
+ console.table(metadata?.agents, ['name', 'filename', 'description']);
348
+ };
349
+
350
+ process.stdin.on('data', (data) => {
351
+ const key = data.toString();
352
+
353
+ // Handle Ctrl+C
354
+ if (key === '\u0003') {
355
+ cleanup();
356
+ return;
357
+ }
358
+
359
+ // Handle other shortcuts
360
+ switch (key) {
361
+ case 'h':
362
+ showHelp();
363
+ break;
364
+ case 'c':
365
+ console.clear();
366
+ showBanner();
367
+ break;
368
+ case 'r':
369
+ tui.info('Manually restarting server...');
370
+ restart();
371
+ break;
372
+ case 'o':
373
+ showRoutes();
374
+ break;
375
+ case 'a':
376
+ showAgents();
377
+ break;
378
+ case 'q':
379
+ tui.info('Shutting down...');
380
+ cleanup();
381
+ break;
382
+ }
383
+ });
384
+
385
+ logger.trace('✓ Keyboard shortcuts enabled');
386
+ }
387
+
306
388
  // Patterns to ignore (generated files that change during build)
307
389
  const ignorePatterns = [
308
390
  /\.generated\.(js|ts|d\.ts)$/,
@@ -31,7 +31,7 @@ export const createProjectSubcommand = createSubcommand({
31
31
  .optional()
32
32
  .default(true)
33
33
  .describe('Run bun run build after installing (use --no-build to skip)'),
34
- confirm: z.boolean().optional().describe('Show confirmation prompts'),
34
+ confirm: z.boolean().optional().describe('Skip confirmation prompts'),
35
35
  register: z
36
36
  .boolean()
37
37
  .default(true)
@@ -1,13 +1,54 @@
1
+ import { z } from 'zod';
1
2
  import { createSubcommand } from '../../types';
3
+ import * as tui from '../../tui';
4
+ import { projectDelete } from '@agentuity/server';
5
+ import { getAPIBaseURL, APIClient } from '../../api';
2
6
 
3
7
  export const deleteSubcommand = createSubcommand({
4
8
  name: 'delete',
5
9
  description: 'Delete a project',
6
10
  aliases: ['rm', 'del'],
7
11
  requiresAuth: true,
12
+ schema: {
13
+ args: z.object({
14
+ id: z.string().describe('the project id'),
15
+ }),
16
+ options: z.object({
17
+ confirm: z.boolean().optional().describe('Skip confirmation prompts'),
18
+ }),
19
+ },
8
20
 
9
21
  async handler(ctx) {
10
- const { logger } = ctx;
11
- logger.info('TODO: Implement project delete functionality');
22
+ const { args, opts, config } = ctx;
23
+
24
+ const apiUrl = getAPIBaseURL(config);
25
+ const client = new APIClient(apiUrl, config);
26
+
27
+ const skipConfirm = opts?.confirm === true;
28
+
29
+ if (!process.stdout.isTTY && !skipConfirm) {
30
+ tui.fatal('no TTY and --confirm is false');
31
+ }
32
+
33
+ if (!skipConfirm) {
34
+ const ok = await tui.confirm('Are you sure you want to delete', false);
35
+ if (!ok) {
36
+ return;
37
+ }
38
+ }
39
+
40
+ const deleted = await tui.spinner('Deleting project', async () => {
41
+ const val = await projectDelete(client!, args.id);
42
+ if (val.length === 1 && val[0] === args.id) {
43
+ return true;
44
+ }
45
+ return false;
46
+ });
47
+
48
+ if (deleted) {
49
+ tui.success(`Project ${args.id} deleted`);
50
+ } else {
51
+ tui.warning(`${args.id} not found`);
52
+ }
12
53
  },
13
54
  });
@@ -1,13 +1,44 @@
1
+ import { z } from 'zod';
1
2
  import { createSubcommand } from '../../types';
3
+ import * as tui from '../../tui';
4
+ import { projectList } from '@agentuity/server';
5
+ import { getAPIBaseURL, APIClient } from '../../api';
2
6
 
3
7
  export const listSubcommand = createSubcommand({
4
8
  name: 'list',
5
9
  description: 'List all projects',
6
10
  aliases: ['ls'],
7
11
  requiresAuth: true,
12
+ schema: {
13
+ options: z.object({
14
+ format: z
15
+ .enum(['json', 'table'])
16
+ .optional()
17
+ .describe('the output format: json, table (default)'),
18
+ }),
19
+ },
8
20
 
9
21
  async handler(ctx) {
10
- const { logger } = ctx;
11
- logger.info('TODO: Implement project list functionality');
22
+ const { config, opts } = ctx;
23
+
24
+ const apiUrl = getAPIBaseURL(config);
25
+ const client = new APIClient(apiUrl, config);
26
+
27
+ const projects = await tui.spinner('Fetching projects', () => {
28
+ return projectList(client!);
29
+ });
30
+
31
+ // TODO: might want to sort by the last org_id we used
32
+ if (projects) {
33
+ projects.sort((a, b) => {
34
+ return a.name.localeCompare(b.name);
35
+ });
36
+ }
37
+
38
+ if (opts?.format === 'json') {
39
+ console.log(JSON.stringify(projects, null, 2));
40
+ } else {
41
+ console.table(projects, ['id', 'name', 'orgName']);
42
+ }
12
43
  },
13
44
  });
@@ -1,12 +1,44 @@
1
+ import { z } from 'zod';
1
2
  import { createSubcommand } from '../../types';
3
+ import * as tui from '../../tui';
4
+ import { projectGet } from '@agentuity/server';
5
+ import { getAPIBaseURL, APIClient } from '../../api';
2
6
 
3
7
  export const showSubcommand = createSubcommand({
4
8
  name: 'show',
5
- description: 'Show project details',
9
+ aliases: ['get'],
10
+ description: 'Show project detail',
6
11
  requiresAuth: true,
12
+ schema: {
13
+ args: z.object({
14
+ id: z.string().describe('the project id'),
15
+ }),
16
+ options: z.object({
17
+ format: z
18
+ .enum(['json', 'table'])
19
+ .optional()
20
+ .describe('the output format: json, table (default)'),
21
+ }),
22
+ },
7
23
 
8
24
  async handler(ctx) {
9
- const { logger } = ctx;
10
- logger.info('TODO: Implement project show functionality');
25
+ const { opts, args, config } = ctx;
26
+
27
+ const apiUrl = getAPIBaseURL(config);
28
+ const client = new APIClient(apiUrl, config);
29
+
30
+ const project = await tui.spinner('Fetching project', () => {
31
+ return projectGet(client!, { id: args.id, mask: true });
32
+ });
33
+
34
+ if (!project) {
35
+ tui.fatal('Project not found');
36
+ }
37
+
38
+ if (opts?.format === 'json') {
39
+ console.log(JSON.stringify(project, null, 2));
40
+ } else {
41
+ console.table([project], ['id', 'orgId']);
42
+ }
11
43
  },
12
44
  });
@@ -4,7 +4,7 @@ import { cwd } from 'node:process';
4
4
  import { homedir } from 'node:os';
5
5
  import enquirer from 'enquirer';
6
6
  import {
7
- createProject,
7
+ projectCreate,
8
8
  projectExists,
9
9
  listOrganizations,
10
10
  type OrganizationList,
@@ -53,10 +53,8 @@ export async function runCreateFlow(options: CreateFlowOptions): Promise<void> {
53
53
  tui.info(`📋 Loading templates from local directory: ${templateDir}...\n`);
54
54
  }
55
55
 
56
- let templates: TemplateInfo[] = [];
57
-
58
- await tui.spinner('Fetching templates', async () => {
59
- templates = await fetchTemplates(templateDir, templateBranch);
56
+ const templates = await tui.spinner('Fetching templates', async () => {
57
+ return fetchTemplates(templateDir, templateBranch);
60
58
  });
61
59
 
62
60
  if (templates.length === 0) {
@@ -73,13 +71,16 @@ export async function runCreateFlow(options: CreateFlowOptions): Promise<void> {
73
71
  if (auth) {
74
72
  const apiUrl = getAPIBaseURL(config);
75
73
  client = new APIClient(apiUrl, config);
76
- await tui.spinner('Fetching organizations', async () => {
74
+ orgs = await tui.spinner('Fetching organizations', async () => {
77
75
  const resp = await listOrganizations(client!);
78
76
  if (resp.data) {
79
- orgs = resp.data;
77
+ return resp.data;
80
78
  }
81
79
  });
82
- orgId = await tui.selectOrganization(orgs!, config?.preferences?.orgId);
80
+ if (!orgs) {
81
+ tui.fatal('no organizations could be found for your login');
82
+ }
83
+ orgId = await tui.selectOrganization(orgs, config?.preferences?.orgId);
83
84
  }
84
85
 
85
86
  if (!projectName && !skipPrompts) {
@@ -201,7 +202,7 @@ export async function runCreateFlow(options: CreateFlowOptions): Promise<void> {
201
202
 
202
203
  if (auth && client && orgId) {
203
204
  await tui.spinner('Registering your project', async () => {
204
- const res = await createProject(client, {
205
+ const res = await projectCreate(client, {
205
206
  name: projectName,
206
207
  organization_id: orgId,
207
208
  provider: 'bunjs',
@@ -213,7 +214,7 @@ export async function runCreateFlow(options: CreateFlowOptions): Promise<void> {
213
214
  apiKey: res.data.api_key,
214
215
  });
215
216
  }
216
- tui.fatal(res.message!);
217
+ tui.fatal(res.message ?? 'failed to register project');
217
218
  });
218
219
  }
219
220
 
package/src/config.ts CHANGED
@@ -3,7 +3,7 @@ import { join, extname, basename } from 'node:path';
3
3
  import { homedir } from 'node:os';
4
4
  import { mkdir, readdir, readFile, writeFile, chmod } from 'node:fs/promises';
5
5
  import type { Config, Profile, AuthData } from './types';
6
- import { ConfigSchema, ProjectSchema } from './types';
6
+ import { ConfigSchema, ProjectSchema, BuildMetadataSchema, type BuildMetadata } from './types';
7
7
  import * as tui from './tui';
8
8
  import { z } from 'zod';
9
9
 
@@ -350,11 +350,34 @@ type InitialProjectConfig = ProjectConfig & {
350
350
  };
351
351
 
352
352
  export async function createProjectConfig(dir: string, config: InitialProjectConfig) {
353
+ // Create a sanitized config without the apiKey for agentuity.json
354
+ const { apiKey, ...sanitizedConfig } = config;
355
+
353
356
  const configPath = join(dir, 'agentuity.json');
354
357
  const configFile = Bun.file(configPath);
355
- await configFile.write(JSON.stringify(config, null, 2));
358
+ await configFile.write(JSON.stringify(sanitizedConfig, null, 2));
356
359
 
357
360
  const envPath = join(dir, '.env');
358
361
  const envFile = Bun.file(envPath);
359
- await envFile.write(`AGENTUITY_SDK_KEY=${config.apiKey}`);
362
+ await envFile.write(`AGENTUITY_SDK_KEY=${apiKey}`);
363
+ }
364
+
365
+ export async function loadBuildMetadata(dir: string): Promise<BuildMetadata> {
366
+ const filename = join(dir, 'agentuity.metadata.json');
367
+ const file = Bun.file(filename);
368
+ if (!(await file.exists())) {
369
+ throw new Error(`couldn't find ${filename}`);
370
+ }
371
+ const buffer = await file.text();
372
+ const config = JSON.parse(buffer);
373
+ const result = BuildMetadataSchema.safeParse(config);
374
+ if (!result.success) {
375
+ tui.error(`Invalid build metadata at ${filename}:`);
376
+ for (const issue of result.error.issues) {
377
+ const path = issue.path.length > 0 ? issue.path.join('.') : 'root';
378
+ tui.bullet(`${path}: ${issue.message}`);
379
+ }
380
+ process.exit(1);
381
+ }
382
+ return result.data;
360
383
  }
package/src/logger.ts CHANGED
@@ -110,7 +110,7 @@ function getLogColors(scheme: ColorScheme): Record<LogLevel, LogColors> {
110
110
  }
111
111
 
112
112
  export class Logger {
113
- private level: LogLevel;
113
+ public level: LogLevel;
114
114
  private showTimestamp: boolean;
115
115
  private colorScheme: ColorScheme;
116
116
  private colors: Record<LogLevel, LogColors>;
package/src/tui.ts CHANGED
@@ -18,38 +18,58 @@ const ICONS = {
18
18
  bullet: '•',
19
19
  } as const;
20
20
 
21
+ function shouldUseColors(): boolean {
22
+ return !process.env.NO_COLOR && process.env.TERM !== 'dumb' && !!process.stdout.isTTY;
23
+ }
24
+
21
25
  // Color definitions (light/dark adaptive) using Bun.color
22
- const COLORS = {
23
- success: {
24
- light: Bun.color('#008000', 'ansi') || '\x1b[32m', // green
25
- dark: Bun.color('#00FF00', 'ansi') || '\x1b[92m', // bright green
26
- },
27
- error: {
28
- light: Bun.color('#CC0000', 'ansi') || '\x1b[31m', // red
29
- dark: Bun.color('#FF5555', 'ansi') || '\x1b[91m', // bright red
30
- },
31
- warning: {
32
- light: Bun.color('#B58900', 'ansi') || '\x1b[33m', // yellow
33
- dark: Bun.color('#FFFF55', 'ansi') || '\x1b[93m', // bright yellow
34
- },
35
- info: {
36
- light: Bun.color('#008B8B', 'ansi') || '\x1b[36m', // dark cyan
37
- dark: Bun.color('#55FFFF', 'ansi') || '\x1b[96m', // bright cyan
38
- },
39
- muted: {
40
- light: Bun.color('#808080', 'ansi') || '\x1b[90m', // gray
41
- dark: Bun.color('#888888', 'ansi') || '\x1b[90m', // darker gray
42
- },
43
- bold: {
44
- light: '\x1b[1m',
45
- dark: '\x1b[1m',
46
- },
47
- link: {
48
- light: '\x1b[34;4m', // blue underline (need ANSI for underline)
49
- dark: '\x1b[94;4m', // bright blue underline
50
- },
51
- reset: '\x1b[0m',
52
- } as const;
26
+ function getColors() {
27
+ const USE_COLORS = shouldUseColors();
28
+ if (!USE_COLORS) {
29
+ return {
30
+ success: { light: '', dark: '' },
31
+ error: { light: '', dark: '' },
32
+ warning: { light: '', dark: '' },
33
+ info: { light: '', dark: '' },
34
+ muted: { light: '', dark: '' },
35
+ bold: { light: '', dark: '' },
36
+ link: { light: '', dark: '' },
37
+ reset: '',
38
+ } as const;
39
+ }
40
+
41
+ return {
42
+ success: {
43
+ light: Bun.color('#008000', 'ansi') || '\x1b[32m', // green
44
+ dark: Bun.color('#00FF00', 'ansi') || '\x1b[92m', // bright green
45
+ },
46
+ error: {
47
+ light: Bun.color('#CC0000', 'ansi') || '\x1b[31m', // red
48
+ dark: Bun.color('#FF5555', 'ansi') || '\x1b[91m', // bright red
49
+ },
50
+ warning: {
51
+ light: Bun.color('#B58900', 'ansi') || '\x1b[33m', // yellow
52
+ dark: Bun.color('#FFFF55', 'ansi') || '\x1b[93m', // bright yellow
53
+ },
54
+ info: {
55
+ light: Bun.color('#008B8B', 'ansi') || '\x1b[36m', // dark cyan
56
+ dark: Bun.color('#55FFFF', 'ansi') || '\x1b[96m', // bright cyan
57
+ },
58
+ muted: {
59
+ light: Bun.color('#808080', 'ansi') || '\x1b[90m', // gray
60
+ dark: Bun.color('#888888', 'ansi') || '\x1b[90m', // darker gray
61
+ },
62
+ bold: {
63
+ light: '\x1b[1m',
64
+ dark: '\x1b[1m',
65
+ },
66
+ link: {
67
+ light: '\x1b[34;4m', // blue underline (need ANSI for underline)
68
+ dark: '\x1b[94;4m', // bright blue underline
69
+ },
70
+ reset: '\x1b[0m',
71
+ } as const;
72
+ }
53
73
 
54
74
  let currentColorScheme: ColorScheme = 'dark';
55
75
 
@@ -57,7 +77,8 @@ export function setColorScheme(scheme: ColorScheme): void {
57
77
  currentColorScheme = scheme;
58
78
  }
59
79
 
60
- function getColor(colorKey: keyof typeof COLORS): string {
80
+ function getColor(colorKey: keyof ReturnType<typeof getColors>): string {
81
+ const COLORS = getColors();
61
82
  const color = COLORS[colorKey];
62
83
  if (typeof color === 'string') {
63
84
  return color;
@@ -70,7 +91,7 @@ function getColor(colorKey: keyof typeof COLORS): string {
70
91
  */
71
92
  export function success(message: string): void {
72
93
  const color = getColor('success');
73
- const reset = COLORS.reset;
94
+ const reset = getColor('reset');
74
95
  console.log(`${color}${ICONS.success} ${message}${reset}`);
75
96
  }
76
97
 
@@ -79,7 +100,7 @@ export function success(message: string): void {
79
100
  */
80
101
  export function error(message: string): void {
81
102
  const color = getColor('error');
82
- const reset = COLORS.reset;
103
+ const reset = getColor('reset');
83
104
  console.error(`${color}${ICONS.error} ${message}${reset}`);
84
105
  }
85
106
 
@@ -88,7 +109,7 @@ export function error(message: string): void {
88
109
  */
89
110
  export function fatal(message: string): never {
90
111
  const color = getColor('error');
91
- const reset = COLORS.reset;
112
+ const reset = getColor('reset');
92
113
  console.error(`${color}${ICONS.error} ${message}${reset}`);
93
114
  process.exit(1);
94
115
  }
@@ -98,7 +119,7 @@ export function fatal(message: string): never {
98
119
  */
99
120
  export function warning(message: string, asError = false): void {
100
121
  const color = asError ? getColor('error') : getColor('warning');
101
- const reset = COLORS.reset;
122
+ const reset = getColor('reset');
102
123
  console.log(`${color}${ICONS.warning} ${message}${reset}`);
103
124
  }
104
125
 
@@ -107,7 +128,7 @@ export function warning(message: string, asError = false): void {
107
128
  */
108
129
  export function info(message: string): void {
109
130
  const color = getColor('info');
110
- const reset = COLORS.reset;
131
+ const reset = getColor('reset');
111
132
  console.log(`${color}${ICONS.info} ${message}${reset}`);
112
133
  }
113
134
 
@@ -116,7 +137,7 @@ export function info(message: string): void {
116
137
  */
117
138
  export function muted(text: string): string {
118
139
  const color = getColor('muted');
119
- const reset = COLORS.reset;
140
+ const reset = getColor('reset');
120
141
  return `${color}${text}${reset}`;
121
142
  }
122
143
 
@@ -125,7 +146,7 @@ export function muted(text: string): string {
125
146
  */
126
147
  export function bold(text: string): string {
127
148
  const color = getColor('bold');
128
- const reset = COLORS.reset;
149
+ const reset = getColor('reset');
129
150
  return `${color}${text}${reset}`;
130
151
  }
131
152
 
@@ -134,7 +155,7 @@ export function bold(text: string): string {
134
155
  */
135
156
  export function link(url: string): string {
136
157
  const color = getColor('link');
137
- const reset = COLORS.reset;
158
+ const reset = getColor('reset');
138
159
 
139
160
  // Check if terminal supports hyperlinks (OSC 8)
140
161
  if (supportsHyperlinks()) {
@@ -251,7 +272,7 @@ export function banner(title: string, body: string, options?: BannerOptions): vo
251
272
  // Colors
252
273
  const borderColor = getColor('muted');
253
274
  const titleColor = getColor('info');
254
- const reset = COLORS.reset;
275
+ const reset = getColor('reset');
255
276
 
256
277
  // Build banner
257
278
  const lines: string[] = [];
@@ -560,7 +581,7 @@ function stripAnsiCodes(str: string): string {
560
581
  * Check if a string ends with ANSI reset code
561
582
  */
562
583
  function endsWithReset(str: string): boolean {
563
- return str.endsWith('\x1b[0m') || str.endsWith(COLORS.reset);
584
+ return str.endsWith('\x1b[0m') || str.endsWith(getColor('reset'));
564
585
  }
565
586
 
566
587
  /**
@@ -625,7 +646,7 @@ function wrapText(text: string, maxWidth: number): string[] {
625
646
  if (leadingCodes && hasReset) {
626
647
  for (let i = paragraphStart; i < allLines.length; i++) {
627
648
  if (!endsWithReset(allLines[i])) {
628
- allLines[i] += COLORS.reset;
649
+ allLines[i] += getColor('reset');
629
650
  }
630
651
  }
631
652
  }
@@ -702,7 +723,7 @@ export async function spinner<T>(
702
723
  }
703
724
 
704
725
  const message = options.message;
705
- const reset = COLORS.reset;
726
+ const reset = getColor('reset');
706
727
 
707
728
  // If no TTY, just execute the callback without animation
708
729
  if (!process.stdout.isTTY) {
@@ -714,8 +735,6 @@ export async function spinner<T>(
714
735
  ? await options.callback()
715
736
  : await options.callback;
716
737
 
717
- const successColor = getColor('success');
718
- console.log(`${successColor}${ICONS.success} ${message}${reset}`);
719
738
  return result;
720
739
  } catch (err) {
721
740
  const errorColor = getColor('error');
@@ -886,7 +905,7 @@ export async function runCommand(options: CommandRunnerOptions): Promise<number>
886
905
  ? '\x1b[1m' + (Bun.color('#00008B', 'ansi') || '\x1b[34m')
887
906
  : Bun.color('#FFFFFF', 'ansi') || '\x1b[97m'; // bold dark blue / white
888
907
  const mutedColor = Bun.color('#808080', 'ansi') || '\x1b[90m';
889
- const reset = COLORS.reset;
908
+ const reset = getColor('reset');
890
909
 
891
910
  // Get terminal width
892
911
  const termWidth = process.stdout.columns || 80;
@@ -1061,9 +1080,17 @@ export async function selectOrganization(
1061
1080
  orgs: OrganizationList,
1062
1081
  initial?: string
1063
1082
  ): Promise<string> {
1083
+ if (orgs.length === 0) {
1084
+ fatal(
1085
+ 'You do not belong to any organizations.\n' +
1086
+ 'Please contact support or create an organization at https://agentuity.com'
1087
+ );
1088
+ }
1089
+
1064
1090
  if (orgs.length === 1) {
1065
1091
  return orgs[0].id;
1066
1092
  }
1093
+
1067
1094
  const response = await enquirer.prompt<{ action: string }>({
1068
1095
  type: 'select',
1069
1096
  name: 'action',
package/src/types.ts CHANGED
@@ -320,3 +320,32 @@ export const ProjectSchema = zod.object({
320
320
  projectId: zod.string().describe('the project id'),
321
321
  orgId: zod.string().describe('the organization id'),
322
322
  });
323
+
324
+ export const BuildMetadataSchema = zod.object({
325
+ routes: zod.array(
326
+ zod.object({
327
+ id: zod.string().describe('the unique calculated id for the route'),
328
+ filename: zod.string().describe('the relative path for the file'),
329
+ path: zod.string().describe('the route path'),
330
+ method: zod.enum(['get', 'post', 'put', 'delete', 'patch']).describe('the HTTP method'),
331
+ version: zod.string().describe('the SHA256 content of the file'),
332
+ type: zod.enum(['api', 'sms', 'email', 'cron', 'websocket', 'sse', 'stream']),
333
+ config: zod
334
+ .record(zod.string(), zod.unknown())
335
+ .optional()
336
+ .describe('type specific configuration'),
337
+ })
338
+ ),
339
+ agents: zod.array(
340
+ zod.object({
341
+ id: zod.string().describe('the unique calculated id for the route'),
342
+ filename: zod.string().describe('the relative path for the file'),
343
+ name: zod.string().describe('the name of the agent'),
344
+ version: zod.string().describe('the SHA256 content of the file'),
345
+ identifier: zod.string().describe('the folder for the agent'),
346
+ description: zod.string().optional().describe('the agent description'),
347
+ })
348
+ ),
349
+ });
350
+
351
+ export type BuildMetadata = zod.infer<typeof BuildMetadataSchema>;