gamemindpilot 2.9.4 → 2.9.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # 🛸 GameMindPilot CLI v2.9.4 - The Narrative-First Mastery
1
+ # 🛸 GameMindPilot CLI v2.9.5 - The Narrative-First Mastery
2
2
 
3
3
  [![npm version](https://img.shields.io/npm/v/gamemindpilot.svg)](https://www.npmjs.com/package/gamemindpilot)
4
4
  [![downloads](https://img.shields.io/npm/dm/gamemindpilot.svg)](https://www.npmjs.com/package/gamemindpilot)
@@ -8,9 +8,18 @@ const inquirer_1 = __importDefault(require("inquirer"));
8
8
  const ora_1 = __importDefault(require("ora"));
9
9
  const ai_service_1 = require("../utils/ai-service");
10
10
  const logger_1 = require("../utils/logger");
11
+ const project_1 = require("../utils/project");
11
12
  const chatCommand = async () => {
12
- logger_1.logger.info('Starting GameMindPilot AI Chat...');
13
+ logger_1.logger.info('Starting GameMindPilot AI Chat (Memory Enabled)...');
13
14
  logger_1.logger.info('Type "exit" or "quit" to end the session.');
15
+ const projectContext = project_1.projectManager.getSummary();
16
+ const systemPrompt = `You are GameMindPilot AI.
17
+ Current Project Context:
18
+ ${projectContext}
19
+
20
+ Always refer to this context when the user asks questions about their project history or previous designs.
21
+ `;
22
+ let conversationHistory = systemPrompt;
14
23
  while (true) {
15
24
  const { input } = await inquirer_1.default.prompt([
16
25
  {
@@ -23,9 +32,12 @@ const chatCommand = async () => {
23
32
  break;
24
33
  const spinner = (0, ora_1.default)('Gmpilot is thinking...').start();
25
34
  try {
26
- const response = await ai_service_1.AIService.chat(input);
35
+ const fullPrompt = `${conversationHistory}\nUser: ${input}\nAI:`;
36
+ const response = await ai_service_1.AIService.chat(fullPrompt);
27
37
  spinner.stop();
28
38
  console.log(`${logger_1.logger.info('Gmpilot >')} ${response}\n`);
39
+ // Update local session history
40
+ conversationHistory += `\nUser: ${input}\nAI: ${response}`;
29
41
  }
30
42
  catch (error) {
31
43
  spinner.stop();
@@ -1 +1 @@
1
- {"version":3,"file":"chat.js","sourceRoot":"","sources":["../../src/commands/chat.ts"],"names":[],"mappings":";;;;;;AAAA,wDAAgC;AAChC,8CAAsB;AACtB,oDAAgD;AAChD,4CAAyC;AAElC,MAAM,WAAW,GAAG,KAAK,IAAI,EAAE;IACpC,eAAM,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;IACjD,eAAM,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC;IAEzD,OAAO,IAAI,EAAE,CAAC;QACZ,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,kBAAQ,CAAC,MAAM,CAAC;YACtC;gBACE,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,OAAO;gBACb,OAAO,EAAE,OAAO;aACjB;SACF,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;YAAE,MAAM;QAE1D,MAAM,OAAO,GAAG,IAAA,aAAG,EAAC,wBAAwB,CAAC,CAAC,KAAK,EAAE,CAAC;QACtD,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,sBAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC7C,OAAO,CAAC,IAAI,EAAE,CAAC;YACf,OAAO,CAAC,GAAG,CAAC,GAAG,eAAM,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,QAAQ,IAAI,CAAC,CAAC;QAC3D,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO,CAAC,IAAI,EAAE,CAAC;YACf,eAAM,CAAC,KAAK,CAAC,UAAU,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC;AACH,CAAC,CAAC;AAzBW,QAAA,WAAW,eAyBtB"}
1
+ {"version":3,"file":"chat.js","sourceRoot":"","sources":["../../src/commands/chat.ts"],"names":[],"mappings":";;;;;;AAAA,wDAAgC;AAChC,8CAAsB;AACtB,oDAAgD;AAChD,4CAAyC;AACzC,8CAAkD;AAE3C,MAAM,WAAW,GAAG,KAAK,IAAI,EAAE;IACpC,eAAM,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAC;IAClE,eAAM,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC;IAEzD,MAAM,cAAc,GAAG,wBAAc,CAAC,UAAU,EAAE,CAAC;IACnD,MAAM,YAAY,GAAG;;EAErB,cAAc;;;CAGf,CAAC;IAEA,IAAI,mBAAmB,GAAG,YAAY,CAAC;IAEvC,OAAO,IAAI,EAAE,CAAC;QACZ,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,kBAAQ,CAAC,MAAM,CAAC;YACtC;gBACE,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,OAAO;gBACb,OAAO,EAAE,OAAO;aACjB;SACF,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;YAAE,MAAM;QAE1D,MAAM,OAAO,GAAG,IAAA,aAAG,EAAC,wBAAwB,CAAC,CAAC,KAAK,EAAE,CAAC;QACtD,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,GAAG,mBAAmB,WAAW,KAAK,OAAO,CAAC;YACjE,MAAM,QAAQ,GAAG,MAAM,sBAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAClD,OAAO,CAAC,IAAI,EAAE,CAAC;YACf,OAAO,CAAC,GAAG,CAAC,GAAG,eAAM,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,QAAQ,IAAI,CAAC,CAAC;YAEzD,+BAA+B;YAC/B,mBAAmB,IAAI,WAAW,KAAK,SAAS,QAAQ,EAAE,CAAC;QAC7D,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO,CAAC,IAAI,EAAE,CAAC;YACf,eAAM,CAAC,KAAK,CAAC,UAAU,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC;AACH,CAAC,CAAC;AAvCW,QAAA,WAAW,eAuCtB"}
@@ -7,6 +7,7 @@ exports.designCommands = void 0;
7
7
  const ora_1 = __importDefault(require("ora"));
8
8
  const ai_service_1 = require("../utils/ai-service");
9
9
  const logger_1 = require("../utils/logger");
10
+ const project_1 = require("../utils/project");
10
11
  exports.designCommands = {
11
12
  idea: async () => {
12
13
  const spinner = (0, ora_1.default)('Brainstorming deep-logic game concepts...').start();
@@ -26,6 +27,7 @@ exports.designCommands = {
26
27
  spinner.stop();
27
28
  logger_1.logger.bold('\n--- 🛸 Industry-Grade Game Concepts (Mastery Level) ---');
28
29
  console.log(response);
30
+ project_1.projectManager.addEntry('Game Concept', response);
29
31
  }
30
32
  catch (err) {
31
33
  spinner.stop();
@@ -49,6 +51,7 @@ exports.designCommands = {
49
51
  spinner.stop();
50
52
  logger_1.logger.bold('\n--- 🎭 Narrative & Dialogue Matrix (Mastery Level) ---');
51
53
  console.log(response);
54
+ project_1.projectManager.addEntry('Dialogue Tree', response);
52
55
  }
53
56
  catch (err) {
54
57
  spinner.stop();
@@ -62,6 +65,7 @@ exports.designCommands = {
62
65
  spinner.stop();
63
66
  logger_1.logger.bold('\n--- Quest Design ---');
64
67
  console.log(response);
68
+ project_1.projectManager.addEntry('Quest Design', response);
65
69
  }
66
70
  catch (err) {
67
71
  spinner.stop();
@@ -75,6 +79,7 @@ exports.designCommands = {
75
79
  spinner.stop();
76
80
  logger_1.logger.bold(`\n--- ${theme.toUpperCase()} Level Layout ---`);
77
81
  console.log(response);
82
+ project_1.projectManager.addEntry(`Level Layout (${theme})`, response);
78
83
  }
79
84
  catch (err) {
80
85
  spinner.stop();
@@ -1 +1 @@
1
- {"version":3,"file":"design.js","sourceRoot":"","sources":["../../src/commands/design.ts"],"names":[],"mappings":";;;;;;AAAA,8CAAsB;AACtB,oDAAgD;AAChD,4CAAyC;AAE5B,QAAA,cAAc,GAAG;IAC5B,IAAI,EAAE,KAAK,IAAI,EAAE;QACf,MAAM,OAAO,GAAG,IAAA,aAAG,EAAC,2CAA2C,CAAC,CAAC,KAAK,EAAE,CAAC;QACzE,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,sBAAS,CAAC,IAAI,CAAC;;;;;;;;;;;OAWrC,CAAC,CAAC;YACH,OAAO,CAAC,IAAI,EAAE,CAAC;YACf,eAAM,CAAC,IAAI,CAAC,2DAA2D,CAAC,CAAC;YACzE,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACxB,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,OAAO,CAAC,IAAI,EAAE,CAAC;YACf,eAAM,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IAED,QAAQ,EAAE,KAAK,EAAE,OAAgB,EAAE,EAAE;QACnC,MAAM,OAAO,GAAG,IAAA,aAAG,EAAC,2CAA2C,CAAC,CAAC,KAAK,EAAE,CAAC;QACzE,MAAM,MAAM,GAAG,OAAO;YACpB,CAAC,CAAC,+DAA+D,OAAO;;uFAES;YACjF,CAAC,CAAC;;;;;wDAKgD,CAAC;QACrD,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,sBAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC9C,OAAO,CAAC,IAAI,EAAE,CAAC;YACf,eAAM,CAAC,IAAI,CAAC,0DAA0D,CAAC,CAAC;YACxE,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACxB,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,OAAO,CAAC,IAAI,EAAE,CAAC;YACf,eAAM,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IAED,KAAK,EAAE,KAAK,IAAI,EAAE;QAChB,MAAM,OAAO,GAAG,IAAA,aAAG,EAAC,yBAAyB,CAAC,CAAC,KAAK,EAAE,CAAC;QACvD,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,sBAAS,CAAC,IAAI,CAAC,0FAA0F,CAAC,CAAC;YAClI,OAAO,CAAC,IAAI,EAAE,CAAC;YACf,eAAM,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;YACtC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACxB,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,OAAO,CAAC,IAAI,EAAE,CAAC;YACf,eAAM,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IAED,KAAK,EAAE,KAAK,EAAE,QAAgB,SAAS,EAAE,EAAE;QACzC,MAAM,OAAO,GAAG,IAAA,aAAG,EAAC,cAAc,KAAK,kBAAkB,CAAC,CAAC,KAAK,EAAE,CAAC;QACnE,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,sBAAS,CAAC,IAAI,CAAC,4CAA4C,KAAK,kEAAkE,CAAC,CAAC;YAC3J,OAAO,CAAC,IAAI,EAAE,CAAC;YACf,eAAM,CAAC,IAAI,CAAC,SAAS,KAAK,CAAC,WAAW,EAAE,mBAAmB,CAAC,CAAC;YAC7D,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACxB,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,OAAO,CAAC,IAAI,EAAE,CAAC;YACf,eAAM,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;CACF,CAAC"}
1
+ {"version":3,"file":"design.js","sourceRoot":"","sources":["../../src/commands/design.ts"],"names":[],"mappings":"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"}
@@ -4,11 +4,10 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.initCommand = void 0;
7
- const fs_1 = __importDefault(require("fs"));
8
- const path_1 = __importDefault(require("path"));
9
7
  const inquirer_1 = __importDefault(require("inquirer"));
10
8
  const logger_1 = require("../utils/logger");
11
9
  const config_1 = require("../utils/config");
10
+ const project_1 = require("../utils/project");
12
11
  const initCommand = async () => {
13
12
  logger_1.logger.bold('--- Initializing GameMindPilot Project ---');
14
13
  const answers = await inquirer_1.default.prompt([
@@ -26,13 +25,8 @@ const initCommand = async () => {
26
25
  }
27
26
  ]);
28
27
  config_1.configManager.set({ user: answers.author });
29
- // Create local project marker
30
- const projectConfig = {
31
- name: answers.projectName,
32
- author: answers.author,
33
- initializedAt: new Date().toISOString()
34
- };
35
- fs_1.default.writeFileSync(path_1.default.join(process.cwd(), '.gmpilot'), JSON.stringify(projectConfig, null, 2));
28
+ // Initialize local project projectManager
29
+ project_1.projectManager.init(answers.projectName, answers.author);
36
30
  logger_1.logger.success(`Project "${answers.projectName}" initialized for ${answers.author}!`);
37
31
  logger_1.logger.info('Run "gmpilot --help" to see available features.');
38
32
  };
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":";;;;;;AAAA,4CAAoB;AACpB,gDAAwB;AACxB,wDAAgC;AAChC,4CAAyC;AACzC,4CAAgD;AAEzC,MAAM,WAAW,GAAG,KAAK,IAAI,EAAE;IACpC,eAAM,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC;IAE1D,MAAM,OAAO,GAAG,MAAM,kBAAQ,CAAC,MAAM,CAAC;QACpC;YACE,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,aAAa;YACnB,OAAO,EAAE,0BAA0B;YACnC,OAAO,EAAE,eAAe;SACzB;QACD;YACE,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,cAAc;YACvB,OAAO,EAAE,sBAAa,CAAC,GAAG,EAAE,CAAC,IAAI,IAAI,SAAS;SAC/C;KACF,CAAC,CAAC;IAEH,sBAAa,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAE5C,8BAA8B;IAC9B,MAAM,aAAa,GAAG;QACpB,IAAI,EAAE,OAAO,CAAC,WAAW;QACzB,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,aAAa,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACxC,CAAC;IAEF,YAAE,CAAC,aAAa,CAAC,cAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,UAAU,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAE/F,eAAM,CAAC,OAAO,CAAC,YAAY,OAAO,CAAC,WAAW,qBAAqB,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;IACtF,eAAM,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAC;AACjE,CAAC,CAAC;AA/BW,QAAA,WAAW,eA+BtB"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":";;;;;;AAAA,wDAAgC;AAChC,4CAAyC;AACzC,4CAAgD;AAChD,8CAAkD;AAE3C,MAAM,WAAW,GAAG,KAAK,IAAI,EAAE;IACpC,eAAM,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC;IAE1D,MAAM,OAAO,GAAG,MAAM,kBAAQ,CAAC,MAAM,CAAC;QACpC;YACE,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,aAAa;YACnB,OAAO,EAAE,0BAA0B;YACnC,OAAO,EAAE,eAAe;SACzB;QACD;YACE,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,cAAc;YACvB,OAAO,EAAE,sBAAa,CAAC,GAAG,EAAE,CAAC,IAAI,IAAI,SAAS;SAC/C;KACF,CAAC,CAAC;IAEH,sBAAa,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAE5C,0CAA0C;IAC1C,wBAAc,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAEzD,eAAM,CAAC,OAAO,CAAC,YAAY,OAAO,CAAC,WAAW,qBAAqB,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;IACtF,eAAM,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAC;AACjE,CAAC,CAAC;AAzBW,QAAA,WAAW,eAyBtB"}
@@ -7,6 +7,7 @@ exports.simCommands = void 0;
7
7
  const ora_1 = __importDefault(require("ora"));
8
8
  const ai_service_1 = require("../utils/ai-service");
9
9
  const logger_1 = require("../utils/logger");
10
+ const project_1 = require("../utils/project");
10
11
  exports.simCommands = {
11
12
  montecarlo: async (players = 10000) => {
12
13
  const spinner = (0, ora_1.default)(`Running ${players}-player Economy Stress Test (Mastery Mode)...`).start();
@@ -26,6 +27,7 @@ exports.simCommands = {
26
27
  spinner.stop();
27
28
  logger_1.logger.bold(`\n--- 📈 High-Fidelity Economy Simulation (Mastery Level) ---`);
28
29
  console.log(response);
30
+ project_1.projectManager.addEntry('Economy Simulation', response);
29
31
  }
30
32
  catch (err) {
31
33
  spinner.stop();
@@ -39,6 +41,7 @@ exports.simCommands = {
39
41
  spinner.stop();
40
42
  logger_1.logger.bold('\n--- Project Pulse Health Report ---');
41
43
  console.log(response);
44
+ project_1.projectManager.addEntry('Project Pulse', response);
42
45
  }
43
46
  catch (err) {
44
47
  spinner.stop();
@@ -52,6 +55,7 @@ exports.simCommands = {
52
55
  spinner.stop();
53
56
  logger_1.logger.bold('\n--- Autonomous Self-Healing Audit ---');
54
57
  console.log(response);
58
+ project_1.projectManager.addEntry('Self-Healing Audit', response);
55
59
  }
56
60
  catch (err) {
57
61
  spinner.stop();
@@ -1 +1 @@
1
- {"version":3,"file":"simulation.js","sourceRoot":"","sources":["../../src/commands/simulation.ts"],"names":[],"mappings":";;;;;;AAAA,8CAAsB;AACtB,oDAAgD;AAChD,4CAAyC;AAE5B,QAAA,WAAW,GAAG;IACzB,UAAU,EAAE,KAAK,EAAE,UAAkB,KAAK,EAAE,EAAE;QAC5C,MAAM,OAAO,GAAG,IAAA,aAAG,EAAC,WAAW,OAAO,+CAA+C,CAAC,CAAC,KAAK,EAAE,CAAC;QAC/F,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,sBAAS,CAAC,IAAI,CAAC;sHAC0E,OAAO;;;;;;;;;;OAUtH,CAAC,CAAC;YACH,OAAO,CAAC,IAAI,EAAE,CAAC;YACf,eAAM,CAAC,IAAI,CAAC,+DAA+D,CAAC,CAAC;YAC7E,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACxB,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,OAAO,CAAC,IAAI,EAAE,CAAC;YACf,eAAM,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IAED,KAAK,EAAE,KAAK,IAAI,EAAE;QAChB,MAAM,OAAO,GAAG,IAAA,aAAG,EAAC,oCAAoC,CAAC,CAAC,KAAK,EAAE,CAAC;QAClE,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,sBAAS,CAAC,IAAI,CAAC,wKAAwK,CAAC,CAAC;YAChN,OAAO,CAAC,IAAI,EAAE,CAAC;YACf,eAAM,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;YACrD,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACxB,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,OAAO,CAAC,IAAI,EAAE,CAAC;YACf,eAAM,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IAED,IAAI,EAAE,KAAK,IAAI,EAAE;QACf,MAAM,OAAO,GAAG,IAAA,aAAG,EAAC,qCAAqC,CAAC,CAAC,KAAK,EAAE,CAAC;QACnE,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,sBAAS,CAAC,IAAI,CAAC,4LAA4L,CAAC,CAAC;YACpO,OAAO,CAAC,IAAI,EAAE,CAAC;YACf,eAAM,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;YACvD,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACxB,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,OAAO,CAAC,IAAI,EAAE,CAAC;YACf,eAAM,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;CACF,CAAC"}
1
+ {"version":3,"file":"simulation.js","sourceRoot":"","sources":["../../src/commands/simulation.ts"],"names":[],"mappings":";;;;;;AAAA,8CAAsB;AACtB,oDAAgD;AAChD,4CAAyC;AACzC,8CAAkD;AAErC,QAAA,WAAW,GAAG;IACzB,UAAU,EAAE,KAAK,EAAE,UAAkB,KAAK,EAAE,EAAE;QAC5C,MAAM,OAAO,GAAG,IAAA,aAAG,EAAC,WAAW,OAAO,+CAA+C,CAAC,CAAC,KAAK,EAAE,CAAC;QAC/F,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,sBAAS,CAAC,IAAI,CAAC;sHAC0E,OAAO;;;;;;;;;;OAUtH,CAAC,CAAC;YACH,OAAO,CAAC,IAAI,EAAE,CAAC;YACf,eAAM,CAAC,IAAI,CAAC,+DAA+D,CAAC,CAAC;YAC7E,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAEtB,wBAAc,CAAC,QAAQ,CAAC,oBAAoB,EAAE,QAAQ,CAAC,CAAC;QAC1D,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,OAAO,CAAC,IAAI,EAAE,CAAC;YACf,eAAM,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IAED,KAAK,EAAE,KAAK,IAAI,EAAE;QAChB,MAAM,OAAO,GAAG,IAAA,aAAG,EAAC,oCAAoC,CAAC,CAAC,KAAK,EAAE,CAAC;QAClE,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,sBAAS,CAAC,IAAI,CAAC,wKAAwK,CAAC,CAAC;YAChN,OAAO,CAAC,IAAI,EAAE,CAAC;YACf,eAAM,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;YACrD,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAEtB,wBAAc,CAAC,QAAQ,CAAC,eAAe,EAAE,QAAQ,CAAC,CAAC;QACrD,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,OAAO,CAAC,IAAI,EAAE,CAAC;YACf,eAAM,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IAED,IAAI,EAAE,KAAK,IAAI,EAAE;QACf,MAAM,OAAO,GAAG,IAAA,aAAG,EAAC,qCAAqC,CAAC,CAAC,KAAK,EAAE,CAAC;QACnE,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,sBAAS,CAAC,IAAI,CAAC,4LAA4L,CAAC,CAAC;YACpO,OAAO,CAAC,IAAI,EAAE,CAAC;YACf,eAAM,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;YACvD,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAEtB,wBAAc,CAAC,QAAQ,CAAC,oBAAoB,EAAE,QAAQ,CAAC,CAAC;QAC1D,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,OAAO,CAAC,IAAI,EAAE,CAAC;YACf,eAAM,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;CACF,CAAC"}
package/dist/index.js CHANGED
@@ -44,7 +44,7 @@ const program = new commander_1.Command();
44
44
  program
45
45
  .name('gmpilot')
46
46
  .description('GameMindPilot CLI - Your AI Game Development Assistant')
47
- .version('2.9.4');
47
+ .version('2.9.5');
48
48
  const login_1 = require("./commands/login");
49
49
  const chat_1 = require("./commands/chat");
50
50
  const init_1 = require("./commands/init");
@@ -0,0 +1,16 @@
1
+ export interface ProjectContext {
2
+ projectName?: string;
3
+ author?: string;
4
+ history: Array<{
5
+ type: string;
6
+ timestamp: string;
7
+ content: string;
8
+ }>;
9
+ }
10
+ export declare const projectManager: {
11
+ isProject: () => boolean;
12
+ init: (name: string, author: string) => void;
13
+ get: () => ProjectContext;
14
+ addEntry: (type: string, content: string) => void;
15
+ getSummary: () => string;
16
+ };
@@ -0,0 +1,64 @@
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.projectManager = void 0;
7
+ const fs_1 = __importDefault(require("fs"));
8
+ const path_1 = __importDefault(require("path"));
9
+ const PROJECT_DIR = '.gmpilot';
10
+ const CONTEXT_FILE = path_1.default.join(PROJECT_DIR, 'context.json');
11
+ exports.projectManager = {
12
+ isProject: () => {
13
+ return fs_1.default.existsSync(PROJECT_DIR);
14
+ },
15
+ init: (name, author) => {
16
+ if (!fs_1.default.existsSync(PROJECT_DIR)) {
17
+ fs_1.default.mkdirSync(PROJECT_DIR);
18
+ }
19
+ const initialContext = {
20
+ projectName: name,
21
+ author: author,
22
+ history: []
23
+ };
24
+ fs_1.default.writeFileSync(CONTEXT_FILE, JSON.stringify(initialContext, null, 2));
25
+ },
26
+ get: () => {
27
+ if (!fs_1.default.existsSync(CONTEXT_FILE)) {
28
+ return { history: [] };
29
+ }
30
+ try {
31
+ const data = fs_1.default.readFileSync(CONTEXT_FILE, 'utf-8');
32
+ return JSON.parse(data);
33
+ }
34
+ catch {
35
+ return { history: [] };
36
+ }
37
+ },
38
+ addEntry: (type, content) => {
39
+ if (!exports.projectManager.isProject())
40
+ return;
41
+ const context = exports.projectManager.get();
42
+ context.history.push({
43
+ type,
44
+ timestamp: new Date().toISOString(),
45
+ content
46
+ });
47
+ // Keep only last 10 entries to avoid token bloat
48
+ if (context.history.length > 10) {
49
+ context.history = context.history.slice(-10);
50
+ }
51
+ fs_1.default.writeFileSync(CONTEXT_FILE, JSON.stringify(context, null, 2));
52
+ },
53
+ getSummary: () => {
54
+ const context = exports.projectManager.get();
55
+ if (context.history.length === 0)
56
+ return "No previous history found for this project.";
57
+ let summary = `Project: ${context.projectName} (Author: ${context.author})\n\nRecent History:\n`;
58
+ context.history.forEach((entry, i) => {
59
+ summary += `[${i + 1}] ${entry.type} (${new Date(entry.timestamp).toLocaleString()}):\n${entry.content.substring(0, 500)}...\n\n`;
60
+ });
61
+ return summary;
62
+ }
63
+ };
64
+ //# sourceMappingURL=project.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project.js","sourceRoot":"","sources":["../../src/utils/project.ts"],"names":[],"mappings":";;;;;;AAAA,4CAAoB;AACpB,gDAAwB;AAYxB,MAAM,WAAW,GAAG,UAAU,CAAC;AAC/B,MAAM,YAAY,GAAG,cAAI,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;AAE/C,QAAA,cAAc,GAAG;IAC5B,SAAS,EAAE,GAAY,EAAE;QACvB,OAAO,YAAE,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;IACpC,CAAC;IAED,IAAI,EAAE,CAAC,IAAY,EAAE,MAAc,EAAE,EAAE;QACrC,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YAChC,YAAE,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;QAC5B,CAAC;QACD,MAAM,cAAc,GAAmB;YACrC,WAAW,EAAE,IAAI;YACjB,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE;SACZ,CAAC;QACF,YAAE,CAAC,aAAa,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC1E,CAAC;IAED,GAAG,EAAE,GAAmB,EAAE;QACxB,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;YACjC,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;QACzB,CAAC;QACD,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,YAAE,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;YACpD,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;QACzB,CAAC;IACH,CAAC;IAED,QAAQ,EAAE,CAAC,IAAY,EAAE,OAAe,EAAE,EAAE;QAC1C,IAAI,CAAC,sBAAc,CAAC,SAAS,EAAE;YAAE,OAAO;QACxC,MAAM,OAAO,GAAG,sBAAc,CAAC,GAAG,EAAE,CAAC;QACrC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC;YACnB,IAAI;YACJ,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,OAAO;SACR,CAAC,CAAC;QACH,iDAAiD;QACjD,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;YAChC,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;QAC/C,CAAC;QACD,YAAE,CAAC,aAAa,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IACnE,CAAC;IAED,UAAU,EAAE,GAAW,EAAE;QACvB,MAAM,OAAO,GAAG,sBAAc,CAAC,GAAG,EAAE,CAAC;QACrC,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,6CAA6C,CAAC;QAEvF,IAAI,OAAO,GAAG,YAAY,OAAO,CAAC,WAAW,aAAa,OAAO,CAAC,MAAM,wBAAwB,CAAC;QACjG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;YACnC,OAAO,IAAI,IAAI,CAAC,GAAC,CAAC,KAAK,KAAK,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,cAAc,EAAE,OAAO,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,SAAS,CAAC;QAClI,CAAC,CAAC,CAAC;QACH,OAAO,OAAO,CAAC;IACjB,CAAC;CACF,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gamemindpilot",
3
- "version": "2.9.4",
3
+ "version": "2.9.5",
4
4
  "description": "AI-powered CLI for game developers - Design, Asset Gen, Analysis & Optimization",
5
5
  "main": "dist/index.js",
6
6
  "bin": {
@@ -2,11 +2,22 @@ import inquirer from 'inquirer';
2
2
  import ora from 'ora';
3
3
  import { AIService } from '../utils/ai-service';
4
4
  import { logger } from '../utils/logger';
5
+ import { projectManager } from '../utils/project';
5
6
 
6
7
  export const chatCommand = async () => {
7
- logger.info('Starting GameMindPilot AI Chat...');
8
+ logger.info('Starting GameMindPilot AI Chat (Memory Enabled)...');
8
9
  logger.info('Type "exit" or "quit" to end the session.');
9
10
 
11
+ const projectContext = projectManager.getSummary();
12
+ const systemPrompt = `You are GameMindPilot AI.
13
+ Current Project Context:
14
+ ${projectContext}
15
+
16
+ Always refer to this context when the user asks questions about their project history or previous designs.
17
+ `;
18
+
19
+ let conversationHistory = systemPrompt;
20
+
10
21
  while (true) {
11
22
  const { input } = await inquirer.prompt([
12
23
  {
@@ -20,9 +31,13 @@ export const chatCommand = async () => {
20
31
 
21
32
  const spinner = ora('Gmpilot is thinking...').start();
22
33
  try {
23
- const response = await AIService.chat(input);
34
+ const fullPrompt = `${conversationHistory}\nUser: ${input}\nAI:`;
35
+ const response = await AIService.chat(fullPrompt);
24
36
  spinner.stop();
25
37
  console.log(`${logger.info('Gmpilot >')} ${response}\n`);
38
+
39
+ // Update local session history
40
+ conversationHistory += `\nUser: ${input}\nAI: ${response}`;
26
41
  } catch (error: any) {
27
42
  spinner.stop();
28
43
  logger.error(`Error: ${error.message}`);
@@ -1,6 +1,7 @@
1
1
  import ora from 'ora';
2
2
  import { AIService } from '../utils/ai-service';
3
3
  import { logger } from '../utils/logger';
4
+ import { projectManager } from '../utils/project';
4
5
 
5
6
  export const designCommands = {
6
7
  idea: async () => {
@@ -21,6 +22,8 @@ export const designCommands = {
21
22
  spinner.stop();
22
23
  logger.bold('\n--- 🛸 Industry-Grade Game Concepts (Mastery Level) ---');
23
24
  console.log(response);
25
+
26
+ projectManager.addEntry('Game Concept', response);
24
27
  } catch (err: any) {
25
28
  spinner.stop();
26
29
  logger.error(err.message);
@@ -44,6 +47,8 @@ export const designCommands = {
44
47
  spinner.stop();
45
48
  logger.bold('\n--- 🎭 Narrative & Dialogue Matrix (Mastery Level) ---');
46
49
  console.log(response);
50
+
51
+ projectManager.addEntry('Dialogue Tree', response);
47
52
  } catch (err: any) {
48
53
  spinner.stop();
49
54
  logger.error(err.message);
@@ -57,6 +62,8 @@ export const designCommands = {
57
62
  spinner.stop();
58
63
  logger.bold('\n--- Quest Design ---');
59
64
  console.log(response);
65
+
66
+ projectManager.addEntry('Quest Design', response);
60
67
  } catch (err: any) {
61
68
  spinner.stop();
62
69
  logger.error(err.message);
@@ -70,6 +77,8 @@ export const designCommands = {
70
77
  spinner.stop();
71
78
  logger.bold(`\n--- ${theme.toUpperCase()} Level Layout ---`);
72
79
  console.log(response);
80
+
81
+ projectManager.addEntry(`Level Layout (${theme})`, response);
73
82
  } catch (err: any) {
74
83
  spinner.stop();
75
84
  logger.error(err.message);
@@ -1,8 +1,7 @@
1
- import fs from 'fs';
2
- import path from 'path';
3
1
  import inquirer from 'inquirer';
4
2
  import { logger } from '../utils/logger';
5
3
  import { configManager } from '../utils/config';
4
+ import { projectManager } from '../utils/project';
6
5
 
7
6
  export const initCommand = async () => {
8
7
  logger.bold('--- Initializing GameMindPilot Project ---');
@@ -24,14 +23,8 @@ export const initCommand = async () => {
24
23
 
25
24
  configManager.set({ user: answers.author });
26
25
 
27
- // Create local project marker
28
- const projectConfig = {
29
- name: answers.projectName,
30
- author: answers.author,
31
- initializedAt: new Date().toISOString()
32
- };
33
-
34
- fs.writeFileSync(path.join(process.cwd(), '.gmpilot'), JSON.stringify(projectConfig, null, 2));
26
+ // Initialize local project projectManager
27
+ projectManager.init(answers.projectName, answers.author);
35
28
 
36
29
  logger.success(`Project "${answers.projectName}" initialized for ${answers.author}!`);
37
30
  logger.info('Run "gmpilot --help" to see available features.');
@@ -1,6 +1,7 @@
1
1
  import ora from 'ora';
2
2
  import { AIService } from '../utils/ai-service';
3
3
  import { logger } from '../utils/logger';
4
+ import { projectManager } from '../utils/project';
4
5
 
5
6
  export const simCommands = {
6
7
  montecarlo: async (players: number = 10000) => {
@@ -21,6 +22,8 @@ export const simCommands = {
21
22
  spinner.stop();
22
23
  logger.bold(`\n--- 📈 High-Fidelity Economy Simulation (Mastery Level) ---`);
23
24
  console.log(response);
25
+
26
+ projectManager.addEntry('Economy Simulation', response);
24
27
  } catch (err: any) {
25
28
  spinner.stop();
26
29
  logger.error(err.message);
@@ -34,6 +37,8 @@ export const simCommands = {
34
37
  spinner.stop();
35
38
  logger.bold('\n--- Project Pulse Health Report ---');
36
39
  console.log(response);
40
+
41
+ projectManager.addEntry('Project Pulse', response);
37
42
  } catch (err: any) {
38
43
  spinner.stop();
39
44
  logger.error(err.message);
@@ -47,6 +52,8 @@ export const simCommands = {
47
52
  spinner.stop();
48
53
  logger.bold('\n--- Autonomous Self-Healing Audit ---');
49
54
  console.log(response);
55
+
56
+ projectManager.addEntry('Self-Healing Audit', response);
50
57
  } catch (err: any) {
51
58
  spinner.stop();
52
59
  logger.error(err.message);
package/src/index.ts CHANGED
@@ -12,7 +12,7 @@ const program = new Command();
12
12
  program
13
13
  .name('gmpilot')
14
14
  .description('GameMindPilot CLI - Your AI Game Development Assistant')
15
- .version('2.9.4');
15
+ .version('2.9.5');
16
16
 
17
17
  import { loginCommand } from './commands/login';
18
18
  import { chatCommand } from './commands/chat';
@@ -0,0 +1,71 @@
1
+ import fs from 'fs';
2
+ import path from 'path';
3
+
4
+ export interface ProjectContext {
5
+ projectName?: string;
6
+ author?: string;
7
+ history: Array<{
8
+ type: string;
9
+ timestamp: string;
10
+ content: string;
11
+ }>;
12
+ }
13
+
14
+ const PROJECT_DIR = '.gmpilot';
15
+ const CONTEXT_FILE = path.join(PROJECT_DIR, 'context.json');
16
+
17
+ export const projectManager = {
18
+ isProject: (): boolean => {
19
+ return fs.existsSync(PROJECT_DIR);
20
+ },
21
+
22
+ init: (name: string, author: string) => {
23
+ if (!fs.existsSync(PROJECT_DIR)) {
24
+ fs.mkdirSync(PROJECT_DIR);
25
+ }
26
+ const initialContext: ProjectContext = {
27
+ projectName: name,
28
+ author: author,
29
+ history: []
30
+ };
31
+ fs.writeFileSync(CONTEXT_FILE, JSON.stringify(initialContext, null, 2));
32
+ },
33
+
34
+ get: (): ProjectContext => {
35
+ if (!fs.existsSync(CONTEXT_FILE)) {
36
+ return { history: [] };
37
+ }
38
+ try {
39
+ const data = fs.readFileSync(CONTEXT_FILE, 'utf-8');
40
+ return JSON.parse(data);
41
+ } catch {
42
+ return { history: [] };
43
+ }
44
+ },
45
+
46
+ addEntry: (type: string, content: string) => {
47
+ if (!projectManager.isProject()) return;
48
+ const context = projectManager.get();
49
+ context.history.push({
50
+ type,
51
+ timestamp: new Date().toISOString(),
52
+ content
53
+ });
54
+ // Keep only last 10 entries to avoid token bloat
55
+ if (context.history.length > 10) {
56
+ context.history = context.history.slice(-10);
57
+ }
58
+ fs.writeFileSync(CONTEXT_FILE, JSON.stringify(context, null, 2));
59
+ },
60
+
61
+ getSummary: (): string => {
62
+ const context = projectManager.get();
63
+ if (context.history.length === 0) return "No previous history found for this project.";
64
+
65
+ let summary = `Project: ${context.projectName} (Author: ${context.author})\n\nRecent History:\n`;
66
+ context.history.forEach((entry, i) => {
67
+ summary += `[${i+1}] ${entry.type} (${new Date(entry.timestamp).toLocaleString()}):\n${entry.content.substring(0, 500)}...\n\n`;
68
+ });
69
+ return summary;
70
+ }
71
+ };