@lazyingart/agintiflow 0.20.64 → 0.20.66
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/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lazyingart/agintiflow",
|
|
3
|
-
"version": "0.20.
|
|
3
|
+
"version": "0.20.66",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Low-cost, project-aware Web and CLI agents with DeepSeek/Venice/OpenAI routing, visible tool calls, durable sessions, scouts, AAPS, SCS, and guarded local execution.",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -11,6 +11,7 @@ import {
|
|
|
11
11
|
} from "../src/model-routing.js";
|
|
12
12
|
import { normalizeTextToolCallResponse, parseTextToolCalls, usesTextToolProtocol } from "../src/model-client.js";
|
|
13
13
|
import { modelRoleChoices } from "../src/interactive-cli.js";
|
|
14
|
+
import { buildScsEvidencePack, buildSupervisorInstruction } from "../src/scs-controller.js";
|
|
14
15
|
|
|
15
16
|
const repoRoot = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "..");
|
|
16
17
|
|
|
@@ -204,6 +205,30 @@ assert(usesTextToolProtocol({ provider: "venice", model: "gemma-4-uncensored" })
|
|
|
204
205
|
assert(usesTextToolProtocol({ provider: "venice", model: "e2ee-venice-uncensored-24b-p" }), "Venice 1.1 should use text tool protocol");
|
|
205
206
|
assert(usesTextToolProtocol({ provider: "venice", model: "venice-uncensored" }), "Venice legacy 1.1 should use text tool protocol");
|
|
206
207
|
assert(!usesTextToolProtocol({ provider: "venice", model: "venice-uncensored-1-2" }), "Venice 1.2 should keep native tool calls first");
|
|
208
|
+
const scsInstruction = buildSupervisorInstruction({ plan: "Create one file.", acceptanceCriteria: ["File exists."] });
|
|
209
|
+
assert(scsInstruction.includes("Student-Committee-Supervisor"), "SCS supervisor instruction should define the acronym");
|
|
210
|
+
assert(!scsInstruction.includes("Syntax-Checker Sentinel"), "SCS supervisor instruction should not allow alternate acronym expansions");
|
|
211
|
+
const longStdout = [
|
|
212
|
+
"=== Student-Committee-Supervisor present ===",
|
|
213
|
+
"3:SCS stands for **Student-Committee-Supervisor**",
|
|
214
|
+
"=== Syntax-Checker Sentinel absent ===",
|
|
215
|
+
"OK: absent",
|
|
216
|
+
"=== Residual content ===",
|
|
217
|
+
"py_compile FOUND",
|
|
218
|
+
"f-string FOUND",
|
|
219
|
+
"artifact integrity FOUND",
|
|
220
|
+
].join("\n");
|
|
221
|
+
const scsEvidence = buildScsEvidencePack({
|
|
222
|
+
goal: "verify SCS artifact",
|
|
223
|
+
messages: [
|
|
224
|
+
{
|
|
225
|
+
role: "tool",
|
|
226
|
+
content: JSON.stringify({ toolName: "run_command", ok: true, stdout: `${longStdout}\n${"x".repeat(700)}` }),
|
|
227
|
+
},
|
|
228
|
+
],
|
|
229
|
+
});
|
|
230
|
+
assert(scsEvidence.includes("Student-Committee-Supervisor"), "SCS evidence pack should preserve raw verification stdout");
|
|
231
|
+
assert(scsEvidence.includes("Syntax-Checker Sentinel absent"), "SCS evidence pack should keep absence checks visible to the final gate");
|
|
207
232
|
|
|
208
233
|
const output = await runCli(["models"]);
|
|
209
234
|
assert(output.includes("/route") && output.includes("/spare") && output.includes("venice-gpt"), "aginti models output missing role details");
|
|
@@ -232,6 +257,8 @@ console.log(
|
|
|
232
257
|
"venice-text-tool-parser",
|
|
233
258
|
"requested-tools-parser",
|
|
234
259
|
"malformed-text-tool-retry",
|
|
260
|
+
"scs-supervisor-identity",
|
|
261
|
+
"scs-evidence-stdout",
|
|
235
262
|
"cli-models-command",
|
|
236
263
|
"venice-shortcut",
|
|
237
264
|
],
|
package/src/scs-controller.js
CHANGED
|
@@ -166,7 +166,7 @@ export function buildScsEvidencePack(state = {}, context = {}) {
|
|
|
166
166
|
return `tool:${parsed.toolName || message.tool_call_id || "unknown"} ok=${parsed.ok !== false} done=${Boolean(parsed.done)} ${compactJson(
|
|
167
167
|
{
|
|
168
168
|
error: parsed.error || parsed.reason || "",
|
|
169
|
-
stdout: parsed.stdout ? String(parsed.stdout).slice(0,
|
|
169
|
+
stdout: parsed.stdout ? String(parsed.stdout).slice(0, 1200) : "",
|
|
170
170
|
path: parsed.path || "",
|
|
171
171
|
changes: Array.isArray(parsed.changes) ? parsed.changes.map((change) => change.path).filter(Boolean) : [],
|
|
172
172
|
},
|
|
@@ -207,7 +207,8 @@ export function buildSupervisorInstruction(scs = {}) {
|
|
|
207
207
|
const criteria = normalizeStringList(scs.acceptanceCriteria);
|
|
208
208
|
const stopConditions = normalizeStringList(scs.stopConditions);
|
|
209
209
|
return [
|
|
210
|
-
"SCS mode is enabled.
|
|
210
|
+
"SCS mode is enabled. SCS means Student-Committee-Supervisor; do not redefine the acronym.",
|
|
211
|
+
"You are the supervisor executor in that Student-Committee-Supervisor pipeline.",
|
|
211
212
|
"Execute the approved phase plan. You may choose exact tools and paths, but you may not replace the strategic plan with a new one.",
|
|
212
213
|
formatBehaviorContractForPrompt(),
|
|
213
214
|
"If tool evidence invalidates the plan, stop repeating the failed path and explain the blocker through finish or wait for student review.",
|
|
@@ -457,7 +458,7 @@ export async function reviewScsFinish(client, config, state, result = "", contex
|
|
|
457
458
|
{
|
|
458
459
|
role: "system",
|
|
459
460
|
content:
|
|
460
|
-
"You are the SCS student final gate. Decide if the supervisor has enough concrete evidence to finish. Emit finish_allowed or finish_rejected only. Be strict for coding/system tasks, but do not demand impossible checks. Return strict JSON with keys: role, decision, confidence, evidence, reason, next_required_action.",
|
|
461
|
+
"You are the SCS student final gate. Decide if the supervisor has enough concrete evidence to finish. Emit finish_allowed or finish_rejected only. Be strict for coding/system tasks, but do not demand impossible checks. Evaluate both the proposed final result and the evidence pack; tool stdout in recentMessages/recentEvents is raw command evidence and does not need to be duplicated in the final answer. Reject only when neither the final answer nor the evidence pack contains concrete file/tool/check evidence for the acceptance criteria. Return strict JSON with keys: role, decision, confidence, evidence, reason, next_required_action.",
|
|
461
462
|
},
|
|
462
463
|
{
|
|
463
464
|
role: "user",
|