@caupulican/pi-adaptative 0.80.100 → 0.80.103
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/CHANGELOG.md +201 -0
- package/dist/config.d.ts +11 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +17 -3
- package/dist/config.js.map +1 -1
- package/dist/core/agent-session.d.ts +72 -0
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +437 -46
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/autonomy/envelope-enforcement.d.ts +5 -0
- package/dist/core/autonomy/envelope-enforcement.d.ts.map +1 -1
- package/dist/core/autonomy/envelope-enforcement.js +28 -4
- package/dist/core/autonomy/envelope-enforcement.js.map +1 -1
- package/dist/core/autonomy/path-scope.d.ts.map +1 -1
- package/dist/core/autonomy/path-scope.js +33 -2
- package/dist/core/autonomy/path-scope.js.map +1 -1
- package/dist/core/bash-executor.d.ts.map +1 -1
- package/dist/core/bash-executor.js +15 -7
- package/dist/core/bash-executor.js.map +1 -1
- package/dist/core/context/brain-curator.d.ts +10 -0
- package/dist/core/context/brain-curator.d.ts.map +1 -1
- package/dist/core/context/brain-curator.js +19 -2
- package/dist/core/context/brain-curator.js.map +1 -1
- package/dist/core/context-gc.d.ts +8 -3
- package/dist/core/context-gc.d.ts.map +1 -1
- package/dist/core/context-gc.js +5 -0
- package/dist/core/context-gc.js.map +1 -1
- package/dist/core/delegation/worker-actions.d.ts +0 -10
- package/dist/core/delegation/worker-actions.d.ts.map +1 -1
- package/dist/core/delegation/worker-actions.js +5 -7
- package/dist/core/delegation/worker-actions.js.map +1 -1
- package/dist/core/delegation/worker-result.d.ts +6 -0
- package/dist/core/delegation/worker-result.d.ts.map +1 -1
- package/dist/core/delegation/worker-result.js +10 -4
- package/dist/core/delegation/worker-result.js.map +1 -1
- package/dist/core/delegation/worker-runner.d.ts +3 -0
- package/dist/core/delegation/worker-runner.d.ts.map +1 -1
- package/dist/core/delegation/worker-runner.js +6 -1
- package/dist/core/delegation/worker-runner.js.map +1 -1
- package/dist/core/doctor.d.ts +66 -0
- package/dist/core/doctor.d.ts.map +1 -0
- package/dist/core/doctor.js +144 -0
- package/dist/core/doctor.js.map +1 -0
- package/dist/core/learning/learning-audit.d.ts +13 -1
- package/dist/core/learning/learning-audit.d.ts.map +1 -1
- package/dist/core/learning/learning-audit.js +22 -1
- package/dist/core/learning/learning-audit.js.map +1 -1
- package/dist/core/learning/learning-gate.d.ts +3 -0
- package/dist/core/learning/learning-gate.d.ts.map +1 -1
- package/dist/core/learning/learning-gate.js +13 -4
- package/dist/core/learning/learning-gate.js.map +1 -1
- package/dist/core/models/local-registration.d.ts +2 -0
- package/dist/core/models/local-registration.d.ts.map +1 -1
- package/dist/core/models/local-registration.js +2 -1
- package/dist/core/models/local-registration.js.map +1 -1
- package/dist/core/models/local-runtime.d.ts +76 -2
- package/dist/core/models/local-runtime.d.ts.map +1 -1
- package/dist/core/models/local-runtime.js +233 -21
- package/dist/core/models/local-runtime.js.map +1 -1
- package/dist/core/profile-resource-selection.d.ts +15 -3
- package/dist/core/profile-resource-selection.d.ts.map +1 -1
- package/dist/core/profile-resource-selection.js +19 -9
- package/dist/core/profile-resource-selection.js.map +1 -1
- package/dist/core/resource-loader.d.ts +20 -0
- package/dist/core/resource-loader.d.ts.map +1 -1
- package/dist/core/resource-loader.js +42 -16
- package/dist/core/resource-loader.js.map +1 -1
- package/dist/core/settings-manager.d.ts +30 -0
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js +65 -3
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/core/skills.d.ts +14 -0
- package/dist/core/skills.d.ts.map +1 -1
- package/dist/core/skills.js +8 -0
- package/dist/core/skills.js.map +1 -1
- package/dist/core/tools/fff-search-backend.d.ts +34 -1
- package/dist/core/tools/fff-search-backend.d.ts.map +1 -1
- package/dist/core/tools/fff-search-backend.js +43 -4
- package/dist/core/tools/fff-search-backend.js.map +1 -1
- package/dist/core/tools/find.d.ts +16 -0
- package/dist/core/tools/find.d.ts.map +1 -1
- package/dist/core/tools/find.js +17 -3
- package/dist/core/tools/find.js.map +1 -1
- package/dist/core/tools/grep.d.ts +20 -0
- package/dist/core/tools/grep.d.ts.map +1 -1
- package/dist/core/tools/grep.js +15 -3
- package/dist/core/tools/grep.js.map +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +17 -0
- package/dist/main.js.map +1 -1
- package/dist/modes/interactive/components/fitness-role-selector.d.ts +6 -2
- package/dist/modes/interactive/components/fitness-role-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/fitness-role-selector.js +55 -45
- package/dist/modes/interactive/components/fitness-role-selector.js.map +1 -1
- package/dist/modes/interactive/components/model-suggestion-selector.d.ts +13 -0
- package/dist/modes/interactive/components/model-suggestion-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/model-suggestion-selector.js +40 -0
- package/dist/modes/interactive/components/model-suggestion-selector.js.map +1 -0
- package/dist/modes/interactive/components/profile-resource-editor.d.ts +3 -0
- package/dist/modes/interactive/components/profile-resource-editor.d.ts.map +1 -1
- package/dist/modes/interactive/components/profile-resource-editor.js +16 -2
- package/dist/modes/interactive/components/profile-resource-editor.js.map +1 -1
- package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/settings-selector.js +98 -0
- package/dist/modes/interactive/components/settings-selector.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts +8 -1
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +50 -12
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/utils/safe-write-stream.d.ts +8 -0
- package/dist/utils/safe-write-stream.d.ts.map +1 -1
- package/dist/utils/safe-write-stream.js +32 -0
- package/dist/utils/safe-write-stream.js.map +1 -1
- package/dist/utils/tools-manager.d.ts +92 -2
- package/dist/utils/tools-manager.d.ts.map +1 -1
- package/dist/utils/tools-manager.js +172 -32
- package/dist/utils/tools-manager.js.map +1 -1
- package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
- package/examples/extensions/custom-provider-anthropic/package.json +1 -1
- package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
- package/examples/extensions/sandbox/package-lock.json +2 -2
- package/examples/extensions/sandbox/package.json +1 -1
- package/examples/extensions/with-deps/package-lock.json +2 -2
- package/examples/extensions/with-deps/package.json +1 -1
- package/npm-shrinkwrap.json +12 -36
- package/package.json +4 -4
|
@@ -122,18 +122,19 @@ function sanitizeContextFileContent(filePath, content) {
|
|
|
122
122
|
console.error(chalk.yellow(`Warning: Blocked context file ${filePath}: ${findings.join(", ")}`));
|
|
123
123
|
return `[BLOCKED: ${filePath} contained potential prompt injection (${findings.join(", ")}). Content not loaded.]`;
|
|
124
124
|
}
|
|
125
|
-
|
|
125
|
+
/**
|
|
126
|
+
* RAW (unsanitized) context files from `dir`. Sanitization/threat-scanning is DEFERRED to the caller
|
|
127
|
+
* so a profile-DENIED file's content is never processed into the session — only its embedded
|
|
128
|
+
* `<resource-profile>` blocks are read for discovery (see {@link loadRawProjectContextFiles}).
|
|
129
|
+
*/
|
|
130
|
+
function loadRawContextFilesFromDir(dir) {
|
|
126
131
|
const candidates = ["AGENTS.md", "AGENTS.MD", "CLAUDE.md", "CLAUDE.MD", "GEMINI.md", "GEMINI.MD"];
|
|
127
132
|
const files = [];
|
|
128
133
|
for (const filename of candidates) {
|
|
129
134
|
const filePath = join(dir, filename);
|
|
130
135
|
if (existsSync(filePath)) {
|
|
131
136
|
try {
|
|
132
|
-
|
|
133
|
-
files.push({
|
|
134
|
-
path: filePath,
|
|
135
|
-
content: sanitizeContextFileContent(filePath, content),
|
|
136
|
-
});
|
|
137
|
+
files.push({ path: filePath, rawContent: readFileSync(filePath, "utf-8") });
|
|
137
138
|
}
|
|
138
139
|
catch (error) {
|
|
139
140
|
console.error(chalk.yellow(`Warning: Could not read ${filePath}: ${error}`));
|
|
@@ -142,12 +143,18 @@ function loadContextFilesFromDir(dir) {
|
|
|
142
143
|
}
|
|
143
144
|
return files;
|
|
144
145
|
}
|
|
145
|
-
|
|
146
|
+
/**
|
|
147
|
+
* Discover project/agent context files with their RAW content (profile blocks intact, no sanitize).
|
|
148
|
+
* The agents-kind profile filter can be DEFINED inside these same files (embedded `<resource-profile>`
|
|
149
|
+
* blocks), so callers must read raw to discover profiles before knowing which files the filter denies;
|
|
150
|
+
* sanitization/exposure is then applied only to files the filter allows.
|
|
151
|
+
*/
|
|
152
|
+
export function loadRawProjectContextFiles(options) {
|
|
146
153
|
const resolvedCwd = resolvePath(options.cwd);
|
|
147
154
|
const resolvedAgentDir = resolvePath(options.agentDir);
|
|
148
155
|
const contextFiles = [];
|
|
149
156
|
const seenPaths = new Set();
|
|
150
|
-
for (const globalContext of
|
|
157
|
+
for (const globalContext of loadRawContextFilesFromDir(resolvedAgentDir)) {
|
|
151
158
|
contextFiles.push(globalContext);
|
|
152
159
|
seenPaths.add(globalContext.path);
|
|
153
160
|
}
|
|
@@ -156,7 +163,7 @@ export function loadProjectContextFiles(options) {
|
|
|
156
163
|
let currentDir = resolvedCwd;
|
|
157
164
|
const root = resolve("/");
|
|
158
165
|
while (true) {
|
|
159
|
-
const contextFilesInDir =
|
|
166
|
+
const contextFilesInDir = loadRawContextFilesFromDir(currentDir).filter((contextFile) => !seenPaths.has(contextFile.path));
|
|
160
167
|
if (contextFilesInDir.length > 0) {
|
|
161
168
|
ancestorContextFiles.unshift(...contextFilesInDir);
|
|
162
169
|
for (const contextFile of contextFilesInDir) {
|
|
@@ -174,6 +181,18 @@ export function loadProjectContextFiles(options) {
|
|
|
174
181
|
}
|
|
175
182
|
return contextFiles;
|
|
176
183
|
}
|
|
184
|
+
/**
|
|
185
|
+
* Discover project/agent context files with SANITIZED content (profile blocks stripped, invisible/bidi
|
|
186
|
+
* chars removed, prompt-injection scanned). Every discovered file is sanitized — callers that must
|
|
187
|
+
* respect a profile's agents-kind denial should use {@link loadRawProjectContextFiles} and sanitize
|
|
188
|
+
* only the allowed subset instead, so denied content is never processed.
|
|
189
|
+
*/
|
|
190
|
+
export function loadProjectContextFiles(options) {
|
|
191
|
+
return loadRawProjectContextFiles(options).map((file) => ({
|
|
192
|
+
path: file.path,
|
|
193
|
+
content: sanitizeContextFileContent(file.path, file.rawContent),
|
|
194
|
+
}));
|
|
195
|
+
}
|
|
177
196
|
export class DefaultResourceLoader {
|
|
178
197
|
cwd;
|
|
179
198
|
agentDir;
|
|
@@ -798,19 +817,27 @@ export class DefaultResourceLoader {
|
|
|
798
817
|
this.themeDiagnostics.push({ type: "error", message: "Theme path does not exist", path: resolved });
|
|
799
818
|
}
|
|
800
819
|
}
|
|
820
|
+
// Read RAW content once. Sanitization/threat-scanning/exposure is deferred until AFTER the
|
|
821
|
+
// agents filter, so a profile-denied context file's content is never processed into the session.
|
|
801
822
|
const rawAgentsFiles = this.noContextFiles
|
|
802
823
|
? []
|
|
803
|
-
:
|
|
824
|
+
: loadRawProjectContextFiles({
|
|
804
825
|
cwd: this.cwd,
|
|
805
826
|
agentDir: this.agentDir,
|
|
806
827
|
projectTrusted: this.settingsManager.isProjectTrusted(),
|
|
807
828
|
});
|
|
808
829
|
const agentEmbeddedProfiles = {};
|
|
809
830
|
const activeProfileNames = this.settingsManager.getActiveResourceProfileNames();
|
|
831
|
+
// DISCOVERY read (metadata only, never loading): an embedded <resource-profile> block can live
|
|
832
|
+
// in ANY context file — including one the resulting agents filter then denies (AGENTS.md
|
|
833
|
+
// defining a profile that blocks GEMINI.md is the canonical bootstrap circularity). The filter
|
|
834
|
+
// cannot be known without first scanning every candidate file's raw content, so path-based
|
|
835
|
+
// pre-filtering is impossible for the agents kind. Only profile-block config is extracted here;
|
|
836
|
+
// a denied file's instructional content is never sanitized, threat-scanned, or exposed — it is
|
|
837
|
+
// dropped by the filter below — so the never-read-denied-CONTENT invariant holds.
|
|
810
838
|
for (const file of rawAgentsFiles) {
|
|
811
839
|
try {
|
|
812
|
-
const
|
|
813
|
-
const { profiles } = parseResourceProfileBlocks(rawContent, { profileNames: activeProfileNames });
|
|
840
|
+
const { profiles } = parseResourceProfileBlocks(file.rawContent, { profileNames: activeProfileNames });
|
|
814
841
|
Object.assign(agentEmbeddedProfiles, mergeResourceProfileMap(agentEmbeddedProfiles, profiles));
|
|
815
842
|
}
|
|
816
843
|
catch { }
|
|
@@ -827,10 +854,9 @@ export class DefaultResourceLoader {
|
|
|
827
854
|
const blocked = matchesResourceProfilePattern(file.path, agentProfileFilter.block, this.cwd);
|
|
828
855
|
return allowed && !blocked;
|
|
829
856
|
})
|
|
830
|
-
|
|
831
|
-
|
|
832
|
-
|
|
833
|
-
})),
|
|
857
|
+
// Sanitize (strip profile blocks + scan threats) ONLY for allowed files — the denied
|
|
858
|
+
// files' raw content was used solely for profile-block discovery above.
|
|
859
|
+
.map((file) => ({ path: file.path, content: sanitizeContextFileContent(file.path, file.rawContent) })),
|
|
834
860
|
};
|
|
835
861
|
// Strict UAC silently denying AGENTS.md/CLAUDE.md context is a sharp footgun for lean
|
|
836
862
|
// profiles — surface it loudly instead of letting instructions vanish without a trace.
|