orcommit 1.1.0 → 1.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -7,9 +7,10 @@
7
7
  export function cleanText(text) {
8
8
  return text
9
9
  .trim() // Remove leading/trailing whitespace
10
+ .replace(/\r\n/g, '\n') // Normalize line endings first
10
11
  .replace(/ +/g, ' ') // Replace multiple spaces with single space
11
- .replace(/\n{3,}/g, '\n\n') // Replace 3+ newlines with double newline
12
- .replace(/\r\n/g, '\n'); // Normalize line endings
12
+ .replace(/ +\n/g, '\n') // Remove trailing spaces before newlines
13
+ .replace(/\n{3,}/g, '\n\n'); // Replace 3+ newlines with double newline
13
14
  }
14
15
  /**
15
16
  * Wrap text in a named block
@@ -66,16 +67,33 @@ export function wrapContext(context) {
66
67
  export function wrapRules(rules) {
67
68
  return wrapInBlock('RULES', rules);
68
69
  }
70
+ /**
71
+ * Wrap git context (history + branch) in GIT_CONTEXT block
72
+ */
73
+ export function wrapGitContext(gitContext) {
74
+ return wrapInBlock('GIT_CONTEXT', gitContext, false); // Don't clean git context
75
+ }
69
76
  /**
70
77
  * Parse AI JSON response with fallback to plain text
78
+ * Handles various response formats: pure JSON, markdown-wrapped, or plain text
71
79
  * @param response - AI response (should be JSON)
72
80
  * @returns Object with assessment and commitMessage
73
81
  */
74
82
  export function parseAIResponse(response) {
83
+ let cleanResponse = response.trim();
84
+ // Remove markdown code blocks if present (```json ... ``` or ``` ... ```)
85
+ const codeBlockMatch = cleanResponse.match(/```(?:json)?\s*(\{[\s\S]*?\})\s*```/);
86
+ if (codeBlockMatch && codeBlockMatch[1]) {
87
+ cleanResponse = codeBlockMatch[1].trim();
88
+ }
89
+ // Remove common prefixes that AI might add
90
+ cleanResponse = cleanResponse
91
+ .replace(/^(?:Here is|Here's|This is|The|A)\s+(?:the\s+)?(?:JSON|response|result)?:?\s*/i, '')
92
+ .trim();
75
93
  try {
76
94
  // Try to parse as JSON
77
- const parsed = JSON.parse(response.trim());
78
- if (parsed && typeof parsed === 'object') {
95
+ const parsed = JSON.parse(cleanResponse);
96
+ if (parsed && typeof parsed === 'object' && !Array.isArray(parsed)) {
79
97
  return {
80
98
  assessment: parsed.codeAssessment || null,
81
99
  commitMessage: parsed.commitMessage || response.trim()
@@ -83,7 +101,22 @@ export function parseAIResponse(response) {
83
101
  }
84
102
  }
85
103
  catch (error) {
86
- // JSON parsing failed - fallback to plain text
104
+ // JSON parsing failed - try to extract JSON from text
105
+ const jsonMatch = response.match(/\{[\s\S]*"(?:codeAssessment|commitMessage)"[\s\S]*\}/);
106
+ if (jsonMatch) {
107
+ try {
108
+ const parsed = JSON.parse(jsonMatch[0]);
109
+ if (parsed && typeof parsed === 'object') {
110
+ return {
111
+ assessment: parsed.codeAssessment || null,
112
+ commitMessage: parsed.commitMessage || response.trim()
113
+ };
114
+ }
115
+ }
116
+ catch {
117
+ // Continue to fallback
118
+ }
119
+ }
87
120
  }
88
121
  // Fallback: treat entire response as commit message (backward compatibility)
89
122
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"formatting.js","sourceRoot":"","sources":["../../src/utils/formatting.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,IAAY;IACpC,OAAO,IAAI;SACR,IAAI,EAAE,CAA2B,qCAAqC;SACtE,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAY,4CAA4C;SAC5E,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,CAAM,0CAA0C;SAC1E,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAS,yBAAyB;AAC9D,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CACzB,SAAiB,EACjB,OAAe,EACf,eAAwB,IAAI;IAE5B,MAAM,gBAAgB,GAAG,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;IACrE,OAAO,IAAI,SAAS,MAAM,gBAAgB,OAAO,SAAS,GAAG,CAAC;AAChE,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,sBAAsB,CACpC,MAAiE;IAEjE,OAAO,MAAM;SACV,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC;SACzE,IAAI,CAAC,MAAM,CAAC,CAAC;AAClB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,QAAgB;IAC/C,OAAO,WAAW,CAAC,yBAAyB,EAAE,QAAQ,CAAC,CAAC;AAC1D,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,OAAO,WAAW,CAAC,cAAc,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,2BAA2B;AAC9E,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,YAAoB;IACnD,OAAO,WAAW,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC;AACnD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,QAAgB;IAC3C,OAAO,WAAW,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;AAC3C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,OAAe;IACzC,OAAO,WAAW,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;AACzC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,KAAa;IACrC,OAAO,WAAW,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AACrC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,QAAgB;IAI9C,IAAI,CAAC;QACH,uBAAuB;QACvB,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;QAE3C,IAAI,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;YACzC,OAAO;gBACL,UAAU,EAAE,MAAM,CAAC,cAAc,IAAI,IAAI;gBACzC,aAAa,EAAE,MAAM,CAAC,aAAa,IAAI,QAAQ,CAAC,IAAI,EAAE;aACvD,CAAC;QACJ,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,+CAA+C;IACjD,CAAC;IAED,6EAA6E;IAC7E,OAAO;QACL,UAAU,EAAE,IAAI;QAChB,aAAa,EAAE,QAAQ,CAAC,IAAI,EAAE;KAC/B,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"formatting.js","sourceRoot":"","sources":["../../src/utils/formatting.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "orcommit",
3
- "version": "1.1.0",
3
+ "version": "1.1.2",
4
4
  "description": "AI-powered commit message generator - Automated git commits using OpenAI, Claude, and OpenRouter APIs with intelligent diff processing, custom prompts, and interactive regeneration",
5
5
  "keywords": [
6
6
  "git",