open-agents-ai 0.187.497 → 0.187.499
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/dist/index.js +612 -2
- package/npm-shrinkwrap.json +6 -6
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -255310,6 +255310,293 @@ var init_working_notes = __esm({
|
|
|
255310
255310
|
}
|
|
255311
255311
|
});
|
|
255312
255312
|
|
|
255313
|
+
// packages/execution/dist/tools/project-scaffolding.js
|
|
255314
|
+
function detectShape(task) {
|
|
255315
|
+
const lower = task.toLowerCase();
|
|
255316
|
+
if (/\b(cli|command[ -]line|terminal app)\b/.test(lower))
|
|
255317
|
+
return "cli";
|
|
255318
|
+
if (/\b(library|sdk|public api package)\b/.test(lower))
|
|
255319
|
+
return "library";
|
|
255320
|
+
if (/\b(pipeline|etl|data flow|stream processing)\b/.test(lower))
|
|
255321
|
+
return "pipeline";
|
|
255322
|
+
if (/\b(game|game loop|gameplay)\b/.test(lower))
|
|
255323
|
+
return "game";
|
|
255324
|
+
if (/\b(compiler|interpreter|lexer|parser|language|syntax)\b/.test(lower))
|
|
255325
|
+
return "compiler";
|
|
255326
|
+
if (/\b(frontend|ui|page|browser|dashboard|chat|app|website|spa)\b/.test(lower))
|
|
255327
|
+
return "web-app";
|
|
255328
|
+
return "service";
|
|
255329
|
+
}
|
|
255330
|
+
function defaultVerifyCommands(shape) {
|
|
255331
|
+
switch (shape) {
|
|
255332
|
+
case "library":
|
|
255333
|
+
return [
|
|
255334
|
+
"test suite passes (e.g. `npm test`, `pytest`, `cargo test`) — exit 0",
|
|
255335
|
+
"type check / static analysis passes — exit 0",
|
|
255336
|
+
"package builds without errors — exit 0"
|
|
255337
|
+
];
|
|
255338
|
+
case "cli":
|
|
255339
|
+
return [
|
|
255340
|
+
"test suite passes — exit 0",
|
|
255341
|
+
"build produces a runnable binary or script — exit 0",
|
|
255342
|
+
"smoke test: `<binary> --help` exits 0 with usage text"
|
|
255343
|
+
];
|
|
255344
|
+
case "pipeline":
|
|
255345
|
+
return [
|
|
255346
|
+
"test suite passes (incl. property tests for idempotency) — exit 0",
|
|
255347
|
+
"end-to-end fixture run succeeds — exit 0"
|
|
255348
|
+
];
|
|
255349
|
+
case "game":
|
|
255350
|
+
return [
|
|
255351
|
+
"test suite passes — exit 0",
|
|
255352
|
+
"headless / smoke run completes one full update tick — exit 0"
|
|
255353
|
+
];
|
|
255354
|
+
case "compiler":
|
|
255355
|
+
return [
|
|
255356
|
+
"test suite passes (incl. example-program eval tests) — exit 0",
|
|
255357
|
+
"build / compile of the compiler itself — exit 0"
|
|
255358
|
+
];
|
|
255359
|
+
default:
|
|
255360
|
+
return [
|
|
255361
|
+
"test suite passes — exit 0",
|
|
255362
|
+
"type check / lint passes — exit 0",
|
|
255363
|
+
"build produces a working artifact — exit 0"
|
|
255364
|
+
];
|
|
255365
|
+
}
|
|
255366
|
+
}
|
|
255367
|
+
function bulletList(items, fallback = "(none specified)") {
|
|
255368
|
+
if (!items || items.length === 0)
|
|
255369
|
+
return ` ${fallback}`;
|
|
255370
|
+
return items.map((i2) => ` - ${i2}`).join("\n");
|
|
255371
|
+
}
|
|
255372
|
+
function renderSections(shape) {
|
|
255373
|
+
const sections = SHAPE_SECTIONS[shape];
|
|
255374
|
+
return sections.map(([title, hint], i2) => ` ${(i2 + 1).toString().padStart(2, " ")}. **${title}** — ${hint}`).join("\n");
|
|
255375
|
+
}
|
|
255376
|
+
function buildScaffoldedPrompt(args) {
|
|
255377
|
+
const task = (args.task || "").trim();
|
|
255378
|
+
if (task.length === 0) {
|
|
255379
|
+
throw new Error("project_scaffolding: 'task' is required and must be non-empty");
|
|
255380
|
+
}
|
|
255381
|
+
const shape = !args.shape || args.shape === "auto" ? detectShape(task) : args.shape;
|
|
255382
|
+
const outputPath = (args.output_path || "./IMPLEMENTATION_GUIDE.md").trim();
|
|
255383
|
+
const projectName = (args.project_name || "").trim();
|
|
255384
|
+
const verifyCmds = args.verify_commands && args.verify_commands.length > 0 ? args.verify_commands : defaultVerifyCommands(shape);
|
|
255385
|
+
const lines = [];
|
|
255386
|
+
lines.push(`Create a detailed implementation specification${projectName ? ` for **${projectName}**` : ""}, written to:`);
|
|
255387
|
+
lines.push(` ${outputPath}`);
|
|
255388
|
+
lines.push("");
|
|
255389
|
+
lines.push(`## Task description`);
|
|
255390
|
+
lines.push(task);
|
|
255391
|
+
lines.push("");
|
|
255392
|
+
if (args.features && args.features.length > 0) {
|
|
255393
|
+
lines.push(`## Required features`);
|
|
255394
|
+
lines.push(bulletList(args.features));
|
|
255395
|
+
lines.push("");
|
|
255396
|
+
}
|
|
255397
|
+
if (args.stack && args.stack.length > 0) {
|
|
255398
|
+
lines.push(`## Tech stack — POSITIVE constraints (use these)`);
|
|
255399
|
+
lines.push(bulletList(args.stack));
|
|
255400
|
+
lines.push("");
|
|
255401
|
+
} else {
|
|
255402
|
+
lines.push(`## Tech stack — POSITIVE constraints`);
|
|
255403
|
+
lines.push(`The caller did not specify positive tech-stack constraints. The spec MUST declare its own tech stack explicitly in section 1 (Overview) — language, runtime, frameworks, persistence, build/test tools — so the downstream implementer has unambiguous targets. Do NOT leave the stack as an open choice.`);
|
|
255404
|
+
lines.push("");
|
|
255405
|
+
}
|
|
255406
|
+
if (args.anti_stack && args.anti_stack.length > 0) {
|
|
255407
|
+
lines.push(`## Tech stack — NEGATIVE constraints (do NOT use these)`);
|
|
255408
|
+
lines.push(`These prohibitions are load-bearing. Default training data favors popular alternatives; you must respect the explicit "no" here even when a forbidden choice would be conventional.`);
|
|
255409
|
+
lines.push("");
|
|
255410
|
+
lines.push(bulletList(args.anti_stack));
|
|
255411
|
+
lines.push("");
|
|
255412
|
+
} else {
|
|
255413
|
+
lines.push(`## Tech stack — NEGATIVE constraints`);
|
|
255414
|
+
lines.push(`No explicit prohibitions supplied. The spec is free to choose any tooling consistent with the positive constraints, but the spec itself SHOULD include a brief "anti-requirements" section (see section 11) listing the patterns/libraries explicitly excluded — even if the caller did not pre-specify them.`);
|
|
255415
|
+
lines.push("");
|
|
255416
|
+
}
|
|
255417
|
+
if (args.notes && args.notes.trim().length > 0) {
|
|
255418
|
+
lines.push(`## Additional constraints / notes`);
|
|
255419
|
+
lines.push(args.notes.trim());
|
|
255420
|
+
lines.push("");
|
|
255421
|
+
}
|
|
255422
|
+
lines.push(`## Required spec sections (numbered, in order)`);
|
|
255423
|
+
lines.push(`The spec MUST contain the following sections, each titled and numbered as below. Each section must be detailed enough to stand on its own; do not defer details to later sections.`);
|
|
255424
|
+
lines.push("");
|
|
255425
|
+
lines.push(renderSections(shape));
|
|
255426
|
+
lines.push("");
|
|
255427
|
+
lines.push(`## Reproducibility test (the load-bearing acceptance criterion)`);
|
|
255428
|
+
lines.push(`The spec must be detailed enough that **a different agent**, with no access to this conversation and no shared memory with you, can implement it from the document alone — and produce a result that satisfies the verification commands below.`);
|
|
255429
|
+
lines.push("");
|
|
255430
|
+
lines.push(`## Verifiable acceptance criteria`);
|
|
255431
|
+
lines.push(`Final implementation must pass:`);
|
|
255432
|
+
lines.push(bulletList(verifyCmds));
|
|
255433
|
+
lines.push("");
|
|
255434
|
+
lines.push(`## Output discipline`);
|
|
255435
|
+
lines.push(`- Write the entire spec to ${outputPath} in a single file_write call when you have a complete document. Iterating section-by-section across multiple calls produces incoherent specs; plan the whole document first, then emit.`);
|
|
255436
|
+
lines.push(`- Do NOT implement any code outside the spec document itself. The spec is the deliverable; implementation is a separate downstream task.`);
|
|
255437
|
+
lines.push(`- Call task_complete only after the spec is on disk and you have read it back to verify it covers every numbered section above.`);
|
|
255438
|
+
return lines.join("\n");
|
|
255439
|
+
}
|
|
255440
|
+
var COMMON_HEAD_SECTIONS, COMMON_TAIL_SECTIONS, SHAPE_SECTIONS, ProjectScaffoldingTool;
|
|
255441
|
+
var init_project_scaffolding = __esm({
|
|
255442
|
+
"packages/execution/dist/tools/project-scaffolding.js"() {
|
|
255443
|
+
"use strict";
|
|
255444
|
+
COMMON_HEAD_SECTIONS = [
|
|
255445
|
+
["Overview", "Goal, scope, non-goals."],
|
|
255446
|
+
["Non-functional requirements", "Performance, persistence, observability, error handling."]
|
|
255447
|
+
];
|
|
255448
|
+
COMMON_TAIL_SECTIONS = [
|
|
255449
|
+
["Build commands", "All scripts (build, test, typecheck, dev). Each must be runnable and reproducible."],
|
|
255450
|
+
["Acceptance criteria", "Specific test counts and categories. The exact commands that must exit 0 to declare done."],
|
|
255451
|
+
["Test fixtures + sample data", "All sample inputs/outputs needed to run tests deterministically."],
|
|
255452
|
+
["Anti-requirements", "Explicit things NOT to do (frameworks, patterns, dependencies excluded)."]
|
|
255453
|
+
];
|
|
255454
|
+
SHAPE_SECTIONS = {
|
|
255455
|
+
"web-app": [
|
|
255456
|
+
...COMMON_HEAD_SECTIONS,
|
|
255457
|
+
["Data models", "Schema (DB) + type definitions."],
|
|
255458
|
+
["API contract", "Endpoints, request/response shapes, error codes."],
|
|
255459
|
+
["Real-time events (if any)", "Event types, lifecycle, sequencing rules."],
|
|
255460
|
+
["Frontend architecture", "Module structure, state management, rendering pattern."],
|
|
255461
|
+
["File structure", "Every file the implementer must create, with one-line purpose."],
|
|
255462
|
+
...COMMON_TAIL_SECTIONS
|
|
255463
|
+
],
|
|
255464
|
+
"service": [
|
|
255465
|
+
...COMMON_HEAD_SECTIONS,
|
|
255466
|
+
["Data models", "Schema + type definitions."],
|
|
255467
|
+
["API contract", "Endpoints, request/response shapes, error codes."],
|
|
255468
|
+
["Background processing (if any)", "Workers, queues, scheduled jobs."],
|
|
255469
|
+
["File structure", "Every file the implementer must create, with one-line purpose."],
|
|
255470
|
+
["Operational concerns", "Logging, metrics, health checks, configuration."],
|
|
255471
|
+
...COMMON_TAIL_SECTIONS
|
|
255472
|
+
],
|
|
255473
|
+
"cli": [
|
|
255474
|
+
...COMMON_HEAD_SECTIONS,
|
|
255475
|
+
["Command surface", "All commands, flags, args, exit codes, stdout/stderr format."],
|
|
255476
|
+
["Configuration", "Config file format, environment variables, precedence rules."],
|
|
255477
|
+
["File structure", "Every file the implementer must create, with one-line purpose."],
|
|
255478
|
+
["Error handling", "Error categories and how each surfaces to the user."],
|
|
255479
|
+
...COMMON_TAIL_SECTIONS
|
|
255480
|
+
],
|
|
255481
|
+
"library": [
|
|
255482
|
+
...COMMON_HEAD_SECTIONS,
|
|
255483
|
+
["Public API surface", "Every exported symbol with signature, semantics, examples."],
|
|
255484
|
+
["Internal architecture", "Module breakdown, invariants, data flow."],
|
|
255485
|
+
["File structure", "Every file the implementer must create, with one-line purpose."],
|
|
255486
|
+
["Backward compatibility", "Versioning policy, deprecation rules."],
|
|
255487
|
+
...COMMON_TAIL_SECTIONS
|
|
255488
|
+
],
|
|
255489
|
+
"pipeline": [
|
|
255490
|
+
...COMMON_HEAD_SECTIONS,
|
|
255491
|
+
["Stages", "Each stage's input, transform, output, idempotency property."],
|
|
255492
|
+
["Schemas", "Input/output schema for every stage boundary."],
|
|
255493
|
+
["Failure handling", "Retry, dead-letter, rollback, monitoring."],
|
|
255494
|
+
["File structure", "Every file the implementer must create, with one-line purpose."],
|
|
255495
|
+
...COMMON_TAIL_SECTIONS
|
|
255496
|
+
],
|
|
255497
|
+
"game": [
|
|
255498
|
+
...COMMON_HEAD_SECTIONS,
|
|
255499
|
+
["Game loop", "Tick rate, update/render cycle, fixed vs variable timestep."],
|
|
255500
|
+
["State machines", "All entities/scenes with transitions and invariants."],
|
|
255501
|
+
["Asset pipeline", "Format, loader, lifecycle."],
|
|
255502
|
+
["Input handling", "Mapping from device → game action."],
|
|
255503
|
+
["File structure", "Every file the implementer must create, with one-line purpose."],
|
|
255504
|
+
...COMMON_TAIL_SECTIONS
|
|
255505
|
+
],
|
|
255506
|
+
"compiler": [
|
|
255507
|
+
...COMMON_HEAD_SECTIONS,
|
|
255508
|
+
["Source language", "Grammar (BNF), example programs."],
|
|
255509
|
+
["Lexer", "Token kinds, error reporting."],
|
|
255510
|
+
["Parser", "AST shape, precedence, error recovery."],
|
|
255511
|
+
["Type system / static analysis", "Rules, inference algorithm if any."],
|
|
255512
|
+
["Evaluator / runtime", "Semantics, error model, foreign function calls."],
|
|
255513
|
+
["File structure", "Every file the implementer must create, with one-line purpose."],
|
|
255514
|
+
...COMMON_TAIL_SECTIONS
|
|
255515
|
+
]
|
|
255516
|
+
};
|
|
255517
|
+
ProjectScaffoldingTool = class {
|
|
255518
|
+
name = "project_scaffolding";
|
|
255519
|
+
description = "Convert a brief, mushy task description into a structured spec-generation prompt with concrete deliverable, positive+negative stack constraints, numbered sections, reproducibility framing, and verifiable acceptance criteria. Use BEFORE delegating spec generation to another agent — the scaffolded prompt produces coherent implementable specs where a mush prompt produces hand-waving. Args: task (required string), output_path (optional, default ./IMPLEMENTATION_GUIDE.md), stack (string array of POSITIVE constraints), anti_stack (string array of NEGATIVE constraints — load-bearing for small models that default to popular patterns), features (string array of required features), shape (one of 'web-app' | 'service' | 'cli' | 'library' | 'pipeline' | 'game' | 'compiler' | 'auto', default 'auto'), notes (free-text additional constraints), project_name (display name in spec heading), verify_commands (override default verification commands). Returns the scaffolded prompt as a string. The agent should then either (a) hand the prompt off to a sub-agent / another OA run, or (b) execute the spec generation itself.";
|
|
255520
|
+
parameters = {
|
|
255521
|
+
type: "object",
|
|
255522
|
+
properties: {
|
|
255523
|
+
task: {
|
|
255524
|
+
type: "string",
|
|
255525
|
+
description: "Brief task description (the mush). E.g. 'a real-time chat app with rooms and reactions'."
|
|
255526
|
+
},
|
|
255527
|
+
output_path: {
|
|
255528
|
+
type: "string",
|
|
255529
|
+
description: "File path the downstream agent should write the spec to. Default: ./IMPLEMENTATION_GUIDE.md."
|
|
255530
|
+
},
|
|
255531
|
+
stack: {
|
|
255532
|
+
type: "array",
|
|
255533
|
+
items: { type: "string" },
|
|
255534
|
+
description: "POSITIVE tech-stack constraints. E.g. ['Node.js', 'TypeScript', 'Express', 'PostgreSQL']."
|
|
255535
|
+
},
|
|
255536
|
+
anti_stack: {
|
|
255537
|
+
type: "array",
|
|
255538
|
+
items: { type: "string" },
|
|
255539
|
+
description: "NEGATIVE tech-stack constraints — things to explicitly avoid. Load-bearing for small models. E.g. ['WebSockets', 'React', 'in-memory only']."
|
|
255540
|
+
},
|
|
255541
|
+
features: {
|
|
255542
|
+
type: "array",
|
|
255543
|
+
items: { type: "string" },
|
|
255544
|
+
description: "Required features to surface as MUST-have. E.g. ['user auth', 'rate limiting', 'audit log']."
|
|
255545
|
+
},
|
|
255546
|
+
shape: {
|
|
255547
|
+
type: "string",
|
|
255548
|
+
enum: ["web-app", "service", "cli", "library", "pipeline", "game", "compiler", "auto"],
|
|
255549
|
+
description: "Project shape. Determines which sections appear in the spec. Default: 'auto' (detect from task)."
|
|
255550
|
+
},
|
|
255551
|
+
notes: {
|
|
255552
|
+
type: "string",
|
|
255553
|
+
description: "Free-text additional constraints (operational, security, performance, deployment)."
|
|
255554
|
+
},
|
|
255555
|
+
project_name: {
|
|
255556
|
+
type: "string",
|
|
255557
|
+
description: "Display name used in spec heading. Optional."
|
|
255558
|
+
},
|
|
255559
|
+
verify_commands: {
|
|
255560
|
+
type: "array",
|
|
255561
|
+
items: { type: "string" },
|
|
255562
|
+
description: "Override default verification commands. Each item describes a command + expected outcome."
|
|
255563
|
+
}
|
|
255564
|
+
},
|
|
255565
|
+
required: ["task"]
|
|
255566
|
+
};
|
|
255567
|
+
async execute(args) {
|
|
255568
|
+
const start2 = Date.now();
|
|
255569
|
+
try {
|
|
255570
|
+
const scaffArgs = {
|
|
255571
|
+
task: String(args["task"] ?? ""),
|
|
255572
|
+
output_path: typeof args["output_path"] === "string" ? args["output_path"] : void 0,
|
|
255573
|
+
stack: Array.isArray(args["stack"]) ? args["stack"].map(String) : void 0,
|
|
255574
|
+
anti_stack: Array.isArray(args["anti_stack"]) ? args["anti_stack"].map(String) : void 0,
|
|
255575
|
+
features: Array.isArray(args["features"]) ? args["features"].map(String) : void 0,
|
|
255576
|
+
shape: typeof args["shape"] === "string" ? args["shape"] : void 0,
|
|
255577
|
+
notes: typeof args["notes"] === "string" ? args["notes"] : void 0,
|
|
255578
|
+
project_name: typeof args["project_name"] === "string" ? args["project_name"] : void 0,
|
|
255579
|
+
verify_commands: Array.isArray(args["verify_commands"]) ? args["verify_commands"].map(String) : void 0
|
|
255580
|
+
};
|
|
255581
|
+
const prompt = buildScaffoldedPrompt(scaffArgs);
|
|
255582
|
+
return {
|
|
255583
|
+
success: true,
|
|
255584
|
+
output: prompt,
|
|
255585
|
+
durationMs: Date.now() - start2
|
|
255586
|
+
};
|
|
255587
|
+
} catch (e2) {
|
|
255588
|
+
return {
|
|
255589
|
+
success: false,
|
|
255590
|
+
output: "",
|
|
255591
|
+
error: e2 instanceof Error ? e2.message : String(e2),
|
|
255592
|
+
durationMs: Date.now() - start2
|
|
255593
|
+
};
|
|
255594
|
+
}
|
|
255595
|
+
}
|
|
255596
|
+
};
|
|
255597
|
+
}
|
|
255598
|
+
});
|
|
255599
|
+
|
|
255313
255600
|
// packages/execution/dist/tools/todo-store.js
|
|
255314
255601
|
import { existsSync as existsSync30, readFileSync as readFileSync24, writeFileSync as writeFileSync12, mkdirSync as mkdirSync11, renameSync, unlinkSync as unlinkSync5, readdirSync as readdirSync9 } from "node:fs";
|
|
255315
255602
|
import { join as join47 } from "node:path";
|
|
@@ -510376,6 +510663,7 @@ __export(dist_exports, {
|
|
|
510376
510663
|
PlaywrightBrowserTool: () => PlaywrightBrowserTool,
|
|
510377
510664
|
PluginManager: () => PluginManager,
|
|
510378
510665
|
ProcessHealthTool: () => ProcessHealthTool,
|
|
510666
|
+
ProjectScaffoldingTool: () => ProjectScaffoldingTool,
|
|
510379
510667
|
ReflectionIntegrityTool: () => ReflectionIntegrityTool,
|
|
510380
510668
|
ReminderTool: () => ReminderTool,
|
|
510381
510669
|
ReplTool: () => ReplTool,
|
|
@@ -510418,6 +510706,7 @@ __export(dist_exports, {
|
|
|
510418
510706
|
buildCustomTools: () => buildCustomTools,
|
|
510419
510707
|
buildGraph: () => buildGraph,
|
|
510420
510708
|
buildMcpToolName: () => buildMcpToolName,
|
|
510709
|
+
buildScaffoldedPrompt: () => buildScaffoldedPrompt,
|
|
510421
510710
|
buildSkillsSummary: () => buildSkillsSummary,
|
|
510422
510711
|
buildSubProcessArgs: () => buildSubProcessArgs,
|
|
510423
510712
|
canInvokeTool: () => canInvokeTool,
|
|
@@ -510597,6 +510886,7 @@ var init_dist5 = __esm({
|
|
|
510597
510886
|
init_cron_agent();
|
|
510598
510887
|
init_file_explore();
|
|
510599
510888
|
init_working_notes();
|
|
510889
|
+
init_project_scaffolding();
|
|
510600
510890
|
init_todo_write();
|
|
510601
510891
|
init_todo_store();
|
|
510602
510892
|
init_semantic_map();
|
|
@@ -514339,6 +514629,23 @@ function renderCriticPrompt(inputs) {
|
|
|
514339
514629
|
lines.push(`9. **Unresolved failures**: stems with attempts ≥ 3 that never cleared.`);
|
|
514340
514630
|
lines.push(`10. **Generic-vs-specific drift**: code claims to be generic but contains`);
|
|
514341
514631
|
lines.push(` framework- or vendor-specific keywords.`);
|
|
514632
|
+
lines.push(`11. **Backtest evidence for new code (CRITICAL — recurring failure mode)**: For any`);
|
|
514633
|
+
lines.push(` NEWLY ADDED tool, module, public function, or prompt-generation feature,`);
|
|
514634
|
+
lines.push(` the implementer MUST have invoked the new code with realistic input and`);
|
|
514635
|
+
lines.push(` inspected the actual rendered/returned output. Unit-test pass is necessary`);
|
|
514636
|
+
lines.push(` but NOT sufficient — unit tests verify the implementer's own assertions,`);
|
|
514637
|
+
lines.push(` not whether the output is human-usable. Look for evidence in the recent`);
|
|
514638
|
+
lines.push(` tool calls of: a node/python/shell invocation that exercises the new code`);
|
|
514639
|
+
lines.push(` with realistic args, OR a manual-inspection step (cat / file_read of the`);
|
|
514640
|
+
lines.push(` output, head/tail of generated content). If you find ONLY unit-test`);
|
|
514641
|
+
lines.push(` evidence and no realistic-invocation evidence for new code, this is a`);
|
|
514642
|
+
lines.push(` \`request_changes\` regardless of test count. Tests passing while output is`);
|
|
514643
|
+
lines.push(` nonsense is a recurring class of negligence this gate exists to catch.`);
|
|
514644
|
+
lines.push(`12. **Empty-section / contradiction sweep**: For any output the implementer`);
|
|
514645
|
+
lines.push(` generates programmatically (prompts, configs, docs), check for sections`);
|
|
514646
|
+
lines.push(` that say "(none specified)" / "(no items)" / "(empty)" alongside framing`);
|
|
514647
|
+
lines.push(` text that asserts the section IS load-bearing. These contradictions`);
|
|
514648
|
+
lines.push(` indicate the generator wasn't tested with the empty / minimal-input case.`);
|
|
514342
514649
|
lines.push(``);
|
|
514343
514650
|
lines.push(`Do NOT flag:`);
|
|
514344
514651
|
lines.push(`- Stylistic choices (formatting, naming) unless they hide a real bug.`);
|
|
@@ -514632,6 +514939,221 @@ var init_backward_pass_runner = __esm({
|
|
|
514632
514939
|
}
|
|
514633
514940
|
});
|
|
514634
514941
|
|
|
514942
|
+
// packages/orchestrator/dist/stuck-meta-analyzer.js
|
|
514943
|
+
function renderAnalyzerPrompt(inputs) {
|
|
514944
|
+
const lines = [];
|
|
514945
|
+
lines.push(`# STUCK-STATE META-ANALYSIS`);
|
|
514946
|
+
lines.push(``);
|
|
514947
|
+
lines.push(`You are a META-ANALYSIS sub-agent. Another agent (the implementer) is`);
|
|
514948
|
+
lines.push(`stuck in an unproductive tool-call loop and the runtime's structural`);
|
|
514949
|
+
lines.push(`stuck-detector has fired. Your job: examine the loop + state below and`);
|
|
514950
|
+
lines.push(`return ONE specific next tool call that will unblock the implementer.`);
|
|
514951
|
+
lines.push(``);
|
|
514952
|
+
lines.push(`## Context`);
|
|
514953
|
+
lines.push(`Goal: ${inputs.goal.slice(0, 600)}`);
|
|
514954
|
+
lines.push(`Working directory: ${inputs.workingDir}`);
|
|
514955
|
+
lines.push(`Trigger: ${inputs.triggerReason} (turn ${inputs.turn})`);
|
|
514956
|
+
if (inputs.workspaceSummary) {
|
|
514957
|
+
lines.push(``);
|
|
514958
|
+
lines.push(`## Workspace summary`);
|
|
514959
|
+
lines.push(inputs.workspaceSummary.slice(0, 1500));
|
|
514960
|
+
}
|
|
514961
|
+
lines.push(``);
|
|
514962
|
+
lines.push(`## Plan status (reconciled against disk)`);
|
|
514963
|
+
if (inputs.planStatus.length === 0) {
|
|
514964
|
+
lines.push(`(no plan items declared)`);
|
|
514965
|
+
} else {
|
|
514966
|
+
for (const t2 of inputs.planStatus.slice(0, 12)) {
|
|
514967
|
+
lines.push(` [${t2.reconciled}] ${t2.content.slice(0, 100)} — ${t2.rationale.slice(0, 120)}`);
|
|
514968
|
+
}
|
|
514969
|
+
}
|
|
514970
|
+
lines.push(``);
|
|
514971
|
+
lines.push(`## Recent unresolved failures`);
|
|
514972
|
+
if (inputs.recentFailures.length === 0) {
|
|
514973
|
+
lines.push(`(none)`);
|
|
514974
|
+
} else {
|
|
514975
|
+
for (const f2 of inputs.recentFailures.slice(0, 5)) {
|
|
514976
|
+
lines.push(` - ${f2.stem} (attempts=${f2.attempts}): ${f2.preview.slice(0, 200)}`);
|
|
514977
|
+
}
|
|
514978
|
+
}
|
|
514979
|
+
lines.push(``);
|
|
514980
|
+
lines.push(`## The loop pattern (recent tool calls, oldest first)`);
|
|
514981
|
+
if (inputs.recentToolCalls.length === 0) {
|
|
514982
|
+
lines.push(`(no recent calls)`);
|
|
514983
|
+
} else {
|
|
514984
|
+
const recent = inputs.recentToolCalls.slice(-30);
|
|
514985
|
+
for (const c9 of recent) {
|
|
514986
|
+
const status = c9.success === false ? "FAIL" : "OK";
|
|
514987
|
+
const args = c9.argsKey ? ` ${c9.argsKey}` : "";
|
|
514988
|
+
const preview = c9.outputPreview ? ` → "${c9.outputPreview.slice(0, 100)}"` : "";
|
|
514989
|
+
lines.push(` ${c9.name}${args} [${status}]${preview}`);
|
|
514990
|
+
}
|
|
514991
|
+
}
|
|
514992
|
+
lines.push(``);
|
|
514993
|
+
if (inputs.availableTools && inputs.availableTools.length > 0) {
|
|
514994
|
+
lines.push(`## Tools available to the implementer`);
|
|
514995
|
+
lines.push(inputs.availableTools.slice(0, 60).join(", "));
|
|
514996
|
+
lines.push(``);
|
|
514997
|
+
}
|
|
514998
|
+
lines.push(`## Your task`);
|
|
514999
|
+
lines.push(``);
|
|
515000
|
+
lines.push(`Diagnose the loop in 1 sentence (what specific category of un-`);
|
|
515001
|
+
lines.push(`productive activity is happening?). Then emit ONE concrete next`);
|
|
515002
|
+
lines.push(`tool call the implementer should make. Do NOT emit a list of`);
|
|
515003
|
+
lines.push(`alternatives. Do NOT emit categories like "PRODUCE" or "EDIT" —`);
|
|
515004
|
+
lines.push(`emit the actual tool name and the actual args (with concrete`);
|
|
515005
|
+
lines.push(`paths and a content seed when applicable).`);
|
|
515006
|
+
lines.push(``);
|
|
515007
|
+
lines.push(`Universal rules for the directive:`);
|
|
515008
|
+
lines.push(`- Use only tools the implementer has access to.`);
|
|
515009
|
+
lines.push(`- The next_action MUST produce new state on disk (file_write,`);
|
|
515010
|
+
lines.push(` file_edit, batch_edit, file_patch, shell mutation, or similar).`);
|
|
515011
|
+
lines.push(` If the loop is read-heavy, the unblocker is virtually always a`);
|
|
515012
|
+
lines.push(` write of some kind.`);
|
|
515013
|
+
lines.push(`- The args_seed must contain enough content that the implementer`);
|
|
515014
|
+
lines.push(` can apply or refine it directly. For file writes, the args_seed`);
|
|
515015
|
+
lines.push(` MUST include a 'content' field with at least skeleton text`);
|
|
515016
|
+
lines.push(` (function signatures, imports, key structures). For shell calls,`);
|
|
515017
|
+
lines.push(` include the exact command.`);
|
|
515018
|
+
lines.push(`- The anti_pattern must name the SPECIFIC repeated activity to stop`);
|
|
515019
|
+
lines.push(` (e.g. "list_directory of /tests/* repeatedly with no writes"),`);
|
|
515020
|
+
lines.push(` not just "stop being stuck".`);
|
|
515021
|
+
lines.push(`- The verification must be a concrete check (a tool call OR an`);
|
|
515022
|
+
lines.push(` expected state change) the implementer runs after the action.`);
|
|
515023
|
+
lines.push(``);
|
|
515024
|
+
lines.push(`## Output format`);
|
|
515025
|
+
lines.push(``);
|
|
515026
|
+
lines.push(`Reason briefly (1-3 sentences) about the loop, then emit a SINGLE`);
|
|
515027
|
+
lines.push(`JSON code block with this exact shape:`);
|
|
515028
|
+
lines.push(``);
|
|
515029
|
+
lines.push("```json");
|
|
515030
|
+
lines.push(`{`);
|
|
515031
|
+
lines.push(` "diagnosis": "<1-sentence root cause>",`);
|
|
515032
|
+
lines.push(` "next_action": {`);
|
|
515033
|
+
lines.push(` "tool": "<exact tool name from the available list>",`);
|
|
515034
|
+
lines.push(` "args_seed": { /* concrete args; for writes, include 'path' + 'content' seed */ },`);
|
|
515035
|
+
lines.push(` "rationale": "<why this unblocks>"`);
|
|
515036
|
+
lines.push(` },`);
|
|
515037
|
+
lines.push(` "anti_pattern": "<the specific loop activity to stop>",`);
|
|
515038
|
+
lines.push(` "verification": "<concrete check after the action>"`);
|
|
515039
|
+
lines.push(`}`);
|
|
515040
|
+
lines.push("```");
|
|
515041
|
+
lines.push(``);
|
|
515042
|
+
lines.push(`Be SPECIFIC. Vague directives are useless to a stuck implementer.`);
|
|
515043
|
+
return lines.join("\n");
|
|
515044
|
+
}
|
|
515045
|
+
function parseDirective(rawResponse) {
|
|
515046
|
+
const fallback = (msg) => ({
|
|
515047
|
+
diagnosis: `(meta-analyzer parse failed: ${msg})`,
|
|
515048
|
+
next_action: {
|
|
515049
|
+
tool: "(unknown)",
|
|
515050
|
+
args_seed: {},
|
|
515051
|
+
rationale: "Parser fell back; directive should not be injected."
|
|
515052
|
+
},
|
|
515053
|
+
anti_pattern: "(unknown)",
|
|
515054
|
+
verification: "(unknown)",
|
|
515055
|
+
raw: rawResponse,
|
|
515056
|
+
parseFallback: true
|
|
515057
|
+
});
|
|
515058
|
+
if (!rawResponse || typeof rawResponse !== "string" || rawResponse.trim().length === 0) {
|
|
515059
|
+
return fallback("empty response");
|
|
515060
|
+
}
|
|
515061
|
+
const fenceMatch = rawResponse.match(/```(?:json)?\s*\n([\s\S]*?)\n```/);
|
|
515062
|
+
let jsonText = null;
|
|
515063
|
+
if (fenceMatch) {
|
|
515064
|
+
jsonText = fenceMatch[1].trim();
|
|
515065
|
+
} else {
|
|
515066
|
+
const first2 = rawResponse.indexOf("{");
|
|
515067
|
+
const last2 = rawResponse.lastIndexOf("}");
|
|
515068
|
+
if (first2 !== -1 && last2 > first2)
|
|
515069
|
+
jsonText = rawResponse.slice(first2, last2 + 1);
|
|
515070
|
+
}
|
|
515071
|
+
if (!jsonText)
|
|
515072
|
+
return fallback("no JSON block found");
|
|
515073
|
+
let parsed;
|
|
515074
|
+
try {
|
|
515075
|
+
parsed = JSON.parse(jsonText);
|
|
515076
|
+
} catch (e2) {
|
|
515077
|
+
return fallback(`JSON parse: ${e2 instanceof Error ? e2.message : String(e2)}`);
|
|
515078
|
+
}
|
|
515079
|
+
if (!parsed || typeof parsed !== "object")
|
|
515080
|
+
return fallback("not an object");
|
|
515081
|
+
const diagnosis = typeof parsed.diagnosis === "string" && parsed.diagnosis.trim().length > 0 ? parsed.diagnosis.slice(0, 400) : "";
|
|
515082
|
+
const next = parsed.next_action;
|
|
515083
|
+
const tool = next && typeof next.tool === "string" ? next.tool.trim() : "";
|
|
515084
|
+
const args_seed = next && typeof next.args_seed === "object" && next.args_seed !== null ? next.args_seed : {};
|
|
515085
|
+
const rationale = next && typeof next.rationale === "string" ? next.rationale.slice(0, 400) : "";
|
|
515086
|
+
const anti_pattern = typeof parsed.anti_pattern === "string" ? parsed.anti_pattern.slice(0, 400) : "";
|
|
515087
|
+
const verification = typeof parsed.verification === "string" ? parsed.verification.slice(0, 400) : "";
|
|
515088
|
+
if (!diagnosis || !tool || !anti_pattern || !verification) {
|
|
515089
|
+
return fallback("missing required fields");
|
|
515090
|
+
}
|
|
515091
|
+
return {
|
|
515092
|
+
diagnosis,
|
|
515093
|
+
next_action: { tool, args_seed, rationale },
|
|
515094
|
+
anti_pattern,
|
|
515095
|
+
verification,
|
|
515096
|
+
raw: rawResponse
|
|
515097
|
+
};
|
|
515098
|
+
}
|
|
515099
|
+
function renderDirectiveAsMessage(d2) {
|
|
515100
|
+
if (d2.parseFallback) {
|
|
515101
|
+
return "";
|
|
515102
|
+
}
|
|
515103
|
+
const lines = [];
|
|
515104
|
+
lines.push(`[STUCK-STATE META-ANALYZER — REG-49]`);
|
|
515105
|
+
lines.push(``);
|
|
515106
|
+
lines.push(`A meta-analyzer sub-agent reviewed the recent tool-call pattern, the`);
|
|
515107
|
+
lines.push(`current world state, and the plan; it produced a single concrete`);
|
|
515108
|
+
lines.push(`unblocking action for you to take.`);
|
|
515109
|
+
lines.push(``);
|
|
515110
|
+
lines.push(`DIAGNOSIS: ${d2.diagnosis}`);
|
|
515111
|
+
lines.push(``);
|
|
515112
|
+
lines.push(`STOP DOING (anti-pattern): ${d2.anti_pattern}`);
|
|
515113
|
+
lines.push(``);
|
|
515114
|
+
lines.push(`DO NEXT:`);
|
|
515115
|
+
lines.push(` Tool: ${d2.next_action.tool}`);
|
|
515116
|
+
const argsJson = JSON.stringify(d2.next_action.args_seed, null, 2);
|
|
515117
|
+
lines.push(` Args:`);
|
|
515118
|
+
for (const ln of argsJson.split("\n"))
|
|
515119
|
+
lines.push(` ${ln}`);
|
|
515120
|
+
lines.push(` Rationale: ${d2.next_action.rationale}`);
|
|
515121
|
+
lines.push(``);
|
|
515122
|
+
lines.push(`AFTER THE ACTION, verify with: ${d2.verification}`);
|
|
515123
|
+
lines.push(``);
|
|
515124
|
+
lines.push(`This directive comes from a meta-analysis of YOUR recent activity. The`);
|
|
515125
|
+
lines.push(`args above are a SEED — refine them as needed (filenames, content) but`);
|
|
515126
|
+
lines.push(`emit a tool call of this kind on your next response. Do NOT emit`);
|
|
515127
|
+
lines.push(`another instance of the anti-pattern; that loop has been blocked.`);
|
|
515128
|
+
return lines.join("\n");
|
|
515129
|
+
}
|
|
515130
|
+
async function runStuckAnalyzer(opts) {
|
|
515131
|
+
const startMs = Date.now();
|
|
515132
|
+
const prompt = renderAnalyzerPrompt(opts.inputs);
|
|
515133
|
+
const promptBytes = Buffer.byteLength(prompt, "utf-8");
|
|
515134
|
+
let raw = "";
|
|
515135
|
+
try {
|
|
515136
|
+
raw = await opts.callable(prompt);
|
|
515137
|
+
} catch (e2) {
|
|
515138
|
+
raw = "";
|
|
515139
|
+
}
|
|
515140
|
+
const responseBytes = Buffer.byteLength(raw, "utf-8");
|
|
515141
|
+
const directive = parseDirective(raw);
|
|
515142
|
+
const injection = renderDirectiveAsMessage(directive);
|
|
515143
|
+
return {
|
|
515144
|
+
directive,
|
|
515145
|
+
injection,
|
|
515146
|
+
promptBytes,
|
|
515147
|
+
responseBytes,
|
|
515148
|
+
durationMs: Date.now() - startMs
|
|
515149
|
+
};
|
|
515150
|
+
}
|
|
515151
|
+
var init_stuck_meta_analyzer = __esm({
|
|
515152
|
+
"packages/orchestrator/dist/stuck-meta-analyzer.js"() {
|
|
515153
|
+
"use strict";
|
|
515154
|
+
}
|
|
515155
|
+
});
|
|
515156
|
+
|
|
514635
515157
|
// packages/orchestrator/dist/pressure-gate.js
|
|
514636
515158
|
function detectPressure(message2) {
|
|
514637
515159
|
const hasProfanity = PRESSURE_SIGNALS.test(message2);
|
|
@@ -520197,7 +520719,7 @@ function executeHook(hook, env2 = {}) {
|
|
|
520197
520719
|
maxBuffer: 1024 * 1024
|
|
520198
520720
|
// 1MB
|
|
520199
520721
|
});
|
|
520200
|
-
const directive =
|
|
520722
|
+
const directive = parseDirective2(output);
|
|
520201
520723
|
return {
|
|
520202
520724
|
success: true,
|
|
520203
520725
|
output: output.trim(),
|
|
@@ -520215,7 +520737,7 @@ function executeHook(hook, env2 = {}) {
|
|
|
520215
520737
|
};
|
|
520216
520738
|
}
|
|
520217
520739
|
}
|
|
520218
|
-
function
|
|
520740
|
+
function parseDirective2(output) {
|
|
520219
520741
|
const lines = output.split("\n");
|
|
520220
520742
|
for (const line of lines) {
|
|
520221
520743
|
const trimmed = line.trim();
|
|
@@ -520871,6 +521393,7 @@ var init_agenticRunner = __esm({
|
|
|
520871
521393
|
init_world_state_regenerator();
|
|
520872
521394
|
init_backward_pass_runner();
|
|
520873
521395
|
init_world_state_plan_reconciler();
|
|
521396
|
+
init_stuck_meta_analyzer();
|
|
520874
521397
|
init_pressure_gate();
|
|
520875
521398
|
init_dist5();
|
|
520876
521399
|
init_dist7();
|
|
@@ -523747,6 +524270,91 @@ ${_staleSamples.join("\n")}` : ``,
|
|
|
523747
524270
|
content: `REG-44 STUCK detector fired at turn ${turn} — triggers=[${_trigLabels.join(",")}], reads=${_readCount}, mutations=${_mutationCount}, stale=${_staleCount}, window=${_windowCalls.length}`,
|
|
523748
524271
|
timestamp: (/* @__PURE__ */ new Date()).toISOString()
|
|
523749
524272
|
});
|
|
524273
|
+
try {
|
|
524274
|
+
const _smaRaw = (process.env["OA_STUCK_META_ANALYZER"] || "off").toLowerCase();
|
|
524275
|
+
const _smaOn = _smaRaw === "on" || _smaRaw === "1" || _smaRaw === "true";
|
|
524276
|
+
if (_smaOn) {
|
|
524277
|
+
const _smaCallable = async (prompt) => {
|
|
524278
|
+
try {
|
|
524279
|
+
const _r = await this.backend.chatCompletion({
|
|
524280
|
+
messages: [
|
|
524281
|
+
{ role: "system", content: "You are a META-ANALYSIS sub-agent. Audit the implementer's stuck state and emit a structured JSON directive." },
|
|
524282
|
+
{ role: "user", content: prompt }
|
|
524283
|
+
],
|
|
524284
|
+
tools: [],
|
|
524285
|
+
temperature: 0,
|
|
524286
|
+
maxTokens: parseInt(process.env["OA_STUCK_META_MAX_TOKENS"] || "2048", 10) || 2048,
|
|
524287
|
+
timeoutMs: parseInt(process.env["OA_STUCK_META_TIMEOUT_MS"] || "120000", 10) || 12e4
|
|
524288
|
+
});
|
|
524289
|
+
const _c = _r?.choices?.[0]?.message?.content;
|
|
524290
|
+
return typeof _c === "string" ? _c : "";
|
|
524291
|
+
} catch {
|
|
524292
|
+
return "";
|
|
524293
|
+
}
|
|
524294
|
+
};
|
|
524295
|
+
const _smaCalls = _windowCalls.slice(-25).map((c9) => ({
|
|
524296
|
+
name: c9.name,
|
|
524297
|
+
argsKey: c9.argsKey,
|
|
524298
|
+
success: c9.success,
|
|
524299
|
+
outputPreview: (c9.outputPreview || "").split(/\r?\n/)[0]?.slice(0, 120) ?? ""
|
|
524300
|
+
}));
|
|
524301
|
+
const _smaPlan = (() => {
|
|
524302
|
+
try {
|
|
524303
|
+
const _todos = this.readSessionTodos() || [];
|
|
524304
|
+
return _todos.slice(0, 12).map((t2) => ({
|
|
524305
|
+
content: t2.content || "",
|
|
524306
|
+
reconciled: t2.status || "pending",
|
|
524307
|
+
rationale: "(reconcile context unavailable here; structural status only)"
|
|
524308
|
+
}));
|
|
524309
|
+
} catch {
|
|
524310
|
+
return [];
|
|
524311
|
+
}
|
|
524312
|
+
})();
|
|
524313
|
+
const _smaFailures = Array.from(this._failureReflections.entries()).map(([stem, entry]) => ({
|
|
524314
|
+
stem,
|
|
524315
|
+
attempts: entry.attempts,
|
|
524316
|
+
preview: (entry.wentWrong || "").slice(0, 200)
|
|
524317
|
+
})).sort((a2, b) => b.attempts - a2.attempts).slice(0, 5);
|
|
524318
|
+
const _smaTools = Array.from(this.tools.keys());
|
|
524319
|
+
runStuckAnalyzer({
|
|
524320
|
+
inputs: {
|
|
524321
|
+
goal: this._taskState.originalGoal || this._taskState.goal || "",
|
|
524322
|
+
workingDir: this._workingDirectory || process.cwd(),
|
|
524323
|
+
triggerReason: `reg44-${_trigLabels[0] || "unknown"}`,
|
|
524324
|
+
recentToolCalls: _smaCalls,
|
|
524325
|
+
planStatus: _smaPlan,
|
|
524326
|
+
recentFailures: _smaFailures,
|
|
524327
|
+
workspaceSummary: void 0,
|
|
524328
|
+
// world-state regen owns this; analyzer infers from calls
|
|
524329
|
+
availableTools: _smaTools,
|
|
524330
|
+
turn
|
|
524331
|
+
},
|
|
524332
|
+
callable: _smaCallable
|
|
524333
|
+
}).then((_smaResult) => {
|
|
524334
|
+
if (_smaResult.injection && !_smaResult.directive.parseFallback) {
|
|
524335
|
+
messages2.push({ role: "system", content: _smaResult.injection });
|
|
524336
|
+
this.emit({
|
|
524337
|
+
type: "status",
|
|
524338
|
+
content: `REG-49 stuck-meta-analyzer fired at turn ${turn} — diagnosis="${_smaResult.directive.diagnosis.slice(0, 80)}", next=${_smaResult.directive.next_action.tool}, ${_smaResult.durationMs}ms`,
|
|
524339
|
+
timestamp: (/* @__PURE__ */ new Date()).toISOString()
|
|
524340
|
+
});
|
|
524341
|
+
} else {
|
|
524342
|
+
this.emit({
|
|
524343
|
+
type: "status",
|
|
524344
|
+
content: `REG-49 stuck-meta-analyzer parse failed at turn ${turn} — falling back to REG-44 abstract halt only`,
|
|
524345
|
+
timestamp: (/* @__PURE__ */ new Date()).toISOString()
|
|
524346
|
+
});
|
|
524347
|
+
}
|
|
524348
|
+
}).catch((_e) => {
|
|
524349
|
+
this.emit({
|
|
524350
|
+
type: "status",
|
|
524351
|
+
content: `REG-49 stuck-meta-analyzer threw: ${_e instanceof Error ? _e.message : String(_e)} (non-fatal)`,
|
|
524352
|
+
timestamp: (/* @__PURE__ */ new Date()).toISOString()
|
|
524353
|
+
});
|
|
524354
|
+
});
|
|
524355
|
+
}
|
|
524356
|
+
} catch (_e) {
|
|
524357
|
+
}
|
|
523750
524358
|
}
|
|
523751
524359
|
}
|
|
523752
524360
|
}
|
|
@@ -596018,6 +596626,7 @@ function buildSubAgentTools(repoRoot, config) {
|
|
|
596018
596626
|
new TodoWriteTool(),
|
|
596019
596627
|
new TodoReadTool(),
|
|
596020
596628
|
new WorkingNotesTool(),
|
|
596629
|
+
new ProjectScaffoldingTool(),
|
|
596021
596630
|
// Code understanding + navigation
|
|
596022
596631
|
new CodebaseMapTool(repoRoot),
|
|
596023
596632
|
new SemanticMapTool(repoRoot),
|
|
@@ -596181,6 +596790,7 @@ function buildTools(repoRoot, config, contextWindowSize, modelTier) {
|
|
|
596181
596790
|
// Chunked file exploration + working notes + semantic map
|
|
596182
596791
|
new FileExploreTool(repoRoot),
|
|
596183
596792
|
new WorkingNotesTool(),
|
|
596793
|
+
new ProjectScaffoldingTool(),
|
|
596184
596794
|
// Agent-facing checklist (WO-TASK-02 — TodoWrite/TodoRead)
|
|
596185
596795
|
new TodoWriteTool(),
|
|
596186
596796
|
new TodoReadTool(),
|
package/npm-shrinkwrap.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "open-agents-ai",
|
|
3
|
-
"version": "0.187.
|
|
3
|
+
"version": "0.187.499",
|
|
4
4
|
"lockfileVersion": 3,
|
|
5
5
|
"requires": true,
|
|
6
6
|
"packages": {
|
|
7
7
|
"": {
|
|
8
8
|
"name": "open-agents-ai",
|
|
9
|
-
"version": "0.187.
|
|
9
|
+
"version": "0.187.499",
|
|
10
10
|
"hasInstallScript": true,
|
|
11
11
|
"license": "CC-BY-NC-4.0",
|
|
12
12
|
"dependencies": {
|
|
@@ -7165,12 +7165,12 @@
|
|
|
7165
7165
|
}
|
|
7166
7166
|
},
|
|
7167
7167
|
"node_modules/p-queue": {
|
|
7168
|
-
"version": "9.
|
|
7169
|
-
"resolved": "https://registry.npmjs.org/p-queue/-/p-queue-9.
|
|
7170
|
-
"integrity": "sha512-
|
|
7168
|
+
"version": "9.2.0",
|
|
7169
|
+
"resolved": "https://registry.npmjs.org/p-queue/-/p-queue-9.2.0.tgz",
|
|
7170
|
+
"integrity": "sha512-dWgLE8AH0HjQ9fe74pUkKkvzzYT18Inp4zra3lKHnnwqGvcfcUBrvF2EAVX+envufDNBOzpPq/IBUONDbI7+3g==",
|
|
7171
7171
|
"license": "MIT",
|
|
7172
7172
|
"dependencies": {
|
|
7173
|
-
"eventemitter3": "^5.0.
|
|
7173
|
+
"eventemitter3": "^5.0.4",
|
|
7174
7174
|
"p-timeout": "^7.0.0"
|
|
7175
7175
|
},
|
|
7176
7176
|
"engines": {
|
package/package.json
CHANGED