movie-agent 1.0.0

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 (60) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +464 -0
  3. package/bin/movie-agent +209 -0
  4. package/dist/agent.d.ts +89 -0
  5. package/dist/agent.d.ts.map +1 -0
  6. package/dist/agent.js +365 -0
  7. package/dist/agent.js.map +1 -0
  8. package/dist/cache.d.ts +75 -0
  9. package/dist/cache.d.ts.map +1 -0
  10. package/dist/cache.js +133 -0
  11. package/dist/cache.js.map +1 -0
  12. package/dist/config.d.ts +17 -0
  13. package/dist/config.d.ts.map +1 -0
  14. package/dist/config.js +31 -0
  15. package/dist/config.js.map +1 -0
  16. package/dist/discover.d.ts +38 -0
  17. package/dist/discover.d.ts.map +1 -0
  18. package/dist/discover.js +121 -0
  19. package/dist/discover.js.map +1 -0
  20. package/dist/factory.d.ts +87 -0
  21. package/dist/factory.d.ts.map +1 -0
  22. package/dist/factory.js +118 -0
  23. package/dist/factory.js.map +1 -0
  24. package/dist/filters.d.ts +61 -0
  25. package/dist/filters.d.ts.map +1 -0
  26. package/dist/filters.js +97 -0
  27. package/dist/filters.js.map +1 -0
  28. package/dist/format.d.ts +33 -0
  29. package/dist/format.d.ts.map +1 -0
  30. package/dist/format.js +85 -0
  31. package/dist/format.js.map +1 -0
  32. package/dist/index.d.ts +6 -0
  33. package/dist/index.d.ts.map +1 -0
  34. package/dist/index.js +20 -0
  35. package/dist/index.js.map +1 -0
  36. package/dist/mood.d.ts +7 -0
  37. package/dist/mood.d.ts.map +1 -0
  38. package/dist/mood.js +21 -0
  39. package/dist/mood.js.map +1 -0
  40. package/dist/providers.d.ts +10 -0
  41. package/dist/providers.d.ts.map +1 -0
  42. package/dist/providers.js +70 -0
  43. package/dist/providers.js.map +1 -0
  44. package/dist/ranking.d.ts +57 -0
  45. package/dist/ranking.d.ts.map +1 -0
  46. package/dist/ranking.js +198 -0
  47. package/dist/ranking.js.map +1 -0
  48. package/dist/tmdbApi.d.ts +79 -0
  49. package/dist/tmdbApi.d.ts.map +1 -0
  50. package/dist/tmdbApi.js +88 -0
  51. package/dist/tmdbApi.js.map +1 -0
  52. package/dist/types.d.ts +99 -0
  53. package/dist/types.d.ts.map +1 -0
  54. package/dist/types.js +3 -0
  55. package/dist/types.js.map +1 -0
  56. package/dist/validate.d.ts +13 -0
  57. package/dist/validate.d.ts.map +1 -0
  58. package/dist/validate.js +47 -0
  59. package/dist/validate.js.map +1 -0
  60. package/package.json +72 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ranking.js","sourceRoot":"","sources":["../src/ranking.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,79 @@
1
+ export interface MovieSummary {
2
+ id: number;
3
+ title: string;
4
+ overview?: string;
5
+ release_date?: string;
6
+ genre_ids?: number[];
7
+ vote_average?: number;
8
+ popularity?: number;
9
+ }
10
+ export interface DiscoverMoviesParams {
11
+ sort_by?: string;
12
+ with_genres?: string;
13
+ page?: number;
14
+ year?: number;
15
+ 'primary_release_date.gte'?: string;
16
+ 'primary_release_date.lte'?: string;
17
+ 'with_runtime.gte'?: number;
18
+ 'with_runtime.lte'?: number;
19
+ region?: string;
20
+ }
21
+ export interface DiscoverMoviesResponse {
22
+ page: number;
23
+ results: MovieSummary[];
24
+ total_pages: number;
25
+ total_results: number;
26
+ }
27
+ export interface MovieDetails extends MovieSummary {
28
+ genres?: {
29
+ id: number;
30
+ name: string;
31
+ }[];
32
+ runtime?: number;
33
+ tagline?: string;
34
+ homepage?: string;
35
+ }
36
+ export interface SearchMoviesResponse extends DiscoverMoviesResponse {
37
+ }
38
+ export interface Genre {
39
+ id: number;
40
+ name: string;
41
+ }
42
+ export interface GenresResponse {
43
+ genres: Genre[];
44
+ }
45
+ export interface WatchProvidersResponse {
46
+ id: number;
47
+ results: {
48
+ [countryCode: string]: {
49
+ link?: string;
50
+ flatrate?: {
51
+ provider_id: number;
52
+ provider_name: string;
53
+ }[];
54
+ rent?: {
55
+ provider_id: number;
56
+ provider_name: string;
57
+ }[];
58
+ buy?: {
59
+ provider_id: number;
60
+ provider_name: string;
61
+ }[];
62
+ };
63
+ };
64
+ }
65
+ export declare class TmdbApiClient {
66
+ private readonly baseUrl;
67
+ private readonly apiKey;
68
+ private readonly region;
69
+ constructor(baseUrl?: string, apiKey?: string, region?: string);
70
+ private buildUrl;
71
+ private doFetch;
72
+ discoverMovies(params?: DiscoverMoviesParams): Promise<DiscoverMoviesResponse>;
73
+ getMovieDetails(movieId: number): Promise<MovieDetails>;
74
+ searchMovies(query: string, page?: number): Promise<SearchMoviesResponse>;
75
+ getGenres(): Promise<GenresResponse>;
76
+ getWatchProviders(movieId: number): Promise<WatchProvidersResponse>;
77
+ }
78
+ export default TmdbApiClient;
79
+ //# sourceMappingURL=tmdbApi.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tmdbApi.d.ts","sourceRoot":"","sources":["../src/tmdbApi.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,88 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.TmdbApiClient = void 0;
7
+ const config_1 = __importDefault(require("./config"));
8
+ class TmdbApiClient {
9
+ constructor(baseUrl, apiKey, region) {
10
+ this.baseUrl = baseUrl ?? config_1.default.TMDB_BASE_URL;
11
+ this.apiKey = apiKey ?? config_1.default.TMDB_API_KEY;
12
+ this.region = region ?? config_1.default.TMDB_REGION;
13
+ }
14
+ buildUrl(path, params) {
15
+ const normalizedBase = this.baseUrl.endsWith('/')
16
+ ? this.baseUrl
17
+ : this.baseUrl + '/';
18
+ const url = new URL(path, normalizedBase);
19
+ // TMDb v3 supports API key via query string
20
+ url.searchParams.set('api_key', this.apiKey);
21
+ if (params) {
22
+ for (const [k, v] of Object.entries(params)) {
23
+ if (v !== undefined && v !== null) {
24
+ url.searchParams.set(k, String(v));
25
+ }
26
+ }
27
+ }
28
+ return url.toString();
29
+ }
30
+ async doFetch(url) {
31
+ let resp;
32
+ try {
33
+ resp = await fetch(url, {
34
+ headers: { Accept: 'application/json' },
35
+ });
36
+ }
37
+ catch (err) {
38
+ throw new Error(`Network error calling TMDb API: ${err?.message ?? String(err)}`);
39
+ }
40
+ if (!resp.ok) {
41
+ const text = await resp.text().catch(() => '');
42
+ throw new Error(`TMDb API error ${resp.status}: ${text || resp.statusText}`);
43
+ }
44
+ try {
45
+ return (await resp.json());
46
+ }
47
+ catch (err) {
48
+ throw new Error(`Invalid JSON from TMDb API: ${err?.message ?? String(err)}`);
49
+ }
50
+ }
51
+ async discoverMovies(params = {}) {
52
+ const url = this.buildUrl('discover/movie', {
53
+ sort_by: params.sort_by,
54
+ with_genres: params.with_genres,
55
+ page: params.page,
56
+ year: params.year,
57
+ 'primary_release_date.gte': params['primary_release_date.gte'],
58
+ 'primary_release_date.lte': params['primary_release_date.lte'],
59
+ 'with_runtime.gte': params['with_runtime.gte'],
60
+ 'with_runtime.lte': params['with_runtime.lte'],
61
+ region: params.region ?? this.region,
62
+ });
63
+ return this.doFetch(url);
64
+ }
65
+ async getMovieDetails(movieId) {
66
+ const url = this.buildUrl(`movie/${movieId}`, { region: this.region });
67
+ return this.doFetch(url);
68
+ }
69
+ async searchMovies(query, page) {
70
+ const url = this.buildUrl('search/movie', {
71
+ query,
72
+ page,
73
+ region: this.region,
74
+ });
75
+ return this.doFetch(url);
76
+ }
77
+ async getGenres() {
78
+ const url = this.buildUrl('genre/movie/list', { region: this.region });
79
+ return this.doFetch(url);
80
+ }
81
+ async getWatchProviders(movieId) {
82
+ const url = this.buildUrl(`movie/${movieId}/watch/providers`);
83
+ return this.doFetch(url);
84
+ }
85
+ }
86
+ exports.TmdbApiClient = TmdbApiClient;
87
+ exports.default = TmdbApiClient;
88
+ //# sourceMappingURL=tmdbApi.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tmdbApi.js","sourceRoot":"","sources":["../src/tmdbApi.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,99 @@
1
+ /**
2
+ * Streaming platform information for a movie
3
+ */
4
+ export interface StreamingPlatform {
5
+ /** Platform name (e.g., "Netflix", "Prime Video") */
6
+ name: string;
7
+ /** Type of access (e.g., "subscription", "free", "ads") */
8
+ type: string;
9
+ /** Whether the movie is currently available on this platform */
10
+ available: boolean;
11
+ }
12
+ /**
13
+ * Runtime constraints for movie filtering
14
+ */
15
+ export interface RuntimeConstraints {
16
+ /** Minimum runtime in minutes */
17
+ min?: number;
18
+ /** Maximum runtime in minutes */
19
+ max?: number;
20
+ }
21
+ /**
22
+ * Release year range for movie filtering
23
+ */
24
+ export interface ReleaseYearRange {
25
+ /** Start year (inclusive) */
26
+ from: number;
27
+ /** End year (inclusive) */
28
+ to: number;
29
+ }
30
+ /**
31
+ * User input parameters for movie recommendations
32
+ */
33
+ export interface UserInput {
34
+ /** User's emotional state or desired feeling */
35
+ mood?: string;
36
+ /** Streaming platforms user has access to */
37
+ platforms?: string[];
38
+ /** Preferred genre(s) */
39
+ genre?: string | string[];
40
+ /** Runtime constraints in minutes */
41
+ runtime?: RuntimeConstraints;
42
+ /** Release year or year range */
43
+ releaseYear?: number | ReleaseYearRange;
44
+ }
45
+ /**
46
+ * Individual movie recommendation
47
+ */
48
+ export interface MovieRecommendation {
49
+ /** Movie title */
50
+ title: string;
51
+ /** Year of release */
52
+ releaseYear: number;
53
+ /** Runtime in minutes */
54
+ runtime: number;
55
+ /** Non-spoiler description (50-100 words) */
56
+ description: string;
57
+ /** List of genres */
58
+ genres: string[];
59
+ /** Available streaming platforms */
60
+ streamingPlatforms: StreamingPlatform[];
61
+ /** Explanation of why this movie was recommended */
62
+ matchReason: string;
63
+ }
64
+ /**
65
+ * Metadata about the recommendation request
66
+ */
67
+ export interface ResponseMetadata {
68
+ /** ISO timestamp of when the request was made */
69
+ requestTimestamp: string;
70
+ /** Total number of recommendations returned */
71
+ totalResults: number;
72
+ /** Input parameters used for the request */
73
+ inputParameters: UserInput;
74
+ }
75
+ /**
76
+ * Complete agent response with recommendations and metadata
77
+ */
78
+ export interface AgentResponse {
79
+ /** List of 3-5 movie recommendations */
80
+ recommendations: MovieRecommendation[];
81
+ /** Request metadata */
82
+ metadata: ResponseMetadata;
83
+ }
84
+ /**
85
+ * Error response structure for handling failures
86
+ */
87
+ export interface ErrorResponse {
88
+ /** Error indicator */
89
+ error: true;
90
+ /** Error type category */
91
+ errorType: 'MCP_UNAVAILABLE' | 'INVALID_API_KEY' | 'RATE_LIMIT_EXCEEDED' | 'VALIDATION_ERROR' | 'NO_RESULTS' | 'UNKNOWN_ERROR';
92
+ /** Human-readable error message */
93
+ message: string;
94
+ /** ISO timestamp of when the error occurred */
95
+ timestamp: string;
96
+ /** Optional details for debugging */
97
+ details?: string;
98
+ }
99
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,qDAAqD;IACrD,IAAI,EAAE,MAAM,CAAC;IACb,2DAA2D;IAC3D,IAAI,EAAE,MAAM,CAAC;IACb,gEAAgE;IAChE,SAAS,EAAE,OAAO,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,iCAAiC;IACjC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,iCAAiC;IACjC,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,6BAA6B;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,2BAA2B;IAC3B,EAAE,EAAE,MAAM,CAAC;CACZ;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,gDAAgD;IAChD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,6CAA6C;IAC7C,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,yBAAyB;IACzB,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC1B,qCAAqC;IACrC,OAAO,CAAC,EAAE,kBAAkB,CAAC;IAC7B,iCAAiC;IACjC,WAAW,CAAC,EAAE,MAAM,GAAG,gBAAgB,CAAC;CACzC;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,kBAAkB;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,sBAAsB;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,yBAAyB;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,6CAA6C;IAC7C,WAAW,EAAE,MAAM,CAAC;IACpB,qBAAqB;IACrB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,oCAAoC;IACpC,kBAAkB,EAAE,iBAAiB,EAAE,CAAC;IACxC,oDAAoD;IACpD,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,iDAAiD;IACjD,gBAAgB,EAAE,MAAM,CAAC;IACzB,+CAA+C;IAC/C,YAAY,EAAE,MAAM,CAAC;IACrB,4CAA4C;IAC5C,eAAe,EAAE,SAAS,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,wCAAwC;IACxC,eAAe,EAAE,mBAAmB,EAAE,CAAC;IACvC,uBAAuB;IACvB,QAAQ,EAAE,gBAAgB,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,sBAAsB;IACtB,KAAK,EAAE,IAAI,CAAC;IACZ,0BAA0B;IAC1B,SAAS,EACL,iBAAiB,GACjB,iBAAiB,GACjB,qBAAqB,GACrB,kBAAkB,GAClB,YAAY,GACZ,eAAe,CAAC;IACpB,mCAAmC;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,+CAA+C;IAC/C,SAAS,EAAE,MAAM,CAAC;IAClB,qCAAqC;IACrC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB"}
package/dist/types.js ADDED
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,13 @@
1
+ export declare const ALLOWED_PLATFORMS: string[];
2
+ export declare function isValidPlatform(name: string): boolean;
3
+ export declare function validatePlatforms(platforms: string[]): void;
4
+ export declare function validateRuntime({ min, max, }: {
5
+ min?: number;
6
+ max?: number;
7
+ }): void;
8
+ export declare function validateYear(year: number): void;
9
+ export declare function validateYearRange({ from, to, }: {
10
+ from: number;
11
+ to: number;
12
+ }): void;
13
+ //# sourceMappingURL=validate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../src/validate.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,iBAAiB,UAU7B,CAAC;AAEF,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAErD;AAED,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI,CAK3D;AAED,wBAAgB,eAAe,CAAC,EAC9B,GAAG,EACH,GAAG,GACJ,EAAE;IACD,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;CACd,GAAG,IAAI,CAMP;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAI/C;AAED,wBAAgB,iBAAiB,CAAC,EAChC,IAAI,EACJ,EAAE,GACH,EAAE;IACD,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;CACZ,GAAG,IAAI,CAMP"}
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+ // Input validation utilities for movie-agent
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.ALLOWED_PLATFORMS = void 0;
5
+ exports.isValidPlatform = isValidPlatform;
6
+ exports.validatePlatforms = validatePlatforms;
7
+ exports.validateRuntime = validateRuntime;
8
+ exports.validateYear = validateYear;
9
+ exports.validateYearRange = validateYearRange;
10
+ exports.ALLOWED_PLATFORMS = [
11
+ 'Netflix',
12
+ 'Prime Video',
13
+ 'Crave',
14
+ 'Disney+',
15
+ 'Apple TV+',
16
+ 'Paramount+',
17
+ 'Hayu',
18
+ 'Tubi',
19
+ 'Pluto TV',
20
+ ];
21
+ function isValidPlatform(name) {
22
+ return exports.ALLOWED_PLATFORMS.includes(name);
23
+ }
24
+ function validatePlatforms(platforms) {
25
+ const invalid = platforms.filter(p => !isValidPlatform(p));
26
+ if (invalid.length > 0) {
27
+ throw new Error(`Invalid platform(s): ${invalid.join(', ')}`);
28
+ }
29
+ }
30
+ function validateRuntime({ min, max, }) {
31
+ if (min !== undefined && max !== undefined && min > max) {
32
+ throw new Error(`min runtime (${min}) cannot be greater than max runtime (${max})`);
33
+ }
34
+ }
35
+ function validateYear(year) {
36
+ if (!Number.isInteger(year) || year < 1800 || year > 2100) {
37
+ throw new Error(`Invalid year: ${year}`);
38
+ }
39
+ }
40
+ function validateYearRange({ from, to, }) {
41
+ validateYear(from);
42
+ validateYear(to);
43
+ if (from > to) {
44
+ throw new Error(`Year range invalid: from (${from}) > to (${to})`);
45
+ }
46
+ }
47
+ //# sourceMappingURL=validate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.js","sourceRoot":"","sources":["../src/validate.ts"],"names":[],"mappings":";AAAA,6CAA6C;;;AAc7C,0CAEC;AAED,8CAKC;AAED,0CAYC;AAED,oCAIC;AAED,8CAYC;AAvDY,QAAA,iBAAiB,GAAG;IAC/B,SAAS;IACT,aAAa;IACb,OAAO;IACP,SAAS;IACT,WAAW;IACX,YAAY;IACZ,MAAM;IACN,MAAM;IACN,UAAU;CACX,CAAC;AAEF,SAAgB,eAAe,CAAC,IAAY;IAC1C,OAAO,yBAAiB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC1C,CAAC;AAED,SAAgB,iBAAiB,CAAC,SAAmB;IACnD,MAAM,OAAO,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3D,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,wBAAwB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAChE,CAAC;AACH,CAAC;AAED,SAAgB,eAAe,CAAC,EAC9B,GAAG,EACH,GAAG,GAIJ;IACC,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,GAAG,GAAG,EAAE,CAAC;QACxD,MAAM,IAAI,KAAK,CACb,gBAAgB,GAAG,yCAAyC,GAAG,GAAG,CACnE,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAgB,YAAY,CAAC,IAAY;IACvC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,IAAI,EAAE,CAAC;QAC1D,MAAM,IAAI,KAAK,CAAC,iBAAiB,IAAI,EAAE,CAAC,CAAC;IAC3C,CAAC;AACH,CAAC;AAED,SAAgB,iBAAiB,CAAC,EAChC,IAAI,EACJ,EAAE,GAIH;IACC,YAAY,CAAC,IAAI,CAAC,CAAC;IACnB,YAAY,CAAC,EAAE,CAAC,CAAC;IACjB,IAAI,IAAI,GAAG,EAAE,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,6BAA6B,IAAI,WAAW,EAAE,GAAG,CAAC,CAAC;IACrE,CAAC;AACH,CAAC"}
package/package.json ADDED
@@ -0,0 +1,72 @@
1
+ {
2
+ "name": "movie-agent",
3
+ "version": "1.0.0",
4
+ "description": "Movie Agent - A TypeScript-based movie recommendation agent",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "bin": {
8
+ "movie-agent": "./bin/movie-agent"
9
+ },
10
+ "files": [
11
+ "dist",
12
+ "bin",
13
+ "README.md",
14
+ "LICENSE"
15
+ ],
16
+ "scripts": {
17
+ "build": "tsc",
18
+ "dev": "dotenv -e .env.development -- ts-node src/index.ts",
19
+ "start": "node bin/movie-agent",
20
+ "start:prod": "dotenv -e .env.production -- node dist/index.js",
21
+ "test": "jest",
22
+ "test:unit": "jest --testPathIgnorePatterns=e2e.test.ts --testPathIgnorePatterns=live.test.ts",
23
+ "test:integration": "jest --testPathPattern=live.test.ts",
24
+ "test:e2e": "jest --testPathPattern=e2e.test.ts",
25
+ "test:coverage": "jest --coverage --testPathIgnorePatterns=live.test.ts",
26
+ "test:watch": "jest --watch --testPathIgnorePatterns=live.test.ts",
27
+ "test:ci": "jest --coverage --ci --runInBand --testPathIgnorePatterns=live.test.ts",
28
+ "lint": "eslint . --ext .ts",
29
+ "lint:fix": "eslint . --ext .ts --fix",
30
+ "format": "prettier --write \"src/**/*.ts\"",
31
+ "format:check": "prettier --check \"src/**/*.ts\"",
32
+ "type-check": "tsc --noEmit",
33
+ "validate": "npm run type-check && npm run lint && npm run test:coverage",
34
+ "validate:ci": "npm run type-check && npm run lint && npm run format:check && npm run test:ci && npm run build",
35
+ "clean": "rm -rf dist coverage",
36
+ "prebuild": "npm run clean",
37
+ "prepublishOnly": "npm run validate:ci",
38
+ "prepare": "husky"
39
+ },
40
+ "keywords": [
41
+ "movie",
42
+ "agent",
43
+ "typescript"
44
+ ],
45
+ "author": "imWayneWY",
46
+ "license": "ISC",
47
+ "repository": {
48
+ "type": "git",
49
+ "url": "git+https://github.com/imWayneWY/movie-agent.git"
50
+ },
51
+ "bugs": {
52
+ "url": "https://github.com/imWayneWY/movie-agent/issues"
53
+ },
54
+ "homepage": "https://github.com/imWayneWY/movie-agent#readme",
55
+ "devDependencies": {
56
+ "@types/jest": "^29.5.11",
57
+ "@types/node": "^20.10.6",
58
+ "@typescript-eslint/eslint-plugin": "^6.17.0",
59
+ "@typescript-eslint/parser": "^6.17.0",
60
+ "dotenv-cli": "^7.1.0",
61
+ "eslint": "^8.56.0",
62
+ "husky": "^9.1.7",
63
+ "jest": "^29.7.0",
64
+ "prettier": "^3.1.1",
65
+ "ts-jest": "^29.1.1",
66
+ "ts-node": "^10.9.2",
67
+ "typescript": "^5.3.3"
68
+ },
69
+ "dependencies": {
70
+ "dotenv": "^16.4.5"
71
+ }
72
+ }