@lazyingart/agintiflow 0.20.214 → 0.20.215
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.
|
@@ -158,3 +158,31 @@ Independent verification passed the checked-in Java test script, the hidden
|
|
|
158
158
|
event-window contract, generated-output tracking checks, clean-worktree checks,
|
|
159
159
|
the focused permission/evidence regressions, and the complete AgInTiFlow npm
|
|
160
160
|
suite.
|
|
161
|
+
|
|
162
|
+
### Long-context memo synthesis and local visual verification
|
|
163
|
+
|
|
164
|
+
`memo-full-context-pdf-014` used a normal, short writing prompt against a
|
|
165
|
+
realistic interrupted chat export containing corrections, cancellations,
|
|
166
|
+
deadlines, dependencies, completed work, publication boundaries, research
|
|
167
|
+
ideas, and personal errands. The DeepSeek-backed writing agent read the full
|
|
168
|
+
history and produced an editable two-page XeLaTeX/PDF memo instead of copying
|
|
169
|
+
transport rows. Independent acceptance checked every critical commitment,
|
|
170
|
+
rejected raw timestamps and internal identifiers, verified the PDF structure,
|
|
171
|
+
and required a clean intentional commit.
|
|
172
|
+
|
|
173
|
+
The first draft generalized a concrete Nutstore private-backup destination and
|
|
174
|
+
left generated agent/perception directories unignored. The same durable session
|
|
175
|
+
accepted those exact external findings, restored the actionable destination,
|
|
176
|
+
added narrow generated-state ignores, rebuilt the PDF, inspected both rendered
|
|
177
|
+
pages, and committed the correction as `a275878`. The hidden full-context
|
|
178
|
+
checker, `qpdf`, `pdfinfo`, extracted-text review, independent page renders, and
|
|
179
|
+
clean-worktree check then passed.
|
|
180
|
+
|
|
181
|
+
The visual-review turn exposed a reusable provider-boundary defect: automatic
|
|
182
|
+
`read_image` was blocked merely because DeepSeek was the active reasoning
|
|
183
|
+
provider, even though the configured local image-perception handoff was safe
|
|
184
|
+
and the perception runtime already supported it. Guardrails now allow the
|
|
185
|
+
DeepSeek-to-LocalLLM handoff when local perception is enabled, continue to block
|
|
186
|
+
hosted vision without explicit authorization, and block all automatic vision
|
|
187
|
+
when both local and hosted routes are disabled. A focused regression covers the
|
|
188
|
+
guard and the actual LocalLLM client route.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lazyingart/agintiflow",
|
|
3
|
-
"version": "0.20.
|
|
3
|
+
"version": "0.20.215",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "AgInTiFlow is a project-aware agent workspace for hybrid wet-dry R&D, hardware-aware intelligence, software automation, and industrial workflows.",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -83,6 +83,36 @@ async function verifyProviderBoundary({ pngPath, store, config }) {
|
|
|
83
83
|
config: { ...config, provider: "localllm", allowHostedImagePerception: false },
|
|
84
84
|
});
|
|
85
85
|
assert(!guardedImage.allowed, "guardrails allowed unapproved hosted image perception");
|
|
86
|
+
const guardedDeepSeekLocalHandoff = checkToolUse({
|
|
87
|
+
toolName: "read_image",
|
|
88
|
+
args: { path: path.relative(config.commandCwd, pngPath) },
|
|
89
|
+
snapshot: { elements: [] },
|
|
90
|
+
config: {
|
|
91
|
+
...config,
|
|
92
|
+
provider: "deepseek",
|
|
93
|
+
allowLocalImagePerception: true,
|
|
94
|
+
allowHostedImagePerception: false,
|
|
95
|
+
},
|
|
96
|
+
});
|
|
97
|
+
assert(
|
|
98
|
+
guardedDeepSeekLocalHandoff.allowed,
|
|
99
|
+
"guardrails blocked the safe DeepSeek-to-LocalLLM image handoff"
|
|
100
|
+
);
|
|
101
|
+
const blockedDeepSeekWithoutHandoff = checkToolUse({
|
|
102
|
+
toolName: "read_image",
|
|
103
|
+
args: { path: path.relative(config.commandCwd, pngPath) },
|
|
104
|
+
snapshot: { elements: [] },
|
|
105
|
+
config: {
|
|
106
|
+
...config,
|
|
107
|
+
provider: "deepseek",
|
|
108
|
+
allowLocalImagePerception: false,
|
|
109
|
+
allowHostedImagePerception: false,
|
|
110
|
+
},
|
|
111
|
+
});
|
|
112
|
+
assert(
|
|
113
|
+
!blockedDeepSeekWithoutHandoff.allowed,
|
|
114
|
+
"guardrails allowed auto image perception after every backend handoff was disabled"
|
|
115
|
+
);
|
|
86
116
|
const guardedResearch = checkToolUse({
|
|
87
117
|
toolName: "web_research",
|
|
88
118
|
args: { query: "provider boundary smoke", mode: "openai" },
|
package/src/guardrails.js
CHANGED
|
@@ -230,11 +230,12 @@ export function checkToolUse({ toolName, args, snapshot, config }) {
|
|
|
230
230
|
!args.dryRun &&
|
|
231
231
|
["", "auto", "default"].includes(provider) &&
|
|
232
232
|
!["localllm", "openai"].includes(activeProvider) &&
|
|
233
|
+
config.allowLocalImagePerception === false &&
|
|
233
234
|
config.allowHostedImagePerception !== true
|
|
234
235
|
) {
|
|
235
236
|
return {
|
|
236
237
|
allowed: false,
|
|
237
|
-
reason: `No automatic image-reading backend is enabled for active provider ${activeProvider}.
|
|
238
|
+
reason: `No automatic image-reading backend is enabled for active provider ${activeProvider}. Enable the local image-perception handoff, select localllm, or explicitly enable a hosted image backend.`,
|
|
238
239
|
category: "perception-tools",
|
|
239
240
|
};
|
|
240
241
|
}
|