diff --git a/crates/runx-cli/src/official_skills.rs b/crates/runx-cli/src/official_skills.rs index a3c4ff239..1c7128c96 100644 --- a/crates/runx-cli/src/official_skills.rs +++ b/crates/runx-cli/src/official_skills.rs @@ -12,383 +12,388 @@ pub(crate) struct OfficialSkillLockEntry { pub(crate) const OFFICIAL_SKILLS: &[OfficialSkillLockEntry] = &[ OfficialSkillLockEntry { skill_id: "runx/agency", - version: "sha-44dc0575da43", - digest: "cc47b9574d8aeddc679dc08ca983702e7a75c576ce04fb5bc50b63c7541747c8", + version: "sha-2e96918072e7", + digest: "1f6d1c8ad6052cd78ee5261e780495662f039567e9c683f73652845a41f84b35", }, OfficialSkillLockEntry { skill_id: "runx/brand-voice", - version: "sha-79c56911c0ba", - digest: "54bf1ed1013ebc91a5491fb86f15a1bda2e872ac073a12680c58278af0867528", + version: "sha-d39d83ff534e", + digest: "5d348688a458cf4569cf57e3b92871a4b020ab6759a59c16952d8ddb31e92fdb", }, OfficialSkillLockEntry { skill_id: "runx/business-ops", - version: "sha-75acf9d53694", - digest: "7801492f5b8fa34f0f6e91f9f2729396744c35fe517ae275885e07204bc52b6f", + version: "sha-0bbc010c6fa4", + digest: "844253d6b6327a0eee1419c8e6b2dc413196eacaddcd847655d6422cdd2b650b", }, OfficialSkillLockEntry { skill_id: "runx/charge", - version: "sha-0d05afcfa6ae", - digest: "c151b98be3a2a7ccd306d7395d906ffd1fc22e45a7d94ffe34c294e9db1c47ce", + version: "sha-fe359dc9f1c5", + digest: "f3d1d28fb31f57b2e76d4b67f23fbf26ada2476f18ebc0f2a550380bd269e11c", }, OfficialSkillLockEntry { skill_id: "runx/content-pipeline", - version: "sha-0efcbf2abed1", - digest: "b93475f254b458a92936cd4612b8d01a59c371876b810eb242b06ce184f2b798", + version: "sha-9b119ab98213", + digest: "d90fa7dffe735dba4d34964e07f327d22114770daba69552bbfc23440938abbf", }, OfficialSkillLockEntry { skill_id: "runx/data-store", - version: "sha-4b5c8438cb5a", - digest: "5af0e2dd3dd2116874e4fb886e0424f4b944c136b3430a10c31e400a0249113b", + version: "sha-49153d5ac526", + digest: "43cadec8780ee1975b160f4a58209d399ce7a9af1113602981bc8cec1a267450", }, OfficialSkillLockEntry { skill_id: "runx/deep-research-brief", - version: "sha-c2d071df7f50", - digest: "08cefe802c15e5be7d32ae9a363a6c42168e86f7fab92890e5ce5c994af367c9", + version: "sha-2617fb00b02b", + digest: "d51613411c669e16beb6ae673cede29c5c292bc69fb4ec53649e4f611c9778fd", }, OfficialSkillLockEntry { skill_id: "runx/dependency-cve-audit", - version: "sha-6db720882ba0", - digest: "427c964bccd3f5f41c71a90905dd74225547e8b7af11015978e4550db3c27249", + version: "sha-490901f9ea23", + digest: "ffd3424df1c47726df54b872316b436f5f07812efec2d0cdb762039b7877b634", }, OfficialSkillLockEntry { skill_id: "runx/design-skill", - version: "sha-0353a69bc33f", - digest: "da1eae6fa3016c24dd3347082fe8639577a0b169ebfa63050f0df145e448b82b", + version: "sha-f13d8086ad4e", + digest: "68b88be727ffea91001672355cdeb93e7abd9fe455af8f7251712dd67a858c6e", }, OfficialSkillLockEntry { skill_id: "runx/dispute-respond", - version: "sha-39c3ae5164c4", - digest: "81469e87f29886e11b27faa2249a4e83fae59659f84f6628c81da7de0bf762c5", + version: "sha-9c76f1295efb", + digest: "21f832e265a96af01a1e1f52660721b5a4e6fe9af2e17b02589825ddd23858f9", }, OfficialSkillLockEntry { skill_id: "runx/draft-content", - version: "sha-227b32600887", - digest: "356ec279727984c0432d7ff6e3700eea3a518e7eca3eec8e0d548a583e615a26", + version: "sha-f947821ff150", + digest: "a32027c9846e9abe158e023d5c05d7bdc33478b2f11e1060cbbfddd2ba14a7f1", }, OfficialSkillLockEntry { skill_id: "runx/ecosystem-brief", - version: "sha-38b4175917cd", - digest: "50256b25f1c4dfbb74dddce335d34d84c42725599e8f121067f816214545c6d7", + version: "sha-a1cb84158ecf", + digest: "07f0a9dc67ead2b4a12574715a3cc29632f8dd0088c3d4f4b4064c24473862cc", }, OfficialSkillLockEntry { skill_id: "runx/ecosystem-vuln-scan", - version: "sha-ae2d9968ada2", - digest: "4ef19f394dd9c905518e5e1be1afe98cf361c0adc27d6255153d194020b5e890", + version: "sha-f26195ce7917", + digest: "7cd70ccebae09c05d3b52867636c9141bf91e5cee55a2080ff0547593ac299d8", }, OfficialSkillLockEntry { skill_id: "runx/evolve", - version: "sha-e0e2b933e8a7", - digest: "aa446e7d3ab8a3168facd2372b8bd8fe63736a3e061438d38cc83ea8f294b971", + version: "sha-c22a2427a954", + digest: "32e0c77df9869cc7c9e4c9dec612e8f70e433e19fba8183dba68f7681896db79", }, OfficialSkillLockEntry { skill_id: "runx/github-sync", - version: "sha-e685e9e8b5c6", - digest: "6981adc877736f05a41d764b3e42d479d87de3bc2d69a65992dff457b635bd9a", + version: "sha-26a924ead758", + digest: "3cc78d87a7247d1bd0eb80fa4f6bcb125ae84a3980ad60c25f0091e312541205", }, OfficialSkillLockEntry { skill_id: "runx/governed-outbound", - version: "sha-1af59c16f770", - digest: "e177cd002efb896e0bba7a6352f19f4d1ec575db1ef548849244ea42725356a6", + version: "sha-fd99b05b7b05", + digest: "291cb25060a7c66b9d1fd50215ddeb49631c1cb50c6af145902ac6cef40e468b", }, OfficialSkillLockEntry { skill_id: "runx/improve-skill", - version: "sha-73e69bae0a5f", - digest: "f083e32ee65bcb6f6f338e8f98443fdb2546b8f63bdc6fcea234897eb30e762b", + version: "sha-aea0794aee7f", + digest: "363c8b8d7dfc0db82096b74836327b17527beb008226d46f595c6f04392ef161", }, OfficialSkillLockEntry { skill_id: "runx/inbox-and-calendar-exec", - version: "sha-ebeea3e0950c", - digest: "10e3aa69cb5fdca2202c881e3f18b7cc54b2b4b4ec9f625bec5d8335924d9b3e", + version: "sha-1a17324b6785", + digest: "8f5f723c6a0d0c0ffdcec76ad06d7cea0cf6ca2e59eb52869b95ce3a445b8364", }, OfficialSkillLockEntry { skill_id: "runx/issue-intake", - version: "sha-15369469618b", - digest: "cc964980fe249ac3633e7b30c664648f0df9406a0254ede9bb0e3cbcdebdd603", + version: "sha-ce17838662f3", + digest: "331df8ea7c2488375de401c7d694ed205bf0df0116b0a7f5cbd595f7bac83b0d", }, OfficialSkillLockEntry { skill_id: "runx/issue-to-pr", - version: "sha-6f5184ad4f50", - digest: "c62756dd6f63d2600075cd5ffcee74786b81ef9db99b8ccf9d79362c43595010", + version: "sha-389f31f159ce", + digest: "70dfa80d0a4c94a76be1325ad145b2dbb51c98088beb1e51cc60e800eda8eb73", }, OfficialSkillLockEntry { skill_id: "runx/issue-triage", - version: "sha-a5167273f34a", - digest: "10cbe7f936bc12f7f5e5a2aa926382a6b556c3ae0a572b0851d795316d909ab7", + version: "sha-4ea6c0f89316", + digest: "d1ffe77776f5e07f69821cb51e21e6f396b85d477915fe0965a8d84978d53bde", }, OfficialSkillLockEntry { skill_id: "runx/knowledge-router", - version: "sha-c9d30f1c392e", - digest: "bcc1f9162d1b64a6e4d922835b42e023611269e03a8e8f9c18cc3f310503d917", + version: "sha-edadff1ea73c", + digest: "fc285339f8720c96711e704eda33f8038041803c782b17b1561a656e1eaf249f", }, OfficialSkillLockEntry { skill_id: "runx/lead-enrichment", - version: "sha-374078af0e1a", - digest: "a8d1d744f3ec502ed3dd719bd06434d05854a2eaf55ce8ed8ceb57fe830f3b88", + version: "sha-27c9ec7068a4", + digest: "dd849d3b6f31920227cc79b123e3fdd1019e0808590dcca54ae0de22b98cd4b4", }, OfficialSkillLockEntry { skill_id: "runx/lead-router", - version: "sha-4345afde1d16", - digest: "4a27b60d2cdd54a5f02163473f756185f9fa5cb57e32c1f59f65fe3472ed3202", + version: "sha-039154cc8047", + digest: "3a805d6a6ebdc30ccb3b110fed9aca0468491f580216ac51fa76271a412c4033", }, OfficialSkillLockEntry { skill_id: "runx/least-privilege-auditor", - version: "sha-a31f1c09aa5c", - digest: "244df5dd8eed7900d1987c76060893d3c9cd65f420c5b8c177b19fa4e0b81ac2", + version: "sha-081b3a1d6ced", + digest: "ea9dff1b8e506f5a2d80191f1fdeba1842450880b1290e52b04795587d9a0b39", }, OfficialSkillLockEntry { skill_id: "runx/ledger", - version: "sha-3e6341beba7f", - digest: "f91e656d6fcef27dec6e12725c8015be47762514278f37342ff40761838e9f6c", + version: "sha-b35aecafea22", + digest: "a9589760963250e937acb209e649218763e697672ac02213d580934a4e2bd07d", + }, + OfficialSkillLockEntry { + skill_id: "runx/mandate-planner", + version: "sha-d5b241d8f580", + digest: "9ad0359a3d739405dd85ec990801090be0ad51c9a6cdbf0286a4e6a3229d73ae", }, OfficialSkillLockEntry { skill_id: "runx/messageboard", - version: "sha-7b9930ac9727", - digest: "7fb6092161a234fbea28681ec5e72afd9c2d380e547cf4ef97683f28bb9a6427", + version: "sha-44d48fe24516", + digest: "ef62398fb2c738a6f88509eb3fa42a1e9dcae91c3c4112b0acf0f7b99348f5ff", }, OfficialSkillLockEntry { skill_id: "runx/mock-charge", - version: "sha-52ddd89e5172", - digest: "51f21f9180a94ee12844f3b7ca3e4c508ce14727248660a982ec4c456117640e", + version: "sha-b9847af4401a", + digest: "9377a41c56171e13faae88e47844951e0d5b5c42fa5094d014b9cc539aaff260", }, OfficialSkillLockEntry { skill_id: "runx/mock-pay", - version: "sha-174dd46d1669", - digest: "efc70ddce02a87296a90072071141f66684349bce16888fb997371a8f7279c50", + version: "sha-b890a01ceb9c", + digest: "df06f83cc9388d5821e855483bf9536057edbaeefa47e9c2895e5d9916db0ded", }, OfficialSkillLockEntry { skill_id: "runx/mock-refund", - version: "sha-cf22c4334afc", - digest: "25fbf4792b69b3240b08141f4145d080db7bc0c357c2d8656ff7013d83684ac1", + version: "sha-710f486334ae", + digest: "b48d1efeae44bec5a63f717d4a58c4701ce94af48f1c6cd0507900a02c446134", }, OfficialSkillLockEntry { skill_id: "runx/moltbook", - version: "sha-1aa6f8210836", - digest: "14037d45fa2f7a5a154aba3903b2917d2d84a248e1898d2730109d3064c739e8", + version: "sha-f7927581e41d", + digest: "b6dc4af23af1bbccffbc51872118f0a18b22c16d2ab6047992caee6eed29854d", }, OfficialSkillLockEntry { skill_id: "runx/mpp-charge", - version: "sha-cb35686691da", - digest: "1f5ddff16031843acbd5f7180b0647e5ebf8a02c59e446d51c30890ef7e327db", + version: "sha-e72623ddf8fb", + digest: "e306f91b4cf3843c675323b1bcf5ec4c2c8a06a63c840049d2f036fbcc1b0972", }, OfficialSkillLockEntry { skill_id: "runx/mpp-pay", - version: "sha-41927d065dc3", - digest: "bebe8f94a802986c9b8d9dacb73c9753825d61aa24504130adff495d1f7ef099", + version: "sha-e13e09b21f40", + digest: "a8a6b1ade6939443ffccc15268db2cc5a47c024375227c178cfd2cde95a50f29", }, OfficialSkillLockEntry { skill_id: "runx/mpp-refund", - version: "sha-8db33fec8299", - digest: "6f2e22db27e85c02d6c05836c2d9e8812c697ba34fe7bfcdfd6fd679d8ee5c18", + version: "sha-65f5e036e4cf", + digest: "71395405606fcc97588ce426d9fb259f50e382577e6a0a29149fd5f1f493d7cd", }, OfficialSkillLockEntry { skill_id: "runx/n8n-handoff", - version: "sha-a259d906c37d", - digest: "2f4bd1c042348cd8734f7c7b9b16963a4e15a1585f79f201890a1a665a48d024", + version: "sha-9945fb159adc", + digest: "ca17f93484c3de25a5b7e8195237feedc7e4f6043a28d7ef58ef0d475f3bde11", }, OfficialSkillLockEntry { skill_id: "runx/nitrosend", - version: "sha-a46e1a582e9c", - digest: "cc9c36d6da648078c7222e56d91219575a390029e8737bae1cb5f354cb55f603", + version: "sha-9328d81dccfb", + digest: "995d495e6c0ff11b0f6fb709702f7e9d8a294635abc81677525b0e581bf539d0", }, OfficialSkillLockEntry { skill_id: "runx/nws-weather-forecast", - version: "sha-0aeb4bcf16d3", - digest: "382cdef84f660e7cfdc2dbbfd7e8382d204d1f4ee46ffa019549615f9c2f745c", + version: "sha-30229c94289b", + digest: "e427cf6fc479f3085cc4906e638b1aabdc3f3bfc19b6b7297c5d2f4e3217e168", }, OfficialSkillLockEntry { skill_id: "runx/open-meteo-weather-forecast", - version: "sha-5d9f95438c9a", - digest: "041e0ec18fa4b646b46b72d34662eabbbfbc43ab5a3a65423b49b3e94e81d159", + version: "sha-b7e5dc601e6f", + digest: "a60a7e8a978e55bbb513a7a3e6109f164f5de020267f156d80f136fe193d1d30", }, OfficialSkillLockEntry { skill_id: "runx/ops-desk", - version: "sha-a2f4840047ee", - digest: "f32f21b6ed6c03f5623bc98f2823365ebcabc721cedf64e8a67c556613a35f59", + version: "sha-86a94f382f12", + digest: "e8c069b6e65073c8a56d6625e0e5963bf154c90e38366eb1c14eeccb00c8536d", }, OfficialSkillLockEntry { skill_id: "runx/overlay-generator", - version: "sha-b5dc11a7088d", - digest: "e19bbe8dc5f3bf732dc265a1808819587e67759fdf3014d89bc9bf6629400b18", + version: "sha-9feda1e710f3", + digest: "bbb8910846d942db5e5ae9b43bb7a30a515440a104ce140e0767c4538199ebe3", }, OfficialSkillLockEntry { skill_id: "runx/policy-author", - version: "sha-a1f056d7c7f7", - digest: "b3bbcbda2711d78c59c572d99206c3116347e9751506301ca40a52c75e85bc84", + version: "sha-cebda63f65d2", + digest: "c6f3933ed77c863750ddbbf92911d9d62582d9fb95c697b0d173437ee2829589", }, OfficialSkillLockEntry { skill_id: "runx/pr-review-note", - version: "sha-537dd9fc3c6b", - digest: "b073ec884f56c9e412d0c1039d5f28f163df0f5530eb0bee922ed4c557955c52", + version: "sha-5f739386a415", + digest: "9e310217b6788ff80f68c91de80bea19c499bb27d3a5791016fcd2d4fc550f4f", }, OfficialSkillLockEntry { skill_id: "runx/prior-art", - version: "sha-2555f66bde78", - digest: "991ec474c6013ce9d29d84df810c14db567328607018c4de9606ba3952d8b9c7", + version: "sha-d6d72dc9351d", + digest: "6804491e221819e9cf3b49e171f1ac48bbf538b7a319b355efc89d3207f33827", }, OfficialSkillLockEntry { skill_id: "runx/receipt-auditor", - version: "sha-acbe46a62851", - digest: "155c522fb8e029bc4bd83863ea0960e23a8936c47977b70052aa9b119675d61e", + version: "sha-755afef71d94", + digest: "a4c10f32fd499c2bf1a2431c3396db6016fb058fd335724292cb634627772170", }, OfficialSkillLockEntry { skill_id: "runx/redact-pii", - version: "sha-2aff473ec36f", - digest: "200d22c5e671b89e0ac8b837564c3a27e17ba6eb5bf93c80277966e981cf2b52", + version: "sha-8cae2d0a9e03", + digest: "0a0aacf2bbc6c92e3df944dad1755599a409fe505635d9ac2592a262437d85ad", }, OfficialSkillLockEntry { skill_id: "runx/reflect-digest", - version: "sha-b92263c8a347", - digest: "732a9e98825f5eb36827884fdedb68b01a08bd23494f48c0568980e7b9469fe6", + version: "sha-33e40618f60d", + digest: "7273381ddb877fafd0f11c75c9ef43c6dfe5810c39a0e590d032daf8c36bde7e", }, OfficialSkillLockEntry { skill_id: "runx/refund", - version: "sha-4271ef5da656", - digest: "1295dd1950b137f828319d3d56491241ba8629c56ede9e50a736e61e96dd1a9a", + version: "sha-5f7bf48d6fce", + digest: "e7d475032e870134cb39b2436bb92028a7ae69c0b590eccf7afa18d3819cd141", }, OfficialSkillLockEntry { skill_id: "runx/release", - version: "sha-76b9da654f43", - digest: "20b8f78fee305165f010e501d5349897a384f323a1b98dbef864dbbc763c5a07", + version: "sha-b35e3819abc1", + digest: "199b5035647b2d76c3e8a857c1c48e7fa65b95444a2cf4d373ecd806b71591ef", }, OfficialSkillLockEntry { skill_id: "runx/research", - version: "sha-65df55554027", - digest: "4c729e750abddc00379902686439d90965e7c593b6bcb3606ef7e0bc66cecd66", + version: "sha-6d3e060f1e46", + digest: "9968f3510533295f292ab5b45150fa5201b8b56a49d140414700ddd7d5938e5f", }, OfficialSkillLockEntry { skill_id: "runx/review-receipt", - version: "sha-a24882594b28", - digest: "88e529e362d21e05cc31f47be240e91aae352e10cf3e321e9de864bb272af5c8", + version: "sha-f4737b3583cc", + digest: "c1661b757250bfc59a5a47329646002fe48472b5f035f6280ae6b74052b19da3", }, OfficialSkillLockEntry { skill_id: "runx/review-skill", - version: "sha-622805df5ff3", - digest: "6fc1b341d55e3c6be8a5f7693dfe3312654b89a14f88fe42e4ffc84a65a9cd09", + version: "sha-90e916a9b33c", + digest: "516c5d33ed154fde80f68a5cb62f3c37c375e766e339079a8c070007012e5557", }, OfficialSkillLockEntry { skill_id: "runx/run-history-analyst", - version: "sha-0ec78eb20018", - digest: "1a1441365a20b74442998656478fc3d530f2d09f25f811d970b403a8a7920df4", + version: "sha-168ba117e13f", + digest: "b413c6aebf8fc2537c9de6f27e31e0a968266d7959f1b20089fa15a01a34db29", }, OfficialSkillLockEntry { skill_id: "runx/sandbox-harden", - version: "sha-e5f346fbac0f", - digest: "15676f191d6878edf96006b006ad78dda6c53f5128f7e3e84fa346941a635fdc", + version: "sha-49e835919dc4", + digest: "e3a7bd875dcb1fa0d1b59a5ab344543e355221a64e7145acb546e05862bc7d6a", }, OfficialSkillLockEntry { skill_id: "runx/send-as", - version: "sha-37e798437c61", - digest: "ee71759e8099dba9a4925a81b2da69c1d83e73a6fd57b3e21839a6bb637e9ca1", + version: "sha-23b4e5f8b695", + digest: "f8e88ef883d09ab8220da637923e37e1ef5a7dbf08343985fb81db0237853f8d", }, OfficialSkillLockEntry { skill_id: "runx/settle-invoice", - version: "sha-dff8399d530f", - digest: "f016ad099d4777d37e06bd3ca5412293166bee4fa15fba8eba1ffab77f729246", + version: "sha-5a3f41c8f1c6", + digest: "38dfb1e09201eb88892fb5a60d42f27221e5027aaae06c9029d4e9d09f21e7be", }, OfficialSkillLockEntry { skill_id: "runx/sign-receipt", - version: "sha-03e0b8268637", - digest: "fc5e848c9a8a1e7ae22de8839789ad949038e2cf699081c1cbeab116bfd73e6a", + version: "sha-4e322b563cda", + digest: "de75d97f75c93223607a67aa715f78bdea62d4992daf1464602e86655d3ca69e", }, OfficialSkillLockEntry { skill_id: "runx/skill-lab", - version: "sha-274b0e06d901", - digest: "46d70be92a655c20e47b4cd8674b2e19d1d4257029a073319805c4235bdc6441", + version: "sha-794263942964", + digest: "84da2113d6e5675aeb4fbd958f3d7866209fa89cb08ccbe0aee5269561e14c81", }, OfficialSkillLockEntry { skill_id: "runx/skill-testing", - version: "sha-9113dacaa62a", - digest: "93f7a0c009e289862fcc9236effdf0ac75197e9eb042a83200720d23d01cb443", + version: "sha-918538e1aff5", + digest: "f7ad658eeba0bf787afb152a91840808421121c4a13305403a31e9440e56a0c7", }, OfficialSkillLockEntry { skill_id: "runx/slack-notify", - version: "sha-33d69b8fb325", - digest: "9e0abd47c54455add3c715e18c371c427e0bbb0d617ed0212f60d766f62c2856", + version: "sha-ec4a6dbf2f8d", + digest: "e3c52023bba6fde4d594080971550838d86a924db9fd8050854a4f669eceb1d9", }, OfficialSkillLockEntry { skill_id: "runx/sourcey", - version: "sha-0ddf49779321", - digest: "4b6316c7fbb323b7d27d304deb8f11cb8f939dc31e0b74349d56f27abf618504", + version: "sha-419dd0e3ddc3", + digest: "27f0ad604fd96a3cb9fe306d15585d67ba604c3369c76764d2290e9af6403fbc", }, OfficialSkillLockEntry { skill_id: "runx/spend", - version: "sha-6599445d02b3", - digest: "4b9810ee99bbbc58e467547595e0cdb7d67ad117f8cbba422b6e6e5e2b065fc5", + version: "sha-5535af79e9da", + digest: "23ad76e65b67b6d382f01d4c38a9b0bd0820b8edf5f0eb845a71d78516e95d66", }, OfficialSkillLockEntry { skill_id: "runx/sql-analyst", - version: "sha-95e6fba89c33", - digest: "054798d4b29958f90300ea940c94b73233c0d5c5ff19e7156278b31e99e68475", + version: "sha-ea11154ae580", + digest: "76d2bfc21ddf27a59b9ef6afc2f4494810ebd62520c3e0da7cb8a943586223f7", }, OfficialSkillLockEntry { skill_id: "runx/stripe-charge", - version: "sha-fac92c49fa9b", - digest: "34b04a5ba67c0de4e682519cd1a6c160e097a08b3c5eaf4537441e709d3ba982", + version: "sha-d75da6bc3c58", + digest: "5619a15d016d2099c76a2ca0a7ed1f529d7649b8c684f24746c4ce5e1011dbc5", }, OfficialSkillLockEntry { skill_id: "runx/stripe-pay", - version: "sha-36ed79109851", - digest: "cd0f34e02d6d5e89df53acaf3bc20c85141a97c681f9d32a08b041818c8ff0ca", + version: "sha-0f2f66ed638c", + digest: "4f30e98fb4c04f6c3068b5b3bd41f462c4557d80f4e2a78865d49cc8b8762ae5", }, OfficialSkillLockEntry { skill_id: "runx/stripe-refund", - version: "sha-e513d3aed77c", - digest: "2bfa94189cd3b7084a3b29e1f83de2d0787d28c5f0c962a15bac76155c24d95f", + version: "sha-4202490a76a2", + digest: "6a8e6902a01bf985f3a71838b701c42a2c4a2278703dce3b8bacfea5ff4f0297", }, OfficialSkillLockEntry { skill_id: "runx/structured-extraction", - version: "sha-22eeb86d17f4", - digest: "2c83db0c1f170af2e84ca0237e0850108254415bdcffdc57d2a6e66197cef133", + version: "sha-9915d65ed5f5", + digest: "e9f781dae6f2493088e44c6ca33a3a57ac5d835e960d074c040d944512f00480", }, OfficialSkillLockEntry { skill_id: "runx/support-triage-reply", - version: "sha-93233458fd14", - digest: "5c6fc18bf3013a1845de83641147f8421ceb1599269e4b3ed111d25e75053fda", + version: "sha-47f3c99cc852", + digest: "8b4ac7b0963a1992c8e478f2ec35af6bb5abfd9a86d8bdd88508b1a6a33a4b71", }, OfficialSkillLockEntry { skill_id: "runx/taste-profile", - version: "sha-30ae4695f7a2", - digest: "bebc7d42b982295105d1da03ea392f1384977269adf1705905e1833e73dc78ae", + version: "sha-b38093d367a9", + digest: "3975fc3234e839cafa14aeb2aa1a372d38a1648bb19c7663c7ebf831da6a1cdc", }, OfficialSkillLockEntry { skill_id: "runx/vault-unseal", - version: "sha-15cd18f5b44e", - digest: "0c2210ff956c0fca388ff3829f31946aa21e02626ee3ae29aee41ff94dd3cc10", + version: "sha-4116115552f2", + digest: "6f7472040add1d0b28f6ad54ed40908ed96a4103696fdadaa39437cd5007ae73", }, OfficialSkillLockEntry { skill_id: "runx/vuln-scan", - version: "sha-71f8b23b780a", - digest: "a42e03ed700f4c60895ee46883adaa30a82890f3a82798a82d1d1c21ca73181a", + version: "sha-67a3c4b6ad93", + digest: "d1367224c3a5f2e9d875f12c362558e25dedd85bbdc953d2ffc484b62dd9839b", }, OfficialSkillLockEntry { skill_id: "runx/weather-forecast", - version: "sha-498fe9afa450", - digest: "2d104a7c806819c53c62f475e5d44e21ebefd940302a0b15b268721a5ee7f426", + version: "sha-4dba7e3fddff", + digest: "3909a8f32af5b0067992fc5fbe4bc4e5fe883e4c610e64150ed8eb4072d3c474", }, OfficialSkillLockEntry { skill_id: "runx/web-fetch", - version: "sha-fec9491a67bf", - digest: "9d744ec5179a797007727f63eab50ac5d45b321d07a7de73a31baa2b60e1c5a8", + version: "sha-6bf1ec9e9572", + digest: "a8660dd0622a506c9f993f1a2f23716a1dc40da56d25cf5086913da317ed4ad8", }, OfficialSkillLockEntry { skill_id: "runx/work-plan", - version: "sha-e6dd3bc7d087", - digest: "ba007b997503258ca52e6a067e0dd6ed12ec7250add5dae35e048663b2a502a2", + version: "sha-a76802b21c8e", + digest: "eae6a5bcb7a6da20401c11663bbfd4547beb31f254862f1f46e056f0139fe4ba", }, OfficialSkillLockEntry { skill_id: "runx/write-harness", - version: "sha-f69b01f883e0", - digest: "8fbac78e4c760a124c704ce62aa11ecb8b65b165c72a81fd2c1de163c5bb259b", + version: "sha-df9683590a4b", + digest: "44fbb4930f3b97cbd1a74c77efb95a9b0ad3269666039af6ef33d3ddb6a3b25d", }, OfficialSkillLockEntry { skill_id: "runx/x402-pay", - version: "sha-008aef3f3b2e", - digest: "18e4e8c85606f201463d29f4aca8cf910f84293a720a68b2090bd0df1544a62c", + version: "sha-08f949ce49f2", + digest: "e1bac6c76685f652d0c079245c1d023dbbb621c8982035474c66ac562f08bc85", }, OfficialSkillLockEntry { skill_id: "runx/zapier-handoff", - version: "sha-81a7bdb12d33", - digest: "6f339f817a8d17d3a5a51e4676ef6a310278228fb9f97e260908c28882af18ed", + version: "sha-26021e8f616e", + digest: "923ed727ea9386cead213f8a5286e76fc9302870b6d7e45ddd50855d35a26513", }, ]; diff --git a/crates/runx-runtime/src/adapters/catalog.rs b/crates/runx-runtime/src/adapters/catalog.rs index fc9230bd7..7628c9608 100644 --- a/crates/runx-runtime/src/adapters/catalog.rs +++ b/crates/runx-runtime/src/adapters/catalog.rs @@ -16,6 +16,7 @@ use crate::adapter::{ }; use crate::adapter_pipeline::{AdapterCapture, AdapterProjection}; use crate::adapters::cli_tool::CliToolAdapter; +use crate::execution::output_projection::data_envelope; use crate::credentials::CredentialDelivery; use crate::execution::output_projection::data_envelope; use crate::json_render::json_number_string; diff --git a/packages/cli/src/official-skills.lock.json b/packages/cli/src/official-skills.lock.json index aa39784c0..7a2a3f741 100644 --- a/packages/cli/src/official-skills.lock.json +++ b/packages/cli/src/official-skills.lock.json @@ -1,533 +1,540 @@ [ { "skill_id": "runx/agency", - "version": "sha-44dc0575da43", - "digest": "cc47b9574d8aeddc679dc08ca983702e7a75c576ce04fb5bc50b63c7541747c8", + "version": "sha-2e96918072e7", + "digest": "1f6d1c8ad6052cd78ee5261e780495662f039567e9c683f73652845a41f84b35", "catalog_visibility": "public", "catalog_role": "canonical" }, { "skill_id": "runx/brand-voice", - "version": "sha-79c56911c0ba", - "digest": "54bf1ed1013ebc91a5491fb86f15a1bda2e872ac073a12680c58278af0867528", + "version": "sha-d39d83ff534e", + "digest": "5d348688a458cf4569cf57e3b92871a4b020ab6759a59c16952d8ddb31e92fdb", "catalog_visibility": "public", "catalog_role": "context" }, { "skill_id": "runx/business-ops", - "version": "sha-75acf9d53694", - "digest": "7801492f5b8fa34f0f6e91f9f2729396744c35fe517ae275885e07204bc52b6f", + "version": "sha-0bbc010c6fa4", + "digest": "844253d6b6327a0eee1419c8e6b2dc413196eacaddcd847655d6422cdd2b650b", "catalog_visibility": "public", "catalog_role": "canonical" }, { "skill_id": "runx/charge", - "version": "sha-0d05afcfa6ae", - "digest": "c151b98be3a2a7ccd306d7395d906ffd1fc22e45a7d94ffe34c294e9db1c47ce", + "version": "sha-fe359dc9f1c5", + "digest": "f3d1d28fb31f57b2e76d4b67f23fbf26ada2476f18ebc0f2a550380bd269e11c", "catalog_visibility": "public", "catalog_role": "canonical" }, { "skill_id": "runx/content-pipeline", - "version": "sha-0efcbf2abed1", - "digest": "b93475f254b458a92936cd4612b8d01a59c371876b810eb242b06ce184f2b798", + "version": "sha-9b119ab98213", + "digest": "d90fa7dffe735dba4d34964e07f327d22114770daba69552bbfc23440938abbf", "catalog_visibility": "public", "catalog_role": "context" }, { "skill_id": "runx/data-store", - "version": "sha-4b5c8438cb5a", - "digest": "5af0e2dd3dd2116874e4fb886e0424f4b944c136b3430a10c31e400a0249113b", + "version": "sha-49153d5ac526", + "digest": "43cadec8780ee1975b160f4a58209d399ce7a9af1113602981bc8cec1a267450", "catalog_visibility": "public", "catalog_role": "canonical" }, { "skill_id": "runx/deep-research-brief", - "version": "sha-c2d071df7f50", - "digest": "08cefe802c15e5be7d32ae9a363a6c42168e86f7fab92890e5ce5c994af367c9", + "version": "sha-2617fb00b02b", + "digest": "d51613411c669e16beb6ae673cede29c5c292bc69fb4ec53649e4f611c9778fd", "catalog_visibility": "public", "catalog_role": "context" }, { "skill_id": "runx/dependency-cve-audit", - "version": "sha-6db720882ba0", - "digest": "427c964bccd3f5f41c71a90905dd74225547e8b7af11015978e4550db3c27249", + "version": "sha-490901f9ea23", + "digest": "ffd3424df1c47726df54b872316b436f5f07812efec2d0cdb762039b7877b634", "catalog_visibility": "public", "catalog_role": "canonical" }, { "skill_id": "runx/design-skill", - "version": "sha-0353a69bc33f", - "digest": "da1eae6fa3016c24dd3347082fe8639577a0b169ebfa63050f0df145e448b82b", + "version": "sha-f13d8086ad4e", + "digest": "68b88be727ffea91001672355cdeb93e7abd9fe455af8f7251712dd67a858c6e", "catalog_visibility": "public", "catalog_role": "context" }, { "skill_id": "runx/dispute-respond", - "version": "sha-39c3ae5164c4", - "digest": "81469e87f29886e11b27faa2249a4e83fae59659f84f6628c81da7de0bf762c5", + "version": "sha-9c76f1295efb", + "digest": "21f832e265a96af01a1e1f52660721b5a4e6fe9af2e17b02589825ddd23858f9", "catalog_visibility": "public", "catalog_role": "canonical" }, { "skill_id": "runx/draft-content", - "version": "sha-227b32600887", - "digest": "356ec279727984c0432d7ff6e3700eea3a518e7eca3eec8e0d548a583e615a26", + "version": "sha-f947821ff150", + "digest": "a32027c9846e9abe158e023d5c05d7bdc33478b2f11e1060cbbfddd2ba14a7f1", "catalog_visibility": "public", "catalog_role": "context" }, { "skill_id": "runx/ecosystem-brief", - "version": "sha-38b4175917cd", - "digest": "50256b25f1c4dfbb74dddce335d34d84c42725599e8f121067f816214545c6d7", + "version": "sha-a1cb84158ecf", + "digest": "07f0a9dc67ead2b4a12574715a3cc29632f8dd0088c3d4f4b4064c24473862cc", "catalog_visibility": "public", "catalog_role": "context" }, { "skill_id": "runx/ecosystem-vuln-scan", - "version": "sha-ae2d9968ada2", - "digest": "4ef19f394dd9c905518e5e1be1afe98cf361c0adc27d6255153d194020b5e890", + "version": "sha-f26195ce7917", + "digest": "7cd70ccebae09c05d3b52867636c9141bf91e5cee55a2080ff0547593ac299d8", "catalog_visibility": "public", "catalog_role": "context" }, { "skill_id": "runx/evolve", - "version": "sha-e0e2b933e8a7", - "digest": "aa446e7d3ab8a3168facd2372b8bd8fe63736a3e061438d38cc83ea8f294b971", + "version": "sha-c22a2427a954", + "digest": "32e0c77df9869cc7c9e4c9dec612e8f70e433e19fba8183dba68f7681896db79", "catalog_visibility": "public", "catalog_role": "canonical" }, { "skill_id": "runx/github-sync", - "version": "sha-e685e9e8b5c6", - "digest": "6981adc877736f05a41d764b3e42d479d87de3bc2d69a65992dff457b635bd9a", + "version": "sha-26a924ead758", + "digest": "3cc78d87a7247d1bd0eb80fa4f6bcb125ae84a3980ad60c25f0091e312541205", "catalog_visibility": "public", "catalog_role": "branded" }, { "skill_id": "runx/governed-outbound", - "version": "sha-1af59c16f770", - "digest": "e177cd002efb896e0bba7a6352f19f4d1ec575db1ef548849244ea42725356a6", + "version": "sha-fd99b05b7b05", + "digest": "291cb25060a7c66b9d1fd50215ddeb49631c1cb50c6af145902ac6cef40e468b", "catalog_visibility": "public", "catalog_role": "context" }, { "skill_id": "runx/improve-skill", - "version": "sha-73e69bae0a5f", - "digest": "f083e32ee65bcb6f6f338e8f98443fdb2546b8f63bdc6fcea234897eb30e762b", + "version": "sha-aea0794aee7f", + "digest": "363c8b8d7dfc0db82096b74836327b17527beb008226d46f595c6f04392ef161", "catalog_visibility": "public", "catalog_role": "canonical" }, { "skill_id": "runx/inbox-and-calendar-exec", - "version": "sha-ebeea3e0950c", - "digest": "10e3aa69cb5fdca2202c881e3f18b7cc54b2b4b4ec9f625bec5d8335924d9b3e", + "version": "sha-1a17324b6785", + "digest": "8f5f723c6a0d0c0ffdcec76ad06d7cea0cf6ca2e59eb52869b95ce3a445b8364", "catalog_visibility": "public", "catalog_role": "context" }, { "skill_id": "runx/issue-intake", - "version": "sha-15369469618b", - "digest": "cc964980fe249ac3633e7b30c664648f0df9406a0254ede9bb0e3cbcdebdd603", + "version": "sha-ce17838662f3", + "digest": "331df8ea7c2488375de401c7d694ed205bf0df0116b0a7f5cbd595f7bac83b0d", "catalog_visibility": "public", "catalog_role": "context" }, { "skill_id": "runx/issue-to-pr", - "version": "sha-6f5184ad4f50", - "digest": "c62756dd6f63d2600075cd5ffcee74786b81ef9db99b8ccf9d79362c43595010", + "version": "sha-389f31f159ce", + "digest": "70dfa80d0a4c94a76be1325ad145b2dbb51c98088beb1e51cc60e800eda8eb73", "catalog_visibility": "public", "catalog_role": "context" }, { "skill_id": "runx/issue-triage", - "version": "sha-a5167273f34a", - "digest": "10cbe7f936bc12f7f5e5a2aa926382a6b556c3ae0a572b0851d795316d909ab7", + "version": "sha-4ea6c0f89316", + "digest": "d1ffe77776f5e07f69821cb51e21e6f396b85d477915fe0965a8d84978d53bde", "catalog_visibility": "public", "catalog_role": "context" }, { "skill_id": "runx/knowledge-router", - "version": "sha-c9d30f1c392e", - "digest": "bcc1f9162d1b64a6e4d922835b42e023611269e03a8e8f9c18cc3f310503d917", + "version": "sha-edadff1ea73c", + "digest": "fc285339f8720c96711e704eda33f8038041803c782b17b1561a656e1eaf249f", "catalog_visibility": "public", "catalog_role": "context" }, { "skill_id": "runx/lead-enrichment", - "version": "sha-374078af0e1a", - "digest": "a8d1d744f3ec502ed3dd719bd06434d05854a2eaf55ce8ed8ceb57fe830f3b88", + "version": "sha-27c9ec7068a4", + "digest": "dd849d3b6f31920227cc79b123e3fdd1019e0808590dcca54ae0de22b98cd4b4", "catalog_visibility": "public", "catalog_role": "context" }, { "skill_id": "runx/lead-router", - "version": "sha-4345afde1d16", - "digest": "4a27b60d2cdd54a5f02163473f756185f9fa5cb57e32c1f59f65fe3472ed3202", + "version": "sha-039154cc8047", + "digest": "3a805d6a6ebdc30ccb3b110fed9aca0468491f580216ac51fa76271a412c4033", "catalog_visibility": "public", "catalog_role": "context" }, { "skill_id": "runx/least-privilege-auditor", - "version": "sha-a31f1c09aa5c", - "digest": "244df5dd8eed7900d1987c76060893d3c9cd65f420c5b8c177b19fa4e0b81ac2", + "version": "sha-081b3a1d6ced", + "digest": "ea9dff1b8e506f5a2d80191f1fdeba1842450880b1290e52b04795587d9a0b39", "catalog_visibility": "public", "catalog_role": "canonical" }, { "skill_id": "runx/ledger", - "version": "sha-3e6341beba7f", - "digest": "f91e656d6fcef27dec6e12725c8015be47762514278f37342ff40761838e9f6c", + "version": "sha-b35aecafea22", + "digest": "a9589760963250e937acb209e649218763e697672ac02213d580934a4e2bd07d", + "catalog_visibility": "public", + "catalog_role": "canonical" + }, + { + "skill_id": "runx/mandate-planner", + "version": "sha-d5b241d8f580", + "digest": "9ad0359a3d739405dd85ec990801090be0ad51c9a6cdbf0286a4e6a3229d73ae", "catalog_visibility": "public", "catalog_role": "canonical" }, { "skill_id": "runx/messageboard", - "version": "sha-7b9930ac9727", - "digest": "7fb6092161a234fbea28681ec5e72afd9c2d380e547cf4ef97683f28bb9a6427", + "version": "sha-44d48fe24516", + "digest": "ef62398fb2c738a6f88509eb3fa42a1e9dcae91c3c4112b0acf0f7b99348f5ff", "catalog_visibility": "public", "catalog_role": "canonical" }, { "skill_id": "runx/mock-charge", - "version": "sha-52ddd89e5172", - "digest": "51f21f9180a94ee12844f3b7ca3e4c508ce14727248660a982ec4c456117640e", + "version": "sha-b9847af4401a", + "digest": "9377a41c56171e13faae88e47844951e0d5b5c42fa5094d014b9cc539aaff260", "catalog_visibility": "internal", "catalog_role": "harness-fixture" }, { "skill_id": "runx/mock-pay", - "version": "sha-174dd46d1669", - "digest": "efc70ddce02a87296a90072071141f66684349bce16888fb997371a8f7279c50", + "version": "sha-b890a01ceb9c", + "digest": "df06f83cc9388d5821e855483bf9536057edbaeefa47e9c2895e5d9916db0ded", "catalog_visibility": "internal", "catalog_role": "harness-fixture" }, { "skill_id": "runx/mock-refund", - "version": "sha-cf22c4334afc", - "digest": "25fbf4792b69b3240b08141f4145d080db7bc0c357c2d8656ff7013d83684ac1", + "version": "sha-710f486334ae", + "digest": "b48d1efeae44bec5a63f717d4a58c4701ce94af48f1c6cd0507900a02c446134", "catalog_visibility": "internal", "catalog_role": "harness-fixture" }, { "skill_id": "runx/moltbook", - "version": "sha-1aa6f8210836", - "digest": "14037d45fa2f7a5a154aba3903b2917d2d84a248e1898d2730109d3064c739e8", + "version": "sha-f7927581e41d", + "digest": "b6dc4af23af1bbccffbc51872118f0a18b22c16d2ab6047992caee6eed29854d", "catalog_visibility": "public", "catalog_role": "context" }, { "skill_id": "runx/mpp-charge", - "version": "sha-cb35686691da", - "digest": "1f5ddff16031843acbd5f7180b0647e5ebf8a02c59e446d51c30890ef7e327db", + "version": "sha-e72623ddf8fb", + "digest": "e306f91b4cf3843c675323b1bcf5ec4c2c8a06a63c840049d2f036fbcc1b0972", "catalog_visibility": "internal", "catalog_role": "runtime-path" }, { "skill_id": "runx/mpp-pay", - "version": "sha-41927d065dc3", - "digest": "bebe8f94a802986c9b8d9dacb73c9753825d61aa24504130adff495d1f7ef099", + "version": "sha-e13e09b21f40", + "digest": "a8a6b1ade6939443ffccc15268db2cc5a47c024375227c178cfd2cde95a50f29", "catalog_visibility": "internal", "catalog_role": "runtime-path" }, { "skill_id": "runx/mpp-refund", - "version": "sha-8db33fec8299", - "digest": "6f2e22db27e85c02d6c05836c2d9e8812c697ba34fe7bfcdfd6fd679d8ee5c18", + "version": "sha-65f5e036e4cf", + "digest": "71395405606fcc97588ce426d9fb259f50e382577e6a0a29149fd5f1f493d7cd", "catalog_visibility": "internal", "catalog_role": "runtime-path" }, { "skill_id": "runx/n8n-handoff", - "version": "sha-a259d906c37d", - "digest": "2f4bd1c042348cd8734f7c7b9b16963a4e15a1585f79f201890a1a665a48d024", + "version": "sha-9945fb159adc", + "digest": "ca17f93484c3de25a5b7e8195237feedc7e4f6043a28d7ef58ef0d475f3bde11", "catalog_visibility": "public", "catalog_role": "context" }, { "skill_id": "runx/nitrosend", - "version": "sha-a46e1a582e9c", - "digest": "cc9c36d6da648078c7222e56d91219575a390029e8737bae1cb5f354cb55f603", + "version": "sha-9328d81dccfb", + "digest": "995d495e6c0ff11b0f6fb709702f7e9d8a294635abc81677525b0e581bf539d0", "catalog_visibility": "public", "catalog_role": "branded" }, { "skill_id": "runx/nws-weather-forecast", - "version": "sha-0aeb4bcf16d3", - "digest": "382cdef84f660e7cfdc2dbbfd7e8382d204d1f4ee46ffa019549615f9c2f745c", + "version": "sha-30229c94289b", + "digest": "e427cf6fc479f3085cc4906e638b1aabdc3f3bfc19b6b7297c5d2f4e3217e168", "catalog_visibility": "public", "catalog_role": "branded" }, { "skill_id": "runx/open-meteo-weather-forecast", - "version": "sha-5d9f95438c9a", - "digest": "041e0ec18fa4b646b46b72d34662eabbbfbc43ab5a3a65423b49b3e94e81d159", + "version": "sha-b7e5dc601e6f", + "digest": "a60a7e8a978e55bbb513a7a3e6109f164f5de020267f156d80f136fe193d1d30", "catalog_visibility": "internal", "catalog_role": "branded" }, { "skill_id": "runx/ops-desk", - "version": "sha-a2f4840047ee", - "digest": "f32f21b6ed6c03f5623bc98f2823365ebcabc721cedf64e8a67c556613a35f59", + "version": "sha-86a94f382f12", + "digest": "e8c069b6e65073c8a56d6625e0e5963bf154c90e38366eb1c14eeccb00c8536d", "catalog_visibility": "public", "catalog_role": "canonical" }, { "skill_id": "runx/overlay-generator", - "version": "sha-b5dc11a7088d", - "digest": "e19bbe8dc5f3bf732dc265a1808819587e67759fdf3014d89bc9bf6629400b18", + "version": "sha-9feda1e710f3", + "digest": "bbb8910846d942db5e5ae9b43bb7a30a515440a104ce140e0767c4538199ebe3", "catalog_visibility": "public", "catalog_role": "canonical" }, { "skill_id": "runx/policy-author", - "version": "sha-a1f056d7c7f7", - "digest": "b3bbcbda2711d78c59c572d99206c3116347e9751506301ca40a52c75e85bc84", + "version": "sha-cebda63f65d2", + "digest": "c6f3933ed77c863750ddbbf92911d9d62582d9fb95c697b0d173437ee2829589", "catalog_visibility": "public", "catalog_role": "canonical" }, { "skill_id": "runx/pr-review-note", - "version": "sha-537dd9fc3c6b", - "digest": "b073ec884f56c9e412d0c1039d5f28f163df0f5530eb0bee922ed4c557955c52", + "version": "sha-5f739386a415", + "digest": "9e310217b6788ff80f68c91de80bea19c499bb27d3a5791016fcd2d4fc550f4f", "catalog_visibility": "public", "catalog_role": "context" }, { "skill_id": "runx/prior-art", - "version": "sha-2555f66bde78", - "digest": "991ec474c6013ce9d29d84df810c14db567328607018c4de9606ba3952d8b9c7", + "version": "sha-d6d72dc9351d", + "digest": "6804491e221819e9cf3b49e171f1ac48bbf538b7a319b355efc89d3207f33827", "catalog_visibility": "public", "catalog_role": "context" }, { "skill_id": "runx/receipt-auditor", - "version": "sha-acbe46a62851", - "digest": "155c522fb8e029bc4bd83863ea0960e23a8936c47977b70052aa9b119675d61e", + "version": "sha-755afef71d94", + "digest": "a4c10f32fd499c2bf1a2431c3396db6016fb058fd335724292cb634627772170", "catalog_visibility": "public", "catalog_role": "canonical" }, { "skill_id": "runx/redact-pii", - "version": "sha-2aff473ec36f", - "digest": "200d22c5e671b89e0ac8b837564c3a27e17ba6eb5bf93c80277966e981cf2b52", + "version": "sha-8cae2d0a9e03", + "digest": "0a0aacf2bbc6c92e3df944dad1755599a409fe505635d9ac2592a262437d85ad", "catalog_visibility": "public", "catalog_role": "canonical" }, { "skill_id": "runx/reflect-digest", - "version": "sha-b92263c8a347", - "digest": "732a9e98825f5eb36827884fdedb68b01a08bd23494f48c0568980e7b9469fe6", + "version": "sha-33e40618f60d", + "digest": "7273381ddb877fafd0f11c75c9ef43c6dfe5810c39a0e590d032daf8c36bde7e", "catalog_visibility": "public", "catalog_role": "context" }, { "skill_id": "runx/refund", - "version": "sha-4271ef5da656", - "digest": "1295dd1950b137f828319d3d56491241ba8629c56ede9e50a736e61e96dd1a9a", + "version": "sha-5f7bf48d6fce", + "digest": "e7d475032e870134cb39b2436bb92028a7ae69c0b590eccf7afa18d3819cd141", "catalog_visibility": "public", "catalog_role": "canonical" }, { "skill_id": "runx/release", - "version": "sha-76b9da654f43", - "digest": "20b8f78fee305165f010e501d5349897a384f323a1b98dbef864dbbc763c5a07", + "version": "sha-b35e3819abc1", + "digest": "199b5035647b2d76c3e8a857c1c48e7fa65b95444a2cf4d373ecd806b71591ef", "catalog_visibility": "public", "catalog_role": "context" }, { "skill_id": "runx/research", - "version": "sha-65df55554027", - "digest": "4c729e750abddc00379902686439d90965e7c593b6bcb3606ef7e0bc66cecd66", + "version": "sha-6d3e060f1e46", + "digest": "9968f3510533295f292ab5b45150fa5201b8b56a49d140414700ddd7d5938e5f", "catalog_visibility": "public", "catalog_role": "context" }, { "skill_id": "runx/review-receipt", - "version": "sha-a24882594b28", - "digest": "88e529e362d21e05cc31f47be240e91aae352e10cf3e321e9de864bb272af5c8", + "version": "sha-f4737b3583cc", + "digest": "c1661b757250bfc59a5a47329646002fe48472b5f035f6280ae6b74052b19da3", "catalog_visibility": "public", "catalog_role": "context" }, { "skill_id": "runx/review-skill", - "version": "sha-622805df5ff3", - "digest": "6fc1b341d55e3c6be8a5f7693dfe3312654b89a14f88fe42e4ffc84a65a9cd09", + "version": "sha-90e916a9b33c", + "digest": "516c5d33ed154fde80f68a5cb62f3c37c375e766e339079a8c070007012e5557", "catalog_visibility": "public", "catalog_role": "context" }, { "skill_id": "runx/run-history-analyst", - "version": "sha-0ec78eb20018", - "digest": "1a1441365a20b74442998656478fc3d530f2d09f25f811d970b403a8a7920df4", + "version": "sha-168ba117e13f", + "digest": "b413c6aebf8fc2537c9de6f27e31e0a968266d7959f1b20089fa15a01a34db29", "catalog_visibility": "public", "catalog_role": "context" }, { "skill_id": "runx/sandbox-harden", - "version": "sha-e5f346fbac0f", - "digest": "15676f191d6878edf96006b006ad78dda6c53f5128f7e3e84fa346941a635fdc", + "version": "sha-49e835919dc4", + "digest": "e3a7bd875dcb1fa0d1b59a5ab344543e355221a64e7145acb546e05862bc7d6a", "catalog_visibility": "public", "catalog_role": "canonical" }, { "skill_id": "runx/send-as", - "version": "sha-37e798437c61", - "digest": "ee71759e8099dba9a4925a81b2da69c1d83e73a6fd57b3e21839a6bb637e9ca1", + "version": "sha-23b4e5f8b695", + "digest": "f8e88ef883d09ab8220da637923e37e1ef5a7dbf08343985fb81db0237853f8d", "catalog_visibility": "public", "catalog_role": "canonical" }, { "skill_id": "runx/settle-invoice", - "version": "sha-dff8399d530f", - "digest": "f016ad099d4777d37e06bd3ca5412293166bee4fa15fba8eba1ffab77f729246", + "version": "sha-5a3f41c8f1c6", + "digest": "38dfb1e09201eb88892fb5a60d42f27221e5027aaae06c9029d4e9d09f21e7be", "catalog_visibility": "public", "catalog_role": "canonical" }, { "skill_id": "runx/sign-receipt", - "version": "sha-03e0b8268637", - "digest": "fc5e848c9a8a1e7ae22de8839789ad949038e2cf699081c1cbeab116bfd73e6a", + "version": "sha-4e322b563cda", + "digest": "de75d97f75c93223607a67aa715f78bdea62d4992daf1464602e86655d3ca69e", "catalog_visibility": "public", "catalog_role": "canonical" }, { "skill_id": "runx/skill-lab", - "version": "sha-274b0e06d901", - "digest": "46d70be92a655c20e47b4cd8674b2e19d1d4257029a073319805c4235bdc6441", + "version": "sha-794263942964", + "digest": "84da2113d6e5675aeb4fbd958f3d7866209fa89cb08ccbe0aee5269561e14c81", "catalog_visibility": "public", "catalog_role": "context" }, { "skill_id": "runx/skill-testing", - "version": "sha-9113dacaa62a", - "digest": "93f7a0c009e289862fcc9236effdf0ac75197e9eb042a83200720d23d01cb443", + "version": "sha-918538e1aff5", + "digest": "f7ad658eeba0bf787afb152a91840808421121c4a13305403a31e9440e56a0c7", "catalog_visibility": "public", "catalog_role": "context" }, { "skill_id": "runx/slack-notify", - "version": "sha-33d69b8fb325", - "digest": "9e0abd47c54455add3c715e18c371c427e0bbb0d617ed0212f60d766f62c2856", + "version": "sha-ec4a6dbf2f8d", + "digest": "e3c52023bba6fde4d594080971550838d86a924db9fd8050854a4f669eceb1d9", "catalog_visibility": "public", "catalog_role": "branded" }, { "skill_id": "runx/sourcey", - "version": "sha-0ddf49779321", - "digest": "4b6316c7fbb323b7d27d304deb8f11cb8f939dc31e0b74349d56f27abf618504", + "version": "sha-419dd0e3ddc3", + "digest": "27f0ad604fd96a3cb9fe306d15585d67ba604c3369c76764d2290e9af6403fbc", "catalog_visibility": "public", "catalog_role": "context" }, { "skill_id": "runx/spend", - "version": "sha-6599445d02b3", - "digest": "4b9810ee99bbbc58e467547595e0cdb7d67ad117f8cbba422b6e6e5e2b065fc5", + "version": "sha-5535af79e9da", + "digest": "23ad76e65b67b6d382f01d4c38a9b0bd0820b8edf5f0eb845a71d78516e95d66", "catalog_visibility": "public", "catalog_role": "canonical" }, { "skill_id": "runx/sql-analyst", - "version": "sha-95e6fba89c33", - "digest": "054798d4b29958f90300ea940c94b73233c0d5c5ff19e7156278b31e99e68475", + "version": "sha-ea11154ae580", + "digest": "76d2bfc21ddf27a59b9ef6afc2f4494810ebd62520c3e0da7cb8a943586223f7", "catalog_visibility": "public", "catalog_role": "context" }, { "skill_id": "runx/stripe-charge", - "version": "sha-fac92c49fa9b", - "digest": "34b04a5ba67c0de4e682519cd1a6c160e097a08b3c5eaf4537441e709d3ba982", + "version": "sha-d75da6bc3c58", + "digest": "5619a15d016d2099c76a2ca0a7ed1f529d7649b8c684f24746c4ce5e1011dbc5", "catalog_visibility": "internal", "catalog_role": "runtime-path" }, { "skill_id": "runx/stripe-pay", - "version": "sha-36ed79109851", - "digest": "cd0f34e02d6d5e89df53acaf3bc20c85141a97c681f9d32a08b041818c8ff0ca", + "version": "sha-0f2f66ed638c", + "digest": "4f30e98fb4c04f6c3068b5b3bd41f462c4557d80f4e2a78865d49cc8b8762ae5", "catalog_visibility": "public", "catalog_role": "branded" }, { "skill_id": "runx/stripe-refund", - "version": "sha-e513d3aed77c", - "digest": "2bfa94189cd3b7084a3b29e1f83de2d0787d28c5f0c962a15bac76155c24d95f", + "version": "sha-4202490a76a2", + "digest": "6a8e6902a01bf985f3a71838b701c42a2c4a2278703dce3b8bacfea5ff4f0297", "catalog_visibility": "internal", "catalog_role": "runtime-path" }, { "skill_id": "runx/structured-extraction", - "version": "sha-22eeb86d17f4", - "digest": "2c83db0c1f170af2e84ca0237e0850108254415bdcffdc57d2a6e66197cef133", + "version": "sha-9915d65ed5f5", + "digest": "e9f781dae6f2493088e44c6ca33a3a57ac5d835e960d074c040d944512f00480", "catalog_visibility": "public", "catalog_role": "canonical" }, { "skill_id": "runx/support-triage-reply", - "version": "sha-93233458fd14", - "digest": "5c6fc18bf3013a1845de83641147f8421ceb1599269e4b3ed111d25e75053fda", + "version": "sha-47f3c99cc852", + "digest": "8b4ac7b0963a1992c8e478f2ec35af6bb5abfd9a86d8bdd88508b1a6a33a4b71", "catalog_visibility": "public", "catalog_role": "canonical" }, { "skill_id": "runx/taste-profile", - "version": "sha-30ae4695f7a2", - "digest": "bebc7d42b982295105d1da03ea392f1384977269adf1705905e1833e73dc78ae", + "version": "sha-b38093d367a9", + "digest": "3975fc3234e839cafa14aeb2aa1a372d38a1648bb19c7663c7ebf831da6a1cdc", "catalog_visibility": "public", "catalog_role": "context" }, { "skill_id": "runx/vault-unseal", - "version": "sha-15cd18f5b44e", - "digest": "0c2210ff956c0fca388ff3829f31946aa21e02626ee3ae29aee41ff94dd3cc10", + "version": "sha-4116115552f2", + "digest": "6f7472040add1d0b28f6ad54ed40908ed96a4103696fdadaa39437cd5007ae73", "catalog_visibility": "public", "catalog_role": "canonical" }, { "skill_id": "runx/vuln-scan", - "version": "sha-71f8b23b780a", - "digest": "a42e03ed700f4c60895ee46883adaa30a82890f3a82798a82d1d1c21ca73181a", + "version": "sha-67a3c4b6ad93", + "digest": "d1367224c3a5f2e9d875f12c362558e25dedd85bbdc953d2ffc484b62dd9839b", "catalog_visibility": "public", "catalog_role": "context" }, { "skill_id": "runx/weather-forecast", - "version": "sha-498fe9afa450", - "digest": "2d104a7c806819c53c62f475e5d44e21ebefd940302a0b15b268721a5ee7f426", + "version": "sha-4dba7e3fddff", + "digest": "3909a8f32af5b0067992fc5fbe4bc4e5fe883e4c610e64150ed8eb4072d3c474", "catalog_visibility": "public", "catalog_role": "canonical" }, { "skill_id": "runx/web-fetch", - "version": "sha-fec9491a67bf", - "digest": "9d744ec5179a797007727f63eab50ac5d45b321d07a7de73a31baa2b60e1c5a8", + "version": "sha-6bf1ec9e9572", + "digest": "a8660dd0622a506c9f993f1a2f23716a1dc40da56d25cf5086913da317ed4ad8", "catalog_visibility": "public", "catalog_role": "canonical" }, { "skill_id": "runx/work-plan", - "version": "sha-e6dd3bc7d087", - "digest": "ba007b997503258ca52e6a067e0dd6ed12ec7250add5dae35e048663b2a502a2", + "version": "sha-a76802b21c8e", + "digest": "eae6a5bcb7a6da20401c11663bbfd4547beb31f254862f1f46e056f0139fe4ba", "catalog_visibility": "public", "catalog_role": "context" }, { "skill_id": "runx/write-harness", - "version": "sha-f69b01f883e0", - "digest": "8fbac78e4c760a124c704ce62aa11ecb8b65b165c72a81fd2c1de163c5bb259b", + "version": "sha-df9683590a4b", + "digest": "44fbb4930f3b97cbd1a74c77efb95a9b0ad3269666039af6ef33d3ddb6a3b25d", "catalog_visibility": "public", "catalog_role": "context" }, { "skill_id": "runx/x402-pay", - "version": "sha-008aef3f3b2e", - "digest": "18e4e8c85606f201463d29f4aca8cf910f84293a720a68b2090bd0df1544a62c", + "version": "sha-08f949ce49f2", + "digest": "e1bac6c76685f652d0c079245c1d023dbbb621c8982035474c66ac562f08bc85", "catalog_visibility": "public", "catalog_role": "branded" }, { "skill_id": "runx/zapier-handoff", - "version": "sha-81a7bdb12d33", - "digest": "6f339f817a8d17d3a5a51e4676ef6a310278228fb9f97e260908c28882af18ed", + "version": "sha-26021e8f616e", + "digest": "923ed727ea9386cead213f8a5286e76fc9302870b6d7e45ddd50855d35a26513", "catalog_visibility": "public", "catalog_role": "context" } diff --git a/skills/mandate-planner/SKILL.md b/skills/mandate-planner/SKILL.md new file mode 100644 index 000000000..34e52b67a --- /dev/null +++ b/skills/mandate-planner/SKILL.md @@ -0,0 +1,79 @@ +--- +name: mandate-planner +description: Validate a proposed agency charter against an explicit authority grant before any agency.open run is issued. +runx: + category: agency +--- + +# Mandate Planner + +Validate a proposed agency charter against the authority an operator actually +holds. This skill is a read-only judgment step. It never opens an agency case, +never mints authority, never stores state, and never calls `agency.open`. + +Use it when an operator or downstream driver has: + +- an `objective` +- a `proposed_charter` containing candidate roles, requested limits, and a + measurable done-check +- an `authority_grant` containing granted roles, spend cap, and turn cap + +The skill emits an eligible decision plus a bounded `recommended_charter` only +when every requested role and limit fits inside the grant. Ambiguous, +over-limit, or under-specified charters stop for the human approval lane. + +## Inputs + +`objective` is a short string naming the work the charter is meant to govern. + +`proposed_charter` must contain: + +- `candidate_roster`: array of `{ role, skill, scope }` +- `requested_limits`: `{ max_turns, spend }` +- `done_check`: measurable completion predicate + +`authority_grant` must contain: + +- `granted_spend` +- `granted_roles` +- `max_turns` + +## Output + +When eligible, emit: + +- `decision.eligible: true` +- `decision.reason` +- `recommended_charter.scopes` +- `recommended_charter.spend` +- `recommended_charter.max_turns` +- `recommended_charter.counterparty` +- evidence tying every roster role and every limit back to the grant + +When refused, emit: + +- `decision.eligible: false` +- `decision.route: needs_agent` +- `decision.reason` +- no `recommended_charter` + +## Guardrails + +- Refuse roster roles not present in `authority_grant.granted_roles`. +- Refuse requested spend above `authority_grant.granted_spend`. +- Refuse requested turns above `authority_grant.max_turns`. +- Refuse missing or non-measurable done-checks. +- Never invent a role, roster member, spend cap, turn cap, counterparty, or + done-check. +- Treat `agency.open` as a downstream dispatch-by-naming step. This skill only + emits data for a separate governed run. + +## Verification + +A reviewer should be able to inspect the returned decision and see: + +- each roster role is copied from `candidate_roster` +- each role is present in `authority_grant.granted_roles` +- spend and turn limits are at or under the grant +- refused charters name the exact failing constraint +- no effectful agency action occurred diff --git a/skills/mandate-planner/X.yaml b/skills/mandate-planner/X.yaml new file mode 100644 index 000000000..72c00c1d4 --- /dev/null +++ b/skills/mandate-planner/X.yaml @@ -0,0 +1,85 @@ +skill: mandate-planner +version: "0.1.0" + +catalog: + kind: skill + audience: public + visibility: public + role: canonical + +harness: + cases: + - name: in-grant-charter-produces-recommendation + runner: default + inputs: + objective: Open a bounded docs-polish agency case for a public README update. + proposed_charter: + candidate_roster: + - role: docs + skill: issue-to-pr + scope: Update one README section and one docs page. + - role: reviewer + skill: pr-review-note + scope: Review the proposed documentation diff before merge. + requested_limits: + max_turns: 8 + spend: 40 + done_check: Tests pass and the documentation PR is reviewed with a sealed receipt. + counterparty: docs-maintainer + authority_grant: + granted_spend: 50 + granted_roles: + - docs + - reviewer + max_turns: 10 + counterparty: docs-maintainer + expect: + status: sealed + receipt: + schema: runx.receipt.v1 + state: sealed + disposition: closed + - name: outside-role-escalates-to-human + runner: default + inputs: + objective: Open an agency case that tries to deploy and spend beyond the grant. + proposed_charter: + candidate_roster: + - role: deployer + skill: production-deploy + scope: Deploy the service after changing billing code. + requested_limits: + max_turns: 12 + spend: 90 + done_check: deploy when it looks good + authority_grant: + granted_spend: 25 + granted_roles: + - docs + - reviewer + max_turns: 6 + expect: + status: failure + receipt: + schema: runx.receipt.v1 + state: sealed + disposition: failed + +runners: + default: + default: true + type: cli-tool + command: node + args: + - run.mjs + timeout_seconds: 30 + inputs: + objective: + type: string + required: true + proposed_charter: + type: json + required: true + authority_grant: + type: json + required: true diff --git a/skills/mandate-planner/fixtures/evidence.json b/skills/mandate-planner/fixtures/evidence.json new file mode 100644 index 000000000..2dfae5f7f --- /dev/null +++ b/skills/mandate-planner/fixtures/evidence.json @@ -0,0 +1,144 @@ +{ + "schema": "frantic.evidence.v1", + "bounty": 67, + "package": "lxx197818/mandate-planner@0.1.0", + "publisher_owner": "lxx197818", + "package_name": "mandate-planner", + "version": "0.1.0", + "summary": "mandate-planner is a published runx skill that validates a proposed agency charter against an explicit authority grant before any separate agency.open dispatch. The hosted registry publish passed its harness, the package installs from the registry, a post-publish dogfood run sealed a receipt, and runx verify reported a valid digest, content address, and Ed25519 signature for that receipt.", + "runx_version": "runx-cli 0.6.13", + "registry_ref": "lxx197818/mandate-planner@0.1.0", + "public_url": "https://runx.ai/x/lxx197818/mandate-planner@0.1.0", + "pr_url": "https://github.com/runxhq/runx/pull/151", + "source_url": "https://github.com/lxx197818/runx/tree/codex/mandate-planner-67/skills/mandate-planner", + "publish_method": "runx login --for publish; runx registry publish ./skills/mandate-planner --registry https://api.runx.ai --version 0.1.0 --profile ./skills/mandate-planner/X.yaml --json", + "install_command": "runx add lxx197818/mandate-planner@0.1.0 --registry https://api.runx.ai", + "hosted_registry": { + "status": "published", + "target": "hosted", + "trust_tier": "community", + "digest": "558c18f8b7d77334cf6ef6efc7a3cd7cf5a9f212644f72ff4e446536ca3ddb77", + "profile_digest": "0f408862be44277771c8ceeaaba6dfdb96ade1de17baef78ee7e2f313ae66074", + "hosted_harness_status": "passed" + }, + "harness_cases": [ + { + "name": "in-grant-charter-produces-recommendation", + "status": "sealed" + }, + { + "name": "outside-role-escalates-to-human", + "status": "failure", + "business_route": "needs_agent", + "recommended_charter_emitted": false + } + ], + "observations": [ + { + "name": "eligible_verdict", + "value": "The in-grant dogfood charter returned decision.eligible true with route dispatch-by-naming." + }, + { + "name": "recommended_charter_limits", + "value": "The recommended charter carried spend 30 and max_turns 5, both under the authority grant of spend 50 and max_turns 8." + }, + { + "name": "recommended_charter_roles", + "value": "The recommended charter included docs and reviewer scopes copied from candidate_roster and confirmed present in authority_grant.granted_roles." + }, + { + "name": "done_check", + "value": "The dogfood done_check was measurable: Tests pass and the charter review receipt is sealed." + }, + { + "name": "refusal_path", + "value": "The stop harness case refuses an ungranted deployer role, routes business output to needs_agent, and emits no recommended_charter." + }, + { + "name": "receipt", + "value": "Dogfood receipt sha256:3add020abdc680405b95300aab74b49d5f868e48d72ddfc3727aae69e07fd737 verified with valid digest, content address, and signature." + }, + { + "name": "hosted_publish", + "value": "Hosted registry publish returned target hosted, status published, community trust, and hosted harness passed." + } + ], + "observation_details": { + "eligibility_verdict": true, + "eligibility_reason": "Proposed charter is inside the authority grant and has a measurable done_check.", + "recommended_charter": { + "scopes": [ + { + "role": "docs", + "skill": "issue-to-pr", + "scope": "Update the agency charter docs section." + }, + { + "role": "reviewer", + "skill": "pr-review-note", + "scope": "Review the bounded charter before dispatch." + } + ], + "spend": 30, + "max_turns": 5, + "counterparty": "docs-maintainer", + "done_check": "Tests pass and the charter review receipt is sealed." + }, + "refused_reason": "role 'deployer' is outside authority_grant.granted_roles", + "sealed_receipt_id": "sha256:3add020abdc680405b95300aab74b49d5f868e48d72ddfc3727aae69e07fd737" + }, + "dogfood": { + "package": "lxx197818/mandate-planner@0.1.0", + "input": { + "objective": "Validate a docs charter before dispatch-by-naming agency.open.", + "proposed_charter": { + "candidate_roster": [ + { + "role": "docs", + "skill": "issue-to-pr", + "scope": "Update the agency charter docs section." + }, + { + "role": "reviewer", + "skill": "pr-review-note", + "scope": "Review the bounded charter before dispatch." + } + ], + "requested_limits": { + "max_turns": 5, + "spend": 30 + }, + "done_check": "Tests pass and the charter review receipt is sealed.", + "counterparty": "docs-maintainer" + }, + "authority_grant": { + "granted_spend": 50, + "granted_roles": [ + "docs", + "reviewer" + ], + "max_turns": 8, + "counterparty": "docs-maintainer" + } + }, + "command": "runx skill lxx197818/mandate-planner@0.1.0 --registry https://api.runx.ai --input-json proposed_charter --input-json authority_grant --receipt-dir C:\\runx67-receipts --json", + "receipt_ref": "runx:receipt:sha256:3add020abdc680405b95300aab74b49d5f868e48d72ddfc3727aae69e07fd737", + "verify_verdict": { + "schema": "runx.verify_verdict.v1", + "receipt_id": "sha256:3add020abdc680405b95300aab74b49d5f868e48d72ddfc3727aae69e07fd737", + "valid": true, + "signature_status": "valid", + "digest_status": "valid", + "content_address_status": "valid" + }, + "harness_cases": [ + "in-grant-charter-produces-recommendation: sealed", + "outside-role-escalates-to-human: failure/needs_agent refusal" + ] + }, + "reviewer_notes": [ + "The skill is read-only and does not call agency.open.", + "The handoff seam is dispatch-by-naming: a downstream operator maps recommended_charter to a separate governed agency.open run.", + "No tokens or secrets are present in this evidence." + ] +} diff --git a/skills/mandate-planner/fixtures/report.md b/skills/mandate-planner/fixtures/report.md new file mode 100644 index 000000000..04f21fc22 --- /dev/null +++ b/skills/mandate-planner/fixtures/report.md @@ -0,0 +1,45 @@ +# mandate-planner delivery report + +Package: `lxx197818/mandate-planner@0.1.0` + +Public registry URL: + +Source PR: + +## What shipped + +`mandate-planner` validates a proposed agency charter against an explicit +authority grant before any downstream `agency.open` run is issued. It is a +read-only judgment skill: it does not open a case, mint authority, hold state, or +call `agency.open`. + +When the proposed charter is inside the grant, the skill emits +`decision.eligible: true` and a bounded `recommended_charter` carrying scopes, +spend, turn cap, counterparty, and done-check. When the charter asks for an +ungranted role, exceeds a cap, or lacks a measurable done-check, it refuses, +routes to the human approval lane, and emits no `recommended_charter`. + +## Verification performed + +- `runx --version`: `runx-cli 0.6.13` +- Hosted publish: `runx registry publish ./skills/mandate-planner --registry https://api.runx.ai --version 0.1.0 --profile ./skills/mandate-planner/X.yaml --json` +- Hosted registry result: published, community trust, harness passed +- Clean install: `runx add lxx197818/mandate-planner@0.1.0 --registry https://api.runx.ai` +- Dogfood run: `runx skill lxx197818/mandate-planner@0.1.0 --registry https://api.runx.ai --json` +- Dogfood receipt: `runx:receipt:sha256:3add020abdc680405b95300aab74b49d5f868e48d72ddfc3727aae69e07fd737` +- Verify verdict: valid digest, valid content address, valid Ed25519 signature + +## Harness cases + +- `in-grant-charter-produces-recommendation`: sealed happy path with + `decision.eligible: true` and a bounded `recommended_charter`. +- `outside-role-escalates-to-human`: failure/stop path where the charter requests + a role outside `authority_grant.granted_roles`; business output routes to + `needs_agent` and emits no `recommended_charter`. + +## Operator value + +The skill is useful as a small guardrail before an agency driver or human +operator starts a governed agency case. It makes the authority boundary +inspectable before dispatch, and keeps the actual `agency.open` effect in a +separate governed run. diff --git a/skills/mandate-planner/fixtures/verification.json b/skills/mandate-planner/fixtures/verification.json new file mode 100644 index 000000000..c65003af9 --- /dev/null +++ b/skills/mandate-planner/fixtures/verification.json @@ -0,0 +1,25 @@ +{ + "schema": "runx.verify_verdict.v1", + "receipt_id": "sha256:3add020abdc680405b95300aab74b49d5f868e48d72ddfc3727aae69e07fd737", + "valid": true, + "digest": { + "status": "valid", + "expected": "sha256:f682b2c097a35731fcf92b530c8bee35116779160b19430eca2212f3f6ea1f6c", + "actual": "sha256:f682b2c097a35731fcf92b530c8bee35116779160b19430eca2212f3f6ea1f6c" + }, + "content_address": { + "status": "valid", + "expected": "sha256:3add020abdc680405b95300aab74b49d5f868e48d72ddfc3727aae69e07fd737", + "actual": "sha256:3add020abdc680405b95300aab74b49d5f868e48d72ddfc3727aae69e07fd737" + }, + "signature": { + "mode": "production", + "status": "valid", + "kid": "runx-demo-key" + }, + "lineage": { + "status": "unverified", + "message": "single receipt verification cannot prove receipt-tree lineage" + }, + "findings": [] +} diff --git a/skills/mandate-planner/run.mjs b/skills/mandate-planner/run.mjs new file mode 100644 index 000000000..ab5ef7ee8 --- /dev/null +++ b/skills/mandate-planner/run.mjs @@ -0,0 +1,163 @@ +function parseInputs() { + if (process.env.RUNX_INPUTS_JSON) { + return JSON.parse(process.env.RUNX_INPUTS_JSON); + } + return { + objective: process.env.RUNX_INPUT_OBJECTIVE ?? "", + proposed_charter: parseJsonEnv("PROPOSED_CHARTER", {}), + authority_grant: parseJsonEnv("AUTHORITY_GRANT", {}), + }; +} + +function parseJsonEnv(name, fallback) { + const raw = process.env[`RUNX_INPUT_${name}`]; + if (!raw) return fallback; + return JSON.parse(raw); +} + +function fail(reason, data = {}) { + const output = { + decision: { + eligible: false, + route: "needs_agent", + reason, + }, + refusal: { + reason, + human_approval_lane: "needs_agent", + ...data, + }, + handoff: { + downstream_step: "agency.open", + dispatch: "separate governed run by naming", + effect: "none", + note: "mandate-planner stopped before emitting a recommended_charter", + }, + }; + process.stdout.write(`${JSON.stringify(output, null, 2)}\n`); + process.exit(2); +} + +function asArray(value, label) { + if (!Array.isArray(value)) fail(`${label} must be an array`); + return value; +} + +function asFiniteNumber(value, label) { + const n = Number(value); + if (!Number.isFinite(n)) fail(`${label} must be a finite number`); + return n; +} + +function normalizeRole(role) { + return String(role ?? "").trim().toLowerCase(); +} + +function measurableDoneCheck(value) { + const text = String(value ?? "").trim(); + if (text.length < 12) return false; + return /\b(pass|passes|deliver|delivered|merged|reviewed|approved|receipt|test|tests|published|validated|verified|closed|complete|completed)\b/i.test(text); +} + +function main() { + const inputs = parseInputs(); + const objective = String(inputs.objective ?? "").trim(); + const proposed = inputs.proposed_charter ?? {}; + const grant = inputs.authority_grant ?? {}; + + if (!objective) fail("objective is required"); + + const roster = asArray(proposed.candidate_roster, "proposed_charter.candidate_roster"); + if (roster.length === 0) fail("candidate_roster must name at least one role"); + + const grantedRoles = new Set(asArray(grant.granted_roles, "authority_grant.granted_roles").map(normalizeRole)); + if (grantedRoles.size === 0) fail("authority_grant.granted_roles must include at least one role"); + + const requestedLimits = proposed.requested_limits ?? {}; + const requestedSpend = asFiniteNumber(requestedLimits.spend, "proposed_charter.requested_limits.spend"); + const requestedTurns = asFiniteNumber(requestedLimits.max_turns, "proposed_charter.requested_limits.max_turns"); + const grantedSpend = asFiniteNumber(grant.granted_spend, "authority_grant.granted_spend"); + const grantedTurns = asFiniteNumber(grant.max_turns, "authority_grant.max_turns"); + + const roleTraces = roster.map((member, index) => { + const role = normalizeRole(member.role); + if (!role) fail(`candidate_roster[${index}].role is required`); + if (!grantedRoles.has(role)) { + fail(`role '${role}' is outside authority_grant.granted_roles`, { + denied_role: role, + granted_roles: [...grantedRoles], + }); + } + return { + role, + skill: String(member.skill ?? "").trim(), + scope: String(member.scope ?? "").trim(), + granted: true, + source: `candidate_roster[${index}]`, + }; + }); + + if (requestedSpend > grantedSpend) { + fail(`requested spend ${requestedSpend} exceeds granted spend ${grantedSpend}`, { + requested_spend: requestedSpend, + granted_spend: grantedSpend, + }); + } + if (requestedTurns > grantedTurns) { + fail(`requested max_turns ${requestedTurns} exceeds granted max_turns ${grantedTurns}`, { + requested_max_turns: requestedTurns, + granted_max_turns: grantedTurns, + }); + } + if (!measurableDoneCheck(proposed.done_check)) { + fail("done_check is missing or not measurable", { + done_check: proposed.done_check ?? null, + }); + } + + const recommended = { + scopes: roleTraces.map((trace) => ({ + role: trace.role, + skill: trace.skill, + scope: trace.scope, + })), + spend: requestedSpend, + max_turns: requestedTurns, + counterparty: String(proposed.counterparty ?? grant.counterparty ?? "operator-approved agency driver"), + done_check: String(proposed.done_check).trim(), + }; + + const output = { + decision: { + eligible: true, + route: "dispatch-by-naming", + reason: "Proposed charter is inside the authority grant and has a measurable done_check.", + }, + recommended_charter: recommended, + evidence: { + objective, + role_traces: roleTraces, + limits: { + requested_spend: requestedSpend, + granted_spend: grantedSpend, + requested_max_turns: requestedTurns, + granted_max_turns: grantedTurns, + }, + done_check: recommended.done_check, + }, + handoff: { + downstream_step: "agency.open", + dispatch: "separate governed run by naming", + effect: "none", + note: "Use recommended_charter as data for a later agency.open run; mandate-planner does not call it.", + }, + }; + + process.stdout.write(`${JSON.stringify(output, null, 2)}\n`); +} + +try { + main(); +} catch (error) { + fail(error instanceof Error ? error.message : String(error)); +}