@335g/pi-git 0.0.3 → 0.0.4

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 (55) hide show
  1. package/README.ja.md +3 -3
  2. package/README.md +3 -3
  3. package/dist/commands/agg-commit.d.ts.map +1 -1
  4. package/dist/commands/agg-commit.js +25 -29
  5. package/dist/commands/agg-commit.js.map +1 -1
  6. package/dist/commands/auto-agg-commit.d.ts.map +1 -1
  7. package/dist/commands/auto-agg-commit.js +6 -31
  8. package/dist/commands/auto-agg-commit.js.map +1 -1
  9. package/dist/commands/config.d.ts +1 -1
  10. package/dist/commands/config.d.ts.map +1 -1
  11. package/dist/commands/config.js +51 -43
  12. package/dist/commands/config.js.map +1 -1
  13. package/dist/commands/diagnostics.d.ts +12 -0
  14. package/dist/commands/diagnostics.d.ts.map +1 -0
  15. package/dist/commands/diagnostics.js +59 -0
  16. package/dist/commands/diagnostics.js.map +1 -0
  17. package/dist/core/auto-commit-message.d.ts.map +1 -1
  18. package/dist/core/auto-commit-message.js +29 -73
  19. package/dist/core/auto-commit-message.js.map +1 -1
  20. package/dist/core/auto-commit.d.ts.map +1 -1
  21. package/dist/core/auto-commit.js +3 -4
  22. package/dist/core/auto-commit.js.map +1 -1
  23. package/dist/core/commit-message.d.ts.map +1 -1
  24. package/dist/core/commit-message.js +3 -0
  25. package/dist/core/commit-message.js.map +1 -1
  26. package/dist/core/diff-analyzer.d.ts.map +1 -1
  27. package/dist/core/diff-analyzer.js +73 -61
  28. package/dist/core/diff-analyzer.js.map +1 -1
  29. package/dist/core/git.d.ts +5 -3
  30. package/dist/core/git.d.ts.map +1 -1
  31. package/dist/core/git.js +19 -3
  32. package/dist/core/git.js.map +1 -1
  33. package/dist/i18n/messages.d.ts +107 -0
  34. package/dist/i18n/messages.d.ts.map +1 -0
  35. package/dist/i18n/messages.js +135 -0
  36. package/dist/i18n/messages.js.map +1 -0
  37. package/dist/index.d.ts.map +1 -1
  38. package/dist/index.js +21 -4
  39. package/dist/index.js.map +1 -1
  40. package/dist/utils/diagnostics.d.ts +33 -0
  41. package/dist/utils/diagnostics.d.ts.map +1 -0
  42. package/dist/utils/diagnostics.js +32 -0
  43. package/dist/utils/diagnostics.js.map +1 -0
  44. package/dist/utils/footer-manager.d.ts.map +1 -1
  45. package/dist/utils/footer-manager.js +5 -5
  46. package/dist/utils/footer-manager.js.map +1 -1
  47. package/dist/utils/lang.d.ts +13 -8
  48. package/dist/utils/lang.d.ts.map +1 -1
  49. package/dist/utils/lang.js +21 -11
  50. package/dist/utils/lang.js.map +1 -1
  51. package/dist/utils/settings.d.ts +13 -5
  52. package/dist/utils/settings.d.ts.map +1 -1
  53. package/dist/utils/settings.js +65 -13
  54. package/dist/utils/settings.js.map +1 -1
  55. package/package.json +6 -2
package/dist/core/git.js CHANGED
@@ -24,6 +24,16 @@ export async function getStatus(pi, cwd) {
24
24
  }
25
25
  return stdout;
26
26
  }
27
+ /** Unmerged path status codes in git status --porcelain XY format */
28
+ const UNMERGED_CODES = ["DD", "AU", "UD", "UA", "DU", "AA", "UU"];
29
+ /** Check for unmerged paths (merge conflicts) */
30
+ export async function hasUnmergedPaths(pi, cwd) {
31
+ const status = await getStatus(pi, cwd);
32
+ return status.split("\n").some((line) => {
33
+ const xy = line.substring(0, 2);
34
+ return UNMERGED_CODES.includes(xy);
35
+ });
36
+ }
27
37
  export async function hasChanges(pi, cwd) {
28
38
  const status = await getStatus(pi, cwd);
29
39
  return status.trim().length > 0;
@@ -50,6 +60,9 @@ export async function ensureReadyToCommit(pi, cwd) {
50
60
  if (!(await isGitRepository(pi, cwd))) {
51
61
  return "not_git_repo";
52
62
  }
63
+ if (await hasUnmergedPaths(pi, cwd)) {
64
+ return "merge_conflict";
65
+ }
53
66
  if (!(await hasChanges(pi, cwd))) {
54
67
  return "no_changes";
55
68
  }
@@ -61,8 +74,8 @@ export async function ensureReadyToCommit(pi, cwd) {
61
74
  * working tree. This "freezes" the diff so concurrent edits do not affect
62
75
  * analysis.
63
76
  *
64
- * @returns The diff string, or `null` if the stash operation failed.
65
- * An empty string means there are no effective changes.
77
+ * @returns The diff string, or `null` if the stash operation failed
78
+ * (push or show). An empty string means there are no effective changes.
66
79
  */
67
80
  export async function collectDiff(pi, cwd) {
68
81
  const { code: stashCode } = await pi.exec("git", ["stash", "push", "-u", "-m", "pi-git"], { cwd });
@@ -71,7 +84,10 @@ export async function collectDiff(pi, cwd) {
71
84
  }
72
85
  let diff = "";
73
86
  try {
74
- const { stdout: stashDiff } = await pi.exec("git", ["stash", "show", "-p", "stash@{0}"], { cwd });
87
+ const { stdout: stashDiff, code: showCode } = await pi.exec("git", ["stash", "show", "-p", "stash@{0}"], { cwd });
88
+ if (showCode !== 0) {
89
+ return null;
90
+ }
75
91
  diff = stashDiff;
76
92
  // stash@{0}^3 contains untracked files when -u was used
77
93
  const { stdout: untrackedDiff, code: untrackedCode } = await pi.exec("git", ["diff", "HEAD", "stash@{0}^3"], { cwd });
@@ -1 +1 @@
1
- {"version":3,"file":"git.js","sourceRoot":"","sources":["../../src/core/git.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"git.js","sourceRoot":"","sources":["../../src/core/git.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,107 @@
1
+ /**
2
+ * i18n message catalog for pi-git.
3
+ *
4
+ * All user-facing strings live here, keyed by domain.
5
+ * The `t()` function in lang.ts resolves keys against this catalog.
6
+ *
7
+ * To add a language: add a new top-level key with the same MessageKey set.
8
+ */
9
+ export declare const messages: {
10
+ readonly en: {
11
+ readonly "footer.prepare": "{prefix} Preparing...";
12
+ readonly "footer.collectDiff": "{prefix} Collecting diff...";
13
+ readonly "footer.analyze": "{prefix} Analyzing hunks...";
14
+ readonly "footer.generateMessage": "{prefix} Generating messages...";
15
+ readonly "footer.commit": "{prefix} Committing...";
16
+ readonly "aggCommit.help": "/git-agg-commit [--lang=<lang>] [--help]\n\nOptions:\n --lang=<lang> Temporarily override language (not saved)\n --help Show this help message";
17
+ readonly "aggCommit.alreadyRunning": "git-agg-commit is already running. Please wait for it to complete.";
18
+ readonly "autoAggCommit.help": "/git-auto-agg-commit [on|off|toggle] [--help]\n\nSubcommands:\n on Enable auto git-agg-commit\n off Disable auto git-agg-commit\n toggle Toggle auto git-agg-commit\n\nFlags:\n --help Show this help message\n\nWhen called without arguments, shows the current status.";
19
+ readonly "autoAggCommit.status": "[pi-git] Auto git-agg-commit is {status}";
20
+ readonly "autoAggCommit.enabled": "enabled";
21
+ readonly "autoAggCommit.disabled": "disabled";
22
+ readonly "autoAggCommit.invalidArg": "[pi-git] Invalid argument. Use \"on\", \"off\", or \"toggle\"";
23
+ readonly "autoAggCommit.enabledLocal": "[pi-git] Auto git-agg-commit {status} (local config)";
24
+ readonly "autoAggCommit.enabledGlobal": "[pi-git] Auto git-agg-commit {status} (global config — outside git repo)";
25
+ readonly "config.help": "/git-config <key> [value] [--global] [--list] [--show-origin] [--keys] [--models] [--init] [--force] [--help]\n\nSubcommands:\n <key> Get the value of a setting\n <key> <value> Set the value of a setting\n\nFlags:\n --global Operate on global settings\n --list List all configured values\n --show-origin Show value origin (default/global/local)\n --keys Show valid keys with descriptions\n --models Show available models for analysis_model\n --init Create default pi-git.toml in the repository root\n --force Force overwrite when used with --init\n --help Show this help message";
26
+ readonly "config.noModels": "No available models found";
27
+ readonly "config.modelsHeader": "Available models for analysis_model:";
28
+ readonly "config.noSettings": "No settings configured";
29
+ readonly "config.usageHint": "Usage: /git-config <key> [value] [--global] [--list] [--show-origin] [--keys]";
30
+ readonly "config.unknownKey": "[pi-git] Unknown config key: {key}";
31
+ readonly "config.notSet": "[pi-git] {key} is not set";
32
+ readonly "config.savedToGlobal": "[pi-git] Saved {key}={value} to global config";
33
+ readonly "config.savedToLocal": "[pi-git] Saved {key}={value} to local config";
34
+ readonly "config.savedToLocalInit": "[pi-git] Saved {key}={value} to local config (initialized with defaults)";
35
+ readonly "config.savedToGlobalFallback": "[pi-git] Saved {key}={value} to global config (outside git repo)";
36
+ readonly "config.saveFailed": "[pi-git] Failed to save: {error}";
37
+ readonly "config.initCreated": "[pi-git] Created default pi-git.toml in the repository root.";
38
+ readonly "config.initAlreadyExists": "[pi-git] pi-git.toml already exists. Use --init --force to overwrite.";
39
+ readonly "config.initOverwritten": "[pi-git] Overwritten pi-git.toml with default settings.";
40
+ readonly "config.initNotInRepo": "[pi-git] Not inside a git repository. Cannot create pi-git.toml.";
41
+ readonly "config.keyDesc.lang": "Display and commit message language";
42
+ readonly "config.keyDesc.auto_agg_commit": "Whether to automatically run git-agg-commit after assistant response";
43
+ readonly "config.keyDesc.analysis_model": "AI model to use for diff analysis (format: provider/model-id)";
44
+ readonly "autoCommit.commitFailed": "Commit failed: {error}";
45
+ readonly "autoCommit.commitCreated": "Created commit: {message}";
46
+ readonly "diffAnalyzer.systemPrompt": "Split git diff into logical hunks.\n\nRules:\n- Each hunk = single logical change (e.g., \"add feature X\", \"fix bug Y\")\n- Group related file changes together\n- Split independent changes within one file into separate hunks\n- Write commit message subjects in English\n\nReturn ONLY a JSON array:\n[\n {\"files\": [\"path/to/file1.ts\", \"path/to/file2.ts\"], \"message\": \"feat(scope): add feature\"},\n {\"files\": [\"path/to/file3.ts\"], \"message\": \"fix: resolve null check\"}\n]\n\nMessage format: Conventional Commits (feat, fix, docs, style, refactor, test, chore).\nKeep subject under 50 chars. Use imperative mood. Write in English.";
47
+ readonly "diffAnalyzer.examples": "Examples of correct output:\n\nInput: diff with src/auth/login.ts (added login function), src/auth/types.ts (added User type)\nOutput: [{\"files\": [\"src/auth/login.ts\", \"src/auth/types.ts\"], \"message\": \"feat(auth): add login functionality\"}]\n\nInput: diff with README.md (fixed typo in installation section), package.json (version bump)\nOutput: [{\"files\": [\"README.md\"], \"message\": \"docs: fix typo in README\"}, {\"files\": [\"package.json\"], \"message\": \"chore: bump version to 1.2.0\"}]";
48
+ readonly "diffAnalyzer.buildPrompt": "{examples}\n\nHere is the git diff to analyze. Split it into logical hunks:\n\n```diff\n{diff}\n```\n\nWrite commit message subjects in English.\nRespond with ONLY a JSON array of hunks as specified.";
49
+ readonly "autoCommitMsg.systemPrompt": "You are a commit message generator. From the following information, understand what the user requested and what changes were made as a result, then generate a single Conventional Commit message.\n\nThe most important input is the \"user's request\". Use it as the primary driver for the commit message. The assistant's response and changed files list are supplementary - they describe how the request was fulfilled.\n\nRules:\n- Choose type from: feat, fix, docs, style, refactor, test, chore\n- Write the subject in English\n- Keep subject under 50 characters\n- Use imperative mood\n- Include scope only if clearly inferable\n\nReturn ONLY the commit message string. No explanations or code fences.";
50
+ readonly "autoCommitMsg.examples": "Examples:\n\nUser request: \"Add a login form to the auth page\"\nAssistant response: \"I've added login.tsx with form validation and connected it to the auth API.\"\nChanged files: src/auth/login.tsx, src/auth/api.ts\n→ feat(auth): add login form\n\nUser request: \"Fix the null pointer error in the payment flow\"\nAssistant response: \"Added null check in PaymentProcessor.handle(). The error should be resolved now.\"\nChanged files: src/payment/processor.ts\n→ fix(payment): add null check in processor";
51
+ readonly "autoCommitMsg.buildPrompt": "{examples}\n\n=== USER REQUEST (primary) ===\n{userSection}\n\n=== ASSISTANT RESPONSE (reference) ===\n{assistantSection}\n\n=== CHANGED FILES ===\n{filesSection}\n\nBased primarily on the USER REQUEST above, generate a single Conventional Commit message in English that best captures the intent of the changes.";
52
+ readonly "autoCommitMsg.compareSystemPrompt": "Choose the most specific commit message candidate. Return only the chosen message string.";
53
+ readonly "autoCommitMsg.comparePrompt": "You are a commit message quality evaluator.\nTwo candidate messages exist for the same set of changes.\n\nCandidate A (generated from analysis): \"{candidateA}\"\nCandidate B (derived from user request): \"{candidateB}\"\n\nChanged files: {files}\n\nChoose the one that is MORE SPECIFIC and accurately describes the changes.\nReturn ONLY the chosen message string. No explanations.";
54
+ readonly "autoCommitMsg.noData": "(none)";
55
+ readonly "core.applyChanges": "chore: apply changes";
56
+ };
57
+ readonly ja: {
58
+ readonly "footer.prepare": "{prefix} 準備中...";
59
+ readonly "footer.collectDiff": "{prefix} diff収集中...";
60
+ readonly "footer.analyze": "{prefix} hunk解析中...";
61
+ readonly "footer.generateMessage": "{prefix} コミットメッセージ生成中...";
62
+ readonly "footer.commit": "{prefix} コミット実行中...";
63
+ readonly "aggCommit.help": "/git-agg-commit [--lang=<lang>] [--help]\n\nオプション:\n --lang=<lang> 一時的に言語を上書き(保存されません)\n --help このヘルプを表示";
64
+ readonly "aggCommit.alreadyRunning": "git-agg-commit 実行中です。完了してから再度実行してください。";
65
+ readonly "autoAggCommit.help": "/git-auto-agg-commit [on|off|toggle] [--help]\n\nサブコマンド:\n on 自動 git-agg-commit を有効にする\n off 自動 git-agg-commit を無効にする\n toggle 自動 git-agg-commit の有効/無効を切り替える\n\nフラグ:\n --help このヘルプを表示\n\n引数を省略すると、現在の状態を表示します。";
66
+ readonly "autoAggCommit.status": "[pi-git] 自動 git-agg-commit は{status}です";
67
+ readonly "autoAggCommit.enabled": "有効";
68
+ readonly "autoAggCommit.disabled": "無効";
69
+ readonly "autoAggCommit.invalidArg": "[pi-git] 引数が不正です。on, off, toggle のいずれかを指定してください";
70
+ readonly "autoAggCommit.enabledLocal": "[pi-git] 自動 git-agg-commit を{status}にしました(ローカル設定)";
71
+ readonly "autoAggCommit.enabledGlobal": "[pi-git] 自動 git-agg-commit を{status}にしました(グローバル設定 — Gitリポジトリ外のため)";
72
+ readonly "config.help": "/git-config <key> [value] [--global] [--list] [--show-origin] [--keys] [--models] [--init] [--force] [--help]\n\nサブコマンド:\n <key> 設定値を取得\n <key> <value> 設定値を変更\n\nフラグ:\n --global グローバル設定に対して操作\n --list すべての設定値を一覧表示\n --show-origin 値の取得元(default/global/local)を表示\n --keys 有効なキー一覧と説明を表示\n --models analysis_model に設定可能なモデル一覧を表示\n --init リポジトリルートにデフォルトの pi-git.toml を作成\n --force --init と併用して強制的に上書き\n --help このヘルプを表示";
73
+ readonly "config.noModels": "利用可能なモデルが見つかりません";
74
+ readonly "config.modelsHeader": "analysis_model に設定可能なモデル一覧:";
75
+ readonly "config.noSettings": "設定はありません";
76
+ readonly "config.usageHint": "使用方法: /git-config <key> [value] [--global] [--list] [--show-origin] [--keys]";
77
+ readonly "config.unknownKey": "[pi-git] 不明な設定キー: {key}";
78
+ readonly "config.notSet": "[pi-git] {key} は設定されていません";
79
+ readonly "config.savedToGlobal": "[pi-git] {key}={value} をグローバル設定に保存しました";
80
+ readonly "config.savedToLocal": "[pi-git] {key}={value} をローカル設定に保存しました";
81
+ readonly "config.savedToLocalInit": "[pi-git] {key}={value} をローカル設定に保存しました(デフォルト値で初期化)";
82
+ readonly "config.savedToGlobalFallback": "[pi-git] {key}={value} をグローバル設定に保存しました(Gitリポジトリ外のため)";
83
+ readonly "config.saveFailed": "[pi-git] 保存に失敗しました: {error}";
84
+ readonly "config.initCreated": "[pi-git] リポジトリルートにデフォルトの pi-git.toml を作成しました。";
85
+ readonly "config.initAlreadyExists": "[pi-git] pi-git.toml はすでに存在します。上書きするには --init --force を使用してください。";
86
+ readonly "config.initOverwritten": "[pi-git] pi-git.toml をデフォルト設定で上書きしました。";
87
+ readonly "config.initNotInRepo": "[pi-git] Git リポジトリ内ではありません。pi-git.toml を作成できません。";
88
+ readonly "config.keyDesc.lang": "表示・コミットメッセージの言語設定";
89
+ readonly "config.keyDesc.auto_agg_commit": "アシスタント応答後の自動コミット有無";
90
+ readonly "config.keyDesc.analysis_model": "diff分析に使用するAIモデル(形式: provider/model-id)";
91
+ readonly "autoCommit.commitFailed": "コミットに失敗しました: {error}";
92
+ readonly "autoCommit.commitCreated": "コミットを作成しました: {message}";
93
+ readonly "diffAnalyzer.systemPrompt": "git diffを論理的なhunkに分割してください。\n\nルール:\n- 各hunk = 単一の論理的な変更(例:「機能Xを追加」「バグYを修正」)\n- 関連するファイル変更はグループ化する\n- 1ファイルに独立した複数の変更がある場合は分割する\n- コミットメッセージのサブジェクトは必ず日本語で記述する\n\n以下のJSON配列のみを返してください:\n[\n {\"files\": [\"path/to/file1.ts\", \"path/to/file2.ts\"], \"message\": \"feat: 機能を追加\"},\n {\"files\": [\"path/to/file3.ts\"], \"message\": \"fix: バグを修正\"}\n]\n\nメッセージ形式: Conventional Commits (feat, fix, docs, style, refactor, test, chore)。\nサブジェクトは50文字以内。";
94
+ readonly "diffAnalyzer.examples": "正しい出力の例:\n\n入力: src/auth/login.ts(ログイン機能を追加), src/auth/types.ts(User型を追加)のdiff\n出力: [{\"files\": [\"src/auth/login.ts\", \"src/auth/types.ts\"], \"message\": \"feat(auth): ログイン機能を追加\"}]\n\n入力: README.md(インストール手順の誤字を修正), package.json(バージョン更新)のdiff\n出力: [{\"files\": [\"README.md\"], \"message\": \"docs: READMEの誤字を修正\"}, {\"files\": [\"package.json\"], \"message\": \"chore: バージョンを1.2.0に更新\"}]";
95
+ readonly "diffAnalyzer.buildPrompt": "{examples}\n\n以下のgit diffを分析し、論理的なhunkに分割してください:\n\n```diff\n{diff}\n```\n\nコミットメッセージのサブジェクトは必ず日本語で記述してください。\n指定された形式のJSON配列のみを返してください。";
96
+ readonly "autoCommitMsg.systemPrompt": "あなたはコミットメッセージ生成ツールです。以下の情報から、ユーザーが**何を依頼し、その結果どのような変更が行われたか**を読み取り、Conventional Commit メッセージを1つ生成してください。\n\n最も重要なのは「ユーザーのリクエスト」です。ユーザーが何を求めていたのかを主軸に、コミットメッセージを決定してください。アシスタントの応答と変更ファイル一覧は、そのリクエストがどのように実現されたかを補完する情報です。\n\nルール:\n- type は feat, fix, docs, style, refactor, test, chore から選択\n- サブジェクトは必ず日本語で記述する\n- サブジェクトは50文字以内\n- 命令形を使用する\n- スコープは推測できる場合のみ含める\n\n返答はメッセージ文字列のみ。説明やコードフェンスは不要。";
97
+ readonly "autoCommitMsg.examples": "例:\n\nユーザーの依頼: 「認証ページにログインフォームを追加して」\nアシスタントの応答: 「login.tsx にバリデーション付きのフォームを追加し、認証APIに接続しました」\n変更ファイル: src/auth/login.tsx, src/auth/api.ts\n→ feat(auth): ログインフォームを追加\n\nユーザーの依頼: 「支払いフローのnullポインタエラーを修正して」\nアシスタントの応答: 「PaymentProcessor.handle() にnullチェックを追加しました」\n変更ファイル: src/payment/processor.ts\n→ fix(payment): nullチェックを追加";
98
+ readonly "autoCommitMsg.buildPrompt": "{examples}\n\n=== ユーザーのリクエスト(最重要) ===\n{userSection}\n\n=== アシスタントの応答(参考) ===\n{assistantSection}\n\n=== 変更されたファイル ===\n{filesSection}\n\n上記の「ユーザーのリクエスト」を主軸に、変更の意図を最もよく表す Conventional Commit メッセージを1つ、**必ず日本語で**生成してください。";
99
+ readonly "autoCommitMsg.compareSystemPrompt": "コミットメッセージ候補から最も具体的なものを選び、その文字列のみを返してください。";
100
+ readonly "autoCommitMsg.comparePrompt": "あなたはコミットメッセージの品質評価ツールです。\n同じ変更セットに対する2つの候補メッセージがあります。\n\n候補A(会話分析から生成): \"{candidateA}\"\n候補B(ユーザーの依頼から抽出): \"{candidateB}\"\n\n変更ファイル: {files}\n\nより**具体的で**、変更内容を正確に表している方を選び、\nそのメッセージ文字列だけを返してください。\n説明や補足は一切不要です。";
101
+ readonly "autoCommitMsg.noData": "(なし)";
102
+ readonly "core.applyChanges": "chore: 変更を適用";
103
+ };
104
+ };
105
+ /** Union of all valid message keys (derived from English catalog). */
106
+ export type MessageKey = keyof typeof messages.en;
107
+ //# sourceMappingURL=messages.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../src/i18n/messages.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2MX,CAAC;AAEX,sEAAsE;AACtE,MAAM,MAAM,UAAU,GAAG,MAAM,OAAO,QAAQ,CAAC,EAAE,CAAC"}
@@ -0,0 +1,135 @@
1
+ /**
2
+ * i18n message catalog for pi-git.
3
+ *
4
+ * All user-facing strings live here, keyed by domain.
5
+ * The `t()` function in lang.ts resolves keys against this catalog.
6
+ *
7
+ * To add a language: add a new top-level key with the same MessageKey set.
8
+ */
9
+ export const messages = {
10
+ en: {
11
+ // ── footer-manager.ts: execution phase status ──────────────
12
+ "footer.prepare": "{prefix} Preparing...",
13
+ "footer.collectDiff": "{prefix} Collecting diff...",
14
+ "footer.analyze": "{prefix} Analyzing hunks...",
15
+ "footer.generateMessage": "{prefix} Generating messages...",
16
+ "footer.commit": "{prefix} Committing...",
17
+ // ── agg-commit.ts ──────────────────────────────────────────
18
+ "aggCommit.help": "/git-agg-commit [--lang=<lang>] [--help]\n\nOptions:\n --lang=<lang> Temporarily override language (not saved)\n --help Show this help message",
19
+ "aggCommit.alreadyRunning": "git-agg-commit is already running. Please wait for it to complete.",
20
+ // ── auto-agg-commit.ts ─────────────────────────────────────
21
+ "autoAggCommit.help": "/git-auto-agg-commit [on|off|toggle] [--help]\n\nSubcommands:\n on Enable auto git-agg-commit\n off Disable auto git-agg-commit\n toggle Toggle auto git-agg-commit\n\nFlags:\n --help Show this help message\n\nWhen called without arguments, shows the current status.",
22
+ "autoAggCommit.status": "[pi-git] Auto git-agg-commit is {status}",
23
+ "autoAggCommit.enabled": "enabled",
24
+ "autoAggCommit.disabled": "disabled",
25
+ "autoAggCommit.invalidArg": '[pi-git] Invalid argument. Use "on", "off", or "toggle"',
26
+ "autoAggCommit.enabledLocal": "[pi-git] Auto git-agg-commit {status} (local config)",
27
+ "autoAggCommit.enabledGlobal": "[pi-git] Auto git-agg-commit {status} (global config — outside git repo)",
28
+ // ── config.ts ──────────────────────────────────────────────
29
+ "config.help": "/git-config <key> [value] [--global] [--list] [--show-origin] [--keys] [--models] [--init] [--force] [--help]\n\nSubcommands:\n <key> Get the value of a setting\n <key> <value> Set the value of a setting\n\nFlags:\n --global Operate on global settings\n --list List all configured values\n --show-origin Show value origin (default/global/local)\n --keys Show valid keys with descriptions\n --models Show available models for analysis_model\n --init Create default pi-git.toml in the repository root\n --force Force overwrite when used with --init\n --help Show this help message",
30
+ "config.noModels": "No available models found",
31
+ "config.modelsHeader": "Available models for analysis_model:",
32
+ "config.noSettings": "No settings configured",
33
+ "config.usageHint": "Usage: /git-config <key> [value] [--global] [--list] [--show-origin] [--keys]",
34
+ "config.unknownKey": "[pi-git] Unknown config key: {key}",
35
+ "config.notSet": "[pi-git] {key} is not set",
36
+ "config.savedToGlobal": "[pi-git] Saved {key}={value} to global config",
37
+ "config.savedToLocal": "[pi-git] Saved {key}={value} to local config",
38
+ "config.savedToLocalInit": "[pi-git] Saved {key}={value} to local config (initialized with defaults)",
39
+ "config.savedToGlobalFallback": "[pi-git] Saved {key}={value} to global config (outside git repo)",
40
+ "config.saveFailed": "[pi-git] Failed to save: {error}",
41
+ "config.initCreated": "[pi-git] Created default pi-git.toml in the repository root.",
42
+ "config.initAlreadyExists": "[pi-git] pi-git.toml already exists. Use --init --force to overwrite.",
43
+ "config.initOverwritten": "[pi-git] Overwritten pi-git.toml with default settings.",
44
+ "config.initNotInRepo": "[pi-git] Not inside a git repository. Cannot create pi-git.toml.",
45
+ // ── config.ts: VALID_KEYS_META descriptions ─────────────────
46
+ "config.keyDesc.lang": "Display and commit message language",
47
+ "config.keyDesc.auto_agg_commit": "Whether to automatically run git-agg-commit after assistant response",
48
+ "config.keyDesc.analysis_model": "AI model to use for diff analysis (format: provider/model-id)",
49
+ // ── auto-commit.ts ─────────────────────────────────────────
50
+ "autoCommit.commitFailed": "Commit failed: {error}",
51
+ "autoCommit.commitCreated": "Created commit: {message}",
52
+ // ── diff-analyzer.ts: system prompt ────────────────────────
53
+ "diffAnalyzer.systemPrompt": 'Split git diff into logical hunks.\n\nRules:\n- Each hunk = single logical change (e.g., "add feature X", "fix bug Y")\n- Group related file changes together\n- Split independent changes within one file into separate hunks\n- Write commit message subjects in English\n\nReturn ONLY a JSON array:\n[\n {"files": ["path/to/file1.ts", "path/to/file2.ts"], "message": "feat(scope): add feature"},\n {"files": ["path/to/file3.ts"], "message": "fix: resolve null check"}\n]\n\nMessage format: Conventional Commits (feat, fix, docs, style, refactor, test, chore).\nKeep subject under 50 chars. Use imperative mood. Write in English.',
54
+ // ── diff-analyzer.ts: few-shot examples ────────────────────
55
+ "diffAnalyzer.examples": 'Examples of correct output:\n\nInput: diff with src/auth/login.ts (added login function), src/auth/types.ts (added User type)\nOutput: [{"files": ["src/auth/login.ts", "src/auth/types.ts"], "message": "feat(auth): add login functionality"}]\n\nInput: diff with README.md (fixed typo in installation section), package.json (version bump)\nOutput: [{"files": ["README.md"], "message": "docs: fix typo in README"}, {"files": ["package.json"], "message": "chore: bump version to 1.2.0"}]',
56
+ // ── diff-analyzer.ts: user prompt ──────────────────────────
57
+ "diffAnalyzer.buildPrompt": "{examples}\n\nHere is the git diff to analyze. Split it into logical hunks:\n\n```diff\n{diff}\n```\n\nWrite commit message subjects in English.\nRespond with ONLY a JSON array of hunks as specified.",
58
+ // ── auto-commit-message.ts: system prompt ──────────────────
59
+ "autoCommitMsg.systemPrompt": "You are a commit message generator. From the following information, understand what the user requested and what changes were made as a result, then generate a single Conventional Commit message.\n\nThe most important input is the \"user's request\". Use it as the primary driver for the commit message. The assistant's response and changed files list are supplementary - they describe how the request was fulfilled.\n\nRules:\n- Choose type from: feat, fix, docs, style, refactor, test, chore\n- Write the subject in English\n- Keep subject under 50 characters\n- Use imperative mood\n- Include scope only if clearly inferable\n\nReturn ONLY the commit message string. No explanations or code fences.",
60
+ // ── auto-commit-message.ts: few-shot examples ──────────────
61
+ "autoCommitMsg.examples": 'Examples:\n\nUser request: "Add a login form to the auth page"\nAssistant response: "I\'ve added login.tsx with form validation and connected it to the auth API."\nChanged files: src/auth/login.tsx, src/auth/api.ts\n→ feat(auth): add login form\n\nUser request: "Fix the null pointer error in the payment flow"\nAssistant response: "Added null check in PaymentProcessor.handle(). The error should be resolved now."\nChanged files: src/payment/processor.ts\n→ fix(payment): add null check in processor',
62
+ // ── auto-commit-message.ts: user prompt ────────────────────
63
+ "autoCommitMsg.buildPrompt": "{examples}\n\n=== USER REQUEST (primary) ===\n{userSection}\n\n=== ASSISTANT RESPONSE (reference) ===\n{assistantSection}\n\n=== CHANGED FILES ===\n{filesSection}\n\nBased primarily on the USER REQUEST above, generate a single Conventional Commit message in English that best captures the intent of the changes.",
64
+ // ── auto-commit-message.ts: message comparison ─────────────
65
+ "autoCommitMsg.compareSystemPrompt": "Choose the most specific commit message candidate. Return only the chosen message string.",
66
+ "autoCommitMsg.comparePrompt": 'You are a commit message quality evaluator.\nTwo candidate messages exist for the same set of changes.\n\nCandidate A (generated from analysis): "{candidateA}"\nCandidate B (derived from user request): "{candidateB}"\n\nChanged files: {files}\n\nChoose the one that is MORE SPECIFIC and accurately describes the changes.\nReturn ONLY the chosen message string. No explanations.',
67
+ // ── auto-commit-message.ts: fallback text for empty sections
68
+ "autoCommitMsg.noData": "(none)",
69
+ // ── core fallback commit message ───────────────────────────
70
+ "core.applyChanges": "chore: apply changes",
71
+ },
72
+ ja: {
73
+ // ── footer-manager.ts: execution phase status ──────────────
74
+ "footer.prepare": "{prefix} 準備中...",
75
+ "footer.collectDiff": "{prefix} diff収集中...",
76
+ "footer.analyze": "{prefix} hunk解析中...",
77
+ "footer.generateMessage": "{prefix} コミットメッセージ生成中...",
78
+ "footer.commit": "{prefix} コミット実行中...",
79
+ // ── agg-commit.ts ──────────────────────────────────────────
80
+ "aggCommit.help": "/git-agg-commit [--lang=<lang>] [--help]\n\nオプション:\n --lang=<lang> 一時的に言語を上書き(保存されません)\n --help このヘルプを表示",
81
+ "aggCommit.alreadyRunning": "git-agg-commit 実行中です。完了してから再度実行してください。",
82
+ // ── auto-agg-commit.ts ─────────────────────────────────────
83
+ "autoAggCommit.help": "/git-auto-agg-commit [on|off|toggle] [--help]\n\nサブコマンド:\n on 自動 git-agg-commit を有効にする\n off 自動 git-agg-commit を無効にする\n toggle 自動 git-agg-commit の有効/無効を切り替える\n\nフラグ:\n --help このヘルプを表示\n\n引数を省略すると、現在の状態を表示します。",
84
+ "autoAggCommit.status": "[pi-git] 自動 git-agg-commit は{status}です",
85
+ "autoAggCommit.enabled": "有効",
86
+ "autoAggCommit.disabled": "無効",
87
+ "autoAggCommit.invalidArg": "[pi-git] 引数が不正です。on, off, toggle のいずれかを指定してください",
88
+ "autoAggCommit.enabledLocal": "[pi-git] 自動 git-agg-commit を{status}にしました(ローカル設定)",
89
+ "autoAggCommit.enabledGlobal": "[pi-git] 自動 git-agg-commit を{status}にしました(グローバル設定 — Gitリポジトリ外のため)",
90
+ // ── config.ts ──────────────────────────────────────────────
91
+ "config.help": "/git-config <key> [value] [--global] [--list] [--show-origin] [--keys] [--models] [--init] [--force] [--help]\n\nサブコマンド:\n <key> 設定値を取得\n <key> <value> 設定値を変更\n\nフラグ:\n --global グローバル設定に対して操作\n --list すべての設定値を一覧表示\n --show-origin 値の取得元(default/global/local)を表示\n --keys 有効なキー一覧と説明を表示\n --models analysis_model に設定可能なモデル一覧を表示\n --init リポジトリルートにデフォルトの pi-git.toml を作成\n --force --init と併用して強制的に上書き\n --help このヘルプを表示",
92
+ "config.noModels": "利用可能なモデルが見つかりません",
93
+ "config.modelsHeader": "analysis_model に設定可能なモデル一覧:",
94
+ "config.noSettings": "設定はありません",
95
+ "config.usageHint": "使用方法: /git-config <key> [value] [--global] [--list] [--show-origin] [--keys]",
96
+ "config.unknownKey": "[pi-git] 不明な設定キー: {key}",
97
+ "config.notSet": "[pi-git] {key} は設定されていません",
98
+ "config.savedToGlobal": "[pi-git] {key}={value} をグローバル設定に保存しました",
99
+ "config.savedToLocal": "[pi-git] {key}={value} をローカル設定に保存しました",
100
+ "config.savedToLocalInit": "[pi-git] {key}={value} をローカル設定に保存しました(デフォルト値で初期化)",
101
+ "config.savedToGlobalFallback": "[pi-git] {key}={value} をグローバル設定に保存しました(Gitリポジトリ外のため)",
102
+ "config.saveFailed": "[pi-git] 保存に失敗しました: {error}",
103
+ "config.initCreated": "[pi-git] リポジトリルートにデフォルトの pi-git.toml を作成しました。",
104
+ "config.initAlreadyExists": "[pi-git] pi-git.toml はすでに存在します。上書きするには --init --force を使用してください。",
105
+ "config.initOverwritten": "[pi-git] pi-git.toml をデフォルト設定で上書きしました。",
106
+ "config.initNotInRepo": "[pi-git] Git リポジトリ内ではありません。pi-git.toml を作成できません。",
107
+ // ── config.ts: VALID_KEYS_META descriptions ─────────────────
108
+ "config.keyDesc.lang": "表示・コミットメッセージの言語設定",
109
+ "config.keyDesc.auto_agg_commit": "アシスタント応答後の自動コミット有無",
110
+ "config.keyDesc.analysis_model": "diff分析に使用するAIモデル(形式: provider/model-id)",
111
+ // ── auto-commit.ts ─────────────────────────────────────────
112
+ "autoCommit.commitFailed": "コミットに失敗しました: {error}",
113
+ "autoCommit.commitCreated": "コミットを作成しました: {message}",
114
+ // ── diff-analyzer.ts: system prompt ────────────────────────
115
+ "diffAnalyzer.systemPrompt": 'git diffを論理的なhunkに分割してください。\n\nルール:\n- 各hunk = 単一の論理的な変更(例:「機能Xを追加」「バグYを修正」)\n- 関連するファイル変更はグループ化する\n- 1ファイルに独立した複数の変更がある場合は分割する\n- コミットメッセージのサブジェクトは必ず日本語で記述する\n\n以下のJSON配列のみを返してください:\n[\n {"files": ["path/to/file1.ts", "path/to/file2.ts"], "message": "feat: 機能を追加"},\n {"files": ["path/to/file3.ts"], "message": "fix: バグを修正"}\n]\n\nメッセージ形式: Conventional Commits (feat, fix, docs, style, refactor, test, chore)。\nサブジェクトは50文字以内。',
116
+ // ── diff-analyzer.ts: few-shot examples ────────────────────
117
+ "diffAnalyzer.examples": '正しい出力の例:\n\n入力: src/auth/login.ts(ログイン機能を追加), src/auth/types.ts(User型を追加)のdiff\n出力: [{"files": ["src/auth/login.ts", "src/auth/types.ts"], "message": "feat(auth): ログイン機能を追加"}]\n\n入力: README.md(インストール手順の誤字を修正), package.json(バージョン更新)のdiff\n出力: [{"files": ["README.md"], "message": "docs: READMEの誤字を修正"}, {"files": ["package.json"], "message": "chore: バージョンを1.2.0に更新"}]',
118
+ // ── diff-analyzer.ts: user prompt ──────────────────────────
119
+ "diffAnalyzer.buildPrompt": "{examples}\n\n以下のgit diffを分析し、論理的なhunkに分割してください:\n\n```diff\n{diff}\n```\n\nコミットメッセージのサブジェクトは必ず日本語で記述してください。\n指定された形式のJSON配列のみを返してください。",
120
+ // ── auto-commit-message.ts: system prompt ──────────────────
121
+ "autoCommitMsg.systemPrompt": "あなたはコミットメッセージ生成ツールです。以下の情報から、ユーザーが**何を依頼し、その結果どのような変更が行われたか**を読み取り、Conventional Commit メッセージを1つ生成してください。\n\n最も重要なのは「ユーザーのリクエスト」です。ユーザーが何を求めていたのかを主軸に、コミットメッセージを決定してください。アシスタントの応答と変更ファイル一覧は、そのリクエストがどのように実現されたかを補完する情報です。\n\nルール:\n- type は feat, fix, docs, style, refactor, test, chore から選択\n- サブジェクトは必ず日本語で記述する\n- サブジェクトは50文字以内\n- 命令形を使用する\n- スコープは推測できる場合のみ含める\n\n返答はメッセージ文字列のみ。説明やコードフェンスは不要。",
122
+ // ── auto-commit-message.ts: few-shot examples ──────────────
123
+ "autoCommitMsg.examples": "例:\n\nユーザーの依頼: 「認証ページにログインフォームを追加して」\nアシスタントの応答: 「login.tsx にバリデーション付きのフォームを追加し、認証APIに接続しました」\n変更ファイル: src/auth/login.tsx, src/auth/api.ts\n→ feat(auth): ログインフォームを追加\n\nユーザーの依頼: 「支払いフローのnullポインタエラーを修正して」\nアシスタントの応答: 「PaymentProcessor.handle() にnullチェックを追加しました」\n変更ファイル: src/payment/processor.ts\n→ fix(payment): nullチェックを追加",
124
+ // ── auto-commit-message.ts: user prompt ────────────────────
125
+ "autoCommitMsg.buildPrompt": "{examples}\n\n=== ユーザーのリクエスト(最重要) ===\n{userSection}\n\n=== アシスタントの応答(参考) ===\n{assistantSection}\n\n=== 変更されたファイル ===\n{filesSection}\n\n上記の「ユーザーのリクエスト」を主軸に、変更の意図を最もよく表す Conventional Commit メッセージを1つ、**必ず日本語で**生成してください。",
126
+ // ── auto-commit-message.ts: message comparison ─────────────
127
+ "autoCommitMsg.compareSystemPrompt": "コミットメッセージ候補から最も具体的なものを選び、その文字列のみを返してください。",
128
+ "autoCommitMsg.comparePrompt": 'あなたはコミットメッセージの品質評価ツールです。\n同じ変更セットに対する2つの候補メッセージがあります。\n\n候補A(会話分析から生成): "{candidateA}"\n候補B(ユーザーの依頼から抽出): "{candidateB}"\n\n変更ファイル: {files}\n\nより**具体的で**、変更内容を正確に表している方を選び、\nそのメッセージ文字列だけを返してください。\n説明や補足は一切不要です。',
129
+ // ── auto-commit-message.ts: fallback text for empty sections
130
+ "autoCommitMsg.noData": "(なし)",
131
+ // ── core fallback commit message ───────────────────────────
132
+ "core.applyChanges": "chore: 変更を適用",
133
+ },
134
+ };
135
+ //# sourceMappingURL=messages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messages.js","sourceRoot":"","sources":["../../src/i18n/messages.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,EAAE,EAAE;QACF,8DAA8D;QAC9D,gBAAgB,EAAE,uBAAuB;QACzC,oBAAoB,EAAE,6BAA6B;QACnD,gBAAgB,EAAE,6BAA6B;QAC/C,wBAAwB,EAAE,iCAAiC;QAC3D,eAAe,EAAE,wBAAwB;QAEzC,8DAA8D;QAC9D,gBAAgB,EACd,2JAA2J;QAC7J,0BAA0B,EACxB,oEAAoE;QAEtE,8DAA8D;QAC9D,oBAAoB,EAClB,0RAA0R;QAC5R,sBAAsB,EAAE,0CAA0C;QAClE,uBAAuB,EAAE,SAAS;QAClC,wBAAwB,EAAE,UAAU;QACpC,0BAA0B,EACxB,yDAAyD;QAC3D,4BAA4B,EAC1B,sDAAsD;QACxD,6BAA6B,EAC3B,0EAA0E;QAE5E,8DAA8D;QAC9D,aAAa,EACX,6pBAA6pB;QAC/pB,iBAAiB,EAAE,2BAA2B;QAC9C,qBAAqB,EAAE,sCAAsC;QAC7D,mBAAmB,EAAE,wBAAwB;QAC7C,kBAAkB,EAChB,+EAA+E;QACjF,mBAAmB,EAAE,oCAAoC;QACzD,eAAe,EAAE,2BAA2B;QAC5C,sBAAsB,EAAE,+CAA+C;QACvE,qBAAqB,EAAE,8CAA8C;QACrE,yBAAyB,EACvB,0EAA0E;QAC5E,8BAA8B,EAC5B,kEAAkE;QACpE,mBAAmB,EAAE,kCAAkC;QACvD,oBAAoB,EAClB,8DAA8D;QAChE,0BAA0B,EACxB,uEAAuE;QACzE,wBAAwB,EACtB,yDAAyD;QAC3D,sBAAsB,EACpB,kEAAkE;QAEpE,+DAA+D;QAC/D,qBAAqB,EAAE,qCAAqC;QAC5D,gCAAgC,EAC9B,sEAAsE;QACxE,+BAA+B,EAC7B,+DAA+D;QAEjE,8DAA8D;QAC9D,yBAAyB,EAAE,wBAAwB;QACnD,0BAA0B,EAAE,2BAA2B;QAEvD,8DAA8D;QAC9D,2BAA2B,EACzB,qnBAAqnB;QAEvnB,8DAA8D;QAC9D,uBAAuB,EACrB,qeAAqe;QAEve,8DAA8D;QAC9D,0BAA0B,EACxB,yMAAyM;QAE3M,8DAA8D;QAC9D,4BAA4B,EAC1B,8rBAA8rB;QAEhsB,8DAA8D;QAC9D,wBAAwB,EACtB,sfAAsf;QAExf,8DAA8D;QAC9D,2BAA2B,EACzB,yTAAyT;QAE3T,8DAA8D;QAC9D,mCAAmC,EACjC,2FAA2F;QAC7F,6BAA6B,EAC3B,2XAA2X;QAE7X,8DAA8D;QAC9D,sBAAsB,EAAE,QAAQ;QAEhC,8DAA8D;QAC9D,mBAAmB,EAAE,sBAAsB;KAC5C;IAED,EAAE,EAAE;QACF,8DAA8D;QAC9D,gBAAgB,EAAE,iBAAiB;QACnC,oBAAoB,EAAE,qBAAqB;QAC3C,gBAAgB,EAAE,qBAAqB;QACvC,wBAAwB,EAAE,0BAA0B;QACpD,eAAe,EAAE,qBAAqB;QAEtC,8DAA8D;QAC9D,gBAAgB,EACd,qHAAqH;QACvH,0BAA0B,EACxB,wCAAwC;QAE1C,8DAA8D;QAC9D,oBAAoB,EAClB,iOAAiO;QACnO,sBAAsB,EAAE,wCAAwC;QAChE,uBAAuB,EAAE,IAAI;QAC7B,wBAAwB,EAAE,IAAI;QAC9B,0BAA0B,EACxB,iDAAiD;QACnD,4BAA4B,EAC1B,mDAAmD;QACrD,6BAA6B,EAC3B,mEAAmE;QAErE,8DAA8D;QAC9D,aAAa,EACX,wfAAwf;QAC1f,iBAAiB,EAAE,kBAAkB;QACrC,qBAAqB,EAAE,6BAA6B;QACpD,mBAAmB,EAAE,UAAU;QAC/B,kBAAkB,EAChB,8EAA8E;QAChF,mBAAmB,EAAE,yBAAyB;QAC9C,eAAe,EAAE,2BAA2B;QAC5C,sBAAsB,EACpB,wCAAwC;QAC1C,qBAAqB,EACnB,uCAAuC;QACzC,yBAAyB,EACvB,mDAAmD;QACrD,8BAA8B,EAC5B,sDAAsD;QACxD,mBAAmB,EAAE,6BAA6B;QAClD,oBAAoB,EAClB,+CAA+C;QACjD,0BAA0B,EACxB,kEAAkE;QACpE,wBAAwB,EACtB,wCAAwC;QAC1C,sBAAsB,EACpB,kDAAkD;QAEpD,+DAA+D;QAC/D,qBAAqB,EAAE,mBAAmB;QAC1C,gCAAgC,EAAE,oBAAoB;QACtD,+BAA+B,EAC7B,yCAAyC;QAE3C,8DAA8D;QAC9D,yBAAyB,EAAE,sBAAsB;QACjD,0BAA0B,EAAE,wBAAwB;QAEpD,8DAA8D;QAC9D,2BAA2B,EACzB,8aAA8a;QAEhb,8DAA8D;QAC9D,uBAAuB,EACrB,gXAAgX;QAElX,8DAA8D;QAC9D,0BAA0B,EACxB,yIAAyI;QAE3I,8DAA8D;QAC9D,4BAA4B,EAC1B,uYAAuY;QAEzY,8DAA8D;QAC9D,wBAAwB,EACtB,qUAAqU;QAEvU,8DAA8D;QAC9D,2BAA2B,EACzB,6NAA6N;QAE/N,8DAA8D;QAC9D,mCAAmC,EACjC,2CAA2C;QAC7C,6BAA6B,EAC3B,oNAAoN;QAEtN,8DAA8D;QAC9D,sBAAsB,EAAE,MAAM;QAE9B,8DAA8D;QAC9D,mBAAmB,EAAE,cAAc;KACpC;CACO,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAQpE,MAAM,CAAC,OAAO,WAAW,EAAE,EAAE,YAAY,QAiCxC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AASpE,MAAM,CAAC,OAAO,WAAW,EAAE,EAAE,YAAY,QAgDxC"}
package/dist/index.js CHANGED
@@ -6,13 +6,19 @@
6
6
  import { handleAggCommit } from "./commands/agg-commit.js";
7
7
  import { handleAutoAggCommit } from "./commands/auto-agg-commit.js";
8
8
  import { handleConfig } from "./commands/config.js";
9
+ import { handleDiagnostics } from "./commands/diagnostics.js";
9
10
  import { handleAutoCommit } from "./core/auto-commit.js";
10
11
  import { footerManager } from "./utils/footer-manager.js";
11
12
  export default function (pi) {
12
13
  pi.on("session_start", async (_event, ctx) => {
13
- if (ctx.hasUI) {
14
- footerManager.initialize(pi, ctx.ui, ctx.cwd);
15
- await footerManager.refresh();
14
+ try {
15
+ if (ctx.hasUI) {
16
+ footerManager.initialize(pi, ctx.ui, ctx.cwd);
17
+ await footerManager.refresh();
18
+ }
19
+ }
20
+ catch {
21
+ // Silently ignore initialization errors to prevent unhandled rejections
16
22
  }
17
23
  });
18
24
  pi.registerCommand("git-agg-commit", {
@@ -33,8 +39,19 @@ export default function (pi) {
33
39
  await handleAutoAggCommit(pi, ctx, args);
34
40
  },
35
41
  });
42
+ pi.registerCommand("git-diagnostics", {
43
+ description: "Show P0 effectiveness measurement counters",
44
+ handler: async (args, ctx) => {
45
+ await handleDiagnostics(pi, ctx, args);
46
+ },
47
+ });
36
48
  pi.on("agent_end", async (event, ctx) => {
37
- await handleAutoCommit(pi, ctx, event);
49
+ try {
50
+ await handleAutoCommit(pi, ctx, event);
51
+ }
52
+ catch {
53
+ // Silently ignore auto-commit errors to prevent unhandled rejections
54
+ }
38
55
  });
39
56
  }
40
57
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAE1D,MAAM,CAAC,OAAO,WAAW,EAAgB;IACvC,EAAE,CAAC,EAAE,CAAC,eAAe,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE;QAC3C,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;YACd,aAAa,CAAC,UAAU,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;YAC9C,MAAM,aAAa,CAAC,OAAO,EAAE,CAAC;QAChC,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,eAAe,CAAC,gBAAgB,EAAE;QACnC,WAAW,EACT,+EAA+E;QACjF,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE;YAC3B,MAAM,eAAe,CAAC,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;QACvC,CAAC;KACF,CAAC,CAAC;IAEH,EAAE,CAAC,eAAe,CAAC,YAAY,EAAE;QAC/B,WAAW,EAAE,+CAA+C;QAC5D,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE;YAC3B,MAAM,YAAY,CAAC,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;QACpC,CAAC;KACF,CAAC,CAAC;IAEH,EAAE,CAAC,eAAe,CAAC,qBAAqB,EAAE;QACxC,WAAW,EAAE,2DAA2D;QACxE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE;YAC3B,MAAM,mBAAmB,CAAC,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;QAC3C,CAAC;KACF,CAAC,CAAC;IAEH,EAAE,CAAC,EAAE,CAAC,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;QACtC,MAAM,gBAAgB,CAAC,EAAE,EAAE,GAAG,EAAE,KAAsB,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAE1D,MAAM,CAAC,OAAO,WAAW,EAAgB;IACvC,EAAE,CAAC,EAAE,CAAC,eAAe,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE;QAC3C,IAAI,CAAC;YACH,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;gBACd,aAAa,CAAC,UAAU,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;gBAC9C,MAAM,aAAa,CAAC,OAAO,EAAE,CAAC;YAChC,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,wEAAwE;QAC1E,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,eAAe,CAAC,gBAAgB,EAAE;QACnC,WAAW,EACT,+EAA+E;QACjF,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE;YAC3B,MAAM,eAAe,CAAC,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;QACvC,CAAC;KACF,CAAC,CAAC;IAEH,EAAE,CAAC,eAAe,CAAC,YAAY,EAAE;QAC/B,WAAW,EAAE,+CAA+C;QAC5D,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE;YAC3B,MAAM,YAAY,CAAC,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;QACpC,CAAC;KACF,CAAC,CAAC;IAEH,EAAE,CAAC,eAAe,CAAC,qBAAqB,EAAE;QACxC,WAAW,EAAE,2DAA2D;QACxE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE;YAC3B,MAAM,mBAAmB,CAAC,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;QAC3C,CAAC;KACF,CAAC,CAAC;IAEH,EAAE,CAAC,eAAe,CAAC,iBAAiB,EAAE;QACpC,WAAW,EAAE,4CAA4C;QACzD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE;YAC3B,MAAM,iBAAiB,CAAC,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;QACzC,CAAC;KACF,CAAC,CAAC;IAEH,EAAE,CAAC,EAAE,CAAC,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;QACtC,IAAI,CAAC;YACH,MAAM,gBAAgB,CAAC,EAAE,EAAE,GAAG,EAAE,KAAsB,CAAC,CAAC;QAC1D,CAAC;QAAC,MAAM,CAAC;YACP,qEAAqE;QACvE,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Lightweight diagnostic counters for pi-git P0 effectiveness measurement.
3
+ *
4
+ * Counters are incremented at key decision points and can be dumped
5
+ * via /git-diagnostics command. Zero runtime overhead when not queried.
6
+ */
7
+ export interface DiagSnapshot {
8
+ /** Layer 2: direct JSON.parse succeeded */
9
+ parseLayer2_directJSON: number;
10
+ /** Layer 3: trailing text stripped, then parse succeeded */
11
+ parseLayer3_trailingStrip: number;
12
+ /** Layer 4: regex pair extraction succeeded */
13
+ parseLayer4_regexExtract: number;
14
+ /** All layers failed, fell back to file-based hunks */
15
+ parseFallback_fileBased: number;
16
+ /** isGenericMessage() returned true */
17
+ msgIsGeneric: number;
18
+ /** refineMessageIfGeneric() was called */
19
+ msgRefineTriggered: number;
20
+ /** refine used AI comparison (not just heuristic) */
21
+ msgRefineUsedAI: number;
22
+ /** sanitizeCommitMessage() was called */
23
+ msgSanitized: number;
24
+ /** sanitize actually changed the message (was invalid format) */
25
+ msgSanitizeChanged: number;
26
+ }
27
+ /** Increment a counter by 1. Safe to call from any context. */
28
+ export declare function diagIncr<K extends keyof DiagSnapshot>(key: K): void;
29
+ /** Take an atomic snapshot of all counters. */
30
+ export declare function diagSnapshot(): DiagSnapshot;
31
+ /** Reset all counters to zero. */
32
+ export declare function diagReset(): void;
33
+ //# sourceMappingURL=diagnostics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diagnostics.d.ts","sourceRoot":"","sources":["../../src/utils/diagnostics.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,YAAY;IAE3B,2CAA2C;IAC3C,sBAAsB,EAAE,MAAM,CAAC;IAC/B,4DAA4D;IAC5D,yBAAyB,EAAE,MAAM,CAAC;IAClC,+CAA+C;IAC/C,wBAAwB,EAAE,MAAM,CAAC;IACjC,uDAAuD;IACvD,uBAAuB,EAAE,MAAM,CAAC;IAGhC,uCAAuC;IACvC,YAAY,EAAE,MAAM,CAAC;IACrB,0CAA0C;IAC1C,kBAAkB,EAAE,MAAM,CAAC;IAC3B,qDAAqD;IACrD,eAAe,EAAE,MAAM,CAAC;IAGxB,yCAAyC;IACzC,YAAY,EAAE,MAAM,CAAC;IACrB,iEAAiE;IACjE,kBAAkB,EAAE,MAAM,CAAC;CAC5B;AAgBD,+DAA+D;AAC/D,wBAAgB,QAAQ,CAAC,CAAC,SAAS,MAAM,YAAY,EAAE,GAAG,EAAE,CAAC,GAAG,IAAI,CAEnE;AAED,+CAA+C;AAC/C,wBAAgB,YAAY,IAAI,YAAY,CAE3C;AAED,kCAAkC;AAClC,wBAAgB,SAAS,IAAI,IAAI,CAIhC"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Lightweight diagnostic counters for pi-git P0 effectiveness measurement.
3
+ *
4
+ * Counters are incremented at key decision points and can be dumped
5
+ * via /git-diagnostics command. Zero runtime overhead when not queried.
6
+ */
7
+ const counters = {
8
+ parseLayer2_directJSON: 0,
9
+ parseLayer3_trailingStrip: 0,
10
+ parseLayer4_regexExtract: 0,
11
+ parseFallback_fileBased: 0,
12
+ msgIsGeneric: 0,
13
+ msgRefineTriggered: 0,
14
+ msgRefineUsedAI: 0,
15
+ msgSanitized: 0,
16
+ msgSanitizeChanged: 0,
17
+ };
18
+ /** Increment a counter by 1. Safe to call from any context. */
19
+ export function diagIncr(key) {
20
+ counters[key]++;
21
+ }
22
+ /** Take an atomic snapshot of all counters. */
23
+ export function diagSnapshot() {
24
+ return { ...counters };
25
+ }
26
+ /** Reset all counters to zero. */
27
+ export function diagReset() {
28
+ for (const key of Object.keys(counters)) {
29
+ counters[key] = 0;
30
+ }
31
+ }
32
+ //# sourceMappingURL=diagnostics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diagnostics.js","sourceRoot":"","sources":["../../src/utils/diagnostics.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AA4BH,MAAM,QAAQ,GAAiB;IAC7B,sBAAsB,EAAE,CAAC;IACzB,yBAAyB,EAAE,CAAC;IAC5B,wBAAwB,EAAE,CAAC;IAC3B,uBAAuB,EAAE,CAAC;IAE1B,YAAY,EAAE,CAAC;IACf,kBAAkB,EAAE,CAAC;IACrB,eAAe,EAAE,CAAC;IAElB,YAAY,EAAE,CAAC;IACf,kBAAkB,EAAE,CAAC;CACtB,CAAC;AAEF,+DAA+D;AAC/D,MAAM,UAAU,QAAQ,CAA+B,GAAM;IAC3D,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;AAClB,CAAC;AAED,+CAA+C;AAC/C,MAAM,UAAU,YAAY;IAC1B,OAAO,EAAE,GAAG,QAAQ,EAAE,CAAC;AACzB,CAAC;AAED,kCAAkC;AAClC,MAAM,UAAU,SAAS;IACvB,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAA2B,EAAE,CAAC;QAClE,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACpB,CAAC;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"footer-manager.d.ts","sourceRoot":"","sources":["../../src/utils/footer-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EACV,YAAY,EACZ,kBAAkB,EACnB,MAAM,iCAAiC,CAAC;AAMzC,KAAK,KAAK,GACN,SAAS,GACT,aAAa,GACb,SAAS,GACT,iBAAiB,GACjB,QAAQ,CAAC;AAEb;;;;GAIG;AACH,cAAM,aAAa;IACjB,OAAO,CAAC,EAAE,CAA6B;IACvC,OAAO,CAAC,EAAE,CAAmC;IAC7C,OAAO,CAAC,GAAG,CAAqB;IAChC,OAAO,CAAC,OAAO,CASC;IAChB,OAAO,CAAC,YAAY,CAA+C;IAEnE;;;;;;;OAOG;IACH,UAAU,CACR,EAAE,EAAE,YAAY,EAChB,EAAE,EAAE,kBAAkB,GAAG,IAAI,EAC7B,GAAG,CAAC,EAAE,MAAM,GACX,IAAI;IAMP;;OAEG;IACH,SAAS,IAAI,OAAO;IAIpB;;;OAGG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAwB9B;;;;;;OAMG;IACG,UAAU,CACd,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,KAAK,EACZ,IAAI,CAAC,EAAE,MAAM,GACZ,OAAO,CAAC,IAAI,CAAC;IAOhB;;;;;;OAMG;IACG,QAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAY1D;;;;OAIG;IACG,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAOtE;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAMnC;;OAEG;IACH,OAAO,CAAC,WAAW;IAsBnB,iEAAiE;IACjE,OAAO,CAAC,iBAAiB;IAOzB,0CAA0C;IAC1C,OAAO,CAAC,gBAAgB;CAMzB;AA4BD,yBAAyB;AACzB,eAAO,MAAM,aAAa,eAAsB,CAAC"}
1
+ {"version":3,"file":"footer-manager.d.ts","sourceRoot":"","sources":["../../src/utils/footer-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EACV,YAAY,EACZ,kBAAkB,EACnB,MAAM,iCAAiC,CAAC;AAMzC,KAAK,KAAK,GACN,SAAS,GACT,aAAa,GACb,SAAS,GACT,iBAAiB,GACjB,QAAQ,CAAC;AAEb;;;;GAIG;AACH,cAAM,aAAa;IACjB,OAAO,CAAC,EAAE,CAA6B;IACvC,OAAO,CAAC,EAAE,CAAmC;IAC7C,OAAO,CAAC,GAAG,CAAqB;IAChC,OAAO,CAAC,OAAO,CASC;IAChB,OAAO,CAAC,YAAY,CAA+C;IAEnE;;;;;;;OAOG;IACH,UAAU,CACR,EAAE,EAAE,YAAY,EAChB,EAAE,EAAE,kBAAkB,GAAG,IAAI,EAC7B,GAAG,CAAC,EAAE,MAAM,GACX,IAAI;IAMP;;OAEG;IACH,SAAS,IAAI,OAAO;IAIpB;;;OAGG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAwB9B;;;;;;OAMG;IACG,UAAU,CACd,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,KAAK,EACZ,IAAI,CAAC,EAAE,MAAM,GACZ,OAAO,CAAC,IAAI,CAAC;IAOhB;;;;;;OAMG;IACG,QAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAY1D;;;;OAIG;IACG,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAOtE;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAMnC;;OAEG;IACH,OAAO,CAAC,WAAW;IAsBnB,iEAAiE;IACjE,OAAO,CAAC,iBAAiB;IAOzB,0CAA0C;IAC1C,OAAO,CAAC,gBAAgB;CAMzB;AAyBD,yBAAyB;AACzB,eAAO,MAAM,aAAa,eAAsB,CAAC"}
@@ -163,15 +163,15 @@ function phaseStatusText(lang, key, autoCommit) {
163
163
  const prefix = autoCommit ? "[pi-git: auto-commit]" : "[pi-git]";
164
164
  switch (key) {
165
165
  case "prepare":
166
- return t(lang, `${prefix} 準備中...`, `${prefix} Preparing...`);
166
+ return t(lang, "footer.prepare", { prefix });
167
167
  case "collectDiff":
168
- return t(lang, `${prefix} diff収集中...`, `${prefix} Collecting diff...`);
168
+ return t(lang, "footer.collectDiff", { prefix });
169
169
  case "analyze":
170
- return t(lang, `${prefix} hunk解析中...`, `${prefix} Analyzing hunks...`);
170
+ return t(lang, "footer.analyze", { prefix });
171
171
  case "generateMessage":
172
- return t(lang, `${prefix} コミットメッセージ生成中...`, `${prefix} Generating messages...`);
172
+ return t(lang, "footer.generateMessage", { prefix });
173
173
  case "commit":
174
- return t(lang, `${prefix} コミット実行中...`, `${prefix} Committing...`);
174
+ return t(lang, "footer.commit", { prefix });
175
175
  }
176
176
  }
177
177
  /** Singleton instance */
@@ -1 +1 @@
1
- {"version":3,"file":"footer-manager.js","sourceRoot":"","sources":["../../src/utils/footer-manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"footer-manager.js","sourceRoot":"","sources":["../../src/utils/footer-manager.ts"],"names":[],"mappings":"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"}
@@ -1,13 +1,18 @@
1
1
  /**
2
- * Language utilities for i18n support
2
+ * Language utilities for i18n support.
3
+ *
4
+ * The `t()` function resolves a message key against the catalog in
5
+ * src/i18n/messages.ts and replaces `{placeholder}` params.
3
6
  */
7
+ import { type MessageKey } from "../i18n/messages.js";
4
8
  /**
5
- * Check if the language is Japanese
9
+ * Get a localized message by key, with optional placeholder interpolation.
10
+ *
11
+ * Placeholders use `{key}` syntax and are replaced in a single pass to
12
+ * prevent cross-contamination when param values themselves contain braces.
13
+ *
14
+ * Unsupported languages fall back to English.
15
+ * Unknown keys return the key itself as a last-resort fallback.
6
16
  */
7
- export declare function isJapanese(lang: string): boolean;
8
- /**
9
- * Get localized message based on language.
10
- * Usage: t(lang)`日本語|English` or t(lang, "日本語", "English")
11
- */
12
- export declare function t(lang: string, ja: string, en: string): string;
17
+ export declare function t(lang: string, key: MessageKey, params?: Record<string, string>): string;
13
18
  //# sourceMappingURL=lang.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"lang.d.ts","sourceRoot":"","sources":["../../src/utils/lang.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEhD;AAED;;;GAGG;AACH,wBAAgB,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAE9D"}
1
+ {"version":3,"file":"lang.d.ts","sourceRoot":"","sources":["../../src/utils/lang.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAY,KAAK,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEhE;;;;;;;;GAQG;AACH,wBAAgB,CAAC,CACf,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,UAAU,EACf,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC9B,MAAM,CAYR"}