@protolabsai/proto 0.26.1 → 0.26.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.
- package/bundled/coding-agent-standards/SKILL.md +1 -1
- package/bundled/verification-before-completion/SKILL.md +1 -1
- package/cli.js +154 -127
- package/locales/en.js +66 -65
- package/package.json +2 -2
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: coding-agent-standards
|
|
3
|
-
description: Implementation quality checklist
|
|
3
|
+
description: Implementation quality checklist — invoke only when explicitly asked to run a standards check or quality gate review
|
|
4
4
|
agentOnly: true
|
|
5
5
|
---
|
|
6
6
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: verification-before-completion
|
|
3
|
-
description:
|
|
3
|
+
description: Verification checklist for claims of correctness — invoke only when explicitly asked to verify or audit work before a PR or release
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Verification Before Completion
|
package/cli.js
CHANGED
|
@@ -35181,6 +35181,9 @@ var init_retry = __esm({
|
|
|
35181
35181
|
});
|
|
35182
35182
|
|
|
35183
35183
|
// packages/core/dist/src/utils/partUtils.js
|
|
35184
|
+
function isInternalPart(part) {
|
|
35185
|
+
return typeof part === "object" && part !== null && part.protoInternal === true;
|
|
35186
|
+
}
|
|
35184
35187
|
function partToString(value, options2) {
|
|
35185
35188
|
if (!value) {
|
|
35186
35189
|
return "";
|
|
@@ -35224,7 +35227,7 @@ function getResponseText(response) {
|
|
|
35224
35227
|
if (response.candidates && response.candidates.length > 0) {
|
|
35225
35228
|
const candidate = response.candidates[0];
|
|
35226
35229
|
if (candidate.content && candidate.content.parts && candidate.content.parts.length > 0) {
|
|
35227
|
-
return candidate.content.parts.filter((part) => part.text && !part.thought).map((part) => part.text).join("");
|
|
35230
|
+
return candidate.content.parts.filter((part) => part.text && !part.thought && !isInternalPart(part)).map((part) => part.text).join("");
|
|
35228
35231
|
}
|
|
35229
35232
|
}
|
|
35230
35233
|
return null;
|
|
@@ -35273,6 +35276,7 @@ var init_partUtils = __esm({
|
|
|
35273
35276
|
"packages/core/dist/src/utils/partUtils.js"() {
|
|
35274
35277
|
"use strict";
|
|
35275
35278
|
init_esbuild_shims();
|
|
35279
|
+
__name(isInternalPart, "isInternalPart");
|
|
35276
35280
|
__name(partToString, "partToString");
|
|
35277
35281
|
__name(getResponseText, "getResponseText");
|
|
35278
35282
|
__name(flatMapTextParts, "flatMapTextParts");
|
|
@@ -144459,8 +144463,8 @@ ${result.llmContent}`;
|
|
|
144459
144463
|
return "Limit must be a positive number";
|
|
144460
144464
|
}
|
|
144461
144465
|
const fileService = this.config.getFileService();
|
|
144462
|
-
if (fileService.
|
|
144463
|
-
return `File path '${filePath}' is ignored by .
|
|
144466
|
+
if (fileService.shouldProtoIgnoreFile(params.file_path)) {
|
|
144467
|
+
return `File path '${filePath}' is ignored by .protoignore pattern(s).`;
|
|
144464
144468
|
}
|
|
144465
144469
|
return null;
|
|
144466
144470
|
}
|
|
@@ -147854,7 +147858,8 @@ var init_converter = __esm({
|
|
|
147854
147858
|
continue;
|
|
147855
147859
|
if (toolCall.malformed) {
|
|
147856
147860
|
parts2.push({
|
|
147857
|
-
text: `[tool_call dropped: upstream streamed malformed JSON arguments for \`${toolCall.name}\`. Retry the call with properly-formed arguments.]
|
|
147861
|
+
text: `[tool_call dropped: upstream streamed malformed JSON arguments for \`${toolCall.name}\`. Retry the call with properly-formed arguments.]`,
|
|
147862
|
+
protoInternal: true
|
|
147858
147863
|
});
|
|
147859
147864
|
continue;
|
|
147860
147865
|
}
|
|
@@ -148789,7 +148794,7 @@ var init_tokenLimits = __esm({
|
|
|
148789
148794
|
"use strict";
|
|
148790
148795
|
init_esbuild_shims();
|
|
148791
148796
|
DEFAULT_TOKEN_LIMIT = 131072;
|
|
148792
|
-
DEFAULT_OUTPUT_TOKEN_LIMIT =
|
|
148797
|
+
DEFAULT_OUTPUT_TOKEN_LIMIT = 16e3;
|
|
148793
148798
|
LIMITS = {
|
|
148794
148799
|
"32k": 32768,
|
|
148795
148800
|
"64k": 65536,
|
|
@@ -171109,7 +171114,7 @@ __export(geminiContentGenerator_exports, {
|
|
|
171109
171114
|
createGeminiContentGenerator: () => createGeminiContentGenerator
|
|
171110
171115
|
});
|
|
171111
171116
|
function createGeminiContentGenerator(config2, gcConfig) {
|
|
171112
|
-
const version2 = "0.26.
|
|
171117
|
+
const version2 = "0.26.4";
|
|
171113
171118
|
const userAgent2 = config2.userAgent || `QwenCode/${version2} (${process.platform}; ${process.arch})`;
|
|
171114
171119
|
const baseHeaders = {
|
|
171115
171120
|
"User-Agent": userAgent2
|
|
@@ -172766,7 +172771,7 @@ You are proto, an interactive CLI agent built by protoLabs.studio, specializing
|
|
|
172766
172771
|
- **Style & Structure:** Mimic the style (formatting, naming), structure, framework choices, typing, and architectural patterns of existing code in the project.
|
|
172767
172772
|
- **Idiomatic Changes:** When editing, understand the local context (imports, functions/classes) to ensure your changes integrate naturally and idiomatically.
|
|
172768
172773
|
- **Comments:** Add code comments sparingly. Focus on *why* something is done, especially for complex logic, rather than *what* is done. Only add high-value comments if necessary for clarity or if requested by the user. Do not edit comments that are separate from the code you are changing. *NEVER* talk to the user or describe your changes through comments.
|
|
172769
|
-
- **Proactiveness:** Fulfill the user's request thoroughly.
|
|
172774
|
+
- **Proactiveness:** Fulfill the user's request thoroughly. Do not add tests, documentation, or other artifacts beyond the scope of the request unless explicitly asked.
|
|
172770
172775
|
- **Confirm Ambiguity/Expansion:** Do not take significant actions beyond the clear scope of the request without confirming with the user. If asked *how* to do something, explain first, don't just do it.
|
|
172771
172776
|
- **Explaining Changes:** After completing a code modification or file operation *do not* provide summaries unless asked.
|
|
172772
172777
|
- **Path Construction:** Before using any file system tool (e.g., ${ToolNames.READ_FILE}' or '${ToolNames.WRITE_FILE}'), you must construct the full absolute path for the file_path argument. Always combine the absolute path of the project's root directory with the file's path relative to the root. For example, if the project root is /path/to/project/ and the file is foo/bar/baz.txt, the final path you must use is /path/to/project/foo/bar/baz.txt. If the user provides a relative path, you must resolve it against the root directory to create an absolute path.
|
|
@@ -172836,7 +172841,7 @@ When requested to perform tasks like fixing bugs, adding features, refactoring,
|
|
|
172836
172841
|
- **Plan:** After understanding the user's request, create an initial plan based on your existing knowledge and any immediately obvious context. Use '${ToolNames.TASK_CREATE}' to capture this rough plan for complex or multi-step work. Don't wait for complete understanding - start with what you know.
|
|
172837
172842
|
- **Implement:** Begin implementing the plan while gathering additional context as needed. Use '${ToolNames.GREP}', '${ToolNames.GLOB}', and '${ToolNames.READ_FILE}' tools strategically when you encounter specific unknowns during implementation. Use the available tools (e.g., '${ToolNames.EDIT}', '${ToolNames.WRITE_FILE}' '${ToolNames.SHELL}' ...) to act on the plan, strictly adhering to the project's established conventions (detailed under 'Core Mandates').
|
|
172838
172843
|
- **Adapt:** As you discover new information or encounter obstacles, update your plan and tasks accordingly. Use ${ToolNames.TASK_UPDATE} to mark tasks as in_progress when starting and completed when finishing. Use ${ToolNames.TASK_CREATE} to add new tasks if the scope expands. Refine your approach based on what you learn.
|
|
172839
|
-
- **Verify (Tests):**
|
|
172844
|
+
- **Verify (Tests):** Only run tests if the user asks, or if a task.yaml / verification script is specified for the task.
|
|
172840
172845
|
- **Verify (Match the verifier):** When a task specifies a test file, task.yaml, or verification script, read it before verifying your own output. Your implementation must satisfy the *exact* tool or function the verifier uses \u2014 not just produce plausible-looking output using a different library or algorithm. A self-check that passes with the wrong tool is not a passing check.
|
|
172841
172846
|
- **Verify (Standards):** VERY IMPORTANT: After making code changes, execute the project-specific build, linting and type-checking commands (e.g., 'tsc', 'npm run lint', 'ruff check .') that you have identified for this project (or obtained from the user). This ensures code quality and adherence to standards. If unsure about these commands, you can ask the user if they'd like you to run them and if so how to.
|
|
172842
172847
|
|
|
@@ -173735,7 +173740,7 @@ function getThoughtText(response) {
|
|
|
173735
173740
|
if (response.candidates && response.candidates.length > 0) {
|
|
173736
173741
|
const candidate = response.candidates[0];
|
|
173737
173742
|
if (candidate.content && candidate.content.parts && candidate.content.parts.length > 0) {
|
|
173738
|
-
return candidate.content.parts.filter((part) => part.thought).map((part) => part.text ?? "").join("");
|
|
173743
|
+
return candidate.content.parts.filter((part) => part.thought && !isInternalPart(part)).map((part) => part.text ?? "").join("");
|
|
173739
173744
|
}
|
|
173740
173745
|
}
|
|
173741
173746
|
return null;
|
|
@@ -173745,6 +173750,7 @@ var init_thoughtUtils = __esm({
|
|
|
173745
173750
|
"packages/core/dist/src/utils/thoughtUtils.js"() {
|
|
173746
173751
|
"use strict";
|
|
173747
173752
|
init_esbuild_shims();
|
|
173753
|
+
init_partUtils();
|
|
173748
173754
|
START_DELIMITER = "**";
|
|
173749
173755
|
END_DELIMITER = "**";
|
|
173750
173756
|
__name(parseThought, "parseThought");
|
|
@@ -189505,11 +189511,11 @@ var init_constants4 = __esm({
|
|
|
189505
189511
|
init_esbuild_shims();
|
|
189506
189512
|
DEFAULT_MEMORY_FILE_FILTERING_OPTIONS = {
|
|
189507
189513
|
respectGitIgnore: false,
|
|
189508
|
-
|
|
189514
|
+
respectProtoIgnore: true
|
|
189509
189515
|
};
|
|
189510
189516
|
DEFAULT_FILE_FILTERING_OPTIONS = {
|
|
189511
189517
|
respectGitIgnore: true,
|
|
189512
|
-
|
|
189518
|
+
respectProtoIgnore: true
|
|
189513
189519
|
};
|
|
189514
189520
|
}
|
|
189515
189521
|
});
|
|
@@ -189566,7 +189572,7 @@ async function readFullStructure(rootPath, options2) {
|
|
|
189566
189572
|
const fileName = entry.name;
|
|
189567
189573
|
const filePath = path29.join(currentPath, fileName);
|
|
189568
189574
|
if (options2.fileService) {
|
|
189569
|
-
const shouldIgnore = options2.fileFilteringOptions.respectGitIgnore && options2.fileService.shouldGitIgnoreFile(filePath) || options2.fileFilteringOptions.
|
|
189575
|
+
const shouldIgnore = options2.fileFilteringOptions.respectGitIgnore && options2.fileService.shouldGitIgnoreFile(filePath) || options2.fileFilteringOptions.respectProtoIgnore && options2.fileService.shouldProtoIgnoreFile(filePath);
|
|
189570
189576
|
if (shouldIgnore) {
|
|
189571
189577
|
continue;
|
|
189572
189578
|
}
|
|
@@ -189590,7 +189596,7 @@ async function readFullStructure(rootPath, options2) {
|
|
|
189590
189596
|
const subFolderPath = path29.join(currentPath, subFolderName);
|
|
189591
189597
|
let isIgnored = false;
|
|
189592
189598
|
if (options2.fileService) {
|
|
189593
|
-
isIgnored = options2.fileFilteringOptions.respectGitIgnore && options2.fileService.shouldGitIgnoreFile(subFolderPath) || options2.fileFilteringOptions.
|
|
189599
|
+
isIgnored = options2.fileFilteringOptions.respectGitIgnore && options2.fileService.shouldGitIgnoreFile(subFolderPath) || options2.fileFilteringOptions.respectProtoIgnore && options2.fileService.shouldProtoIgnoreFile(subFolderPath);
|
|
189594
189600
|
}
|
|
189595
189601
|
if (options2.ignoredFolders.has(subFolderName) || isIgnored) {
|
|
189596
189602
|
const ignoredSubFolder = {
|
|
@@ -199629,18 +199635,18 @@ var init_gitIgnoreParser = __esm({
|
|
|
199629
199635
|
}
|
|
199630
199636
|
});
|
|
199631
199637
|
|
|
199632
|
-
// packages/core/dist/src/utils/
|
|
199638
|
+
// packages/core/dist/src/utils/protoIgnoreParser.js
|
|
199633
199639
|
import * as fs32 from "node:fs";
|
|
199634
199640
|
import * as path35 from "node:path";
|
|
199635
|
-
var import_ignore2,
|
|
199636
|
-
var
|
|
199637
|
-
"packages/core/dist/src/utils/
|
|
199641
|
+
var import_ignore2, ProtoIgnoreParser;
|
|
199642
|
+
var init_protoIgnoreParser = __esm({
|
|
199643
|
+
"packages/core/dist/src/utils/protoIgnoreParser.js"() {
|
|
199638
199644
|
"use strict";
|
|
199639
199645
|
init_esbuild_shims();
|
|
199640
199646
|
import_ignore2 = __toESM(require_ignore(), 1);
|
|
199641
|
-
|
|
199647
|
+
ProtoIgnoreParser = class {
|
|
199642
199648
|
static {
|
|
199643
|
-
__name(this, "
|
|
199649
|
+
__name(this, "ProtoIgnoreParser");
|
|
199644
199650
|
}
|
|
199645
199651
|
projectRoot;
|
|
199646
199652
|
patterns = [];
|
|
@@ -199650,14 +199656,23 @@ var init_qwenIgnoreParser = __esm({
|
|
|
199650
199656
|
this.loadPatterns();
|
|
199651
199657
|
}
|
|
199652
199658
|
loadPatterns() {
|
|
199653
|
-
const
|
|
199654
|
-
|
|
199655
|
-
|
|
199656
|
-
|
|
199657
|
-
|
|
199659
|
+
const sources = [".claudeignore", ".protoignore"];
|
|
199660
|
+
const merged = [];
|
|
199661
|
+
for (const filename of sources) {
|
|
199662
|
+
const patternsFilePath = path35.join(this.projectRoot, filename);
|
|
199663
|
+
let content;
|
|
199664
|
+
try {
|
|
199665
|
+
content = fs32.readFileSync(patternsFilePath, "utf-8");
|
|
199666
|
+
} catch (_error) {
|
|
199667
|
+
continue;
|
|
199668
|
+
}
|
|
199669
|
+
const lines = (content ?? "").split("\n").map((p2) => p2.trim()).filter((p2) => p2 !== "" && !p2.startsWith("#"));
|
|
199670
|
+
merged.push(...lines);
|
|
199671
|
+
}
|
|
199672
|
+
if (merged.length === 0) {
|
|
199658
199673
|
return;
|
|
199659
199674
|
}
|
|
199660
|
-
this.patterns =
|
|
199675
|
+
this.patterns = merged;
|
|
199661
199676
|
this.ig.add(this.patterns);
|
|
199662
199677
|
}
|
|
199663
199678
|
isIgnored(filePath) {
|
|
@@ -199696,34 +199711,34 @@ var init_fileDiscoveryService = __esm({
|
|
|
199696
199711
|
"use strict";
|
|
199697
199712
|
init_esbuild_shims();
|
|
199698
199713
|
init_gitIgnoreParser();
|
|
199699
|
-
|
|
199714
|
+
init_protoIgnoreParser();
|
|
199700
199715
|
init_gitUtils();
|
|
199701
199716
|
FileDiscoveryService = class {
|
|
199702
199717
|
static {
|
|
199703
199718
|
__name(this, "FileDiscoveryService");
|
|
199704
199719
|
}
|
|
199705
199720
|
gitIgnoreFilter = null;
|
|
199706
|
-
|
|
199721
|
+
protoIgnoreFilter = null;
|
|
199707
199722
|
projectRoot;
|
|
199708
199723
|
constructor(projectRoot) {
|
|
199709
199724
|
this.projectRoot = path36.resolve(projectRoot);
|
|
199710
199725
|
if (isGitRepository(this.projectRoot)) {
|
|
199711
199726
|
this.gitIgnoreFilter = new GitIgnoreParser(this.projectRoot);
|
|
199712
199727
|
}
|
|
199713
|
-
this.
|
|
199728
|
+
this.protoIgnoreFilter = new ProtoIgnoreParser(this.projectRoot);
|
|
199714
199729
|
}
|
|
199715
199730
|
/**
|
|
199716
199731
|
* Filters a list of file paths based on git ignore rules
|
|
199717
199732
|
*/
|
|
199718
199733
|
filterFiles(filePaths, options2 = {
|
|
199719
199734
|
respectGitIgnore: true,
|
|
199720
|
-
|
|
199735
|
+
respectProtoIgnore: true
|
|
199721
199736
|
}) {
|
|
199722
199737
|
return filePaths.filter((filePath) => {
|
|
199723
199738
|
if (options2.respectGitIgnore && this.shouldGitIgnoreFile(filePath)) {
|
|
199724
199739
|
return false;
|
|
199725
199740
|
}
|
|
199726
|
-
if (options2.
|
|
199741
|
+
if (options2.respectProtoIgnore && this.shouldProtoIgnoreFile(filePath)) {
|
|
199727
199742
|
return false;
|
|
199728
199743
|
}
|
|
199729
199744
|
return true;
|
|
@@ -199735,18 +199750,18 @@ var init_fileDiscoveryService = __esm({
|
|
|
199735
199750
|
*/
|
|
199736
199751
|
filterFilesWithReport(filePaths, opts = {
|
|
199737
199752
|
respectGitIgnore: true,
|
|
199738
|
-
|
|
199753
|
+
respectProtoIgnore: true
|
|
199739
199754
|
}) {
|
|
199740
199755
|
const filteredPaths = [];
|
|
199741
199756
|
let gitIgnoredCount = 0;
|
|
199742
|
-
let
|
|
199757
|
+
let protoIgnoredCount = 0;
|
|
199743
199758
|
for (const filePath of filePaths) {
|
|
199744
199759
|
if (opts.respectGitIgnore && this.shouldGitIgnoreFile(filePath)) {
|
|
199745
199760
|
gitIgnoredCount++;
|
|
199746
199761
|
continue;
|
|
199747
199762
|
}
|
|
199748
|
-
if (opts.
|
|
199749
|
-
|
|
199763
|
+
if (opts.respectProtoIgnore && this.shouldProtoIgnoreFile(filePath)) {
|
|
199764
|
+
protoIgnoredCount++;
|
|
199750
199765
|
continue;
|
|
199751
199766
|
}
|
|
199752
199767
|
filteredPaths.push(filePath);
|
|
@@ -199754,7 +199769,7 @@ var init_fileDiscoveryService = __esm({
|
|
|
199754
199769
|
return {
|
|
199755
199770
|
filteredPaths,
|
|
199756
199771
|
gitIgnoredCount,
|
|
199757
|
-
|
|
199772
|
+
protoIgnoredCount
|
|
199758
199773
|
};
|
|
199759
199774
|
}
|
|
199760
199775
|
/**
|
|
@@ -199767,11 +199782,11 @@ var init_fileDiscoveryService = __esm({
|
|
|
199767
199782
|
return false;
|
|
199768
199783
|
}
|
|
199769
199784
|
/**
|
|
199770
|
-
* Checks if a single file should be
|
|
199785
|
+
* Checks if a single file should be proto-ignored
|
|
199771
199786
|
*/
|
|
199772
|
-
|
|
199773
|
-
if (this.
|
|
199774
|
-
return this.
|
|
199787
|
+
shouldProtoIgnoreFile(filePath) {
|
|
199788
|
+
if (this.protoIgnoreFilter) {
|
|
199789
|
+
return this.protoIgnoreFilter.isIgnored(filePath);
|
|
199775
199790
|
}
|
|
199776
199791
|
return false;
|
|
199777
199792
|
}
|
|
@@ -199779,20 +199794,20 @@ var init_fileDiscoveryService = __esm({
|
|
|
199779
199794
|
* Unified method to check if a file should be ignored based on filtering options
|
|
199780
199795
|
*/
|
|
199781
199796
|
shouldIgnoreFile(filePath, options2 = {}) {
|
|
199782
|
-
const { respectGitIgnore = true,
|
|
199797
|
+
const { respectGitIgnore = true, respectProtoIgnore = true } = options2;
|
|
199783
199798
|
if (respectGitIgnore && this.shouldGitIgnoreFile(filePath)) {
|
|
199784
199799
|
return true;
|
|
199785
199800
|
}
|
|
199786
|
-
if (
|
|
199801
|
+
if (respectProtoIgnore && this.shouldProtoIgnoreFile(filePath)) {
|
|
199787
199802
|
return true;
|
|
199788
199803
|
}
|
|
199789
199804
|
return false;
|
|
199790
199805
|
}
|
|
199791
199806
|
/**
|
|
199792
|
-
* Returns loaded patterns from .
|
|
199807
|
+
* Returns loaded patterns from .protoignore
|
|
199793
199808
|
*/
|
|
199794
|
-
|
|
199795
|
-
return this.
|
|
199809
|
+
getProtoIgnorePatterns() {
|
|
199810
|
+
return this.protoIgnoreFilter?.getPatterns() ?? [];
|
|
199796
199811
|
}
|
|
199797
199812
|
};
|
|
199798
199813
|
}
|
|
@@ -232721,7 +232736,7 @@ ${fileListDescription}`;
|
|
|
232721
232736
|
const options2 = this.config.getFileFilteringOptions?.();
|
|
232722
232737
|
return {
|
|
232723
232738
|
respectGitIgnore: options2?.respectGitIgnore ?? DEFAULT_FILE_FILTERING_OPTIONS.respectGitIgnore,
|
|
232724
|
-
|
|
232739
|
+
respectProtoIgnore: options2?.respectProtoIgnore ?? DEFAULT_FILE_FILTERING_OPTIONS.respectProtoIgnore
|
|
232725
232740
|
};
|
|
232726
232741
|
}
|
|
232727
232742
|
};
|
|
@@ -233317,9 +233332,9 @@ var init_ls = __esm({
|
|
|
233317
233332
|
}
|
|
233318
233333
|
const relativePaths = files.map((file2) => path48.relative(this.config.getTargetDir(), path48.join(this.params.path, file2)));
|
|
233319
233334
|
const fileDiscovery = this.config.getFileService();
|
|
233320
|
-
const { filteredPaths, gitIgnoredCount,
|
|
233335
|
+
const { filteredPaths, gitIgnoredCount, protoIgnoredCount } = fileDiscovery.filterFilesWithReport(relativePaths, {
|
|
233321
233336
|
respectGitIgnore: this.params.file_filtering_options?.respect_git_ignore ?? this.config.getFileFilteringOptions().respectGitIgnore ?? DEFAULT_FILE_FILTERING_OPTIONS.respectGitIgnore,
|
|
233322
|
-
|
|
233337
|
+
respectProtoIgnore: this.params.file_filtering_options?.respect_qwen_ignore ?? this.config.getFileFilteringOptions().respectProtoIgnore ?? DEFAULT_FILE_FILTERING_OPTIONS.respectProtoIgnore
|
|
233323
233338
|
});
|
|
233324
233339
|
const entries = [];
|
|
233325
233340
|
for (const relativePath of filteredPaths) {
|
|
@@ -233367,8 +233382,8 @@ ${directoryContent}`;
|
|
|
233367
233382
|
if (gitIgnoredCount > 0) {
|
|
233368
233383
|
ignoredMessages.push(`${gitIgnoredCount} git-ignored`);
|
|
233369
233384
|
}
|
|
233370
|
-
if (
|
|
233371
|
-
ignoredMessages.push(`${
|
|
233385
|
+
if (protoIgnoredCount > 0) {
|
|
233386
|
+
ignoredMessages.push(`${protoIgnoredCount} proto-ignored`);
|
|
233372
233387
|
}
|
|
233373
233388
|
if (ignoredMessages.length > 0) {
|
|
233374
233389
|
resultMessage += `
|
|
@@ -233413,7 +233428,7 @@ ${directoryContent}`;
|
|
|
233413
233428
|
type: "array"
|
|
233414
233429
|
},
|
|
233415
233430
|
file_filtering_options: {
|
|
233416
|
-
description: "Optional: Whether to respect ignore patterns from .gitignore or .
|
|
233431
|
+
description: "Optional: Whether to respect ignore patterns from .gitignore or .protoignore",
|
|
233417
233432
|
type: "object",
|
|
233418
233433
|
properties: {
|
|
233419
233434
|
respect_git_ignore: {
|
|
@@ -233421,7 +233436,7 @@ ${directoryContent}`;
|
|
|
233421
233436
|
type: "boolean"
|
|
233422
233437
|
},
|
|
233423
233438
|
respect_qwen_ignore: {
|
|
233424
|
-
description: "Optional: Whether to respect .
|
|
233439
|
+
description: "Optional: Whether to respect .protoignore patterns when listing files. Defaults to true.",
|
|
233425
233440
|
type: "boolean"
|
|
233426
233441
|
}
|
|
233427
233442
|
}
|
|
@@ -233777,14 +233792,14 @@ var init_ripGrep = __esm({
|
|
|
233777
233792
|
if (!filteringOptions.respectGitIgnore) {
|
|
233778
233793
|
rgArgs.push("--no-ignore-vcs");
|
|
233779
233794
|
}
|
|
233780
|
-
if (filteringOptions.
|
|
233795
|
+
if (filteringOptions.respectProtoIgnore) {
|
|
233781
233796
|
const seenIgnoreFiles = /* @__PURE__ */ new Set();
|
|
233782
233797
|
for (const searchPath of paths) {
|
|
233783
233798
|
const dir = fs42.existsSync(searchPath) && fs42.statSync(searchPath).isDirectory() ? searchPath : path50.dirname(searchPath);
|
|
233784
|
-
const
|
|
233785
|
-
if (!seenIgnoreFiles.has(
|
|
233786
|
-
rgArgs.push("--ignore-file",
|
|
233787
|
-
seenIgnoreFiles.add(
|
|
233799
|
+
const protoIgnorePath = path50.join(dir, ".protoignore");
|
|
233800
|
+
if (!seenIgnoreFiles.has(protoIgnorePath) && fs42.existsSync(protoIgnorePath)) {
|
|
233801
|
+
rgArgs.push("--ignore-file", protoIgnorePath);
|
|
233802
|
+
seenIgnoreFiles.add(protoIgnorePath);
|
|
233788
233803
|
}
|
|
233789
233804
|
}
|
|
233790
233805
|
}
|
|
@@ -233803,7 +233818,7 @@ var init_ripGrep = __esm({
|
|
|
233803
233818
|
const options2 = this.config.getFileFilteringOptions?.();
|
|
233804
233819
|
return {
|
|
233805
233820
|
respectGitIgnore: options2?.respectGitIgnore ?? DEFAULT_FILE_FILTERING_OPTIONS.respectGitIgnore,
|
|
233806
|
-
|
|
233821
|
+
respectProtoIgnore: options2?.respectProtoIgnore ?? DEFAULT_FILE_FILTERING_OPTIONS.respectProtoIgnore
|
|
233807
233822
|
};
|
|
233808
233823
|
}
|
|
233809
233824
|
/**
|
|
@@ -275883,7 +275898,7 @@ var init_config3 = __esm({
|
|
|
275883
275898
|
this.outputLanguageFilePath = params.outputLanguageFilePath;
|
|
275884
275899
|
this.fileFiltering = {
|
|
275885
275900
|
respectGitIgnore: params.fileFiltering?.respectGitIgnore ?? true,
|
|
275886
|
-
|
|
275901
|
+
respectProtoIgnore: params.fileFiltering?.respectProtoIgnore ?? true,
|
|
275887
275902
|
enableRecursiveFileSearch: params.fileFiltering?.enableRecursiveFileSearch ?? true,
|
|
275888
275903
|
enableFuzzySearch: params.fileFiltering?.enableFuzzySearch ?? true
|
|
275889
275904
|
};
|
|
@@ -276631,13 +276646,13 @@ var init_config3 = __esm({
|
|
|
276631
276646
|
getFileFilteringRespectGitIgnore() {
|
|
276632
276647
|
return this.fileFiltering.respectGitIgnore;
|
|
276633
276648
|
}
|
|
276634
|
-
|
|
276635
|
-
return this.fileFiltering.
|
|
276649
|
+
getFileFilteringRespectProtoIgnore() {
|
|
276650
|
+
return this.fileFiltering.respectProtoIgnore;
|
|
276636
276651
|
}
|
|
276637
276652
|
getFileFilteringOptions() {
|
|
276638
276653
|
return {
|
|
276639
276654
|
respectGitIgnore: this.fileFiltering.respectGitIgnore,
|
|
276640
|
-
|
|
276655
|
+
respectProtoIgnore: this.fileFiltering.respectProtoIgnore
|
|
276641
276656
|
};
|
|
276642
276657
|
}
|
|
276643
276658
|
/**
|
|
@@ -286370,9 +286385,9 @@ function loadIgnoreRules(options2) {
|
|
|
286370
286385
|
}
|
|
286371
286386
|
}
|
|
286372
286387
|
if (options2.useQwenignore) {
|
|
286373
|
-
const
|
|
286374
|
-
if (fs87.existsSync(
|
|
286375
|
-
ignorer.add(fs87.readFileSync(
|
|
286388
|
+
const protoignorePath = path97.join(options2.projectRoot, ".protoignore");
|
|
286389
|
+
if (fs87.existsSync(protoignorePath)) {
|
|
286390
|
+
ignorer.add(fs87.readFileSync(protoignorePath, "utf8"));
|
|
286376
286391
|
}
|
|
286377
286392
|
}
|
|
286378
286393
|
const ignoreDirs = [".git", ...options2.ignoreDirs];
|
|
@@ -288671,7 +288686,7 @@ async function readPathFromWorkspace(pathStr, config2) {
|
|
|
288671
288686
|
const relativeFiles = files.map((p2) => path100.relative(config2.getTargetDir(), p2));
|
|
288672
288687
|
const filteredFiles = fileService.filterFiles(relativeFiles, {
|
|
288673
288688
|
respectGitIgnore: true,
|
|
288674
|
-
|
|
288689
|
+
respectProtoIgnore: true
|
|
288675
288690
|
});
|
|
288676
288691
|
const finalFiles = filteredFiles.map((p2) => path100.resolve(config2.getTargetDir(), p2));
|
|
288677
288692
|
for (const filePath of finalFiles) {
|
|
@@ -288688,7 +288703,7 @@ async function readPathFromWorkspace(pathStr, config2) {
|
|
|
288688
288703
|
const relativePath = path100.relative(config2.getTargetDir(), absolutePath);
|
|
288689
288704
|
const filtered = fileService.filterFiles([relativePath], {
|
|
288690
288705
|
respectGitIgnore: true,
|
|
288691
|
-
|
|
288706
|
+
respectProtoIgnore: true
|
|
288692
288707
|
});
|
|
288693
288708
|
if (filtered.length === 0) {
|
|
288694
288709
|
return [];
|
|
@@ -289864,6 +289879,7 @@ __export(dist_exports, {
|
|
|
289864
289879
|
isExtractionInProgress: () => isExtractionInProgress,
|
|
289865
289880
|
isGenericQuotaExceededError: () => isGenericQuotaExceededError,
|
|
289866
289881
|
isGitRepository: () => isGitRepository,
|
|
289882
|
+
isInternalPart: () => isInternalPart,
|
|
289867
289883
|
isInvalidArgumentError: () => isInvalidArgumentError,
|
|
289868
289884
|
isNodeError: () => isNodeError,
|
|
289869
289885
|
isPathWithinRoot: () => isPathWithinRoot,
|
|
@@ -328820,7 +328836,7 @@ var init_en3 = __esm({
|
|
|
328820
328836
|
// ============================================================================
|
|
328821
328837
|
// Commands - General
|
|
328822
328838
|
// ============================================================================
|
|
328823
|
-
"Analyzes the project and creates a tailored
|
|
328839
|
+
"Analyzes the project and creates a tailored PROTO.md file.": "Analyzes the project and creates a tailored PROTO.md file.",
|
|
328824
328840
|
"List available proto tools. Usage: /tools [desc]": "List available proto tools. Usage: /tools [desc]",
|
|
328825
328841
|
"List available skills.": "List available skills.",
|
|
328826
328842
|
"Available proto CLI tools:": "Available proto CLI tools:",
|
|
@@ -328894,8 +328910,8 @@ var init_en3 = __esm({
|
|
|
328894
328910
|
// ============================================================================
|
|
328895
328911
|
// Agents - Creation Wizard
|
|
328896
328912
|
// ============================================================================
|
|
328897
|
-
"Project Level (.
|
|
328898
|
-
"User Level (~/.
|
|
328913
|
+
"Project Level (.proto/agents/)": "Project Level (.proto/agents/)",
|
|
328914
|
+
"User Level (~/.proto/agents/)": "User Level (~/.proto/agents/)",
|
|
328899
328915
|
"\u2705 Subagent Created Successfully!": "\u2705 Subagent Created Successfully!",
|
|
328900
328916
|
'Subagent "{{name}}" has been saved to {{level}} level.': 'Subagent "{{name}}" has been saved to {{level}} level.',
|
|
328901
328917
|
"Name: ": "Name: ",
|
|
@@ -329041,7 +329057,7 @@ var init_en3 = __esm({
|
|
|
329041
329057
|
"Custom Witty Phrases": "Custom Witty Phrases",
|
|
329042
329058
|
"Show Welcome Back Dialog": "Show Welcome Back Dialog",
|
|
329043
329059
|
"Enable User Feedback": "Enable User Feedback",
|
|
329044
|
-
"How is
|
|
329060
|
+
"How is Proto doing this session? (optional)": "How is Proto doing this session? (optional)",
|
|
329045
329061
|
Bad: "Bad",
|
|
329046
329062
|
Fine: "Fine",
|
|
329047
329063
|
Good: "Good",
|
|
@@ -329063,7 +329079,7 @@ var init_en3 = __esm({
|
|
|
329063
329079
|
"Memory Discovery Max Dirs": "Memory Discovery Max Dirs",
|
|
329064
329080
|
"Load Memory From Include Directories": "Load Memory From Include Directories",
|
|
329065
329081
|
"Respect .gitignore": "Respect .gitignore",
|
|
329066
|
-
"Respect .
|
|
329082
|
+
"Respect .protoignore": "Respect .protoignore",
|
|
329067
329083
|
"Enable Recursive File Search": "Enable Recursive File Search",
|
|
329068
329084
|
"Disable Fuzzy Search": "Disable Fuzzy Search",
|
|
329069
329085
|
"Interactive Shell (PTY)": "Interactive Shell (PTY)",
|
|
@@ -329132,7 +329148,7 @@ var init_en3 = __esm({
|
|
|
329132
329148
|
local: "local",
|
|
329133
329149
|
remote: "remote",
|
|
329134
329150
|
"This extension will add the following commands: {{commands}}.": "This extension will add the following commands: {{commands}}.",
|
|
329135
|
-
"This extension will append info to your
|
|
329151
|
+
"This extension will append info to your PROTO.md context using {{fileName}}": "This extension will append info to your PROTO.md context using {{fileName}}",
|
|
329136
329152
|
"This extension will exclude the following core tools: {{tools}}": "This extension will exclude the following core tools: {{tools}}",
|
|
329137
329153
|
"This extension will install the following skills:": "This extension will install the following skills:",
|
|
329138
329154
|
"This extension will install the following subagents:": "This extension will install the following subagents:",
|
|
@@ -329255,7 +329271,7 @@ var init_en3 = __esm({
|
|
|
329255
329271
|
"Exit codes:": "Exit codes:",
|
|
329256
329272
|
"Configured hooks:": "Configured hooks:",
|
|
329257
329273
|
"No hooks configured for this event.": "No hooks configured for this event.",
|
|
329258
|
-
"To add hooks, edit settings.json directly or ask
|
|
329274
|
+
"To add hooks, edit settings.json directly or ask Proto.": "To add hooks, edit settings.json directly or ask Proto.",
|
|
329259
329275
|
"Enter to select \xB7 Esc to go back": "Enter to select \xB7 Esc to go back",
|
|
329260
329276
|
// Hooks - Config Detail Step
|
|
329261
329277
|
"Hook details": "Hook details",
|
|
@@ -329263,7 +329279,7 @@ var init_en3 = __esm({
|
|
|
329263
329279
|
"Extension:": "Extension:",
|
|
329264
329280
|
"Desc:": "Desc:",
|
|
329265
329281
|
"No hook config selected": "No hook config selected",
|
|
329266
|
-
"To modify or remove this hook, edit settings.json directly or ask
|
|
329282
|
+
"To modify or remove this hook, edit settings.json directly or ask Proto to help.": "To modify or remove this hook, edit settings.json directly or ask Proto to help.",
|
|
329267
329283
|
// Hooks - Disabled Step
|
|
329268
329284
|
"Hook Configuration - Disabled": "Hook Configuration - Disabled",
|
|
329269
329285
|
"All hooks are currently disabled. You have {{count}} that are not running.": "All hooks are currently disabled. You have {{count}} that are not running.",
|
|
@@ -329273,7 +329289,7 @@ var init_en3 = __esm({
|
|
|
329273
329289
|
"No hook commands will execute": "No hook commands will execute",
|
|
329274
329290
|
"StatusLine will not be displayed": "StatusLine will not be displayed",
|
|
329275
329291
|
"Tool operations will proceed without hook validation": "Tool operations will proceed without hook validation",
|
|
329276
|
-
'To re-enable hooks, remove "disableAllHooks" from settings.json or ask
|
|
329292
|
+
'To re-enable hooks, remove "disableAllHooks" from settings.json or ask Proto Code.': 'To re-enable hooks, remove "disableAllHooks" from settings.json or ask Proto Code.',
|
|
329277
329293
|
// Hooks - Source
|
|
329278
329294
|
Project: "Project",
|
|
329279
329295
|
User: "User",
|
|
@@ -329319,7 +329335,7 @@ var init_en3 = __esm({
|
|
|
329319
329335
|
"show stderr to model immediately": "show stderr to model immediately",
|
|
329320
329336
|
"show stderr to user only but continue with tool call": "show stderr to user only but continue with tool call",
|
|
329321
329337
|
"block processing, erase original prompt, and show stderr to user only": "block processing, erase original prompt, and show stderr to user only",
|
|
329322
|
-
"stdout shown to
|
|
329338
|
+
"stdout shown to Proto": "stdout shown to Proto",
|
|
329323
329339
|
"show stderr to user only (blocking errors ignored)": "show stderr to user only (blocking errors ignored)",
|
|
329324
329340
|
"command completes successfully": "command completes successfully",
|
|
329325
329341
|
"stdout shown to subagent": "stdout shown to subagent",
|
|
@@ -329499,7 +329515,7 @@ var init_en3 = __esm({
|
|
|
329499
329515
|
server: "server",
|
|
329500
329516
|
servers: "servers",
|
|
329501
329517
|
"Add MCP servers to your settings to get started.": "Add MCP servers to your settings to get started.",
|
|
329502
|
-
"Run
|
|
329518
|
+
"Run proto --debug to see error logs": "Run proto --debug to see error logs",
|
|
329503
329519
|
// MCP OAuth Authentication
|
|
329504
329520
|
"OAuth Authentication": "OAuth Authentication",
|
|
329505
329521
|
"Press Enter to start authentication, Esc to go back": "Press Enter to start authentication, Esc to go back",
|
|
@@ -329567,7 +329583,7 @@ var init_en3 = __esm({
|
|
|
329567
329583
|
// ============================================================================
|
|
329568
329584
|
// Commands - Summary
|
|
329569
329585
|
// ============================================================================
|
|
329570
|
-
"Generate a project summary and save it to .
|
|
329586
|
+
"Generate a project summary and save it to .proto/PROJECT_SUMMARY.md": "Generate a project summary and save it to .proto/PROJECT_SUMMARY.md",
|
|
329571
329587
|
"No chat client available to generate summary.": "No chat client available to generate summary.",
|
|
329572
329588
|
"Already generating summary, wait for previous request to complete": "Already generating summary, wait for previous request to complete",
|
|
329573
329589
|
"No conversation found to summarize.": "No conversation found to summarize.",
|
|
@@ -329608,7 +329624,7 @@ var init_en3 = __esm({
|
|
|
329608
329624
|
"Please provide at least one path to add.": "Please provide at least one path to add.",
|
|
329609
329625
|
"The /directory add command is not supported in restrictive sandbox profiles. Please use --include-directories when starting the session instead.": "The /directory add command is not supported in restrictive sandbox profiles. Please use --include-directories when starting the session instead.",
|
|
329610
329626
|
"Error adding '{{path}}': {{error}}": "Error adding '{{path}}': {{error}}",
|
|
329611
|
-
"Successfully added
|
|
329627
|
+
"Successfully added PROTO.md files from the following directories if there are:\n- {{directories}}": "Successfully added PROTO.md files from the following directories if there are:\n- {{directories}}",
|
|
329612
329628
|
"Error refreshing memory: {{error}}": "Error refreshing memory: {{error}}",
|
|
329613
329629
|
"Successfully added directories:\n- {{directories}}": "Successfully added directories:\n- {{directories}}",
|
|
329614
329630
|
"Current workspace directories:\n{{directories}}": "Current workspace directories:\n{{directories}}",
|
|
@@ -329680,8 +329696,8 @@ var init_en3 = __esm({
|
|
|
329680
329696
|
"OpenAI API key is required to use OpenAI authentication.": "OpenAI API key is required to use OpenAI authentication.",
|
|
329681
329697
|
"You must select an auth method to proceed. Press Ctrl+C again to exit.": "You must select an auth method to proceed. Press Ctrl+C again to exit.",
|
|
329682
329698
|
"Terms of Services and Privacy Notice": "Terms of Services and Privacy Notice",
|
|
329683
|
-
"
|
|
329684
|
-
"Free \xB7 Up to 1,000 requests/day \xB7
|
|
329699
|
+
"Proto OAuth": "Proto OAuth",
|
|
329700
|
+
"Free \xB7 Up to 1,000 requests/day \xB7 Proto latest models": "Free \xB7 Up to 1,000 requests/day \xB7 Proto latest models",
|
|
329685
329701
|
"Login with QwenChat account to use daily free quota.": "Login with QwenChat account to use daily free quota.",
|
|
329686
329702
|
"Paid \xB7 Up to 6,000 requests/5 hrs \xB7 All Alibaba Cloud Coding Plan Models": "Paid \xB7 Up to 6,000 requests/5 hrs \xB7 All Alibaba Cloud Coding Plan Models",
|
|
329687
329703
|
"Alibaba Cloud Coding Plan": "Alibaba Cloud Coding Plan",
|
|
@@ -329691,20 +329707,20 @@ var init_en3 = __esm({
|
|
|
329691
329707
|
OpenAI: "OpenAI",
|
|
329692
329708
|
"Failed to login. Message: {{message}}": "Failed to login. Message: {{message}}",
|
|
329693
329709
|
"Authentication is enforced to be {{enforcedType}}, but you are currently using {{currentType}}.": "Authentication is enforced to be {{enforcedType}}, but you are currently using {{currentType}}.",
|
|
329694
|
-
"
|
|
329695
|
-
"
|
|
329696
|
-
"
|
|
329710
|
+
"Proto OAuth authentication timed out. Please try again.": "Proto OAuth authentication timed out. Please try again.",
|
|
329711
|
+
"Proto OAuth authentication cancelled.": "Proto OAuth authentication cancelled.",
|
|
329712
|
+
"Proto OAuth Authentication": "Proto OAuth Authentication",
|
|
329697
329713
|
"Please visit this URL to authorize:": "Please visit this URL to authorize:",
|
|
329698
329714
|
"Or scan the QR code below:": "Or scan the QR code below:",
|
|
329699
329715
|
"Waiting for authorization": "Waiting for authorization",
|
|
329700
329716
|
"Time remaining:": "Time remaining:",
|
|
329701
329717
|
"(Press ESC or CTRL+C to cancel)": "(Press ESC or CTRL+C to cancel)",
|
|
329702
|
-
"
|
|
329718
|
+
"Proto OAuth Authentication Timeout": "Proto OAuth Authentication Timeout",
|
|
329703
329719
|
"OAuth token expired (over {{seconds}} seconds). Please select authentication method again.": "OAuth token expired (over {{seconds}} seconds). Please select authentication method again.",
|
|
329704
329720
|
"Press any key to return to authentication type selection.": "Press any key to return to authentication type selection.",
|
|
329705
|
-
"Waiting for
|
|
329706
|
-
"Note: Your existing API key in settings.json will not be cleared when using
|
|
329707
|
-
"Note: Your existing API key will not be cleared when using
|
|
329721
|
+
"Waiting for Proto OAuth authentication...": "Waiting for Proto OAuth authentication...",
|
|
329722
|
+
"Note: Your existing API key in settings.json will not be cleared when using Proto OAuth. You can switch back to OpenAI authentication later if needed.": "Note: Your existing API key in settings.json will not be cleared when using Proto OAuth. You can switch back to OpenAI authentication later if needed.",
|
|
329723
|
+
"Note: Your existing API key will not be cleared when using Proto OAuth.": "Note: Your existing API key will not be cleared when using Proto OAuth.",
|
|
329708
329724
|
"Authentication timed out. Please try again.": "Authentication timed out. Please try again.",
|
|
329709
329725
|
"Waiting for auth... (Press ESC or CTRL+C to cancel)": "Waiting for auth... (Press ESC or CTRL+C to cancel)",
|
|
329710
329726
|
"Missing API key for OpenAI-compatible auth. Set settings.security.auth.apiKey, or set the {{envKeyHint}} environment variable.": "Missing API key for OpenAI-compatible auth. Set settings.security.auth.apiKey, or set the {{envKeyHint}} environment variable.",
|
|
@@ -329748,8 +329764,8 @@ var init_en3 = __esm({
|
|
|
329748
329764
|
none: "none",
|
|
329749
329765
|
unknown: "unknown",
|
|
329750
329766
|
"Failed to switch model to '{{modelId}}'.\n\n{{error}}": "Failed to switch model to '{{modelId}}'.\n\n{{error}}",
|
|
329751
|
-
"
|
|
329752
|
-
"The latest
|
|
329767
|
+
"Proto 3.5 Plus \u2014 efficient hybrid model with leading coding performance": "Proto 3.5 Plus \u2014 efficient hybrid model with leading coding performance",
|
|
329768
|
+
"The latest Proto Vision model from Alibaba Cloud ModelStudio (version: qwen3-vl-plus-2025-09-23)": "The latest Proto Vision model from Alibaba Cloud ModelStudio (version: qwen3-vl-plus-2025-09-23)",
|
|
329753
329769
|
// ============================================================================
|
|
329754
329770
|
// Dialogs - Permissions
|
|
329755
329771
|
// ============================================================================
|
|
@@ -329769,11 +329785,11 @@ var init_en3 = __esm({
|
|
|
329769
329785
|
"From project settings": "From project settings",
|
|
329770
329786
|
"From session": "From session",
|
|
329771
329787
|
"Project settings (local)": "Project settings (local)",
|
|
329772
|
-
"Saved in .
|
|
329788
|
+
"Saved in .proto/settings.local.json": "Saved in .proto/settings.local.json",
|
|
329773
329789
|
"Project settings": "Project settings",
|
|
329774
|
-
"Checked in at .
|
|
329790
|
+
"Checked in at .proto/settings.json": "Checked in at .proto/settings.json",
|
|
329775
329791
|
"User settings": "User settings",
|
|
329776
|
-
"Saved in at ~/.
|
|
329792
|
+
"Saved in at ~/.proto/settings.json": "Saved in at ~/.proto/settings.json",
|
|
329777
329793
|
"Add a new rule\u2026": "Add a new rule\u2026",
|
|
329778
329794
|
"Add {{type}} permission rule": "Add {{type}} permission rule",
|
|
329779
329795
|
"Permission rules are a tool name, optionally followed by a specifier in parentheses.": "Permission rules are a tool name, optionally followed by a specifier in parentheses.",
|
|
@@ -329867,7 +329883,7 @@ var init_en3 = __esm({
|
|
|
329867
329883
|
"Switch auth type quickly with /auth.": "Switch auth type quickly with /auth.",
|
|
329868
329884
|
"You can run any shell commands from proto using ! (e.g. !ls).": "You can run any shell commands from proto using ! (e.g. !ls).",
|
|
329869
329885
|
"Type / to open the command popup; Tab autocompletes slash commands and saved prompts.": "Type / to open the command popup; Tab autocompletes slash commands and saved prompts.",
|
|
329870
|
-
"You can resume a previous conversation by running
|
|
329886
|
+
"You can resume a previous conversation by running proto --continue or proto --resume.": "You can resume a previous conversation by running proto --continue or proto --resume.",
|
|
329871
329887
|
"You can switch permission mode quickly with Shift+Tab or /approval-mode.": "You can switch permission mode quickly with Shift+Tab or /approval-mode.",
|
|
329872
329888
|
"You can switch permission mode quickly with Tab or /approval-mode.": "You can switch permission mode quickly with Tab or /approval-mode.",
|
|
329873
329889
|
"Try /insight to generate personalized insights from your chat history.": "Try /insight to generate personalized insights from your chat history.",
|
|
@@ -330190,16 +330206,16 @@ var init_en3 = __esm({
|
|
|
330190
330206
|
// ============================================================================
|
|
330191
330207
|
// Commands - Auth
|
|
330192
330208
|
// ============================================================================
|
|
330193
|
-
"Configure
|
|
330194
|
-
"Authenticate using
|
|
330209
|
+
"Configure Proto authentication information with Proto-OAuth or Alibaba Cloud Coding Plan": "Configure Proto authentication information with Proto-OAuth or Alibaba Cloud Coding Plan",
|
|
330210
|
+
"Authenticate using Proto OAuth": "Authenticate using Proto OAuth",
|
|
330195
330211
|
"Authenticate using Alibaba Cloud Coding Plan": "Authenticate using Alibaba Cloud Coding Plan",
|
|
330196
330212
|
"Region for Coding Plan (china/global)": "Region for Coding Plan (china/global)",
|
|
330197
330213
|
"API key for Coding Plan": "API key for Coding Plan",
|
|
330198
330214
|
"Show current authentication status": "Show current authentication status",
|
|
330199
330215
|
"Authentication completed successfully.": "Authentication completed successfully.",
|
|
330200
|
-
"Starting
|
|
330201
|
-
"Successfully authenticated with
|
|
330202
|
-
"Failed to authenticate with
|
|
330216
|
+
"Starting Proto OAuth authentication...": "Starting Proto OAuth authentication...",
|
|
330217
|
+
"Successfully authenticated with Proto OAuth.": "Successfully authenticated with Proto OAuth.",
|
|
330218
|
+
"Failed to authenticate with Proto OAuth: {{error}}": "Failed to authenticate with Proto OAuth: {{error}}",
|
|
330203
330219
|
"Processing Alibaba Cloud Coding Plan authentication...": "Processing Alibaba Cloud Coding Plan authentication...",
|
|
330204
330220
|
"Successfully authenticated with Alibaba Cloud Coding Plan.": "Successfully authenticated with Alibaba Cloud Coding Plan.",
|
|
330205
330221
|
"Failed to authenticate with Coding Plan: {{error}}": "Failed to authenticate with Coding Plan: {{error}}",
|
|
@@ -330213,14 +330229,14 @@ var init_en3 = __esm({
|
|
|
330213
330229
|
"\n=== Authentication Status ===\n": "\n=== Authentication Status ===\n",
|
|
330214
330230
|
"\u26A0\uFE0F No authentication method configured.\n": "\u26A0\uFE0F No authentication method configured.\n",
|
|
330215
330231
|
"Run one of the following commands to get started:\n": "Run one of the following commands to get started:\n",
|
|
330216
|
-
"
|
|
330217
|
-
"
|
|
330232
|
+
" proto auth proto-oauth - Authenticate with Proto OAuth (free tier)": " proto auth proto-oauth - Authenticate with Proto OAuth (free tier)",
|
|
330233
|
+
" proto auth coding-plan - Authenticate with Alibaba Cloud Coding Plan\n": " proto auth coding-plan - Authenticate with Alibaba Cloud Coding Plan\n",
|
|
330218
330234
|
"Or simply run:": "Or simply run:",
|
|
330219
|
-
"
|
|
330220
|
-
"\u2713 Authentication Method:
|
|
330235
|
+
" proto auth - Interactive authentication setup\n": " proto auth - Interactive authentication setup\n",
|
|
330236
|
+
"\u2713 Authentication Method: Proto OAuth": "\u2713 Authentication Method: Proto OAuth",
|
|
330221
330237
|
" Type: Free tier": " Type: Free tier",
|
|
330222
330238
|
" Limit: Up to 1,000 requests/day": " Limit: Up to 1,000 requests/day",
|
|
330223
|
-
" Models:
|
|
330239
|
+
" Models: Proto latest models\n": " Models: Proto latest models\n",
|
|
330224
330240
|
"\u2713 Authentication Method: Alibaba Cloud Coding Plan": "\u2713 Authentication Method: Alibaba Cloud Coding Plan",
|
|
330225
330241
|
"\u4E2D\u56FD (China) - \u963F\u91CC\u4E91\u767E\u70BC": "\u4E2D\u56FD (China) - \u963F\u91CC\u4E91\u767E\u70BC",
|
|
330226
330242
|
"Global - Alibaba Cloud": "Global - Alibaba Cloud",
|
|
@@ -330230,7 +330246,7 @@ var init_en3 = __esm({
|
|
|
330230
330246
|
" Status: API key configured\n": " Status: API key configured\n",
|
|
330231
330247
|
"\u26A0\uFE0F Authentication Method: Alibaba Cloud Coding Plan (Incomplete)": "\u26A0\uFE0F Authentication Method: Alibaba Cloud Coding Plan (Incomplete)",
|
|
330232
330248
|
" Issue: API key not found in environment or settings\n": " Issue: API key not found in environment or settings\n",
|
|
330233
|
-
" Run `
|
|
330249
|
+
" Run `proto auth coding-plan` to re-configure.\n": " Run `proto auth coding-plan` to re-configure.\n",
|
|
330234
330250
|
"\u2713 Authentication Method: {{type}}": "\u2713 Authentication Method: {{type}}",
|
|
330235
330251
|
" Status: Configured\n": " Status: Configured\n",
|
|
330236
330252
|
"Failed to check authentication status: {{error}}": "Failed to check authentication status: {{error}}",
|
|
@@ -405606,13 +405622,13 @@ var SETTINGS_SCHEMA = {
|
|
|
405606
405622
|
description: "Respect .gitignore files when searching",
|
|
405607
405623
|
showInDialog: true
|
|
405608
405624
|
},
|
|
405609
|
-
|
|
405625
|
+
respectProtoIgnore: {
|
|
405610
405626
|
type: "boolean",
|
|
405611
|
-
label: "Respect .
|
|
405627
|
+
label: "Respect .protoignore",
|
|
405612
405628
|
category: "Context",
|
|
405613
405629
|
requiresRestart: true,
|
|
405614
405630
|
default: true,
|
|
405615
|
-
description: "Respect .
|
|
405631
|
+
description: "Respect .protoignore files when searching",
|
|
405616
405632
|
showInDialog: true
|
|
405617
405633
|
},
|
|
405618
405634
|
enableRecursiveFileSearch: {
|
|
@@ -406839,7 +406855,7 @@ var SETTINGS_DIALOG_ORDER = [
|
|
|
406839
406855
|
"general.gitCoAuthor",
|
|
406840
406856
|
// File Filtering
|
|
406841
406857
|
"context.fileFiltering.respectGitIgnore",
|
|
406842
|
-
"context.fileFiltering.
|
|
406858
|
+
"context.fileFiltering.respectProtoIgnore",
|
|
406843
406859
|
// System Settings - rarely changed
|
|
406844
406860
|
"general.disableAutoUpdate",
|
|
406845
406861
|
// Privacy
|
|
@@ -416089,7 +416105,7 @@ __name(getPackageJson, "getPackageJson");
|
|
|
416089
416105
|
// packages/cli/src/utils/version.ts
|
|
416090
416106
|
async function getCliVersion() {
|
|
416091
416107
|
const pkgJson = await getPackageJson();
|
|
416092
|
-
return "0.26.
|
|
416108
|
+
return "0.26.4";
|
|
416093
416109
|
}
|
|
416094
416110
|
__name(getCliVersion, "getCliVersion");
|
|
416095
416111
|
|
|
@@ -423861,7 +423877,7 @@ var formatDuration = /* @__PURE__ */ __name((milliseconds) => {
|
|
|
423861
423877
|
|
|
423862
423878
|
// packages/cli/src/generated/git-commit.ts
|
|
423863
423879
|
init_esbuild_shims();
|
|
423864
|
-
var GIT_COMMIT_INFO = "
|
|
423880
|
+
var GIT_COMMIT_INFO = "a9eeb10aa";
|
|
423865
423881
|
|
|
423866
423882
|
// packages/cli/src/utils/systemInfo.ts
|
|
423867
423883
|
async function getNpmVersion() {
|
|
@@ -426122,6 +426138,7 @@ import { randomUUID as randomUUID7 } from "node:crypto";
|
|
|
426122
426138
|
|
|
426123
426139
|
// packages/cli/src/acp-integration/session/HistoryReplayer.ts
|
|
426124
426140
|
init_esbuild_shims();
|
|
426141
|
+
init_dist4();
|
|
426125
426142
|
|
|
426126
426143
|
// packages/cli/src/acp-integration/session/emitters/MessageEmitter.ts
|
|
426127
426144
|
init_esbuild_shims();
|
|
@@ -426623,6 +426640,7 @@ var HistoryReplayer = class {
|
|
|
426623
426640
|
async replayContent(content, role, timestamp) {
|
|
426624
426641
|
for (const part of content.parts ?? []) {
|
|
426625
426642
|
if ("text" in part && part.text) {
|
|
426643
|
+
if (isInternalPart(part)) continue;
|
|
426626
426644
|
const isThought = part.thought ?? false;
|
|
426627
426645
|
await this.messageEmitter.emitMessage(
|
|
426628
426646
|
part.text,
|
|
@@ -433039,7 +433057,7 @@ var AtFileProcessor = class {
|
|
|
433039
433057
|
try {
|
|
433040
433058
|
const fileContentParts = await readPathFromWorkspace(pathStr, config2);
|
|
433041
433059
|
if (fileContentParts.length === 0) {
|
|
433042
|
-
const uiMessage = `File '@{${pathStr}}' was ignored by .gitignore or .
|
|
433060
|
+
const uiMessage = `File '@{${pathStr}}' was ignored by .gitignore or .protoignore and was not included in the prompt.`;
|
|
433043
433061
|
context2.ui.addItem(
|
|
433044
433062
|
{ type: "info" /* INFO */, text: uiMessage },
|
|
433045
433063
|
Date.now()
|
|
@@ -434682,6 +434700,7 @@ function partsToContentBlock(parts2) {
|
|
|
434682
434700
|
const blocks = [];
|
|
434683
434701
|
let currentTextBlock = null;
|
|
434684
434702
|
for (const part of parts2) {
|
|
434703
|
+
if (isInternalPart(part)) continue;
|
|
434685
434704
|
let textContent2 = null;
|
|
434686
434705
|
if ("text" in part && typeof part.text === "string") {
|
|
434687
434706
|
textContent2 = part.text;
|
|
@@ -435114,7 +435133,7 @@ async function handleAtCommand({
|
|
|
435114
435133
|
const contentLabelsForDisplay = [];
|
|
435115
435134
|
const ignoredByReason = {
|
|
435116
435135
|
git: [],
|
|
435117
|
-
|
|
435136
|
+
proto: [],
|
|
435118
435137
|
both: []
|
|
435119
435138
|
};
|
|
435120
435139
|
for (const atPathPart of atPathCommandParts) {
|
|
@@ -435137,16 +435156,16 @@ async function handleAtCommand({
|
|
|
435137
435156
|
}
|
|
435138
435157
|
const gitIgnored = respectFileIgnore.respectGitIgnore && fileDiscovery.shouldIgnoreFile(pathName, {
|
|
435139
435158
|
respectGitIgnore: true,
|
|
435140
|
-
|
|
435159
|
+
respectProtoIgnore: false
|
|
435141
435160
|
});
|
|
435142
|
-
const
|
|
435161
|
+
const protoIgnored = respectFileIgnore.respectProtoIgnore && fileDiscovery.shouldIgnoreFile(pathName, {
|
|
435143
435162
|
respectGitIgnore: false,
|
|
435144
|
-
|
|
435163
|
+
respectProtoIgnore: true
|
|
435145
435164
|
});
|
|
435146
|
-
if (gitIgnored ||
|
|
435147
|
-
const reason = gitIgnored &&
|
|
435165
|
+
if (gitIgnored || protoIgnored) {
|
|
435166
|
+
const reason = gitIgnored && protoIgnored ? "both" : gitIgnored ? "git" : "proto";
|
|
435148
435167
|
ignoredByReason[reason].push(pathName);
|
|
435149
|
-
const reasonText = reason === "both" ? "ignored by both git and
|
|
435168
|
+
const reasonText = reason === "both" ? "ignored by both git and proto" : reason === "git" ? "git-ignored" : "proto-ignored";
|
|
435150
435169
|
onDebugMessage(`Path ${pathName} is ${reasonText} and will be skipped.`);
|
|
435151
435170
|
continue;
|
|
435152
435171
|
}
|
|
@@ -435211,14 +435230,14 @@ async function handleAtCommand({
|
|
|
435211
435230
|
}
|
|
435212
435231
|
}
|
|
435213
435232
|
initialQueryText = initialQueryText.trim();
|
|
435214
|
-
const totalIgnored = ignoredByReason["git"].length + ignoredByReason["
|
|
435233
|
+
const totalIgnored = ignoredByReason["git"].length + ignoredByReason["proto"].length + ignoredByReason["both"].length;
|
|
435215
435234
|
if (totalIgnored > 0) {
|
|
435216
435235
|
const messages = [];
|
|
435217
435236
|
if (ignoredByReason["git"].length) {
|
|
435218
435237
|
messages.push(`Git-ignored: ${ignoredByReason["git"].join(", ")}`);
|
|
435219
435238
|
}
|
|
435220
|
-
if (ignoredByReason["
|
|
435221
|
-
messages.push(`
|
|
435239
|
+
if (ignoredByReason["proto"].length) {
|
|
435240
|
+
messages.push(`Proto-ignored: ${ignoredByReason["proto"].join(", ")}`);
|
|
435222
435241
|
}
|
|
435223
435242
|
if (ignoredByReason["both"].length) {
|
|
435224
435243
|
messages.push(`Ignored by both: ${ignoredByReason["both"].join(", ")}`);
|
|
@@ -472835,7 +472854,7 @@ function useAtCompletion(props) {
|
|
|
472835
472854
|
projectRoot: cwd6,
|
|
472836
472855
|
ignoreDirs: [],
|
|
472837
472856
|
useGitignore: config2?.getFileFilteringOptions()?.respectGitIgnore ?? true,
|
|
472838
|
-
useQwenignore: config2?.getFileFilteringOptions()?.
|
|
472857
|
+
useQwenignore: config2?.getFileFilteringOptions()?.respectProtoIgnore ?? true,
|
|
472839
472858
|
cache: true,
|
|
472840
472859
|
cacheTtl: 30,
|
|
472841
472860
|
// 30 seconds
|
|
@@ -477349,12 +477368,14 @@ init_dist4();
|
|
|
477349
477368
|
|
|
477350
477369
|
// packages/cli/src/ui/utils/resumeHistoryUtils.ts
|
|
477351
477370
|
init_esbuild_shims();
|
|
477371
|
+
init_dist4();
|
|
477352
477372
|
import * as path135 from "node:path";
|
|
477353
477373
|
function extractTextFromParts(parts2) {
|
|
477354
477374
|
if (!parts2) return "";
|
|
477355
477375
|
const textParts = [];
|
|
477356
477376
|
for (const part of parts2) {
|
|
477357
477377
|
if ("text" in part && part.text) {
|
|
477378
|
+
if (isInternalPart(part)) continue;
|
|
477358
477379
|
if (!("thought" in part && part.thought)) {
|
|
477359
477380
|
textParts.push(part.text);
|
|
477360
477381
|
}
|
|
@@ -477368,6 +477389,7 @@ function extractThoughtTextFromParts(parts2) {
|
|
|
477368
477389
|
const thoughtParts = [];
|
|
477369
477390
|
for (const part of parts2) {
|
|
477370
477391
|
if ("text" in part && part.text && "thought" in part && part.thought) {
|
|
477392
|
+
if (isInternalPart(part)) continue;
|
|
477371
477393
|
thoughtParts.push(part.text);
|
|
477372
477394
|
}
|
|
477373
477395
|
}
|
|
@@ -482004,7 +482026,7 @@ import { basename as basename31 } from "node:path";
|
|
|
482004
482026
|
// packages/cli/src/utils/windowTitle.ts
|
|
482005
482027
|
init_esbuild_shims();
|
|
482006
482028
|
function computeWindowTitle(folderName) {
|
|
482007
|
-
const title = process.env["CLI_TITLE"] || `
|
|
482029
|
+
const title = process.env["CLI_TITLE"] || `protoCLI - ${folderName}`;
|
|
482008
482030
|
return title.replace(
|
|
482009
482031
|
// eslint-disable-next-line no-control-regex
|
|
482010
482032
|
/[\x00-\x1F\x7F]/g,
|
|
@@ -490707,7 +490729,7 @@ var Session3 = class {
|
|
|
490707
490729
|
if (resp.type === StreamEventType.CHUNK && resp.value.candidates && resp.value.candidates.length > 0) {
|
|
490708
490730
|
const candidate = resp.value.candidates[0];
|
|
490709
490731
|
for (const part of candidate.content?.parts ?? []) {
|
|
490710
|
-
if (!part.text) {
|
|
490732
|
+
if (!part.text || isInternalPart(part)) {
|
|
490711
490733
|
continue;
|
|
490712
490734
|
}
|
|
490713
490735
|
this.messageEmitter.emitMessage(
|
|
@@ -490849,7 +490871,7 @@ var Session3 = class {
|
|
|
490849
490871
|
if (resp.type === StreamEventType.CHUNK && resp.value.candidates && resp.value.candidates.length > 0) {
|
|
490850
490872
|
const candidate = resp.value.candidates[0];
|
|
490851
490873
|
for (const part of candidate.content?.parts ?? []) {
|
|
490852
|
-
if (!part.text) continue;
|
|
490874
|
+
if (!part.text || isInternalPart(part)) continue;
|
|
490853
490875
|
this.messageEmitter.emitMessage(
|
|
490854
490876
|
part.text,
|
|
490855
490877
|
"assistant",
|
|
@@ -491531,7 +491553,7 @@ var QwenAgent = class {
|
|
|
491531
491553
|
async initialize(args2) {
|
|
491532
491554
|
this.clientCapabilities = args2.clientCapabilities;
|
|
491533
491555
|
const authMethods = buildAuthMethods();
|
|
491534
|
-
const version2 = "0.26.
|
|
491556
|
+
const version2 = "0.26.4";
|
|
491535
491557
|
return {
|
|
491536
491558
|
protocolVersion: PROTOCOL_VERSION,
|
|
491537
491559
|
agentInfo: {
|
|
@@ -492454,6 +492476,11 @@ main().catch((error40) => {
|
|
|
492454
492476
|
*
|
|
492455
492477
|
* Exports for the prompt suggestion feature.
|
|
492456
492478
|
*/
|
|
492479
|
+
/**
|
|
492480
|
+
* @license
|
|
492481
|
+
* Copyright 2025 Proto
|
|
492482
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
492483
|
+
*/
|
|
492457
492484
|
/**
|
|
492458
492485
|
* @license
|
|
492459
492486
|
* Copyright 2026 Google LLC
|
package/locales/en.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @license
|
|
3
|
-
* Copyright 2025
|
|
3
|
+
* Copyright 2025 Proto
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
|
|
@@ -115,8 +115,8 @@ export default {
|
|
|
115
115
|
// ============================================================================
|
|
116
116
|
// Commands - General
|
|
117
117
|
// ============================================================================
|
|
118
|
-
'Analyzes the project and creates a tailored
|
|
119
|
-
'Analyzes the project and creates a tailored
|
|
118
|
+
'Analyzes the project and creates a tailored PROTO.md file.':
|
|
119
|
+
'Analyzes the project and creates a tailored PROTO.md file.',
|
|
120
120
|
'List available proto tools. Usage: /tools [desc]':
|
|
121
121
|
'List available proto tools. Usage: /tools [desc]',
|
|
122
122
|
'List available skills.': 'List available skills.',
|
|
@@ -211,8 +211,8 @@ export default {
|
|
|
211
211
|
// ============================================================================
|
|
212
212
|
// Agents - Creation Wizard
|
|
213
213
|
// ============================================================================
|
|
214
|
-
'Project Level (.
|
|
215
|
-
'User Level (~/.
|
|
214
|
+
'Project Level (.proto/agents/)': 'Project Level (.proto/agents/)',
|
|
215
|
+
'User Level (~/.proto/agents/)': 'User Level (~/.proto/agents/)',
|
|
216
216
|
'✅ Subagent Created Successfully!': '✅ Subagent Created Successfully!',
|
|
217
217
|
'Subagent "{{name}}" has been saved to {{level}} level.':
|
|
218
218
|
'Subagent "{{name}}" has been saved to {{level}} level.',
|
|
@@ -390,8 +390,8 @@ export default {
|
|
|
390
390
|
'Custom Witty Phrases': 'Custom Witty Phrases',
|
|
391
391
|
'Show Welcome Back Dialog': 'Show Welcome Back Dialog',
|
|
392
392
|
'Enable User Feedback': 'Enable User Feedback',
|
|
393
|
-
'How is
|
|
394
|
-
'How is
|
|
393
|
+
'How is Proto doing this session? (optional)':
|
|
394
|
+
'How is Proto doing this session? (optional)',
|
|
395
395
|
Bad: 'Bad',
|
|
396
396
|
Fine: 'Fine',
|
|
397
397
|
Good: 'Good',
|
|
@@ -414,7 +414,7 @@ export default {
|
|
|
414
414
|
'Load Memory From Include Directories':
|
|
415
415
|
'Load Memory From Include Directories',
|
|
416
416
|
'Respect .gitignore': 'Respect .gitignore',
|
|
417
|
-
'Respect .
|
|
417
|
+
'Respect .protoignore': 'Respect .protoignore',
|
|
418
418
|
'Enable Recursive File Search': 'Enable Recursive File Search',
|
|
419
419
|
'Disable Fuzzy Search': 'Disable Fuzzy Search',
|
|
420
420
|
'Interactive Shell (PTY)': 'Interactive Shell (PTY)',
|
|
@@ -508,8 +508,8 @@ export default {
|
|
|
508
508
|
remote: 'remote',
|
|
509
509
|
'This extension will add the following commands: {{commands}}.':
|
|
510
510
|
'This extension will add the following commands: {{commands}}.',
|
|
511
|
-
'This extension will append info to your
|
|
512
|
-
'This extension will append info to your
|
|
511
|
+
'This extension will append info to your PROTO.md context using {{fileName}}':
|
|
512
|
+
'This extension will append info to your PROTO.md context using {{fileName}}',
|
|
513
513
|
'This extension will exclude the following core tools: {{tools}}':
|
|
514
514
|
'This extension will exclude the following core tools: {{tools}}',
|
|
515
515
|
'This extension will install the following skills:':
|
|
@@ -685,8 +685,8 @@ export default {
|
|
|
685
685
|
'Exit codes:': 'Exit codes:',
|
|
686
686
|
'Configured hooks:': 'Configured hooks:',
|
|
687
687
|
'No hooks configured for this event.': 'No hooks configured for this event.',
|
|
688
|
-
'To add hooks, edit settings.json directly or ask
|
|
689
|
-
'To add hooks, edit settings.json directly or ask
|
|
688
|
+
'To add hooks, edit settings.json directly or ask Proto.':
|
|
689
|
+
'To add hooks, edit settings.json directly or ask Proto.',
|
|
690
690
|
'Enter to select · Esc to go back': 'Enter to select · Esc to go back',
|
|
691
691
|
// Hooks - Config Detail Step
|
|
692
692
|
'Hook details': 'Hook details',
|
|
@@ -694,8 +694,8 @@ export default {
|
|
|
694
694
|
'Extension:': 'Extension:',
|
|
695
695
|
'Desc:': 'Desc:',
|
|
696
696
|
'No hook config selected': 'No hook config selected',
|
|
697
|
-
'To modify or remove this hook, edit settings.json directly or ask
|
|
698
|
-
'To modify or remove this hook, edit settings.json directly or ask
|
|
697
|
+
'To modify or remove this hook, edit settings.json directly or ask Proto to help.':
|
|
698
|
+
'To modify or remove this hook, edit settings.json directly or ask Proto to help.',
|
|
699
699
|
// Hooks - Disabled Step
|
|
700
700
|
'Hook Configuration - Disabled': 'Hook Configuration - Disabled',
|
|
701
701
|
'All hooks are currently disabled. You have {{count}} that are not running.':
|
|
@@ -707,8 +707,8 @@ export default {
|
|
|
707
707
|
'StatusLine will not be displayed': 'StatusLine will not be displayed',
|
|
708
708
|
'Tool operations will proceed without hook validation':
|
|
709
709
|
'Tool operations will proceed without hook validation',
|
|
710
|
-
'To re-enable hooks, remove "disableAllHooks" from settings.json or ask
|
|
711
|
-
'To re-enable hooks, remove "disableAllHooks" from settings.json or ask
|
|
710
|
+
'To re-enable hooks, remove "disableAllHooks" from settings.json or ask Proto Code.':
|
|
711
|
+
'To re-enable hooks, remove "disableAllHooks" from settings.json or ask Proto Code.',
|
|
712
712
|
// Hooks - Source
|
|
713
713
|
Project: 'Project',
|
|
714
714
|
User: 'User',
|
|
@@ -773,7 +773,7 @@ export default {
|
|
|
773
773
|
'show stderr to user only but continue with tool call',
|
|
774
774
|
'block processing, erase original prompt, and show stderr to user only':
|
|
775
775
|
'block processing, erase original prompt, and show stderr to user only',
|
|
776
|
-
'stdout shown to
|
|
776
|
+
'stdout shown to Proto': 'stdout shown to Proto',
|
|
777
777
|
'show stderr to user only (blocking errors ignored)':
|
|
778
778
|
'show stderr to user only (blocking errors ignored)',
|
|
779
779
|
'command completes successfully': 'command completes successfully',
|
|
@@ -1032,7 +1032,7 @@ export default {
|
|
|
1032
1032
|
servers: 'servers',
|
|
1033
1033
|
'Add MCP servers to your settings to get started.':
|
|
1034
1034
|
'Add MCP servers to your settings to get started.',
|
|
1035
|
-
'Run
|
|
1035
|
+
'Run proto --debug to see error logs': 'Run proto --debug to see error logs',
|
|
1036
1036
|
|
|
1037
1037
|
// MCP OAuth Authentication
|
|
1038
1038
|
'OAuth Authentication': 'OAuth Authentication',
|
|
@@ -1127,8 +1127,8 @@ export default {
|
|
|
1127
1127
|
// ============================================================================
|
|
1128
1128
|
// Commands - Summary
|
|
1129
1129
|
// ============================================================================
|
|
1130
|
-
'Generate a project summary and save it to .
|
|
1131
|
-
'Generate a project summary and save it to .
|
|
1130
|
+
'Generate a project summary and save it to .proto/PROJECT_SUMMARY.md':
|
|
1131
|
+
'Generate a project summary and save it to .proto/PROJECT_SUMMARY.md',
|
|
1132
1132
|
'No chat client available to generate summary.':
|
|
1133
1133
|
'No chat client available to generate summary.',
|
|
1134
1134
|
'Already generating summary, wait for previous request to complete':
|
|
@@ -1190,8 +1190,8 @@ export default {
|
|
|
1190
1190
|
'The /directory add command is not supported in restrictive sandbox profiles. Please use --include-directories when starting the session instead.':
|
|
1191
1191
|
'The /directory add command is not supported in restrictive sandbox profiles. Please use --include-directories when starting the session instead.',
|
|
1192
1192
|
"Error adding '{{path}}': {{error}}": "Error adding '{{path}}': {{error}}",
|
|
1193
|
-
'Successfully added
|
|
1194
|
-
'Successfully added
|
|
1193
|
+
'Successfully added PROTO.md files from the following directories if there are:\n- {{directories}}':
|
|
1194
|
+
'Successfully added PROTO.md files from the following directories if there are:\n- {{directories}}',
|
|
1195
1195
|
'Error refreshing memory: {{error}}': 'Error refreshing memory: {{error}}',
|
|
1196
1196
|
'Successfully added directories:\n- {{directories}}':
|
|
1197
1197
|
'Successfully added directories:\n- {{directories}}',
|
|
@@ -1288,9 +1288,9 @@ export default {
|
|
|
1288
1288
|
'You must select an auth method to proceed. Press Ctrl+C again to exit.',
|
|
1289
1289
|
'Terms of Services and Privacy Notice':
|
|
1290
1290
|
'Terms of Services and Privacy Notice',
|
|
1291
|
-
'
|
|
1292
|
-
'Free \u00B7 Up to 1,000 requests/day \u00B7
|
|
1293
|
-
'Free \u00B7 Up to 1,000 requests/day \u00B7
|
|
1291
|
+
'Proto OAuth': 'Proto OAuth',
|
|
1292
|
+
'Free \u00B7 Up to 1,000 requests/day \u00B7 Proto latest models':
|
|
1293
|
+
'Free \u00B7 Up to 1,000 requests/day \u00B7 Proto latest models',
|
|
1294
1294
|
'Login with QwenChat account to use daily free quota.':
|
|
1295
1295
|
'Login with QwenChat account to use daily free quota.',
|
|
1296
1296
|
'Paid \u00B7 Up to 6,000 requests/5 hrs \u00B7 All Alibaba Cloud Coding Plan Models':
|
|
@@ -1305,27 +1305,27 @@ export default {
|
|
|
1305
1305
|
'Failed to login. Message: {{message}}',
|
|
1306
1306
|
'Authentication is enforced to be {{enforcedType}}, but you are currently using {{currentType}}.':
|
|
1307
1307
|
'Authentication is enforced to be {{enforcedType}}, but you are currently using {{currentType}}.',
|
|
1308
|
-
'
|
|
1309
|
-
'
|
|
1310
|
-
'
|
|
1311
|
-
'
|
|
1312
|
-
'
|
|
1308
|
+
'Proto OAuth authentication timed out. Please try again.':
|
|
1309
|
+
'Proto OAuth authentication timed out. Please try again.',
|
|
1310
|
+
'Proto OAuth authentication cancelled.':
|
|
1311
|
+
'Proto OAuth authentication cancelled.',
|
|
1312
|
+
'Proto OAuth Authentication': 'Proto OAuth Authentication',
|
|
1313
1313
|
'Please visit this URL to authorize:': 'Please visit this URL to authorize:',
|
|
1314
1314
|
'Or scan the QR code below:': 'Or scan the QR code below:',
|
|
1315
1315
|
'Waiting for authorization': 'Waiting for authorization',
|
|
1316
1316
|
'Time remaining:': 'Time remaining:',
|
|
1317
1317
|
'(Press ESC or CTRL+C to cancel)': '(Press ESC or CTRL+C to cancel)',
|
|
1318
|
-
'
|
|
1318
|
+
'Proto OAuth Authentication Timeout': 'Proto OAuth Authentication Timeout',
|
|
1319
1319
|
'OAuth token expired (over {{seconds}} seconds). Please select authentication method again.':
|
|
1320
1320
|
'OAuth token expired (over {{seconds}} seconds). Please select authentication method again.',
|
|
1321
1321
|
'Press any key to return to authentication type selection.':
|
|
1322
1322
|
'Press any key to return to authentication type selection.',
|
|
1323
|
-
'Waiting for
|
|
1324
|
-
'Waiting for
|
|
1325
|
-
'Note: Your existing API key in settings.json will not be cleared when using
|
|
1326
|
-
'Note: Your existing API key in settings.json will not be cleared when using
|
|
1327
|
-
'Note: Your existing API key will not be cleared when using
|
|
1328
|
-
'Note: Your existing API key will not be cleared when using
|
|
1323
|
+
'Waiting for Proto OAuth authentication...':
|
|
1324
|
+
'Waiting for Proto OAuth authentication...',
|
|
1325
|
+
'Note: Your existing API key in settings.json will not be cleared when using Proto OAuth. You can switch back to OpenAI authentication later if needed.':
|
|
1326
|
+
'Note: Your existing API key in settings.json will not be cleared when using Proto OAuth. You can switch back to OpenAI authentication later if needed.',
|
|
1327
|
+
'Note: Your existing API key will not be cleared when using Proto OAuth.':
|
|
1328
|
+
'Note: Your existing API key will not be cleared when using Proto OAuth.',
|
|
1329
1329
|
'Authentication timed out. Please try again.':
|
|
1330
1330
|
'Authentication timed out. Please try again.',
|
|
1331
1331
|
'Waiting for auth... (Press ESC or CTRL+C to cancel)':
|
|
@@ -1386,10 +1386,10 @@ export default {
|
|
|
1386
1386
|
unknown: 'unknown',
|
|
1387
1387
|
"Failed to switch model to '{{modelId}}'.\n\n{{error}}":
|
|
1388
1388
|
"Failed to switch model to '{{modelId}}'.\n\n{{error}}",
|
|
1389
|
-
'
|
|
1390
|
-
'
|
|
1391
|
-
'The latest
|
|
1392
|
-
'The latest
|
|
1389
|
+
'Proto 3.5 Plus — efficient hybrid model with leading coding performance':
|
|
1390
|
+
'Proto 3.5 Plus — efficient hybrid model with leading coding performance',
|
|
1391
|
+
'The latest Proto Vision model from Alibaba Cloud ModelStudio (version: qwen3-vl-plus-2025-09-23)':
|
|
1392
|
+
'The latest Proto Vision model from Alibaba Cloud ModelStudio (version: qwen3-vl-plus-2025-09-23)',
|
|
1393
1393
|
|
|
1394
1394
|
// ============================================================================
|
|
1395
1395
|
// Dialogs - Permissions
|
|
@@ -1415,11 +1415,11 @@ export default {
|
|
|
1415
1415
|
'From project settings': 'From project settings',
|
|
1416
1416
|
'From session': 'From session',
|
|
1417
1417
|
'Project settings (local)': 'Project settings (local)',
|
|
1418
|
-
'Saved in .
|
|
1418
|
+
'Saved in .proto/settings.local.json': 'Saved in .proto/settings.local.json',
|
|
1419
1419
|
'Project settings': 'Project settings',
|
|
1420
|
-
'Checked in at .
|
|
1420
|
+
'Checked in at .proto/settings.json': 'Checked in at .proto/settings.json',
|
|
1421
1421
|
'User settings': 'User settings',
|
|
1422
|
-
'Saved in at ~/.
|
|
1422
|
+
'Saved in at ~/.proto/settings.json': 'Saved in at ~/.proto/settings.json',
|
|
1423
1423
|
'Add a new rule…': 'Add a new rule…',
|
|
1424
1424
|
'Add {{type}} permission rule': 'Add {{type}} permission rule',
|
|
1425
1425
|
'Permission rules are a tool name, optionally followed by a specifier in parentheses.':
|
|
@@ -1539,8 +1539,8 @@ export default {
|
|
|
1539
1539
|
'You can run any shell commands from proto using ! (e.g. !ls).',
|
|
1540
1540
|
'Type / to open the command popup; Tab autocompletes slash commands and saved prompts.':
|
|
1541
1541
|
'Type / to open the command popup; Tab autocompletes slash commands and saved prompts.',
|
|
1542
|
-
'You can resume a previous conversation by running
|
|
1543
|
-
'You can resume a previous conversation by running
|
|
1542
|
+
'You can resume a previous conversation by running proto --continue or proto --resume.':
|
|
1543
|
+
'You can resume a previous conversation by running proto --continue or proto --resume.',
|
|
1544
1544
|
'You can switch permission mode quickly with Shift+Tab or /approval-mode.':
|
|
1545
1545
|
'You can switch permission mode quickly with Shift+Tab or /approval-mode.',
|
|
1546
1546
|
'You can switch permission mode quickly with Tab or /approval-mode.':
|
|
@@ -1934,9 +1934,9 @@ export default {
|
|
|
1934
1934
|
// ============================================================================
|
|
1935
1935
|
// Commands - Auth
|
|
1936
1936
|
// ============================================================================
|
|
1937
|
-
'Configure
|
|
1938
|
-
'Configure
|
|
1939
|
-
'Authenticate using
|
|
1937
|
+
'Configure Proto authentication information with Proto-OAuth or Alibaba Cloud Coding Plan':
|
|
1938
|
+
'Configure Proto authentication information with Proto-OAuth or Alibaba Cloud Coding Plan',
|
|
1939
|
+
'Authenticate using Proto OAuth': 'Authenticate using Proto OAuth',
|
|
1940
1940
|
'Authenticate using Alibaba Cloud Coding Plan':
|
|
1941
1941
|
'Authenticate using Alibaba Cloud Coding Plan',
|
|
1942
1942
|
'Region for Coding Plan (china/global)':
|
|
@@ -1945,12 +1945,12 @@ export default {
|
|
|
1945
1945
|
'Show current authentication status': 'Show current authentication status',
|
|
1946
1946
|
'Authentication completed successfully.':
|
|
1947
1947
|
'Authentication completed successfully.',
|
|
1948
|
-
'Starting
|
|
1949
|
-
'Starting
|
|
1950
|
-
'Successfully authenticated with
|
|
1951
|
-
'Successfully authenticated with
|
|
1952
|
-
'Failed to authenticate with
|
|
1953
|
-
'Failed to authenticate with
|
|
1948
|
+
'Starting Proto OAuth authentication...':
|
|
1949
|
+
'Starting Proto OAuth authentication...',
|
|
1950
|
+
'Successfully authenticated with Proto OAuth.':
|
|
1951
|
+
'Successfully authenticated with Proto OAuth.',
|
|
1952
|
+
'Failed to authenticate with Proto OAuth: {{error}}':
|
|
1953
|
+
'Failed to authenticate with Proto OAuth: {{error}}',
|
|
1954
1954
|
'Processing Alibaba Cloud Coding Plan authentication...':
|
|
1955
1955
|
'Processing Alibaba Cloud Coding Plan authentication...',
|
|
1956
1956
|
'Successfully authenticated with Alibaba Cloud Coding Plan.':
|
|
@@ -1969,17 +1969,18 @@ export default {
|
|
|
1969
1969
|
'⚠️ No authentication method configured.\n',
|
|
1970
1970
|
'Run one of the following commands to get started:\n':
|
|
1971
1971
|
'Run one of the following commands to get started:\n',
|
|
1972
|
-
'
|
|
1973
|
-
'
|
|
1974
|
-
'
|
|
1975
|
-
'
|
|
1972
|
+
' proto auth proto-oauth - Authenticate with Proto OAuth (free tier)':
|
|
1973
|
+
' proto auth proto-oauth - Authenticate with Proto OAuth (free tier)',
|
|
1974
|
+
' proto auth coding-plan - Authenticate with Alibaba Cloud Coding Plan\n':
|
|
1975
|
+
' proto auth coding-plan - Authenticate with Alibaba Cloud Coding Plan\n',
|
|
1976
1976
|
'Or simply run:': 'Or simply run:',
|
|
1977
|
-
'
|
|
1978
|
-
'
|
|
1979
|
-
'✓ Authentication Method:
|
|
1977
|
+
' proto auth - Interactive authentication setup\n':
|
|
1978
|
+
' proto auth - Interactive authentication setup\n',
|
|
1979
|
+
'✓ Authentication Method: Proto OAuth':
|
|
1980
|
+
'✓ Authentication Method: Proto OAuth',
|
|
1980
1981
|
' Type: Free tier': ' Type: Free tier',
|
|
1981
1982
|
' Limit: Up to 1,000 requests/day': ' Limit: Up to 1,000 requests/day',
|
|
1982
|
-
' Models:
|
|
1983
|
+
' Models: Proto latest models\n': ' Models: Proto latest models\n',
|
|
1983
1984
|
'✓ Authentication Method: Alibaba Cloud Coding Plan':
|
|
1984
1985
|
'✓ Authentication Method: Alibaba Cloud Coding Plan',
|
|
1985
1986
|
'中国 (China) - 阿里云百炼': '中国 (China) - 阿里云百炼',
|
|
@@ -1992,8 +1993,8 @@ export default {
|
|
|
1992
1993
|
'⚠️ Authentication Method: Alibaba Cloud Coding Plan (Incomplete)',
|
|
1993
1994
|
' Issue: API key not found in environment or settings\n':
|
|
1994
1995
|
' Issue: API key not found in environment or settings\n',
|
|
1995
|
-
' Run `
|
|
1996
|
-
' Run `
|
|
1996
|
+
' Run `proto auth coding-plan` to re-configure.\n':
|
|
1997
|
+
' Run `proto auth coding-plan` to re-configure.\n',
|
|
1997
1998
|
'✓ Authentication Method: {{type}}': '✓ Authentication Method: {{type}}',
|
|
1998
1999
|
' Status: Configured\n': ' Status: Configured\n',
|
|
1999
2000
|
'Failed to check authentication status: {{error}}':
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@protolabsai/proto",
|
|
3
|
-
"version": "0.26.
|
|
3
|
+
"version": "0.26.4",
|
|
4
4
|
"description": "proto - AI-powered coding agent",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
"bundled"
|
|
22
22
|
],
|
|
23
23
|
"config": {
|
|
24
|
-
"sandboxImageUri": "ghcr.io/qwenlm/qwen-code:0.26.
|
|
24
|
+
"sandboxImageUri": "ghcr.io/qwenlm/qwen-code:0.26.4"
|
|
25
25
|
},
|
|
26
26
|
"dependencies": {},
|
|
27
27
|
"optionalDependencies": {
|