{"ok":true,"site":{"host":"constraint-lab.netlify.app","url":"https://constraint-lab.netlify.app/","type":"live","desc":"ConstraintLab — a human and agent workspace for deterministic factory scheduling.","tools":[{"name":"get_problem_state","kind":"answer","impl":"imperative","description":"Read the complete compact Factory Scheduling model, all stable-ID typed constraints, solve status, model version, and stale-solution state. This tool never mutates the model.","title":"Get problem state","annotations":{"readOnlyHint":true,"untrustedContentHint":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"add_job","kind":"act","impl":"imperative","description":"Add one validated job to the canonical scheduling model. References must use IDs returned by get_problem_state.","title":"Add job","annotations":{"readOnlyHint":false,"untrustedContentHint":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":80},"name":{"type":"string","minLength":1,"maxLength":80},"durationMinutes":{"type":"integer","exclusiveMinimum":0,"maximum":1440},"priority":{"type":"integer","minimum":1,"maximum":5},"earliestStart":{"type":"integer","minimum":0,"maximum":1440},"deadline":{"type":"integer","minimum":0,"maximum":1440},"requiredResource":{"type":"string","minLength":1,"maxLength":80},"predecessors":{"default":[],"maxItems":30,"type":"array","items":{"type":"string","minLength":1,"maxLength":80}}},"required":["name","durationMinutes","priority","predecessors"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"update_job","kind":"act","impl":"imperative","description":"Update one existing job by ID. Only name, durationMinutes, priority, earliestStart, deadline, requiredResource, and predecessors are allowed.","title":"Update job","annotations":{"readOnlyHint":false,"untrustedContentHint":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":80},"updates":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":80},"durationMinutes":{"type":"integer","exclusiveMinimum":0,"maximum":1440},"priority":{"type":"integer","minimum":1,"maximum":5},"earliestStart":{"anyOf":[{"type":"integer","minimum":0,"maximum":1440},{"type":"null"}]},"deadline":{"anyOf":[{"type":"integer","minimum":0,"maximum":1440},{"type":"null"}]},"requiredResource":{"anyOf":[{"type":"string","minLength":1,"maxLength":80},{"type":"null"}]},"predecessors":{"maxItems":30,"type":"array","items":{"type":"string","minLength":1,"maxLength":80}}},"additionalProperties":false}},"required":["id","updates"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"add_constraint","kind":"act","impl":"imperative","description":"Add exactly one typed scheduling constraint with a stable ID. Raw solver expressions and custom constraint types are not accepted.","title":"Add constraint","annotations":{"readOnlyHint":false,"untrustedContentHint":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","oneOf":[{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":80},"type":{"type":"string","const":"precedence"},"description":{"type":"string","minLength":1,"maxLength":180},"enabled":{"type":"boolean"},"source":{"type":"string","enum":["user","agent","system"]},"parameters":{"type":"object","properties":{"predecessorId":{"type":"string","minLength":1,"maxLength":80},"successorId":{"type":"string","minLength":1,"maxLength":80}},"required":["predecessorId","successorId"],"additionalProperties":false}},"required":["type","parameters"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":80},"type":{"type":"string","const":"resource_assignment"},"description":{"type":"string","minLength":1,"maxLength":180},"enabled":{"type":"boolean"},"source":{"type":"string","enum":["user","agent","system"]},"parameters":{"type":"object","properties":{"jobId":{"type":"string","minLength":1,"maxLength":80},"resourceId":{"type":"string","minLength":1,"maxLength":80}},"required":["jobId","resourceId"],"additionalProperties":false}},"required":["type","parameters"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":80},"type":{"type":"string","const":"resource_availability"},"description":{"type":"string","minLength":1,"maxLength":180},"enabled":{"type":"boolean"},"source":{"type":"string","enum":["user","agent","system"]},"parameters":{"type":"object","properties":{"resourceId":{"type":"string","minLength":1,"maxLength":80},"start":{"type":"integer","minimum":0,"maximum":1440},"end":{"type":"integer","minimum":0,"maximum":1440}},"required":["resourceId","start","end"],"additionalProperties":false}},"required":["type","parameters"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":80},"type":{"type":"string","const":"deadline"},"description":{"type":"string","minLength":1,"maxLength":180},"enabled":{"type":"boolean"},"source":{"type":"string","enum":["user","agent","system"]},"parameters":{"type":"object","properties":{"jobId":{"type":"string","minLength":1,"maxLength":80},"deadline":{"type":"integer","minimum":0,"maximum":1440}},"required":["jobId","deadline"],"additionalProperties":false}},"required":["type","parameters"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":80},"type":{"type":"string","const":"earliest_start"},"description":{"type":"string","minLength":1,"maxLength":180},"enabled":{"type":"boolean"},"source":{"type":"string","enum":["user","agent","system"]},"parameters":{"type":"object","properties":{"jobId":{"type":"string","minLength":1,"maxLength":80},"earliestStart":{"type":"integer","minimum":0,"maximum":1440}},"required":["jobId","earliestStart"],"additionalProperties":false}},"required":["type","parameters"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":80},"type":{"type":"string","const":"locked_start"},"description":{"type":"string","minLength":1,"maxLength":180},"enabled":{"type":"boolean"},"source":{"type":"string","enum":["user","agent","system"]},"parameters":{"type":"object","properties":{"jobId":{"type":"string","minLength":1,"maxLength":80},"start":{"type":"integer","minimum":0,"maximum":1440}},"required":["jobId","start"],"additionalProperties":false}},"required":["type","parameters"],"additionalProperties":false}]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"remove_constraint","kind":"act","impl":"imperative","description":"Remove one application-level constraint by its stable ID.","title":"Remove constraint","annotations":{"readOnlyHint":false,"untrustedContentHint":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":80}},"required":["id"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"set_objective","kind":"act","impl":"imperative","description":"Set the optimization objective. Only { type: 'makespan' } is supported in this build.","title":"Set objective","annotations":{"readOnlyHint":false,"untrustedContentHint":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string","const":"makespan"}},"required":["type"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"solve_problem","kind":"act","impl":"imperative","description":"Compile the current canonical model to a disjunctive-scheduling MILP, solve it with deterministic HiGHS in a Web Worker, and update shared solve state.","title":"Solve problem","annotations":{"readOnlyHint":false,"untrustedContentHint":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"get_solution","kind":"answer","impl":"imperative","description":"Read current job/resource assignments only when the solution matches the current model version. Returns STALE_SOLUTION after any structural change.","title":"Get solution","annotations":{"readOnlyHint":true,"untrustedContentHint":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"analyze_infeasibility","kind":"act","impl":"imperative","description":"When the last solve is infeasible, deterministically analyze typed constraints and return structured conflict facts. No LLM generates these facts.","title":"Analyze infeasibility","annotations":{"readOnlyHint":true,"untrustedContentHint":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"}],"category":"Productivity & Business","favicon":"/favicons/constraint-lab.netlify.app.svg","apiSurface":"spec","toolCount":9}}