@ikie-dev/cli 9.8.1
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/.envrc +3 -0
- package/.github/CODEOWNERS +16 -0
- package/.github/ISSUE_TEMPLATE/bug_report.yml +85 -0
- package/.github/ISSUE_TEMPLATE/config.yml +5 -0
- package/.github/ISSUE_TEMPLATE/feature_request.yml +24 -0
- package/.github/ISSUE_TEMPLATE/question.yml +16 -0
- package/.github/actions/setup/action.yml +49 -0
- package/.github/pull_request_template.md +18 -0
- package/.github/release.yml +17 -0
- package/.github/workflows/acp-e2e.yml +52 -0
- package/.github/workflows/arc-terminal-bench-poc.yml +157 -0
- package/.github/workflows/auto-label-pr.yml +90 -0
- package/.github/workflows/canary.yml +302 -0
- package/.github/workflows/ci.yml +114 -0
- package/.github/workflows/close-stale.yml +21 -0
- package/.github/workflows/release.yml +288 -0
- package/.github/workflows/require-linked-issue.yml +21 -0
- package/.github/workflows/stale.yml +32 -0
- package/.github/workflows/tui-e2e.yml +52 -0
- package/.github/workflows/welcome.yml +21 -0
- package/.gitmodules +3 -0
- package/.husky/pre-commit +1 -0
- package/.ikie/ferments/019f2735-088f-75e4-9a8f-7d7b037c2a59/runtime.json +11 -0
- package/.ikie/ferments/019f2735-08b3-70fe-88df-8dd1494f6a8e/runtime.json +11 -0
- package/.ikie/ferments/019f2735-08d3-7041-8d5e-a153e2937274/runtime.json +11 -0
- package/.ikie/ferments/019f2735-08f8-7591-bf1a-6c1324842331/runtime.json +12 -0
- package/.ikie/ferments/019f2735-0913-73d5-82b4-37012a5c1148/runtime.json +11 -0
- package/.ikie/ferments/019f2735-0940-76dc-b667-964b9cd9294d/runtime.json +11 -0
- package/.ikie/ferments/019f2735-0971-7094-92e3-b8ea4cdb9390/runtime.json +15 -0
- package/.ikie/ferments/019f2735-0999-72aa-9727-f6e8c3427ed6/runtime.json +15 -0
- package/.ikie/ferments/019f2735-09bf-76dd-88a2-c7e574b45636/runtime.json +15 -0
- package/.ikie/ferments/019f2735-09f1-77af-8820-89c0b3b5a182/runtime.json +13 -0
- package/.ikie/ferments/019f2735-0a49-77d9-b4c7-5a80bbbbafd9/runtime.json +15 -0
- package/.ikie/ferments/019f2735-0a79-73c3-977b-0c9164267b94/runtime.json +15 -0
- package/.ikie/ferments/019f2735-0abd-70ba-a794-fbb63fbf23de/runtime.json +11 -0
- package/.ikie/ferments/019f2735-0ad6-7079-8576-8fb651b4b698/runtime.json +15 -0
- package/.ikie/ferments/019f2735-0b03-70db-b5e5-59b1869aa2dc/runtime.json +15 -0
- package/.ikie/ferments/019f2735-0b34-7675-a4ed-39a15333e3b8/runtime.json +15 -0
- package/.ikie/ferments/019f2735-0b6c-716e-9f92-c391d6acb6f0/runtime.json +15 -0
- package/.ikie/ferments/019f2735-0b90-72be-a60d-3dd4c514d1c3/runtime.json +15 -0
- package/.ikie/ferments/019f2735-0baf-72e7-b5c5-99d8533b8343/runtime.json +15 -0
- package/.ikie/ferments/019f2735-0bd8-70f8-9d83-1a2b9152a013/runtime.json +15 -0
- package/.ikie/ferments/019f2735-0bfa-70de-ad20-7fe8c41b968e/runtime.json +15 -0
- package/.ikie/ferments/019f2735-0c26-7246-a2ab-f24f5a76fc5f/runtime.json +15 -0
- package/.ikie/ferments/019f2735-0c49-771b-934f-4afdb5664666/runtime.json +11 -0
- package/.ikie/ferments/019f2735-0c63-73f8-944e-14d19e69ba41/runtime.json +11 -0
- package/.ikie/ferments/019f2735-0c80-772b-8530-2df4d15b9d7a/reviews/phase-phase-1-1.json +63 -0
- package/.ikie/ferments/019f2735-0c80-772b-8530-2df4d15b9d7a/runtime.json +17 -0
- package/.ikie/ferments/019f2735-0dfc-7551-b147-aa46815027f5/reviews/phase-phase-1-1.json +63 -0
- package/.ikie/ferments/019f2735-0dfc-7551-b147-aa46815027f5/runtime.json +17 -0
- package/.ikie/ferments/019f2735-0f74-70f6-804c-e4d2145b32e1/runtime.json +11 -0
- package/.ikie/ferments/019f2735-1354-7041-854e-e6a577467dd0/runtime.json +11 -0
- package/.ikie/ferments/019f2735-1371-749f-8ea9-01f7f8734568/runtime.json +11 -0
- package/.ikie/ferments/019f2735-138f-72f2-ba7b-7912ad4cd7b9/runtime.json +11 -0
- package/.ikie/ferments/019f2735-13ad-710a-9c4d-38a30a0f4b37/runtime.json +11 -0
- package/.ikie/ferments/019f2735-13cb-7698-88c1-890fba497dc0/pending-proposal.json +45 -0
- package/.ikie/ferments/019f2735-13da-77dd-a916-8d82348671d2/pending-proposal.json +45 -0
- package/.ikie/ferments/019f2735-14d3-727a-81db-347c03cb2919/pending-proposal.json +45 -0
- package/.ikie/ferments/019f2735-1521-736e-8b75-22e94a8775f7/pending-proposal.json +45 -0
- package/.ikie/ferments/019f2735-1542-777c-a3a7-bc7f1edf1922/pending-proposal.json +45 -0
- package/.ikie/ferments/019f2735-3528-75bc-b100-8deb63dfde55/runtime.json +13 -0
- package/.ikie/ferments/019f2735-3553-72d8-a60d-9357420e110a/runtime.json +11 -0
- package/.ikie/ferments/019f2735-3569-756b-bc90-01c9ab00e413/runtime.json +11 -0
- package/.ikie/ferments/019f2735-3583-71d0-83f9-fc40b292190b/runtime.json +11 -0
- package/.ikie/ferments/019f2735-3597-7571-8332-47b3443395a6/runtime.json +11 -0
- package/.ikie/ferments/019f2735-35b3-74fe-a5db-82651a97cf0d/runtime.json +11 -0
- package/.ikie/ferments/019f2735-35de-741a-94e7-7b89c4eaaa43/runtime.json +11 -0
- package/.ikie/ferments/019f2735-35f5-713c-9892-f6179e783d02/runtime.json +11 -0
- package/.ikie/ferments/019f2735-360d-7056-a5e0-43fb3eb0f98e/runtime.json +9 -0
- package/.ikie/ferments/019f2735-362e-756c-b848-34f3c3c4602b/runtime.json +13 -0
- package/.ikie/ferments/019f2735-364a-76f9-bfba-ba52ca3852fd/runtime.json +11 -0
- package/.ikie/ferments/019f2735-3662-754c-8a88-807a68e0790e/runtime.json +11 -0
- package/.ikie/ferments/019f2735-36c2-71f9-a003-2921a1792be1/runtime.json +11 -0
- package/.ikie/ferments/019f2735-36d6-751d-9776-1e1def988d2d/runtime.json +9 -0
- package/.ikie/ferments/019f2735-36ef-70bf-a6b2-f2a0944f1b7e/runtime.json +9 -0
- package/.ikie/ferments/019f2735-3712-77e3-a46e-c69470e4e850/runtime.json +11 -0
- package/.ikie/ferments/019f2735-37cf-712f-bfaa-8fc9e29da513/runtime.json +11 -0
- package/.ikie/ferments/019f2735-37ed-727a-8a74-fe716d22571d/runtime.json +12 -0
- package/.ikie/ferments/019f2735-3810-7370-b587-eef0bb9d4d81/runtime.json +11 -0
- package/.ikie/ferments/019f2735-3828-71ad-9ee9-62fa0f46cad7/runtime.json +11 -0
- package/.ikie/ferments/019f2735-383f-722b-8d96-5038b9c9aa5a/runtime.json +11 -0
- package/.ikie/ferments/019f2735-385a-72c8-b269-a87a416c5a10/runtime.json +11 -0
- package/.ikie/ferments/019f2735-386d-73fe-be0a-1bc89a0264c4/runtime.json +13 -0
- package/.ikie/ferments/019f2735-388a-7276-9bee-81dcd177953f/runtime.json +11 -0
- package/.ikie/ferments/019f2735-82ed-74e8-870d-d8678feaf7bb/reviews/phase-phase-1-1.json +41 -0
- package/.ikie/ferments/019f2735-82ed-74e8-870d-d8678feaf7bb/runtime.json +11 -0
- package/.ikie/ferments/019f2735-831e-70aa-b9d6-1214165775d0/reviews/phase-phase-1-1.json +47 -0
- package/.ikie/ferments/019f2735-831e-70aa-b9d6-1214165775d0/runtime.json +13 -0
- package/.ikie/ferments/019f2735-835e-73b3-bb48-2d0080526fc3/reviews/phase-phase-1-1.json +40 -0
- package/.ikie/ferments/019f2735-835e-73b3-bb48-2d0080526fc3/runtime.json +9 -0
- package/.ikie/ferments/019f2735-8379-74b6-b62f-816bb5276a85/reviews/phase-phase-1-1.json +40 -0
- package/.ikie/ferments/019f2735-8379-74b6-b62f-816bb5276a85/runtime.json +9 -0
- package/.ikie/ferments/019f2735-8391-7385-bab6-03362866622a/reviews/phase-phase-1-1.json +40 -0
- package/.ikie/ferments/019f2735-8391-7385-bab6-03362866622a/runtime.json +9 -0
- package/.ikie/ferments/019f2735-83ad-7251-8280-aa6f7f3bfc5e/reviews/phase-phase-1-1.json +40 -0
- package/.ikie/ferments/019f2735-83ad-7251-8280-aa6f7f3bfc5e/runtime.json +9 -0
- package/.ikie/ferments/019f2735-83d2-77be-984e-fb65263a3a5b/reviews/phase-phase-1-1.json +40 -0
- package/.ikie/ferments/019f2735-83d2-77be-984e-fb65263a3a5b/runtime.json +9 -0
- package/.ikie/ferments/019f2735-83ec-7743-acc5-b2bf14c3cc54/reviews/phase-phase-1-1.json +62 -0
- package/.ikie/ferments/019f2735-83ec-7743-acc5-b2bf14c3cc54/runtime.json +9 -0
- package/.ikie/ferments/019f2740-c8c5-720f-b641-214bb99d8a83/runtime.json +11 -0
- package/.ikie/ferments/019f2740-c8fb-763f-8310-88c7e558e410/runtime.json +11 -0
- package/.ikie/ferments/019f2740-c917-70d2-8be6-15f376c60a70/runtime.json +11 -0
- package/.ikie/ferments/019f2740-c984-711f-a903-4b2251918413/runtime.json +12 -0
- package/.ikie/ferments/019f2740-ca09-71cf-93a5-86efc136ecd5/runtime.json +11 -0
- package/.ikie/ferments/019f2740-ca46-77f4-ae02-88e42f2153fb/runtime.json +15 -0
- package/.ikie/ferments/019f2740-ca74-72dd-8855-3feedfa071db/runtime.json +15 -0
- package/.ikie/ferments/019f2740-ca9a-710b-9bb7-feffa42cdb36/runtime.json +15 -0
- package/.ikie/ferments/019f2740-cac9-7518-ae93-973e4cf364ce/runtime.json +13 -0
- package/.ikie/ferments/019f2740-cb04-71c1-83a7-a448fefc6764/runtime.json +15 -0
- package/.ikie/ferments/019f2740-cb35-743b-bc18-434c7c233a08/runtime.json +15 -0
- package/.ikie/ferments/019f2740-cb6e-742c-970b-1893b4bf4e87/runtime.json +11 -0
- package/.ikie/ferments/019f2740-cb92-76a7-bd20-fd4f3f17664f/runtime.json +15 -0
- package/.ikie/ferments/019f2740-cbc1-7509-8542-302d2d1d3084/runtime.json +15 -0
- package/.ikie/ferments/019f2740-cbfa-719d-94c0-9d03a864e7e1/runtime.json +15 -0
- package/.ikie/ferments/019f2740-cc31-75f8-82a0-7d8078979000/runtime.json +15 -0
- package/.ikie/ferments/019f2740-cc58-765b-9f0c-c3aa2e09f27b/runtime.json +15 -0
- package/.ikie/ferments/019f2740-cc7c-7375-99b4-e90496e819e3/runtime.json +15 -0
- package/.ikie/ferments/019f2740-cca3-704a-bc20-e8c35cff6cec/runtime.json +15 -0
- package/.ikie/ferments/019f2740-ccd1-71cf-b8e8-be3527117f9a/runtime.json +15 -0
- package/.ikie/ferments/019f2740-cd0c-771f-ba4a-9188c31f3ee4/runtime.json +15 -0
- package/.ikie/ferments/019f2740-cd39-778e-a052-cc7f522f022d/runtime.json +11 -0
- package/.ikie/ferments/019f2740-cd5f-725e-8ec7-48a624398d2f/runtime.json +11 -0
- package/.ikie/ferments/019f2740-cd7f-713e-b20f-2321c13a86a8/reviews/phase-phase-1-1.json +63 -0
- package/.ikie/ferments/019f2740-cd7f-713e-b20f-2321c13a86a8/runtime.json +17 -0
- package/.ikie/ferments/019f2740-cf49-72fc-94b1-a262676c1136/reviews/phase-phase-1-1.json +63 -0
- package/.ikie/ferments/019f2740-cf49-72fc-94b1-a262676c1136/runtime.json +17 -0
- package/.ikie/ferments/019f2740-d16a-763d-b668-7c7cebc74c16/runtime.json +11 -0
- package/.ikie/ferments/019f2740-d675-747d-aa4c-b60d1616d218/runtime.json +11 -0
- package/.ikie/ferments/019f2740-d6ad-72de-bab7-e6344d568636/runtime.json +11 -0
- package/.ikie/ferments/019f2740-d6db-751a-bf3b-09d1c7ba989b/runtime.json +11 -0
- package/.ikie/ferments/019f2740-d712-75c8-b209-efc11bb1a22a/runtime.json +11 -0
- package/.ikie/ferments/019f2740-d745-764f-b758-99b0df2d6c01/pending-proposal.json +45 -0
- package/.ikie/ferments/019f2740-d76b-74a8-94c1-3d0cabd8cacf/pending-proposal.json +45 -0
- package/.ikie/ferments/019f2740-d88d-722b-8265-c8b89e1e59db/pending-proposal.json +45 -0
- package/.ikie/ferments/019f2740-d8f6-756a-b704-8a64a28290e8/pending-proposal.json +45 -0
- package/.ikie/ferments/019f2740-d90b-730f-87b9-85bee8e00a55/pending-proposal.json +45 -0
- package/.ikie/ferments/019f2740-f11f-76ff-9bd0-1e449804cc12/runtime.json +13 -0
- package/.ikie/ferments/019f2740-f155-767e-96db-6cf60c8b8dc1/runtime.json +11 -0
- package/.ikie/ferments/019f2740-f172-755f-a741-8e55858f5362/runtime.json +11 -0
- package/.ikie/ferments/019f2740-f18f-7328-b679-49f91b3c558c/runtime.json +11 -0
- package/.ikie/ferments/019f2740-f1b4-7289-b2f3-46f2bedf0e8f/runtime.json +11 -0
- package/.ikie/ferments/019f2740-f1dc-769b-bfe1-abcbcfd8ff2f/runtime.json +11 -0
- package/.ikie/ferments/019f2740-f1ed-760b-91dc-3bf7950fc112/runtime.json +11 -0
- package/.ikie/ferments/019f2740-f1fd-72dd-9c40-e6ab17b819ef/runtime.json +11 -0
- package/.ikie/ferments/019f2740-f23d-7588-95af-66be8cae9529/runtime.json +9 -0
- package/.ikie/ferments/019f2740-f269-7334-9c82-6554d9fc595a/runtime.json +13 -0
- package/.ikie/ferments/019f2740-f2bf-7147-9e68-cd8cb74d1604/runtime.json +11 -0
- package/.ikie/ferments/019f2740-f2f3-73db-9542-23a91c3632e5/runtime.json +11 -0
- package/.ikie/ferments/019f2740-f387-77e6-99f2-7cabb6f1ef37/runtime.json +11 -0
- package/.ikie/ferments/019f2740-f3af-722d-92a8-b49ab2e974fd/runtime.json +9 -0
- package/.ikie/ferments/019f2740-f3e6-7142-870c-ec1ee626cef4/runtime.json +9 -0
- package/.ikie/ferments/019f2740-f408-74f3-b1a2-3187af4e7bf8/runtime.json +11 -0
- package/.ikie/ferments/019f2740-f535-7419-8dc5-3c00bfeb566e/runtime.json +11 -0
- package/.ikie/ferments/019f2740-f546-7749-b0bd-cc0ec724f9c4/runtime.json +12 -0
- package/.ikie/ferments/019f2740-f576-7649-a468-cc473a719123/runtime.json +11 -0
- package/.ikie/ferments/019f2740-f599-7239-aa50-4bde87b6fe17/runtime.json +11 -0
- package/.ikie/ferments/019f2740-f5b8-7236-9b88-a0abe214d6b6/runtime.json +11 -0
- package/.ikie/ferments/019f2740-f5d1-73fc-9eea-06cf527069f2/runtime.json +11 -0
- package/.ikie/ferments/019f2740-f5fb-757e-b89e-52aeb00d53a0/runtime.json +13 -0
- package/.ikie/ferments/019f2740-f616-7770-96df-c4d02e293b96/runtime.json +11 -0
- package/.ikie/ferments/019f2741-09b2-777a-960c-544786151af2/reviews/phase-phase-1-1.json +41 -0
- package/.ikie/ferments/019f2741-09b2-777a-960c-544786151af2/runtime.json +11 -0
- package/.ikie/ferments/019f2741-0a0a-735a-b158-6a1f99b53082/reviews/phase-phase-1-1.json +47 -0
- package/.ikie/ferments/019f2741-0a0a-735a-b158-6a1f99b53082/runtime.json +13 -0
- package/.ikie/ferments/019f2741-0a87-74ec-bcb1-e88127e8739b/reviews/phase-phase-1-1.json +40 -0
- package/.ikie/ferments/019f2741-0a87-74ec-bcb1-e88127e8739b/runtime.json +9 -0
- package/.ikie/ferments/019f2741-0aaa-7399-905b-0c8f62000e15/reviews/phase-phase-1-1.json +40 -0
- package/.ikie/ferments/019f2741-0aaa-7399-905b-0c8f62000e15/runtime.json +9 -0
- package/.ikie/ferments/019f2741-0acc-7062-86e9-0d2d365446d9/reviews/phase-phase-1-1.json +40 -0
- package/.ikie/ferments/019f2741-0acc-7062-86e9-0d2d365446d9/runtime.json +9 -0
- package/.ikie/ferments/019f2741-0b14-709e-a5aa-80efb5a3c7d7/reviews/phase-phase-1-1.json +40 -0
- package/.ikie/ferments/019f2741-0b14-709e-a5aa-80efb5a3c7d7/runtime.json +9 -0
- package/.ikie/ferments/019f2741-0b3d-77ed-bdd9-322103b094e2/reviews/phase-phase-1-1.json +40 -0
- package/.ikie/ferments/019f2741-0b3d-77ed-bdd9-322103b094e2/runtime.json +9 -0
- package/.ikie/ferments/019f2741-0b7b-70ab-b3d6-ada61a3e0a92/reviews/phase-phase-1-1.json +62 -0
- package/.ikie/ferments/019f2741-0b7b-70ab-b3d6-ada61a3e0a92/runtime.json +9 -0
- package/.ikie/ferments/019f2742-b177-74a8-90f2-c1130a6ddae7/runtime.json +11 -0
- package/.ikie/ferments/019f2742-b193-72cf-9826-86ede671e061/runtime.json +11 -0
- package/.ikie/ferments/019f2742-b1af-76d9-972c-b67a2f5854d1/runtime.json +11 -0
- package/.ikie/ferments/019f2742-b1de-763e-8e31-a14505f9b64d/runtime.json +12 -0
- package/.ikie/ferments/019f2742-b25b-71fe-81de-89fc3b431b39/runtime.json +11 -0
- package/.ikie/ferments/019f2742-b291-7078-ba58-d4b50df3dd81/runtime.json +15 -0
- package/.ikie/ferments/019f2742-b2db-71a8-9d5d-da4bccc3e572/runtime.json +15 -0
- package/.ikie/ferments/019f2742-b305-7323-86c6-39adaa181f18/runtime.json +15 -0
- package/.ikie/ferments/019f2742-b330-77ad-9315-8ca801c973e8/runtime.json +13 -0
- package/.ikie/ferments/019f2742-b377-703f-9781-394729f9fe89/runtime.json +15 -0
- package/.ikie/ferments/019f2742-b3af-75aa-9bb7-750cb6af56e4/runtime.json +15 -0
- package/.ikie/ferments/019f2742-b3fb-7159-a969-be0073f90b6d/runtime.json +11 -0
- package/.ikie/ferments/019f2742-b41a-730e-ae6e-89421276e69d/runtime.json +15 -0
- package/.ikie/ferments/019f2742-b44e-75ec-824c-f6b77f643438/runtime.json +15 -0
- package/.ikie/ferments/019f2742-b47d-70c6-af2f-04922c1aef02/runtime.json +15 -0
- package/.ikie/ferments/019f2742-b4ad-748b-86db-3c8ae8907dbc/runtime.json +15 -0
- package/.ikie/ferments/019f2742-b4d5-72ff-a1b0-0da356ab94e6/runtime.json +15 -0
- package/.ikie/ferments/019f2742-b508-71fd-8181-7bb013178e5e/runtime.json +15 -0
- package/.ikie/ferments/019f2742-b536-7129-8b5c-2e132b38a98e/runtime.json +15 -0
- package/.ikie/ferments/019f2742-b55d-738b-8663-88a05c1e44b5/runtime.json +15 -0
- package/.ikie/ferments/019f2742-b587-714c-b043-f0a553a22404/runtime.json +15 -0
- package/.ikie/ferments/019f2742-b5b5-74ff-a850-a24ff317c1df/runtime.json +11 -0
- package/.ikie/ferments/019f2742-b5f5-72ba-b6b8-a4d62df39a2c/runtime.json +11 -0
- package/.ikie/ferments/019f2742-b621-7530-8e63-d252ae47ffd6/reviews/phase-phase-1-1.json +63 -0
- package/.ikie/ferments/019f2742-b621-7530-8e63-d252ae47ffd6/runtime.json +17 -0
- package/.ikie/ferments/019f2742-b7c0-756d-8014-e96fec9713ee/reviews/phase-phase-1-1.json +63 -0
- package/.ikie/ferments/019f2742-b7c0-756d-8014-e96fec9713ee/runtime.json +17 -0
- package/.ikie/ferments/019f2742-b95b-76bb-a4a6-e5cc31788fe3/runtime.json +11 -0
- package/.ikie/ferments/019f2742-be6b-759b-ba34-29d0245dc929/runtime.json +11 -0
- package/.ikie/ferments/019f2742-be98-73ba-aac5-07ad4f7d887d/runtime.json +11 -0
- package/.ikie/ferments/019f2742-beba-703c-aadb-32c590404bfa/runtime.json +11 -0
- package/.ikie/ferments/019f2742-bee0-76ad-9e47-81cff634877f/runtime.json +11 -0
- package/.ikie/ferments/019f2742-bf10-742f-a792-7aa3836d81ad/pending-proposal.json +45 -0
- package/.ikie/ferments/019f2742-bf36-779c-b126-2ccb8ec97138/pending-proposal.json +45 -0
- package/.ikie/ferments/019f2742-c098-74ee-9a07-575f50989d9f/pending-proposal.json +45 -0
- package/.ikie/ferments/019f2742-c135-74fe-aefa-d1a5db536132/pending-proposal.json +45 -0
- package/.ikie/ferments/019f2742-c19a-779c-a175-27330932470d/pending-proposal.json +45 -0
- package/.ikie/ferments/019f2742-db2a-745f-b7c8-8fb383e044e7/runtime.json +13 -0
- package/.ikie/ferments/019f2742-db83-77ac-b1d2-a422571fbcf6/runtime.json +11 -0
- package/.ikie/ferments/019f2742-dba7-779e-9560-7df90ddab3c4/runtime.json +11 -0
- package/.ikie/ferments/019f2742-dbd2-740c-9f94-9f313c07ee52/runtime.json +11 -0
- package/.ikie/ferments/019f2742-dbfb-77b3-8e3f-b0d20bd29689/runtime.json +11 -0
- package/.ikie/ferments/019f2742-dc10-769d-b9a2-bab4851f5cf5/runtime.json +11 -0
- package/.ikie/ferments/019f2742-dc23-7235-a215-8b86d261566a/runtime.json +11 -0
- package/.ikie/ferments/019f2742-dc37-762d-a5da-87ff3f2206b0/runtime.json +11 -0
- package/.ikie/ferments/019f2742-dc65-73c8-aa07-f803b1066c8b/runtime.json +9 -0
- package/.ikie/ferments/019f2742-dc91-7165-bbfe-4659f754c4a6/runtime.json +13 -0
- package/.ikie/ferments/019f2742-dcd1-7252-ad9b-12c0dab633e6/runtime.json +11 -0
- package/.ikie/ferments/019f2742-dceb-75ba-b8cb-557e60aa4a9b/runtime.json +11 -0
- package/.ikie/ferments/019f2742-dd2f-77a6-b71c-a9543ac1145f/runtime.json +11 -0
- package/.ikie/ferments/019f2742-dd6a-70ab-aff3-ae678e8be52f/runtime.json +9 -0
- package/.ikie/ferments/019f2742-dd85-7529-90c0-2cb497df7711/runtime.json +9 -0
- package/.ikie/ferments/019f2742-dda0-715e-ae24-693bfa79f191/runtime.json +11 -0
- package/.ikie/ferments/019f2742-deb9-7319-9599-d96743413a8c/runtime.json +11 -0
- package/.ikie/ferments/019f2742-dee3-705e-9550-b7701bc8dfbf/runtime.json +12 -0
- package/.ikie/ferments/019f2742-df10-71bf-8ac0-8e4a8c40cfa8/runtime.json +11 -0
- package/.ikie/ferments/019f2742-df29-735f-817c-2819becd5092/runtime.json +11 -0
- package/.ikie/ferments/019f2742-df46-7592-b070-7bdf50095ce2/runtime.json +11 -0
- package/.ikie/ferments/019f2742-df66-75e4-9926-4d5dacd457f4/runtime.json +11 -0
- package/.ikie/ferments/019f2742-df96-71c4-973e-045dc4f272e0/runtime.json +13 -0
- package/.ikie/ferments/019f2742-dfca-7353-bfd3-f010ec0726e8/runtime.json +11 -0
- package/.ikie/ferments/019f2742-f0fb-77cb-9a95-25a7231702b7/reviews/phase-phase-1-1.json +41 -0
- package/.ikie/ferments/019f2742-f0fb-77cb-9a95-25a7231702b7/runtime.json +11 -0
- package/.ikie/ferments/019f2742-f145-77ec-a4c7-fafd1605d492/reviews/phase-phase-1-1.json +47 -0
- package/.ikie/ferments/019f2742-f145-77ec-a4c7-fafd1605d492/runtime.json +13 -0
- package/.ikie/ferments/019f2742-f1dc-74bd-8452-067d9c1b909d/reviews/phase-phase-1-1.json +40 -0
- package/.ikie/ferments/019f2742-f1dc-74bd-8452-067d9c1b909d/runtime.json +9 -0
- package/.ikie/ferments/019f2742-f1fd-745d-b989-9a2d3ec7594d/reviews/phase-phase-1-1.json +40 -0
- package/.ikie/ferments/019f2742-f1fd-745d-b989-9a2d3ec7594d/runtime.json +9 -0
- package/.ikie/ferments/019f2742-f21a-7398-9190-8bba01c6248e/reviews/phase-phase-1-1.json +40 -0
- package/.ikie/ferments/019f2742-f21a-7398-9190-8bba01c6248e/runtime.json +9 -0
- package/.ikie/ferments/019f2742-f23a-73b1-89d2-1272093e6d2d/reviews/phase-phase-1-1.json +40 -0
- package/.ikie/ferments/019f2742-f23a-73b1-89d2-1272093e6d2d/runtime.json +9 -0
- package/.ikie/ferments/019f2742-f25c-74d1-80b3-129a992edd3f/reviews/phase-phase-1-1.json +40 -0
- package/.ikie/ferments/019f2742-f25c-74d1-80b3-129a992edd3f/runtime.json +9 -0
- package/.ikie/ferments/019f2742-f285-708d-bdd2-c2875cc16158/reviews/phase-phase-1-1.json +62 -0
- package/.ikie/ferments/019f2742-f285-708d-bdd2-c2875cc16158/runtime.json +9 -0
- package/.ikie/ferments/019f2745-3a6e-7769-8da0-1994b591349d/runtime.json +11 -0
- package/.ikie/ferments/019f2745-3a8c-74db-bd6b-b4a1164b381a/runtime.json +11 -0
- package/.ikie/ferments/019f2745-3aad-7249-b742-f1e6722d5c97/runtime.json +11 -0
- package/.ikie/ferments/019f2745-3ae9-76fb-861c-49f13c1db883/runtime.json +12 -0
- package/.ikie/ferments/019f2745-3b16-721b-b523-469846e0c9e5/runtime.json +11 -0
- package/.ikie/ferments/019f2745-3b53-7119-ae88-20cf3d567e91/runtime.json +11 -0
- package/.ikie/ferments/019f2745-3ba2-71b6-9fab-faaf750f8535/runtime.json +15 -0
- package/.ikie/ferments/019f2745-3bed-764b-9b4b-79b4d7daa35d/runtime.json +15 -0
- package/.ikie/ferments/019f2745-3c3e-7792-8df7-d88bab7aa48d/runtime.json +15 -0
- package/.ikie/ferments/019f2745-3c81-770d-bcf9-6d163ffeb285/runtime.json +13 -0
- package/.ikie/ferments/019f2745-3cca-748d-9740-8c55644c9afa/runtime.json +15 -0
- package/.ikie/ferments/019f2745-3d12-71cc-923f-520142ddf544/runtime.json +15 -0
- package/.ikie/ferments/019f2745-3d79-7083-8865-8f54989080e0/runtime.json +11 -0
- package/.ikie/ferments/019f2745-3da9-74f9-a640-86b4685f40a0/runtime.json +15 -0
- package/.ikie/ferments/019f2745-3ddf-721b-8a40-3a2318b6bc0a/runtime.json +15 -0
- package/.ikie/ferments/019f2745-3e2a-76a8-8c61-ef15db41aef2/runtime.json +15 -0
- package/.ikie/ferments/019f2745-3e5d-75bb-ab71-b4aa83c491b7/runtime.json +15 -0
- package/.ikie/ferments/019f2745-3e7e-7437-848a-100463c72f90/runtime.json +15 -0
- package/.ikie/ferments/019f2745-3ea7-7729-9000-7874145f4bb5/runtime.json +15 -0
- package/.ikie/ferments/019f2745-3ecf-760c-931c-3dc5996b06b1/runtime.json +15 -0
- package/.ikie/ferments/019f2745-3f05-72d8-ad71-d1df02c5939a/runtime.json +15 -0
- package/.ikie/ferments/019f2745-3f37-74ad-9e02-6e0d3854b664/runtime.json +15 -0
- package/.ikie/ferments/019f2745-3f65-740d-8094-58f60c9cdcec/runtime.json +11 -0
- package/.ikie/ferments/019f2745-3f91-7219-8eec-f5f7873a434a/runtime.json +11 -0
- package/.ikie/ferments/019f2745-3fc5-706a-8188-5a3b4e13a796/reviews/phase-phase-1-1.json +63 -0
- package/.ikie/ferments/019f2745-3fc5-706a-8188-5a3b4e13a796/runtime.json +17 -0
- package/.ikie/ferments/019f2745-417c-77ad-bdaf-380b81846577/reviews/phase-phase-1-1.json +63 -0
- package/.ikie/ferments/019f2745-417c-77ad-bdaf-380b81846577/runtime.json +17 -0
- package/.ikie/ferments/019f2745-4372-72ff-a50c-3eaad36a726b/runtime.json +11 -0
- package/.ikie/ferments/019f2745-4859-714b-a8b7-0a82d35b87c7/runtime.json +11 -0
- package/.ikie/ferments/019f2745-488a-724f-91a9-d621e9f2b3f7/runtime.json +11 -0
- package/.ikie/ferments/019f2745-48ae-7741-8598-03ede47b4594/runtime.json +11 -0
- package/.ikie/ferments/019f2745-48e9-710f-889b-e88aa5d7e60e/runtime.json +11 -0
- package/.ikie/ferments/019f2745-4917-7268-9b76-f8bb1215ea19/pending-proposal.json +45 -0
- package/.ikie/ferments/019f2745-493c-775d-a10d-4a2cf8305a4e/pending-proposal.json +45 -0
- package/.ikie/ferments/019f2745-4abd-7319-9e11-4b348ab24547/pending-proposal.json +45 -0
- package/.ikie/ferments/019f2745-4b10-726d-ad1f-c086e7d4dfc0/pending-proposal.json +45 -0
- package/.ikie/ferments/019f2745-4b21-75a6-b151-472f4eb9b95d/pending-proposal.json +45 -0
- package/.ikie/ferments/019f2745-5dd5-741b-85e2-1d67ce09a138/runtime.json +13 -0
- package/.ikie/ferments/019f2745-5e14-73dd-bd03-3b5765f70fac/runtime.json +11 -0
- package/.ikie/ferments/019f2745-5e2e-70b5-9348-35ebbdb8ec8e/runtime.json +11 -0
- package/.ikie/ferments/019f2745-5e4f-7626-b075-6b6d30099847/runtime.json +11 -0
- package/.ikie/ferments/019f2745-5e71-7768-b436-e739555f1038/runtime.json +11 -0
- package/.ikie/ferments/019f2745-5e8a-77c5-ba98-cb2802c55266/runtime.json +11 -0
- package/.ikie/ferments/019f2745-5ea8-707f-b034-9c98e6ca720b/runtime.json +11 -0
- package/.ikie/ferments/019f2745-5ebd-73aa-a919-150c9bb014f9/runtime.json +11 -0
- package/.ikie/ferments/019f2745-5ed6-71e9-9a20-360fa807f598/runtime.json +9 -0
- package/.ikie/ferments/019f2745-5ef8-7199-bd13-69b5c883541b/runtime.json +13 -0
- package/.ikie/ferments/019f2745-5f30-73f9-a647-9e7518599c32/runtime.json +11 -0
- package/.ikie/ferments/019f2745-5f53-7358-897a-37717d64d996/runtime.json +11 -0
- package/.ikie/ferments/019f2745-5fb6-736b-b42d-bbc3c1916321/runtime.json +11 -0
- package/.ikie/ferments/019f2745-5fea-730e-b57b-d7f1965d5934/runtime.json +9 -0
- package/.ikie/ferments/019f2745-6014-77cb-b01f-d93baf8af409/runtime.json +9 -0
- package/.ikie/ferments/019f2745-602f-74b9-8eed-bb29fa4a76d4/runtime.json +11 -0
- package/.ikie/ferments/019f2745-60e2-7562-8e7c-2ded6cf75426/runtime.json +11 -0
- package/.ikie/ferments/019f2745-6114-703e-ac05-5ba11b255b62/runtime.json +12 -0
- package/.ikie/ferments/019f2745-6160-733e-93f5-df586c6afc0a/runtime.json +11 -0
- package/.ikie/ferments/019f2745-6179-702b-84fb-09bc60f8c04c/runtime.json +11 -0
- package/.ikie/ferments/019f2745-618d-74dc-a174-28a134d353fa/runtime.json +11 -0
- package/.ikie/ferments/019f2745-619e-72a8-8377-34127bfc774f/runtime.json +11 -0
- package/.ikie/ferments/019f2745-61ae-767e-8a2e-a5ca6bc84a88/runtime.json +13 -0
- package/.ikie/ferments/019f2745-61c7-760c-9914-a9bf3c96acd8/runtime.json +11 -0
- package/.ikie/ferments/019f2745-79a2-70b8-bcd0-fbaee13849db/reviews/phase-phase-1-1.json +41 -0
- package/.ikie/ferments/019f2745-79a2-70b8-bcd0-fbaee13849db/runtime.json +11 -0
- package/.ikie/ferments/019f2745-79e7-74d5-b867-e23b027a8512/reviews/phase-phase-1-1.json +47 -0
- package/.ikie/ferments/019f2745-79e7-74d5-b867-e23b027a8512/runtime.json +13 -0
- package/.ikie/ferments/019f2745-7a5b-703e-999e-dd5cb98133eb/reviews/phase-phase-1-1.json +40 -0
- package/.ikie/ferments/019f2745-7a5b-703e-999e-dd5cb98133eb/runtime.json +9 -0
- package/.ikie/ferments/019f2745-7a90-732a-b09a-9aa29e2390cd/reviews/phase-phase-1-1.json +40 -0
- package/.ikie/ferments/019f2745-7a90-732a-b09a-9aa29e2390cd/runtime.json +9 -0
- package/.ikie/ferments/019f2745-7aad-731c-ac2a-cf71d20fb709/reviews/phase-phase-1-1.json +40 -0
- package/.ikie/ferments/019f2745-7aad-731c-ac2a-cf71d20fb709/runtime.json +9 -0
- package/.ikie/ferments/019f2745-7ad2-70ff-986b-83679208066a/reviews/phase-phase-1-1.json +40 -0
- package/.ikie/ferments/019f2745-7ad2-70ff-986b-83679208066a/runtime.json +9 -0
- package/.ikie/ferments/019f2745-7af8-735c-8200-f49b201f5b7f/reviews/phase-phase-1-1.json +40 -0
- package/.ikie/ferments/019f2745-7af8-735c-8200-f49b201f5b7f/runtime.json +9 -0
- package/.ikie/ferments/019f2745-7b17-7489-b4d5-b83e4feeb641/reviews/phase-phase-1-1.json +62 -0
- package/.ikie/ferments/019f2745-7b17-7489-b4d5-b83e4feeb641/runtime.json +9 -0
- package/.ikie/ferments/019f2747-700f-77dd-8fec-eec70eb204bf/runtime.json +11 -0
- package/.ikie/ferments/019f2747-702b-748d-83a8-a44d909b5d84/runtime.json +11 -0
- package/.ikie/ferments/019f2747-704a-77c6-a068-5eff8527f149/runtime.json +11 -0
- package/.ikie/ferments/019f2747-7075-7628-9088-9c79d85087be/runtime.json +12 -0
- package/.ikie/ferments/019f2747-70e4-7157-aa37-d8201f07134a/runtime.json +11 -0
- package/.ikie/ferments/019f2747-7139-74da-8f85-02b76ecfc932/runtime.json +15 -0
- package/.ikie/ferments/019f2747-7156-762f-8c31-84ae357e2edd/runtime.json +15 -0
- package/.ikie/ferments/019f2747-7175-76e7-9d21-15608a6463ca/runtime.json +15 -0
- package/.ikie/ferments/019f2747-71c8-777c-8106-df11073ad85f/runtime.json +13 -0
- package/.ikie/ferments/019f2747-7209-71f5-8f4e-ccfd46653321/runtime.json +15 -0
- package/.ikie/ferments/019f2747-723d-728f-baa8-dd3b4b239037/runtime.json +15 -0
- package/.ikie/ferments/019f2747-728d-749b-9e9a-962ea824d13d/runtime.json +11 -0
- package/.ikie/ferments/019f2747-72b0-756e-b648-c5491d46dc37/runtime.json +15 -0
- package/.ikie/ferments/019f2747-72e8-747e-9e5b-93005dd51d36/runtime.json +15 -0
- package/.ikie/ferments/019f2747-7319-702b-84bd-aed70c3f60c3/runtime.json +15 -0
- package/.ikie/ferments/019f2747-734a-732c-89d8-47fa74a13f6b/runtime.json +15 -0
- package/.ikie/ferments/019f2747-7372-72ce-99d0-ddeeb20c73e5/runtime.json +15 -0
- package/.ikie/ferments/019f2747-73a1-723d-b064-2240965b5460/runtime.json +15 -0
- package/.ikie/ferments/019f2747-73cd-71b5-9b21-481224573278/runtime.json +15 -0
- package/.ikie/ferments/019f2747-73f7-779f-a227-64ba479c2615/runtime.json +15 -0
- package/.ikie/ferments/019f2747-743e-759e-856b-283e346eec66/runtime.json +15 -0
- package/.ikie/ferments/019f2747-74ac-702b-877f-1b4447f77938/runtime.json +11 -0
- package/.ikie/ferments/019f2747-74cc-773a-ad3a-febf5e9e5a57/runtime.json +11 -0
- package/.ikie/ferments/019f2747-750b-77dc-aa24-230eef901e40/reviews/phase-phase-1-1.json +63 -0
- package/.ikie/ferments/019f2747-750b-77dc-aa24-230eef901e40/runtime.json +17 -0
- package/.ikie/ferments/019f2747-76f2-72c9-8764-82fdd0429215/reviews/phase-phase-1-1.json +63 -0
- package/.ikie/ferments/019f2747-76f2-72c9-8764-82fdd0429215/runtime.json +17 -0
- package/.ikie/ferments/019f2747-795d-7452-9810-a64e86f3d5c5/runtime.json +11 -0
- package/.ikie/ferments/019f2747-7ee1-770e-ace1-bc0f5571f69a/runtime.json +11 -0
- package/.ikie/ferments/019f2747-7f01-738d-a2a2-c7aa33365582/runtime.json +11 -0
- package/.ikie/ferments/019f2747-7f40-712b-bea9-8a20399c9dfd/runtime.json +11 -0
- package/.ikie/ferments/019f2747-7fb4-70c9-aaf6-af4ac5fbebef/runtime.json +11 -0
- package/.ikie/ferments/019f2747-7fe2-77e7-90d5-dcee3cbe73ea/pending-proposal.json +45 -0
- package/.ikie/ferments/019f2747-7ff9-7028-ac25-77ab9c513710/pending-proposal.json +45 -0
- package/.ikie/ferments/019f2747-81c3-7320-8a96-88880d06cc14/pending-proposal.json +45 -0
- package/.ikie/ferments/019f2747-8236-76c0-b17c-1f13a22af974/pending-proposal.json +45 -0
- package/.ikie/ferments/019f2747-824b-77ba-90bd-67bcb4e9d5d6/pending-proposal.json +45 -0
- package/.ikie/ferments/019f2747-a18a-77f4-802d-18ab07f51261/runtime.json +13 -0
- package/.ikie/ferments/019f2747-a1b6-76cf-9688-94e8f41b179f/runtime.json +11 -0
- package/.ikie/ferments/019f2747-a1e2-730b-a56d-cb622d190c49/runtime.json +11 -0
- package/.ikie/ferments/019f2747-a20b-739e-a524-b5b2cdabdf49/runtime.json +11 -0
- package/.ikie/ferments/019f2747-a228-7026-9fe2-79fc90d7c622/runtime.json +11 -0
- package/.ikie/ferments/019f2747-a244-71b5-8ceb-d6094c7a5d28/runtime.json +11 -0
- package/.ikie/ferments/019f2747-a25d-723e-9962-ed1f266a9709/runtime.json +11 -0
- package/.ikie/ferments/019f2747-a275-734d-9ede-ae9644a179b6/runtime.json +11 -0
- package/.ikie/ferments/019f2747-a2a4-7280-b8c4-d8233d9e322a/runtime.json +9 -0
- package/.ikie/ferments/019f2747-a2ca-767d-8a35-9043b18e5ec7/runtime.json +13 -0
- package/.ikie/ferments/019f2747-a2f5-745d-929e-9fb2ef5d333f/runtime.json +11 -0
- package/.ikie/ferments/019f2747-a317-76b9-8954-2b7a4487a352/runtime.json +11 -0
- package/.ikie/ferments/019f2747-a380-7746-be44-cb9e1920561f/runtime.json +11 -0
- package/.ikie/ferments/019f2747-a3a2-77ac-9fe5-2a844b64872d/runtime.json +9 -0
- package/.ikie/ferments/019f2747-a3b7-70ee-ba83-b3c43d3122c8/runtime.json +9 -0
- package/.ikie/ferments/019f2747-a3e7-76e9-96f0-143c82d8005b/runtime.json +11 -0
- package/.ikie/ferments/019f2747-a4d3-737b-8d80-2dc63a0fbe1a/runtime.json +11 -0
- package/.ikie/ferments/019f2747-a506-7442-919f-50ae2b602e7a/runtime.json +12 -0
- package/.ikie/ferments/019f2747-a53e-76cb-9876-a81dd08e3fe7/runtime.json +11 -0
- package/.ikie/ferments/019f2747-a56a-7208-ad93-0fdcbc41c1ed/runtime.json +11 -0
- package/.ikie/ferments/019f2747-a581-73fc-aac5-a44f696ccbe8/runtime.json +11 -0
- package/.ikie/ferments/019f2747-a595-71d2-9c2d-d846e9803665/runtime.json +11 -0
- package/.ikie/ferments/019f2747-a5a7-73c6-b881-f9c0a08f3af3/runtime.json +13 -0
- package/.ikie/ferments/019f2747-a5be-7777-94c0-0849e693ffcb/runtime.json +11 -0
- package/.ikie/ferments/019f2747-b3e6-706a-912c-71d57080c7c1/reviews/phase-phase-1-1.json +41 -0
- package/.ikie/ferments/019f2747-b3e6-706a-912c-71d57080c7c1/runtime.json +11 -0
- package/.ikie/ferments/019f2747-b464-75bd-9c0b-c6b5e5de789e/reviews/phase-phase-1-1.json +47 -0
- package/.ikie/ferments/019f2747-b464-75bd-9c0b-c6b5e5de789e/runtime.json +13 -0
- package/.ikie/ferments/019f2747-b4f2-719c-86a6-763c494a680c/reviews/phase-phase-1-1.json +40 -0
- package/.ikie/ferments/019f2747-b4f2-719c-86a6-763c494a680c/runtime.json +9 -0
- package/.ikie/ferments/019f2747-b52b-75cd-b664-8c2aedd87893/reviews/phase-phase-1-1.json +40 -0
- package/.ikie/ferments/019f2747-b52b-75cd-b664-8c2aedd87893/runtime.json +9 -0
- package/.ikie/ferments/019f2747-b551-7188-81a3-7b7e8371aea4/reviews/phase-phase-1-1.json +40 -0
- package/.ikie/ferments/019f2747-b551-7188-81a3-7b7e8371aea4/runtime.json +9 -0
- package/.ikie/ferments/019f2747-b5a5-703f-98e6-5eac131044ed/reviews/phase-phase-1-1.json +40 -0
- package/.ikie/ferments/019f2747-b5a5-703f-98e6-5eac131044ed/runtime.json +9 -0
- package/.ikie/ferments/019f2747-b5cc-7560-80d8-509578bdae44/reviews/phase-phase-1-1.json +40 -0
- package/.ikie/ferments/019f2747-b5cc-7560-80d8-509578bdae44/runtime.json +9 -0
- package/.ikie/ferments/019f2747-b5f7-7079-ba17-833018701a06/reviews/phase-phase-1-1.json +62 -0
- package/.ikie/ferments/019f2747-b5f7-7079-ba17-833018701a06/runtime.json +9 -0
- package/.ikie/ferments/019f274a-bb4e-77b1-9f03-633b22b8e54c/runtime.json +11 -0
- package/.ikie/ferments/019f274a-bb6e-7715-92a0-c73da2ff97da/runtime.json +11 -0
- package/.ikie/ferments/019f274a-bb89-75b5-9daa-c57ef85c64c1/runtime.json +11 -0
- package/.ikie/ferments/019f274a-bbb7-72ad-9695-3227786b16ef/runtime.json +12 -0
- package/.ikie/ferments/019f274a-bbfb-70da-95f3-54a3e507888d/runtime.json +11 -0
- package/.ikie/ferments/019f274a-bc37-771a-8e77-b8d5476a8a1e/runtime.json +15 -0
- package/.ikie/ferments/019f274a-bc61-7024-9311-148a94a6713e/runtime.json +15 -0
- package/.ikie/ferments/019f274a-bca0-76a9-b966-59bbe3fb5bdd/runtime.json +15 -0
- package/.ikie/ferments/019f274a-bcc9-774d-adc2-aa99e82abb79/runtime.json +13 -0
- package/.ikie/ferments/019f274a-bcfb-737e-9c7d-b9db4762b624/runtime.json +15 -0
- package/.ikie/ferments/019f274a-bd3f-725b-9d39-b672191556ac/runtime.json +15 -0
- package/.ikie/ferments/019f274a-bd82-75a8-b936-350a55a7a1da/runtime.json +11 -0
- package/.ikie/ferments/019f274a-bda4-71b2-aa8b-7ba6f6103814/runtime.json +15 -0
- package/.ikie/ferments/019f274a-bddc-70ff-90f8-f1648dede718/runtime.json +15 -0
- package/.ikie/ferments/019f274a-be12-70bd-b935-0173946e60c2/runtime.json +15 -0
- package/.ikie/ferments/019f274a-be51-7719-b04b-d720a1d215f7/runtime.json +15 -0
- package/.ikie/ferments/019f274a-be8c-7084-aa78-4d139084333b/runtime.json +15 -0
- package/.ikie/ferments/019f274a-bebc-70b7-8c8d-fc7b50eda266/runtime.json +15 -0
- package/.ikie/ferments/019f274a-bee6-732f-b9ee-9fb3f1966e3d/runtime.json +15 -0
- package/.ikie/ferments/019f274a-bf19-76bc-8ab4-fe8c3fb28875/runtime.json +15 -0
- package/.ikie/ferments/019f274a-bf40-755b-bd4f-eec6d8e7a4de/runtime.json +15 -0
- package/.ikie/ferments/019f274a-bf74-7013-beb9-08aab0dc8866/runtime.json +11 -0
- package/.ikie/ferments/019f274a-bfa3-718d-ab5d-ededc4cf9e63/runtime.json +11 -0
- package/.ikie/ferments/019f274a-bfd6-7689-b29b-2c3ebfe1afd3/reviews/phase-phase-1-1.json +63 -0
- package/.ikie/ferments/019f274a-bfd6-7689-b29b-2c3ebfe1afd3/runtime.json +17 -0
- package/.ikie/ferments/019f274a-c186-77ea-a92c-78fa52657710/reviews/phase-phase-1-1.json +63 -0
- package/.ikie/ferments/019f274a-c186-77ea-a92c-78fa52657710/runtime.json +17 -0
- package/.ikie/ferments/019f274a-c3cf-77e8-9917-76d94992456a/runtime.json +11 -0
- package/.ikie/ferments/019f274a-c8eb-7071-9900-1668ccf13dad/runtime.json +11 -0
- package/.ikie/ferments/019f274a-c928-7276-9fd8-c8fdfbd215ff/runtime.json +11 -0
- package/.ikie/ferments/019f274a-c957-7698-8a97-54584a38f472/runtime.json +11 -0
- package/.ikie/ferments/019f274a-c97f-71b5-8fd9-727b49c9b72c/runtime.json +11 -0
- package/.ikie/ferments/019f274a-c9ad-76bb-99f8-b8f7840ad3ab/pending-proposal.json +45 -0
- package/.ikie/ferments/019f274a-c9cf-73ad-8229-d03bd5389697/pending-proposal.json +45 -0
- package/.ikie/ferments/019f274a-cb01-720a-b512-e49f820b9be5/pending-proposal.json +45 -0
- package/.ikie/ferments/019f274a-cbba-764d-a8e7-da6a060d9cd1/pending-proposal.json +45 -0
- package/.ikie/ferments/019f274a-cbdd-744f-84e9-af64527ff116/pending-proposal.json +45 -0
- package/.ikie/ferments/019f274a-efc1-75b6-ad54-83a9fcb061af/runtime.json +13 -0
- package/.ikie/ferments/019f274a-effe-713a-9672-ca8c839b0936/runtime.json +11 -0
- package/.ikie/ferments/019f274a-f03c-7194-b9e6-a24620ef1b89/runtime.json +11 -0
- package/.ikie/ferments/019f274a-f058-758c-9ecf-f6af131a0798/runtime.json +11 -0
- package/.ikie/ferments/019f274a-f06e-712d-b720-09a6188a152a/runtime.json +11 -0
- package/.ikie/ferments/019f274a-f085-715e-8b5b-07587107bc86/runtime.json +11 -0
- package/.ikie/ferments/019f274a-f0a8-755b-b747-adaa0f997d8a/runtime.json +11 -0
- package/.ikie/ferments/019f274a-f0cd-765c-90ce-48685c67299c/runtime.json +11 -0
- package/.ikie/ferments/019f274a-f0e1-71a8-bafc-cc3eeff4f275/runtime.json +9 -0
- package/.ikie/ferments/019f274a-f104-73c0-be62-16f724e0d4c6/runtime.json +13 -0
- package/.ikie/ferments/019f274a-f129-70ea-aa16-254d0fc662bf/runtime.json +11 -0
- package/.ikie/ferments/019f274a-f14b-7742-8e88-7a3fe9d16f08/runtime.json +11 -0
- package/.ikie/ferments/019f274a-f18b-7148-afb1-b9ff1ab54bbc/runtime.json +11 -0
- package/.ikie/ferments/019f274a-f1a2-734d-bf87-6f80955a3b64/runtime.json +9 -0
- package/.ikie/ferments/019f274a-f1c0-75a7-8675-f4fcf15df9bd/runtime.json +9 -0
- package/.ikie/ferments/019f274a-f1e2-7346-b97f-9340f86e6397/runtime.json +11 -0
- package/.ikie/ferments/019f274a-f2a1-7758-a891-413d15c9c29c/runtime.json +11 -0
- package/.ikie/ferments/019f274a-f2bc-76fd-b2dc-e14feea4fb86/runtime.json +12 -0
- package/.ikie/ferments/019f274a-f2e0-7474-97b8-79e01d130940/runtime.json +11 -0
- package/.ikie/ferments/019f274a-f2fa-70fb-a2da-0fb3e9a729ef/runtime.json +11 -0
- package/.ikie/ferments/019f274a-f30f-71bc-bf7f-198ef4b68568/runtime.json +11 -0
- package/.ikie/ferments/019f274a-f326-768b-b55e-e340dd3bf7fc/runtime.json +11 -0
- package/.ikie/ferments/019f274a-f339-75a5-9d45-d9393ccf3436/runtime.json +13 -0
- package/.ikie/ferments/019f274a-f35b-7386-9eb0-8f1e45618131/runtime.json +11 -0
- package/.ikie/ferments/019f274a-f96b-7633-9b6d-6722ea8232a2/reviews/phase-phase-1-1.json +41 -0
- package/.ikie/ferments/019f274a-f96b-7633-9b6d-6722ea8232a2/runtime.json +11 -0
- package/.ikie/ferments/019f274a-f9b7-769e-94ac-8f5c7e23ee88/reviews/phase-phase-1-1.json +47 -0
- package/.ikie/ferments/019f274a-f9b7-769e-94ac-8f5c7e23ee88/runtime.json +13 -0
- package/.ikie/ferments/019f274a-fa07-70b1-bc68-1a9d3378deff/reviews/phase-phase-1-1.json +40 -0
- package/.ikie/ferments/019f274a-fa07-70b1-bc68-1a9d3378deff/runtime.json +9 -0
- package/.ikie/ferments/019f274a-fa2f-7658-86ad-cc69215f1c94/reviews/phase-phase-1-1.json +40 -0
- package/.ikie/ferments/019f274a-fa2f-7658-86ad-cc69215f1c94/runtime.json +9 -0
- package/.ikie/ferments/019f274a-fa46-72ca-a252-65a5b2995bc4/reviews/phase-phase-1-1.json +40 -0
- package/.ikie/ferments/019f274a-fa46-72ca-a252-65a5b2995bc4/runtime.json +9 -0
- package/.ikie/ferments/019f274a-fa70-705f-9112-d48e1042f1d4/reviews/phase-phase-1-1.json +40 -0
- package/.ikie/ferments/019f274a-fa70-705f-9112-d48e1042f1d4/runtime.json +9 -0
- package/.ikie/ferments/019f274a-fa94-73e5-9fc3-ea21ee5cfc59/reviews/phase-phase-1-1.json +40 -0
- package/.ikie/ferments/019f274a-fa94-73e5-9fc3-ea21ee5cfc59/runtime.json +9 -0
- package/.ikie/ferments/019f274a-fab9-720d-9ce3-0041a27f83e0/reviews/phase-phase-1-1.json +62 -0
- package/.ikie/ferments/019f274a-fab9-720d-9ce3-0041a27f83e0/runtime.json +9 -0
- package/.ikie/ferments/019f274c-7608-76f8-89c7-6e3b7d9095b2/runtime.json +11 -0
- package/.ikie/ferments/019f274c-762a-717c-9ec2-530d37897051/runtime.json +11 -0
- package/.ikie/ferments/019f274c-7644-76fc-a27d-c699d368a511/runtime.json +11 -0
- package/.ikie/ferments/019f274c-7667-7260-87b3-f2ad6ff10c04/runtime.json +12 -0
- package/.ikie/ferments/019f274c-7696-753f-8634-5cb24d2aabaa/runtime.json +11 -0
- package/.ikie/ferments/019f274c-76c8-76e8-b4d8-0cabd7f32047/runtime.json +15 -0
- package/.ikie/ferments/019f274c-76f5-732e-88f3-0461f79b7733/runtime.json +15 -0
- package/.ikie/ferments/019f274c-771b-762e-abb6-1bfe6838545b/runtime.json +15 -0
- package/.ikie/ferments/019f274c-774a-769f-b15f-d36a990c8aa2/runtime.json +13 -0
- package/.ikie/ferments/019f274c-7791-7040-9c73-fe5922824edc/runtime.json +15 -0
- package/.ikie/ferments/019f274c-77c3-76f9-a5c6-e0f5030f615c/runtime.json +15 -0
- package/.ikie/ferments/019f274c-7805-70eb-ac17-888c2a0ab5cb/runtime.json +11 -0
- package/.ikie/ferments/019f274c-7820-71da-9baf-d7953b547620/runtime.json +15 -0
- package/.ikie/ferments/019f274c-7855-708f-bbe8-a9e13258cc98/runtime.json +15 -0
- package/.ikie/ferments/019f274c-7886-70fc-9572-b96090b16cf9/runtime.json +15 -0
- package/.ikie/ferments/019f274c-78b7-756e-82ef-8a8e953000bf/runtime.json +15 -0
- package/.ikie/ferments/019f274c-78df-7198-b1dd-58c3ea1e0d6e/runtime.json +15 -0
- package/.ikie/ferments/019f274c-7902-77d4-b443-b105d0a3acd5/runtime.json +15 -0
- package/.ikie/ferments/019f274c-7926-7628-82dc-e71e8f5d58f0/runtime.json +15 -0
- package/.ikie/ferments/019f274c-7948-7755-bc18-c8d9975c762f/runtime.json +15 -0
- package/.ikie/ferments/019f274c-7972-72a5-bc5e-e47579f25c32/runtime.json +15 -0
- package/.ikie/ferments/019f274c-7998-71bf-960e-caba2791ece7/runtime.json +11 -0
- package/.ikie/ferments/019f274c-79c4-71c6-97ef-0dac30d26152/runtime.json +11 -0
- package/.ikie/ferments/019f274c-79e3-7249-8bac-82b74fbd9d1d/reviews/phase-phase-1-1.json +63 -0
- package/.ikie/ferments/019f274c-79e3-7249-8bac-82b74fbd9d1d/runtime.json +17 -0
- package/.ikie/ferments/019f274c-7b11-769e-b05b-354105048fb2/reviews/phase-phase-1-1.json +63 -0
- package/.ikie/ferments/019f274c-7b11-769e-b05b-354105048fb2/runtime.json +17 -0
- package/.ikie/ferments/019f274c-7c7b-73ad-98d3-739e5f0187ec/runtime.json +11 -0
- package/.ikie/ferments/019f274c-8054-728f-96c1-6cae4b96c94e/runtime.json +11 -0
- package/.ikie/ferments/019f274c-8072-7209-82b0-84facff2e61a/runtime.json +11 -0
- package/.ikie/ferments/019f274c-8094-77ec-81dd-e50e61dc11db/runtime.json +11 -0
- package/.ikie/ferments/019f274c-80bc-75c9-89e8-540dba77996e/runtime.json +11 -0
- package/.ikie/ferments/019f274c-80dd-7439-a5b0-b36fcf77c8f1/pending-proposal.json +45 -0
- package/.ikie/ferments/019f274c-80f1-71ac-bd32-fd151f38519c/pending-proposal.json +45 -0
- package/.ikie/ferments/019f274c-81dc-70e6-a5c9-249b196c75c3/pending-proposal.json +45 -0
- package/.ikie/ferments/019f274c-8238-772c-9da3-f27e467100a7/pending-proposal.json +45 -0
- package/.ikie/ferments/019f274c-824a-76d9-aac3-c51171e256b4/pending-proposal.json +45 -0
- package/.ikie/ferments/019f274c-a854-7349-b76a-4a0bc2ecc2f7/runtime.json +11 -0
- package/.ikie/ferments/019f274c-a872-701b-a311-51267fc54aa5/runtime.json +11 -0
- package/.ikie/ferments/019f274c-a8a2-756e-9051-15fcd0be1584/runtime.json +11 -0
- package/.ikie/ferments/019f274c-a8d8-767c-8190-d30a2e78815f/runtime.json +12 -0
- package/.ikie/ferments/019f274c-a914-701e-95ab-9eeca15f5ccd/runtime.json +11 -0
- package/.ikie/ferments/019f274c-a951-720f-bc99-2ea22021a624/runtime.json +15 -0
- package/.ikie/ferments/019f274c-a978-750b-aecb-a5a2aa684cdf/runtime.json +15 -0
- package/.ikie/ferments/019f274c-a9a6-71e9-82ac-66c74cf51964/runtime.json +15 -0
- package/.ikie/ferments/019f274c-a9e0-77ae-96eb-dad523b6a843/runtime.json +13 -0
- package/.ikie/ferments/019f274c-aa2c-7658-a652-ca1a27093c42/runtime.json +15 -0
- package/.ikie/ferments/019f274c-aa77-72b4-a8de-56a2217c759f/runtime.json +15 -0
- package/.ikie/ferments/019f274c-aacf-74fa-943c-26412ddd8b5d/runtime.json +11 -0
- package/.ikie/ferments/019f274c-ab08-709f-aaff-09f10230738f/runtime.json +15 -0
- package/.ikie/ferments/019f274c-ab66-730b-86a5-7571dac8802c/runtime.json +15 -0
- package/.ikie/ferments/019f274c-abb2-77d2-91b6-ea175f561d8a/runtime.json +15 -0
- package/.ikie/ferments/019f274c-ac01-74ff-a2c6-28dbadc051e7/runtime.json +15 -0
- package/.ikie/ferments/019f274c-ac4b-75ad-93a6-aa6af74ca708/runtime.json +15 -0
- package/.ikie/ferments/019f274c-ac80-77b4-bfcf-f7a7187a42f6/runtime.json +15 -0
- package/.ikie/ferments/019f274c-acd9-7239-ad37-73d57031d1bc/runtime.json +15 -0
- package/.ikie/ferments/019f274c-ad22-74bb-9cf2-ed681dd73504/runtime.json +15 -0
- package/.ikie/ferments/019f274c-ad7d-720c-89bf-5a79ceec8173/runtime.json +15 -0
- package/.ikie/ferments/019f274c-adca-762a-b177-4d76b886003b/runtime.json +11 -0
- package/.ikie/ferments/019f274c-ae26-7109-bfaa-39d692fdc1ac/runtime.json +11 -0
- package/.ikie/ferments/019f274c-ae59-76bb-80ae-f556e764f2ca/reviews/phase-phase-1-1.json +63 -0
- package/.ikie/ferments/019f274c-ae59-76bb-80ae-f556e764f2ca/runtime.json +17 -0
- package/.ikie/ferments/019f274c-b059-76e5-9b73-bedc0d4b5aaa/reviews/phase-phase-1-1.json +63 -0
- package/.ikie/ferments/019f274c-b059-76e5-9b73-bedc0d4b5aaa/runtime.json +17 -0
- package/.ikie/ferments/019f274c-b21f-700a-adda-4bfd9d27a0ac/runtime.json +11 -0
- package/.ikie/ferments/019f274c-b91a-7306-8825-3581ef16ab34/runtime.json +11 -0
- package/.ikie/ferments/019f274c-b966-737f-a1c7-e8e7d3af929c/runtime.json +11 -0
- package/.ikie/ferments/019f274c-b99d-74dd-b8e8-1ddc50293a9a/runtime.json +11 -0
- package/.ikie/ferments/019f274c-ba0e-72ae-ad14-983edb8d90ac/runtime.json +11 -0
- package/.ikie/ferments/019f274c-ba4f-7101-b851-12564620c50f/pending-proposal.json +45 -0
- package/.ikie/ferments/019f274c-ba63-712c-858f-96cee1384cec/pending-proposal.json +45 -0
- package/.ikie/ferments/019f274c-bbe3-7343-a8b0-e6f91c3ab922/pending-proposal.json +45 -0
- package/.ikie/ferments/019f274c-bc4a-740e-a12a-9c04181702d9/pending-proposal.json +45 -0
- package/.ikie/ferments/019f274c-bc7b-707c-90b9-d30cf92b5fb9/pending-proposal.json +45 -0
- package/.ikie/ferments/019f274c-e044-750a-a9e1-623de3afa666/runtime.json +13 -0
- package/.ikie/ferments/019f274c-e07a-77cb-9f17-726e4afb3ee1/runtime.json +11 -0
- package/.ikie/ferments/019f274c-e0a2-754a-ac70-aac9cd3d3dc2/runtime.json +11 -0
- package/.ikie/ferments/019f274c-e0ba-72de-bf83-25a8319eddc5/runtime.json +11 -0
- package/.ikie/ferments/019f274c-e0cf-77c1-9c23-65745da294b4/runtime.json +11 -0
- package/.ikie/ferments/019f274c-e0e7-77f7-9436-0537e2095c6b/runtime.json +11 -0
- package/.ikie/ferments/019f274c-e103-70d7-abd9-01305b905259/runtime.json +11 -0
- package/.ikie/ferments/019f274c-e121-7328-9eab-3babb40f26b3/runtime.json +11 -0
- package/.ikie/ferments/019f274c-e135-76d4-9176-2033e41fa5a8/runtime.json +9 -0
- package/.ikie/ferments/019f274c-e157-7043-9b54-fd7c40cb0793/runtime.json +13 -0
- package/.ikie/ferments/019f274c-e181-718e-804d-d0edfaabd5cd/runtime.json +11 -0
- package/.ikie/ferments/019f274c-e19b-72ab-bf87-b7a53037becb/runtime.json +11 -0
- package/.ikie/ferments/019f274c-e20a-716e-8cab-f0cd93259148/runtime.json +11 -0
- package/.ikie/ferments/019f274c-e228-73a3-a655-48bc44db0325/runtime.json +9 -0
- package/.ikie/ferments/019f274c-e243-7609-bec4-905caa78d674/runtime.json +9 -0
- package/.ikie/ferments/019f274c-e258-76ba-912c-bab41dfeaac2/runtime.json +11 -0
- package/.ikie/ferments/019f274c-e35a-776b-a644-52ee82afec4d/runtime.json +11 -0
- package/.ikie/ferments/019f274c-e378-73e8-943d-f2fc2ee875ef/runtime.json +12 -0
- package/.ikie/ferments/019f274c-e3a6-757d-b33c-c6fbdd9cf8c7/runtime.json +11 -0
- package/.ikie/ferments/019f274c-e3c9-77a7-be2b-43891355a506/runtime.json +11 -0
- package/.ikie/ferments/019f274c-e3db-776b-8de6-fb1aeab60a7b/runtime.json +11 -0
- package/.ikie/ferments/019f274c-e3f4-700e-8780-2dee3c117eb8/runtime.json +11 -0
- package/.ikie/ferments/019f274c-e409-71af-a0f9-ff159811e472/runtime.json +13 -0
- package/.ikie/ferments/019f274c-e432-73cd-bd34-39f0e34a568d/runtime.json +11 -0
- package/.ikie/ferments/019f274c-eb55-73fe-bb2a-34b4a2df3f4e/reviews/phase-phase-1-1.json +41 -0
- package/.ikie/ferments/019f274c-eb55-73fe-bb2a-34b4a2df3f4e/runtime.json +11 -0
- package/.ikie/ferments/019f274c-eb9b-728e-93e2-80afb71ae50e/reviews/phase-phase-1-1.json +47 -0
- package/.ikie/ferments/019f274c-eb9b-728e-93e2-80afb71ae50e/runtime.json +13 -0
- package/.ikie/ferments/019f274c-ebf3-77bb-8f8a-6081787fbcb3/reviews/phase-phase-1-1.json +40 -0
- package/.ikie/ferments/019f274c-ebf3-77bb-8f8a-6081787fbcb3/runtime.json +9 -0
- package/.ikie/ferments/019f274c-ec22-7123-8c8f-0c129c2e0719/reviews/phase-phase-1-1.json +40 -0
- package/.ikie/ferments/019f274c-ec22-7123-8c8f-0c129c2e0719/runtime.json +9 -0
- package/.ikie/ferments/019f274c-ec85-757c-9600-8be68ceccb55/reviews/phase-phase-1-1.json +40 -0
- package/.ikie/ferments/019f274c-ec85-757c-9600-8be68ceccb55/runtime.json +9 -0
- package/.ikie/ferments/019f274c-ecd9-704e-8c99-65c64be0a8e1/reviews/phase-phase-1-1.json +40 -0
- package/.ikie/ferments/019f274c-ecd9-704e-8c99-65c64be0a8e1/runtime.json +9 -0
- package/.ikie/ferments/019f274c-ecee-70bb-9087-da3b4c57d281/reviews/phase-phase-1-1.json +40 -0
- package/.ikie/ferments/019f274c-ecee-70bb-9087-da3b4c57d281/runtime.json +9 -0
- package/.ikie/ferments/019f274c-ed18-77bf-8cde-812d1e273bda/reviews/phase-phase-1-1.json +62 -0
- package/.ikie/ferments/019f274c-ed18-77bf-8cde-812d1e273bda/runtime.json +9 -0
- package/.ikie/ferments/019f274f-0303-7543-9aa9-fa7f54d5f6c6/runtime.json +11 -0
- package/.ikie/ferments/019f274f-032c-70aa-b5b5-d695429a50bc/runtime.json +11 -0
- package/.ikie/ferments/019f274f-036d-763c-8cf9-cb62245aff49/runtime.json +11 -0
- package/.ikie/ferments/019f274f-03bd-709c-85ee-698745beac66/runtime.json +12 -0
- package/.ikie/ferments/019f274f-0404-75cf-8731-f0182bd84d87/runtime.json +11 -0
- package/.ikie/ferments/019f274f-0442-75fe-8cc3-44bfe5dd84bf/runtime.json +15 -0
- package/.ikie/ferments/019f274f-048f-759f-ae18-5fe9975647bf/runtime.json +15 -0
- package/.ikie/ferments/019f274f-04f1-72fa-a2ba-0b9e066ae6eb/runtime.json +15 -0
- package/.ikie/ferments/019f274f-0541-728d-8893-0b0b45547a56/runtime.json +13 -0
- package/.ikie/ferments/019f274f-058e-7508-b67a-ebe736113e1e/runtime.json +15 -0
- package/.ikie/ferments/019f274f-0625-77d9-bf99-bcdf0ca2d5b2/runtime.json +15 -0
- package/.ikie/ferments/019f274f-0694-715c-b008-29a3cf0d6c9c/runtime.json +11 -0
- package/.ikie/ferments/019f274f-06b1-71fb-a812-3fd3cefda2ea/runtime.json +15 -0
- package/.ikie/ferments/019f274f-06e9-701b-9396-dca2be2330e5/runtime.json +15 -0
- package/.ikie/ferments/019f274f-072b-76b2-8d77-32d0ad5abb81/runtime.json +15 -0
- package/.ikie/ferments/019f274f-0770-75ce-886f-c1c12d6682eb/runtime.json +15 -0
- package/.ikie/ferments/019f274f-07ab-75fc-a71b-ca3b4b4acca5/runtime.json +15 -0
- package/.ikie/ferments/019f274f-07f0-72cd-a577-316526b45983/runtime.json +15 -0
- package/.ikie/ferments/019f274f-0837-72ed-94f2-dd68e9273549/runtime.json +15 -0
- package/.ikie/ferments/019f274f-0866-765d-a2fc-8cce9d53e417/runtime.json +15 -0
- package/.ikie/ferments/019f274f-08bb-737e-8f23-4b2e069bc7e5/runtime.json +15 -0
- package/.ikie/ferments/019f274f-08f6-73aa-968a-85f55d5e047c/runtime.json +11 -0
- package/.ikie/ferments/019f274f-0949-77b7-8d2c-46fbeb423e3a/runtime.json +11 -0
- package/.ikie/ferments/019f274f-0979-71ad-91b5-d2e52366b74d/reviews/phase-phase-1-1.json +63 -0
- package/.ikie/ferments/019f274f-0979-71ad-91b5-d2e52366b74d/runtime.json +17 -0
- package/.ikie/ferments/019f274f-0b57-7329-884a-43e712cd093c/reviews/phase-phase-1-1.json +63 -0
- package/.ikie/ferments/019f274f-0b57-7329-884a-43e712cd093c/runtime.json +17 -0
- package/.ikie/ferments/019f274f-0d87-772d-a6f3-b71179eec14f/runtime.json +11 -0
- package/.ikie/ferments/019f274f-12f0-73be-b630-54a329974d0b/runtime.json +11 -0
- package/.ikie/ferments/019f274f-1332-7202-90be-f7e94dd16e66/runtime.json +11 -0
- package/.ikie/ferments/019f274f-1368-778a-b044-0306086fe9cf/runtime.json +11 -0
- package/.ikie/ferments/019f274f-13a9-7287-974d-8db5c1b7dda6/runtime.json +11 -0
- package/.ikie/ferments/019f274f-13d1-7069-91d8-2e4efe8d8982/pending-proposal.json +45 -0
- package/.ikie/ferments/019f274f-13f8-717c-92c9-9bc9b37ee2cc/pending-proposal.json +45 -0
- package/.ikie/ferments/019f274f-1566-753b-b053-f14ccb779e36/pending-proposal.json +45 -0
- package/.ikie/ferments/019f274f-15d3-76f8-8467-e368f0c40baf/pending-proposal.json +45 -0
- package/.ikie/ferments/019f274f-15f0-716f-92e7-d966f4476b09/pending-proposal.json +45 -0
- package/.ikie/ferments/019f274f-2a19-762d-be24-59afdd71b303/runtime.json +13 -0
- package/.ikie/ferments/019f274f-2a74-74cb-ab51-dd779739478e/runtime.json +11 -0
- package/.ikie/ferments/019f274f-2a92-71e1-9e68-15f750efc6ec/runtime.json +11 -0
- package/.ikie/ferments/019f274f-2ab1-73eb-8930-b9d161230fcc/runtime.json +11 -0
- package/.ikie/ferments/019f274f-2ad9-70ea-83a9-f8ae1af1edcf/runtime.json +11 -0
- package/.ikie/ferments/019f274f-2b02-77ea-b187-43489c9a88f8/runtime.json +11 -0
- package/.ikie/ferments/019f274f-2b2d-728c-9b69-7a6e4956a88c/runtime.json +11 -0
- package/.ikie/ferments/019f274f-2b42-7358-b1fa-9754d2ca530d/runtime.json +11 -0
- package/.ikie/ferments/019f274f-2b74-77ee-b062-8b111368fc58/runtime.json +9 -0
- package/.ikie/ferments/019f274f-2b9b-703b-8abd-5b4ff212ce66/runtime.json +13 -0
- package/.ikie/ferments/019f274f-2bd6-7109-93ec-12f609270c84/runtime.json +11 -0
- package/.ikie/ferments/019f274f-2bea-75cf-b3d2-aedca4b0c8a4/runtime.json +11 -0
- package/.ikie/ferments/019f274f-2c1c-7085-b221-ecf2a371e6cf/runtime.json +11 -0
- package/.ikie/ferments/019f274f-2c2f-71fb-9b03-41d6f8a5d2d6/runtime.json +9 -0
- package/.ikie/ferments/019f274f-2c5d-719d-a913-5255a7b3e376/runtime.json +9 -0
- package/.ikie/ferments/019f274f-2c92-75bb-b691-4efd9b706418/runtime.json +11 -0
- package/.ikie/ferments/019f274f-2d9e-7186-b8f9-0d5863265329/runtime.json +11 -0
- package/.ikie/ferments/019f274f-2dbb-73f9-8231-b52b6e1eb863/runtime.json +12 -0
- package/.ikie/ferments/019f274f-2ddf-7477-a5a2-a20be1921fbf/runtime.json +11 -0
- package/.ikie/ferments/019f274f-2e01-710b-8175-18eeb0e792e2/runtime.json +11 -0
- package/.ikie/ferments/019f274f-2e26-7217-a41e-3bd106e0a9cf/runtime.json +11 -0
- package/.ikie/ferments/019f274f-2e3a-72bc-9945-37a576bb7ef1/runtime.json +11 -0
- package/.ikie/ferments/019f274f-2e61-77e5-85ab-dda905bded90/runtime.json +13 -0
- package/.ikie/ferments/019f274f-2e7e-73ea-a7c9-14ab5125c3d3/runtime.json +11 -0
- package/.ikie/ferments/019f274f-4262-76b9-884a-9ff2121f2c3a/reviews/phase-phase-1-1.json +41 -0
- package/.ikie/ferments/019f274f-4262-76b9-884a-9ff2121f2c3a/runtime.json +11 -0
- package/.ikie/ferments/019f274f-42ce-753f-ba6d-c1c2be5b7c71/reviews/phase-phase-1-1.json +47 -0
- package/.ikie/ferments/019f274f-42ce-753f-ba6d-c1c2be5b7c71/runtime.json +13 -0
- package/.ikie/ferments/019f274f-4353-75ed-bad2-0f74d61ceff5/reviews/phase-phase-1-1.json +40 -0
- package/.ikie/ferments/019f274f-4353-75ed-bad2-0f74d61ceff5/runtime.json +9 -0
- package/.ikie/ferments/019f274f-4379-7716-af61-2381f422540e/reviews/phase-phase-1-1.json +40 -0
- package/.ikie/ferments/019f274f-4379-7716-af61-2381f422540e/runtime.json +9 -0
- package/.ikie/ferments/019f274f-43a1-716c-ba31-4b705e8afb1a/reviews/phase-phase-1-1.json +40 -0
- package/.ikie/ferments/019f274f-43a1-716c-ba31-4b705e8afb1a/runtime.json +9 -0
- package/.ikie/ferments/019f274f-43de-761a-b793-fca5ca243eea/reviews/phase-phase-1-1.json +40 -0
- package/.ikie/ferments/019f274f-43de-761a-b793-fca5ca243eea/runtime.json +9 -0
- package/.ikie/ferments/019f274f-4401-73e9-b9d8-99631bab030b/reviews/phase-phase-1-1.json +40 -0
- package/.ikie/ferments/019f274f-4401-73e9-b9d8-99631bab030b/runtime.json +9 -0
- package/.ikie/ferments/019f274f-442b-770b-b411-feeb46ae7a8d/reviews/phase-phase-1-1.json +62 -0
- package/.ikie/ferments/019f274f-442b-770b-b411-feeb46ae7a8d/runtime.json +9 -0
- package/.ikie/ferments/019f275c-3e9e-7557-b50e-0e56cc6b07f5/runtime.json +11 -0
- package/.ikie/ferments/019f275c-3ec3-73ea-b557-77cc517095f2/runtime.json +11 -0
- package/.ikie/ferments/019f275c-3ee5-774f-876e-3caacb9b1d95/runtime.json +11 -0
- package/.ikie/ferments/019f275c-3f28-73ee-8eae-568fec8011b6/runtime.json +12 -0
- package/.ikie/ferments/019f275c-3f57-70a8-ba4d-d179cceaabbf/runtime.json +11 -0
- package/.ikie/ferments/019f275c-3f88-72cb-abb5-8e0e176e1dd2/runtime.json +15 -0
- package/.ikie/ferments/019f275c-3fb4-7248-9c23-874baa6e2a9d/runtime.json +15 -0
- package/.ikie/ferments/019f275c-3fe1-759b-afd9-f5e47564de48/runtime.json +15 -0
- package/.ikie/ferments/019f275c-401f-74e8-b968-d325ae2faf56/runtime.json +13 -0
- package/.ikie/ferments/019f275c-4067-752e-a0d8-d85f670f9473/runtime.json +15 -0
- package/.ikie/ferments/019f275c-40a2-74de-b858-ef4ad52484ea/runtime.json +15 -0
- package/.ikie/ferments/019f275c-4105-738f-95d0-6e9f7f9568fb/runtime.json +11 -0
- package/.ikie/ferments/019f275c-411b-76e9-b030-df118a1b23b4/runtime.json +15 -0
- package/.ikie/ferments/019f275c-4153-74ec-8b93-e2e0e82c27b0/runtime.json +15 -0
- package/.ikie/ferments/019f275c-4199-739b-9af9-b1cfc26623c3/runtime.json +15 -0
- package/.ikie/ferments/019f275c-41cb-746b-8481-7ca9d82a8b64/runtime.json +15 -0
- package/.ikie/ferments/019f275c-4209-756f-b335-8e6dfe51bac1/runtime.json +15 -0
- package/.ikie/ferments/019f275c-424c-7512-ac17-b8c04dcf82ac/runtime.json +15 -0
- package/.ikie/ferments/019f275c-4269-74eb-a213-e221479a26e5/runtime.json +15 -0
- package/.ikie/ferments/019f275c-428b-71ea-acda-027b98d191d1/runtime.json +15 -0
- package/.ikie/ferments/019f275c-42bb-75da-b330-e9f101c36d5c/runtime.json +15 -0
- package/.ikie/ferments/019f275c-42e3-777a-8e8c-80772f6d6bcb/runtime.json +11 -0
- package/.ikie/ferments/019f275c-430b-7779-bcc7-95a0b6fc693d/runtime.json +11 -0
- package/.ikie/ferments/019f275c-432e-71f9-b65d-88d26f3b185f/reviews/phase-phase-1-1.json +63 -0
- package/.ikie/ferments/019f275c-432e-71f9-b65d-88d26f3b185f/runtime.json +17 -0
- package/.ikie/ferments/019f275c-447e-756d-8ec0-091e54bcc7b4/reviews/phase-phase-1-1.json +63 -0
- package/.ikie/ferments/019f275c-447e-756d-8ec0-091e54bcc7b4/runtime.json +17 -0
- package/.ikie/ferments/019f275c-4602-757e-9283-3606516f4d15/runtime.json +11 -0
- package/.ikie/ferments/019f275c-4a3b-75f0-8355-8524d1589242/runtime.json +11 -0
- package/.ikie/ferments/019f275c-4a5c-744e-9792-deb33fe1e244/runtime.json +11 -0
- package/.ikie/ferments/019f275c-4a79-73d2-beae-4e85f8906581/runtime.json +11 -0
- package/.ikie/ferments/019f275c-4a97-70b9-98d1-53d9326b4c95/runtime.json +11 -0
- package/.ikie/ferments/019f275c-4ac1-7452-ab7a-485bde641591/pending-proposal.json +45 -0
- package/.ikie/ferments/019f275c-4ad7-77ba-8a63-d8586db466e7/pending-proposal.json +45 -0
- package/.ikie/ferments/019f275c-4bee-77b9-8470-98c4aafeae43/pending-proposal.json +45 -0
- package/.ikie/ferments/019f275c-4c3d-712b-95f6-a671b7884658/pending-proposal.json +45 -0
- package/.ikie/ferments/019f275c-4c4e-73a0-accb-e76c29bc1f6d/pending-proposal.json +45 -0
- package/.ikie/ferments/019f275c-7598-775d-beed-cde3b6cb74e6/runtime.json +13 -0
- package/.ikie/ferments/019f275c-75c0-773d-9c0c-dd4943fc6092/runtime.json +11 -0
- package/.ikie/ferments/019f275c-75dc-7629-8a52-1eba66275779/runtime.json +11 -0
- package/.ikie/ferments/019f275c-75f3-742b-8494-e8a1facb02bb/runtime.json +11 -0
- package/.ikie/ferments/019f275c-760c-705e-8d98-7963d8830086/runtime.json +11 -0
- package/.ikie/ferments/019f275c-7627-763c-ae8e-20dde59c64b9/runtime.json +11 -0
- package/.ikie/ferments/019f275c-763c-74ae-b835-b52b57c52e9b/runtime.json +11 -0
- package/.ikie/ferments/019f275c-7650-7499-b744-7f38cfa776f4/runtime.json +11 -0
- package/.ikie/ferments/019f275c-766d-75b8-ba35-69e472baf630/runtime.json +9 -0
- package/.ikie/ferments/019f275c-7687-72cc-beac-339a11625f14/runtime.json +13 -0
- package/.ikie/ferments/019f275c-76a6-773d-a4c1-19a5ec313596/runtime.json +11 -0
- package/.ikie/ferments/019f275c-76c1-71b9-a49e-4b520fcef543/runtime.json +11 -0
- package/.ikie/ferments/019f275c-7706-761f-a9cf-7e412e88015d/runtime.json +11 -0
- package/.ikie/ferments/019f275c-772b-745f-a74d-de30f52a3316/runtime.json +9 -0
- package/.ikie/ferments/019f275c-7746-759c-a116-c2cd08e2f29b/runtime.json +9 -0
- package/.ikie/ferments/019f275c-7760-709d-83bc-4d6fff7ac768/runtime.json +11 -0
- package/.ikie/ferments/019f275c-780e-74db-9d7d-bcc430c1a964/runtime.json +11 -0
- package/.ikie/ferments/019f275c-7826-734e-8113-90111e82d96a/runtime.json +12 -0
- package/.ikie/ferments/019f275c-7849-72ed-8fb0-d1815d2f66d3/runtime.json +11 -0
- package/.ikie/ferments/019f275c-785f-716e-b077-eee453653ee0/runtime.json +11 -0
- package/.ikie/ferments/019f275c-7871-70fe-b543-bcdaaa10d320/runtime.json +11 -0
- package/.ikie/ferments/019f275c-7888-777d-8edf-1a5a906679d7/runtime.json +11 -0
- package/.ikie/ferments/019f275c-78b3-722e-9d1a-f354b0d0fa96/runtime.json +13 -0
- package/.ikie/ferments/019f275c-78cb-7568-ad11-191bc98cabe5/runtime.json +11 -0
- package/.ikie/ferments/019f275c-8905-76ae-beb3-2ec9138b799b/reviews/phase-phase-1-1.json +41 -0
- package/.ikie/ferments/019f275c-8905-76ae-beb3-2ec9138b799b/runtime.json +11 -0
- package/.ikie/ferments/019f275c-8970-713f-a498-af24ac57355a/reviews/phase-phase-1-1.json +47 -0
- package/.ikie/ferments/019f275c-8970-713f-a498-af24ac57355a/runtime.json +13 -0
- package/.ikie/ferments/019f275c-89c6-712f-b3c9-d9459bdaba76/reviews/phase-phase-1-1.json +40 -0
- package/.ikie/ferments/019f275c-89c6-712f-b3c9-d9459bdaba76/runtime.json +9 -0
- package/.ikie/ferments/019f275c-89e8-7105-9ba9-eda02056339a/reviews/phase-phase-1-1.json +40 -0
- package/.ikie/ferments/019f275c-89e8-7105-9ba9-eda02056339a/runtime.json +9 -0
- package/.ikie/ferments/019f275c-8a0d-71cb-bbb3-aa061c305aab/reviews/phase-phase-1-1.json +40 -0
- package/.ikie/ferments/019f275c-8a0d-71cb-bbb3-aa061c305aab/runtime.json +9 -0
- package/.ikie/ferments/019f275c-8a31-758b-87c7-1b2ec8b0bd7a/reviews/phase-phase-1-1.json +40 -0
- package/.ikie/ferments/019f275c-8a31-758b-87c7-1b2ec8b0bd7a/runtime.json +9 -0
- package/.ikie/ferments/019f275c-8a4f-7649-a250-4074bed6f208/reviews/phase-phase-1-1.json +40 -0
- package/.ikie/ferments/019f275c-8a4f-7649-a250-4074bed6f208/runtime.json +9 -0
- package/.ikie/ferments/019f275c-8a6e-706d-af6d-f6636f3b229e/reviews/phase-phase-1-1.json +62 -0
- package/.ikie/ferments/019f275c-8a6e-706d-af6d-f6636f3b229e/runtime.json +9 -0
- package/.ikie/ferments/019f275e-8903-721d-98f8-0135ab6b4698/runtime.json +11 -0
- package/.ikie/ferments/019f275e-8920-7644-a529-664b63f9bab1/runtime.json +11 -0
- package/.ikie/ferments/019f275e-8938-75c2-85ab-f5a50138a4eb/runtime.json +11 -0
- package/.ikie/ferments/019f275e-895e-74a1-b263-2f73d989898e/runtime.json +12 -0
- package/.ikie/ferments/019f275e-8977-75ee-9e9a-cc069fff1cfa/runtime.json +11 -0
- package/.ikie/ferments/019f275e-899d-773b-abe3-e93c56f57cf1/runtime.json +11 -0
- package/.ikie/ferments/019f275e-89d1-72ea-9362-d4ce4079e846/runtime.json +15 -0
- package/.ikie/ferments/019f275e-89f9-7007-b382-a55e983d9520/runtime.json +15 -0
- package/.ikie/ferments/019f275e-8a1d-7687-a56e-94ead3cafbf8/runtime.json +15 -0
- package/.ikie/ferments/019f275e-8a49-760f-9639-3ce1494f37e9/runtime.json +13 -0
- package/.ikie/ferments/019f275e-8a7d-7461-b978-c3478b99b386/runtime.json +15 -0
- package/.ikie/ferments/019f275e-8aac-736d-bd96-6b442359993b/runtime.json +15 -0
- package/.ikie/ferments/019f275e-8ae6-7298-a523-d2fb7287bed3/runtime.json +11 -0
- package/.ikie/ferments/019f275e-8b01-7059-85a1-a665334ced3e/runtime.json +15 -0
- package/.ikie/ferments/019f275e-8b29-7295-be5b-0468763ab101/runtime.json +15 -0
- package/.ikie/ferments/019f275e-8b51-7204-9d30-0a67dae9c341/runtime.json +15 -0
- package/.ikie/ferments/019f275e-8b78-71eb-a8a3-1448d3373912/runtime.json +15 -0
- package/.ikie/ferments/019f275e-8b9d-76bf-9caa-0fed193b85bf/runtime.json +15 -0
- package/.ikie/ferments/019f275e-8bc0-71df-9356-19d3075c9568/runtime.json +15 -0
- package/.ikie/ferments/019f275e-8be2-75bd-be4a-ba2ede0e95f3/runtime.json +15 -0
- package/.ikie/ferments/019f275e-8c0b-714a-a389-20ffe6d0e66d/runtime.json +15 -0
- package/.ikie/ferments/019f275e-8c30-7371-86af-78e5f5ac8b23/runtime.json +15 -0
- package/.ikie/ferments/019f275e-8c5a-7383-bd79-c7fec3a71946/runtime.json +11 -0
- package/.ikie/ferments/019f275e-8c75-76b1-bcaa-81e67fc35aa8/runtime.json +11 -0
- package/.ikie/ferments/019f275e-8caa-71e9-9e66-0d30c4a03123/reviews/phase-phase-1-1.json +63 -0
- package/.ikie/ferments/019f275e-8caa-71e9-9e66-0d30c4a03123/runtime.json +17 -0
- package/.ikie/ferments/019f275e-8e59-7787-84f8-fcf93ec75949/reviews/phase-phase-1-1.json +63 -0
- package/.ikie/ferments/019f275e-8e59-7787-84f8-fcf93ec75949/runtime.json +17 -0
- package/.ikie/ferments/019f275e-8ffb-70c2-844e-e1f4fa4c2cc4/runtime.json +11 -0
- package/.ikie/ferments/019f275e-949b-7158-a426-07bcca442439/runtime.json +11 -0
- package/.ikie/ferments/019f275e-94c6-7479-abcb-c22fc19445a0/runtime.json +11 -0
- package/.ikie/ferments/019f275e-94eb-76e9-a148-fb5001492823/runtime.json +11 -0
- package/.ikie/ferments/019f275e-9516-765a-b8ee-e88e5ab2530f/runtime.json +11 -0
- package/.ikie/ferments/019f275e-9539-740f-bbdb-09b82f71fc81/pending-proposal.json +45 -0
- package/.ikie/ferments/019f275e-954f-73e0-9286-fdf09cb1cbc6/pending-proposal.json +45 -0
- package/.ikie/ferments/019f275e-967d-73dc-bfaf-18e44335cff8/pending-proposal.json +45 -0
- package/.ikie/ferments/019f275e-96f0-702d-b0d2-f2aeb1c7ee15/pending-proposal.json +45 -0
- package/.ikie/ferments/019f275e-9708-770c-bae2-2652e32be3cf/pending-proposal.json +45 -0
- package/.ikie/ferments/019f275e-c992-77a4-960a-d6d51983c9d6/runtime.json +13 -0
- package/.ikie/ferments/019f275e-c9cf-724a-a59f-8e34f026db5e/runtime.json +11 -0
- package/.ikie/ferments/019f275e-c9e6-7647-9517-b2b25cd1f495/runtime.json +11 -0
- package/.ikie/ferments/019f275e-ca11-716b-832b-11fc14ce1ded/runtime.json +11 -0
- package/.ikie/ferments/019f275e-ca2f-74df-90fa-2eed00b55ecf/runtime.json +11 -0
- package/.ikie/ferments/019f275e-ca49-77ed-bb62-cd9c3c1176a5/runtime.json +11 -0
- package/.ikie/ferments/019f275e-ca62-77ca-aed0-74728cab4be4/runtime.json +11 -0
- package/.ikie/ferments/019f275e-ca7a-76aa-a860-42152a699337/runtime.json +11 -0
- package/.ikie/ferments/019f275e-ca9b-766c-9ad4-2f86ff5c9dbe/runtime.json +9 -0
- package/.ikie/ferments/019f275e-cabc-77cf-a94a-9f8988667998/runtime.json +13 -0
- package/.ikie/ferments/019f275e-cae6-76d9-8682-d138cbd0e3cf/runtime.json +11 -0
- package/.ikie/ferments/019f275e-cb0a-7361-8e72-84e44afa7847/runtime.json +11 -0
- package/.ikie/ferments/019f275e-cb67-71dd-a7b7-35d98fca2379/runtime.json +11 -0
- package/.ikie/ferments/019f275e-cb8c-75c8-9a02-812c50dbcc28/runtime.json +9 -0
- package/.ikie/ferments/019f275e-cba7-74c5-8a0e-facff616ecf0/runtime.json +9 -0
- package/.ikie/ferments/019f275e-cbc6-719a-a1e9-86fad18fb0de/runtime.json +11 -0
- package/.ikie/ferments/019f275e-cc83-7608-878d-3b107b55db48/runtime.json +11 -0
- package/.ikie/ferments/019f275e-cc96-72f9-9e5d-a350ea59c5b7/runtime.json +12 -0
- package/.ikie/ferments/019f275e-ccb5-72bf-8ad6-8ea4f87f86c0/runtime.json +11 -0
- package/.ikie/ferments/019f275e-ccd9-77de-89ff-25fa626c05b4/runtime.json +11 -0
- package/.ikie/ferments/019f275e-ccfb-777a-8a40-1ccaf4c139c4/runtime.json +11 -0
- package/.ikie/ferments/019f275e-cd15-7785-be69-1f9ef80faa52/runtime.json +11 -0
- package/.ikie/ferments/019f275e-cd31-7629-9034-57bcde8cf8e1/runtime.json +13 -0
- package/.ikie/ferments/019f275e-cd56-74be-8cdd-94af39b5593b/runtime.json +11 -0
- package/.ikie/ferments/019f275e-db71-73fb-9992-6d52de708265/reviews/phase-phase-1-1.json +41 -0
- package/.ikie/ferments/019f275e-db71-73fb-9992-6d52de708265/runtime.json +11 -0
- package/.ikie/ferments/019f275e-dbc0-725b-bb55-3eca5072215b/reviews/phase-phase-1-1.json +47 -0
- package/.ikie/ferments/019f275e-dbc0-725b-bb55-3eca5072215b/runtime.json +13 -0
- package/.ikie/ferments/019f275e-dc11-7320-bc60-fbca50c8e709/reviews/phase-phase-1-1.json +40 -0
- package/.ikie/ferments/019f275e-dc11-7320-bc60-fbca50c8e709/runtime.json +9 -0
- package/.ikie/ferments/019f275e-dc39-73ee-9d63-d8fbb906d877/reviews/phase-phase-1-1.json +40 -0
- package/.ikie/ferments/019f275e-dc39-73ee-9d63-d8fbb906d877/runtime.json +9 -0
- package/.ikie/ferments/019f275e-dc60-7649-9918-b236d9a16cef/reviews/phase-phase-1-1.json +40 -0
- package/.ikie/ferments/019f275e-dc60-7649-9918-b236d9a16cef/runtime.json +9 -0
- package/.ikie/ferments/019f275e-dc83-7030-aa35-3a78b18fadb4/reviews/phase-phase-1-1.json +40 -0
- package/.ikie/ferments/019f275e-dc83-7030-aa35-3a78b18fadb4/runtime.json +9 -0
- package/.ikie/ferments/019f275e-dcb3-706f-b3b0-b44556b7d3cb/reviews/phase-phase-1-1.json +40 -0
- package/.ikie/ferments/019f275e-dcb3-706f-b3b0-b44556b7d3cb/runtime.json +9 -0
- package/.ikie/ferments/019f275e-dcd6-717c-afe6-82a959a0fcbd/reviews/phase-phase-1-1.json +62 -0
- package/.ikie/ferments/019f275e-dcd6-717c-afe6-82a959a0fcbd/runtime.json +9 -0
- package/.ikie/ferments/019f2764-6cde-7610-b409-ee715ca796e8/runtime.json +11 -0
- package/.ikie/ferments/019f2764-6cfa-733d-8231-937535e2e6b8/runtime.json +11 -0
- package/.ikie/ferments/019f2764-6d11-7611-b216-dcdaa468d686/runtime.json +11 -0
- package/.ikie/ferments/019f2764-6d33-728f-901c-4fef8141050d/runtime.json +12 -0
- package/.ikie/ferments/019f2764-6d5d-7314-9e98-3851effc803f/runtime.json +11 -0
- package/.ikie/ferments/019f2764-6d87-722e-bf53-0dd6182ea7c6/runtime.json +15 -0
- package/.ikie/ferments/019f2764-6daa-7052-b766-8aef8e542b88/runtime.json +15 -0
- package/.ikie/ferments/019f2764-6dc9-73fc-8665-a3f8b51f7450/runtime.json +15 -0
- package/.ikie/ferments/019f2764-6df3-7368-94a2-5369f3276848/runtime.json +13 -0
- package/.ikie/ferments/019f2764-6e25-762c-a0e0-0ef60c6e2653/runtime.json +15 -0
- package/.ikie/ferments/019f2764-6e58-733d-ab0e-8fad4b2c665e/runtime.json +15 -0
- package/.ikie/ferments/019f2764-6ead-742a-afc5-e10a044333ec/runtime.json +11 -0
- package/.ikie/ferments/019f2764-6ec9-7566-a4f0-e0d14f80e103/runtime.json +15 -0
- package/.ikie/ferments/019f2764-6efe-727d-a81b-36fbde2904b3/runtime.json +15 -0
- package/.ikie/ferments/019f2764-6f3d-7292-bbf4-88e9ee6b077e/runtime.json +15 -0
- package/.ikie/ferments/019f2764-6f6c-758f-9427-652571b7494f/runtime.json +15 -0
- package/.ikie/ferments/019f2764-6faa-700b-8d2d-cbed35957db8/runtime.json +15 -0
- package/.ikie/ferments/019f2764-6fcb-71d8-9daf-225746805ba4/runtime.json +15 -0
- package/.ikie/ferments/019f2764-6ff0-7573-9208-e236e2969c5a/runtime.json +15 -0
- package/.ikie/ferments/019f2764-7012-77ce-97c9-6e99dd0367b3/runtime.json +15 -0
- package/.ikie/ferments/019f2764-703d-7554-8008-5104879d081d/runtime.json +15 -0
- package/.ikie/ferments/019f2764-7082-7399-80d5-659015dc6129/runtime.json +11 -0
- package/.ikie/ferments/019f2764-70b4-7581-b83e-9945010b008b/runtime.json +11 -0
- package/.ikie/ferments/019f2764-70d2-71a1-8b2f-1db7c0de5d5b/reviews/phase-phase-1-1.json +63 -0
- package/.ikie/ferments/019f2764-70d2-71a1-8b2f-1db7c0de5d5b/runtime.json +17 -0
- package/.ikie/ferments/019f2764-7256-714b-9804-17a6ad3c7996/reviews/phase-phase-1-1.json +63 -0
- package/.ikie/ferments/019f2764-7256-714b-9804-17a6ad3c7996/runtime.json +17 -0
- package/.ikie/ferments/019f2764-742b-711f-9997-ae6ce141d7d9/runtime.json +11 -0
- package/.ikie/ferments/019f2764-78e4-765c-bcf6-ae76955d98c0/runtime.json +11 -0
- package/.ikie/ferments/019f2764-7900-7573-afaf-c32d1b6a7be0/runtime.json +11 -0
- package/.ikie/ferments/019f2764-7920-7463-b2c3-132980285998/runtime.json +11 -0
- package/.ikie/ferments/019f2764-7947-721f-9c5e-6fc087b2e912/runtime.json +11 -0
- package/.ikie/ferments/019f2764-7967-735b-9066-12a93c490f17/pending-proposal.json +45 -0
- package/.ikie/ferments/019f2764-798b-749d-b86b-90c55c838b29/pending-proposal.json +45 -0
- package/.ikie/ferments/019f2764-7a9f-747c-81ce-f27825e1cefb/pending-proposal.json +45 -0
- package/.ikie/ferments/019f2764-7afc-745a-8d70-a2ebf234977d/pending-proposal.json +45 -0
- package/.ikie/ferments/019f2764-7b0f-715d-a410-e707593c0f1b/pending-proposal.json +45 -0
- package/.ikie/ferments/019f2764-a49c-750d-8022-8d5ef7b34341/runtime.json +13 -0
- package/.ikie/ferments/019f2764-a4c0-7779-a268-1589e2c4d025/runtime.json +11 -0
- package/.ikie/ferments/019f2764-a4e2-706f-8cc3-f71f13a5334c/runtime.json +11 -0
- package/.ikie/ferments/019f2764-a4fc-765c-b248-0fd90d273737/runtime.json +11 -0
- package/.ikie/ferments/019f2764-a511-7719-b577-47d9389dc68c/runtime.json +11 -0
- package/.ikie/ferments/019f2764-a524-731c-91d5-99c2242128e7/runtime.json +11 -0
- package/.ikie/ferments/019f2764-a53c-7308-a4a2-2c4ebd0af1f2/runtime.json +11 -0
- package/.ikie/ferments/019f2764-a555-762a-b6ec-c7a1ea59914b/runtime.json +11 -0
- package/.ikie/ferments/019f2764-a56e-776a-8421-d52ce16332e6/runtime.json +9 -0
- package/.ikie/ferments/019f2764-a584-75ad-8cf4-02ad739aeac6/runtime.json +13 -0
- package/.ikie/ferments/019f2764-a5a6-716c-8803-03dfe8638639/runtime.json +11 -0
- package/.ikie/ferments/019f2764-a5cb-75a8-9184-8bc493e04858/runtime.json +11 -0
- package/.ikie/ferments/019f2764-a613-726d-9770-828b95668f3d/runtime.json +11 -0
- package/.ikie/ferments/019f2764-a62b-703f-ad34-e560da58091f/runtime.json +9 -0
- package/.ikie/ferments/019f2764-a646-75a7-a048-e1c6a57c17db/runtime.json +9 -0
- package/.ikie/ferments/019f2764-a65d-7369-8043-22e8aa877564/runtime.json +11 -0
- package/.ikie/ferments/019f2764-a714-7737-9aca-229d1f730df1/runtime.json +11 -0
- package/.ikie/ferments/019f2764-a725-71af-91db-6146483607ce/runtime.json +12 -0
- package/.ikie/ferments/019f2764-a748-721c-a9bb-9a5cd1a6390b/runtime.json +11 -0
- package/.ikie/ferments/019f2764-a761-7632-84ba-5d4da92e371d/runtime.json +11 -0
- package/.ikie/ferments/019f2764-a776-76dd-a48e-148e4d5e6dcd/runtime.json +11 -0
- package/.ikie/ferments/019f2764-a78f-77d0-9647-ffb2ed828229/runtime.json +11 -0
- package/.ikie/ferments/019f2764-a7ab-716e-958d-c3f3c4d33a34/runtime.json +13 -0
- package/.ikie/ferments/019f2764-a7cb-775b-8844-8faa27f1ac1c/runtime.json +11 -0
- package/.ikie/ferments/019f2764-bd5e-773d-9b24-9da824db3174/reviews/phase-phase-1-1.json +41 -0
- package/.ikie/ferments/019f2764-bd5e-773d-9b24-9da824db3174/runtime.json +11 -0
- package/.ikie/ferments/019f2764-bda9-7207-b421-beff2d49cd2a/reviews/phase-phase-1-1.json +47 -0
- package/.ikie/ferments/019f2764-bda9-7207-b421-beff2d49cd2a/runtime.json +13 -0
- package/.ikie/ferments/019f2764-be1e-775f-b937-81b9fd368168/reviews/phase-phase-1-1.json +40 -0
- package/.ikie/ferments/019f2764-be1e-775f-b937-81b9fd368168/runtime.json +9 -0
- package/.ikie/ferments/019f2764-be38-7792-b549-8583fd6c5e70/reviews/phase-phase-1-1.json +40 -0
- package/.ikie/ferments/019f2764-be38-7792-b549-8583fd6c5e70/runtime.json +9 -0
- package/.ikie/ferments/019f2764-be5e-73da-85c5-508167795c94/reviews/phase-phase-1-1.json +40 -0
- package/.ikie/ferments/019f2764-be5e-73da-85c5-508167795c94/runtime.json +9 -0
- package/.ikie/ferments/019f2764-be82-721a-aa06-3b54c6236827/reviews/phase-phase-1-1.json +40 -0
- package/.ikie/ferments/019f2764-be82-721a-aa06-3b54c6236827/runtime.json +9 -0
- package/.ikie/ferments/019f2764-be97-703d-8e0a-6496ed0a83ca/reviews/phase-phase-1-1.json +40 -0
- package/.ikie/ferments/019f2764-be97-703d-8e0a-6496ed0a83ca/runtime.json +9 -0
- package/.ikie/ferments/019f2764-bebc-756a-a6ca-0f40b9705a0f/reviews/phase-phase-1-1.json +62 -0
- package/.ikie/ferments/019f2764-bebc-756a-a6ca-0f40b9705a0f/runtime.json +9 -0
- package/.ikie/ferments/019f2766-a81a-73aa-ba58-4a0192a7b079/runtime.json +11 -0
- package/.ikie/ferments/019f2766-a839-708c-b3bf-4c3f2279558e/runtime.json +11 -0
- package/.ikie/ferments/019f2766-a852-7641-a85f-69ea0ce5d73b/runtime.json +11 -0
- package/.ikie/ferments/019f2766-a877-74b8-b1de-3ffbbcb6f14b/runtime.json +12 -0
- package/.ikie/ferments/019f2766-a892-767d-b447-2e7a666f42f0/runtime.json +11 -0
- package/.ikie/ferments/019f2766-a8c2-7178-b06c-00d7646d1966/runtime.json +11 -0
- package/.ikie/ferments/019f2766-a8f5-713b-92d4-c4c70e48c5db/runtime.json +15 -0
- package/.ikie/ferments/019f2766-a91c-76a8-9d47-7e07b7843506/runtime.json +15 -0
- package/.ikie/ferments/019f2766-a944-7458-bae5-e3c38b3eec06/runtime.json +15 -0
- package/.ikie/ferments/019f2766-a973-77da-b2c0-d4f59f145d19/runtime.json +13 -0
- package/.ikie/ferments/019f2766-a9ae-701f-b8af-2d02369bc2f1/runtime.json +15 -0
- package/.ikie/ferments/019f2766-a9e5-7319-882f-58450ee132ea/runtime.json +15 -0
- package/.ikie/ferments/019f2766-aa3a-722b-9ed0-f38465896d02/runtime.json +11 -0
- package/.ikie/ferments/019f2766-aa58-7389-b25e-688385ff4a7f/runtime.json +15 -0
- package/.ikie/ferments/019f2766-aa8c-72f1-8b4e-a5260ac64189/runtime.json +15 -0
- package/.ikie/ferments/019f2766-aab7-7310-a9ec-b3027823b960/runtime.json +15 -0
- package/.ikie/ferments/019f2766-aae0-714c-b796-491d0c0d0e5b/runtime.json +15 -0
- package/.ikie/ferments/019f2766-ab05-740a-9fe0-2882dcad789b/runtime.json +15 -0
- package/.ikie/ferments/019f2766-ab2d-7188-9d25-545da08208e3/runtime.json +15 -0
- package/.ikie/ferments/019f2766-ab55-71d1-aafa-b6c62c6d7c7c/runtime.json +15 -0
- package/.ikie/ferments/019f2766-ab7f-76a1-9cde-c84ebb38a76c/runtime.json +15 -0
- package/.ikie/ferments/019f2766-abad-71db-9b6c-c341a91e609c/runtime.json +15 -0
- package/.ikie/ferments/019f2766-abd1-7392-a14e-a62f58887e86/runtime.json +11 -0
- package/.ikie/ferments/019f2766-abee-7229-9251-77f5474df062/runtime.json +11 -0
- package/.ikie/ferments/019f2766-ac13-77ab-ad1f-179bbf19f285/reviews/phase-phase-1-1.json +63 -0
- package/.ikie/ferments/019f2766-ac13-77ab-ad1f-179bbf19f285/runtime.json +17 -0
- package/.ikie/ferments/019f2766-ad4e-771a-8809-da61d5e9187d/reviews/phase-phase-1-1.json +63 -0
- package/.ikie/ferments/019f2766-ad4e-771a-8809-da61d5e9187d/runtime.json +17 -0
- package/.ikie/ferments/019f2766-aec7-72c7-8400-65d8774d93fe/runtime.json +11 -0
- package/.ikie/ferments/019f2766-b2e5-775e-a211-97476c9184fa/runtime.json +11 -0
- package/.ikie/ferments/019f2766-b303-70c5-a66a-e39ce29d0a4a/runtime.json +11 -0
- package/.ikie/ferments/019f2766-b32e-7618-860c-3cf1a98c2562/runtime.json +11 -0
- package/.ikie/ferments/019f2766-b353-719b-9299-207b9a3b41b3/runtime.json +11 -0
- package/.ikie/ferments/019f2766-b374-72e3-a804-8f3c82dc2059/pending-proposal.json +45 -0
- package/.ikie/ferments/019f2766-b38b-75ca-83c3-d4e5625f814b/pending-proposal.json +45 -0
- package/.ikie/ferments/019f2766-b495-73d6-a0d3-b26c033d4769/pending-proposal.json +45 -0
- package/.ikie/ferments/019f2766-b4e1-70f8-a38e-c478ab72c091/pending-proposal.json +45 -0
- package/.ikie/ferments/019f2766-b4f5-7671-b2c4-76d6f9f68cd3/pending-proposal.json +45 -0
- package/.ikie/ferments/019f2766-d341-7410-8d94-056f70b5d884/runtime.json +11 -0
- package/.ikie/ferments/019f2766-d35f-71a3-bdd3-c749aa870ff8/runtime.json +11 -0
- package/.ikie/ferments/019f2766-d382-70be-9a79-094070335d58/runtime.json +11 -0
- package/.ikie/ferments/019f2766-d3ae-75c7-b83e-4636e859cf7d/runtime.json +12 -0
- package/.ikie/ferments/019f2766-d3c7-778d-b399-f3e13fa34204/runtime.json +11 -0
- package/.ikie/ferments/019f2766-d3f0-7730-9e47-9bbc5483d5c9/runtime.json +11 -0
- package/.ikie/ferments/019f2766-d422-74ab-8e0b-6b5f139658b8/runtime.json +15 -0
- package/.ikie/ferments/019f2766-d448-7428-94ec-084521c6f60a/runtime.json +15 -0
- package/.ikie/ferments/019f2766-d46e-730e-89a6-dd0907baa5aa/runtime.json +15 -0
- package/.ikie/ferments/019f2766-d49b-71df-91f7-b4fb8e050c88/runtime.json +13 -0
- package/.ikie/ferments/019f2766-d4d6-72fd-b5ab-8aa8554c3ac8/runtime.json +15 -0
- package/.ikie/ferments/019f2766-d50b-7146-a0e2-bcc33cbf8168/runtime.json +15 -0
- package/.ikie/ferments/019f2766-d54e-7614-a157-8c6225b09552/runtime.json +11 -0
- package/.ikie/ferments/019f2766-d571-72f9-ac5f-9a58f8913af1/runtime.json +15 -0
- package/.ikie/ferments/019f2766-d5aa-7756-b523-29a10b1f0f93/runtime.json +15 -0
- package/.ikie/ferments/019f2766-d5ce-77b9-9746-ca5281e76d1e/runtime.json +15 -0
- package/.ikie/ferments/019f2766-d5f2-76ee-92f0-88e85515bb8c/runtime.json +15 -0
- package/.ikie/ferments/019f2766-d617-7669-8175-57038e3790b0/runtime.json +15 -0
- package/.ikie/ferments/019f2766-d63b-72aa-a6ca-f355b068db00/runtime.json +15 -0
- package/.ikie/ferments/019f2766-d664-754e-b827-42f9c6fc161b/runtime.json +15 -0
- package/.ikie/ferments/019f2766-d68c-710d-8769-befe67aad042/runtime.json +15 -0
- package/.ikie/ferments/019f2766-d6af-767c-9547-eee7f9c08dcf/runtime.json +15 -0
- package/.ikie/ferments/019f2766-d6d5-751e-8752-dcdc451712e2/runtime.json +11 -0
- package/.ikie/ferments/019f2766-d6f7-77b8-807d-75d914ff0302/runtime.json +11 -0
- package/.ikie/ferments/019f2766-d720-7159-97a9-820f305b3805/reviews/phase-phase-1-1.json +63 -0
- package/.ikie/ferments/019f2766-d720-7159-97a9-820f305b3805/runtime.json +17 -0
- package/.ikie/ferments/019f2766-d87f-729d-be05-90c4adb20ade/reviews/phase-phase-1-1.json +63 -0
- package/.ikie/ferments/019f2766-d87f-729d-be05-90c4adb20ade/runtime.json +17 -0
- package/.ikie/ferments/019f2766-da17-724b-ab3c-7154c7845381/runtime.json +11 -0
- package/.ikie/ferments/019f2766-ddf5-7470-a884-297c8936753a/runtime.json +11 -0
- package/.ikie/ferments/019f2766-de1a-7283-89b6-a249b9c8bdc1/runtime.json +11 -0
- package/.ikie/ferments/019f2766-de39-7771-a717-14beb4313f79/runtime.json +11 -0
- package/.ikie/ferments/019f2766-de5b-7418-bbcc-2ed38543137c/runtime.json +11 -0
- package/.ikie/ferments/019f2766-de7d-76cc-a74f-def9d1d99ac3/pending-proposal.json +45 -0
- package/.ikie/ferments/019f2766-de92-75a2-bcae-86efd5efe066/pending-proposal.json +45 -0
- package/.ikie/ferments/019f2766-dfb5-771c-adc0-9e948e0b8f18/pending-proposal.json +45 -0
- package/.ikie/ferments/019f2766-dff6-71cd-a14e-ab9e88792ca4/pending-proposal.json +45 -0
- package/.ikie/ferments/019f2766-e006-727b-83d9-af9c71158bef/pending-proposal.json +45 -0
- package/.ikie/ferments/019f2767-0345-74ba-a163-0c909ee37df1/runtime.json +11 -0
- package/.ikie/ferments/019f2767-036c-713d-9ef9-58a1191bd341/runtime.json +11 -0
- package/.ikie/ferments/019f2767-0387-72e6-b8b6-314fedade6e0/runtime.json +11 -0
- package/.ikie/ferments/019f2767-03af-738b-acde-360fa30a55f8/runtime.json +12 -0
- package/.ikie/ferments/019f2767-03cc-76e8-ae01-5b33c85fb46b/runtime.json +11 -0
- package/.ikie/ferments/019f2767-0409-7745-8f9d-a41ce8b7b11e/runtime.json +11 -0
- package/.ikie/ferments/019f2767-0467-70a9-8a75-2688109ab9c3/runtime.json +15 -0
- package/.ikie/ferments/019f2767-0493-7047-b2c9-a7ed6f70c89f/runtime.json +15 -0
- package/.ikie/ferments/019f2767-04b7-7486-a7cf-5ad7a09060a7/runtime.json +15 -0
- package/.ikie/ferments/019f2767-050f-713f-ba94-c01b549b3dfa/runtime.json +13 -0
- package/.ikie/ferments/019f2767-0561-7481-90da-2febe6cffddd/runtime.json +15 -0
- package/.ikie/ferments/019f2767-059c-74bb-b3fb-5e762939b3f6/runtime.json +15 -0
- package/.ikie/ferments/019f2767-05f6-7778-87d7-bd17f16cbfb5/runtime.json +11 -0
- package/.ikie/ferments/019f2767-0621-765e-9af4-4fd53e8fa0ec/runtime.json +15 -0
- package/.ikie/ferments/019f2767-0652-77a4-86f8-fd32c3d03927/runtime.json +15 -0
- package/.ikie/ferments/019f2767-067b-734b-85e5-cd7fc79c73cb/runtime.json +15 -0
- package/.ikie/ferments/019f2767-06aa-71fa-a287-db9463cdae51/runtime.json +15 -0
- package/.ikie/ferments/019f2767-06d5-771d-8f7b-cb18b2f9f122/runtime.json +15 -0
- package/.ikie/ferments/019f2767-070a-7043-87fe-09012eaea4d6/runtime.json +15 -0
- package/.ikie/ferments/019f2767-0733-707e-b141-7af7e0e43e30/runtime.json +15 -0
- package/.ikie/ferments/019f2767-0751-7478-ae88-39af753f8f08/runtime.json +15 -0
- package/.ikie/ferments/019f2767-0791-73af-be60-fe5a809f66bc/runtime.json +15 -0
- package/.ikie/ferments/019f2767-07c5-720a-b9b7-1f96816c4122/runtime.json +11 -0
- package/.ikie/ferments/019f2767-07e4-74fc-bf92-5f4c9c1cefab/runtime.json +11 -0
- package/.ikie/ferments/019f2767-080c-77c8-a174-e8b97bd69510/reviews/phase-phase-1-1.json +63 -0
- package/.ikie/ferments/019f2767-080c-77c8-a174-e8b97bd69510/runtime.json +17 -0
- package/.ikie/ferments/019f2767-0986-7509-b1d0-7650aae65deb/reviews/phase-phase-1-1.json +63 -0
- package/.ikie/ferments/019f2767-0986-7509-b1d0-7650aae65deb/runtime.json +17 -0
- package/.ikie/ferments/019f2767-0b6e-7011-aec4-f728f98727ed/runtime.json +11 -0
- package/.ikie/ferments/019f2767-10a6-75cc-850a-34d704f7eac9/runtime.json +11 -0
- package/.ikie/ferments/019f2767-10cf-70aa-a00c-086ec4813201/runtime.json +11 -0
- package/.ikie/ferments/019f2767-1101-74f7-8518-da795dd7aef7/runtime.json +11 -0
- package/.ikie/ferments/019f2767-1140-738e-b9ce-35b94e415549/runtime.json +11 -0
- package/.ikie/ferments/019f2767-1172-75a9-8f24-74316bfc7d53/pending-proposal.json +45 -0
- package/.ikie/ferments/019f2767-118b-7048-a5d7-cffbef0e44e2/pending-proposal.json +45 -0
- package/.ikie/ferments/019f2767-12be-730b-92b2-0bba958b78a1/pending-proposal.json +45 -0
- package/.ikie/ferments/019f2767-131f-720b-b45a-382835a523ef/pending-proposal.json +45 -0
- package/.ikie/ferments/019f2767-1335-74eb-b84c-9af1e9e52ff0/pending-proposal.json +45 -0
- package/.ikie/ferments/019f2767-4563-715a-8c3c-cadf61ab94cf/runtime.json +13 -0
- package/.ikie/ferments/019f2767-45b2-701b-990c-a8a30ff2c5f2/runtime.json +11 -0
- package/.ikie/ferments/019f2767-45d7-705e-a8fc-202c2c894d5f/runtime.json +11 -0
- package/.ikie/ferments/019f2767-45ee-773f-a4e7-6022c91b113c/runtime.json +11 -0
- package/.ikie/ferments/019f2767-4613-7769-b4fa-6abde054e49d/runtime.json +11 -0
- package/.ikie/ferments/019f2767-4626-704a-9d3e-6d51ff2c45c6/runtime.json +11 -0
- package/.ikie/ferments/019f2767-4637-7346-b00e-35216ec55688/runtime.json +11 -0
- package/.ikie/ferments/019f2767-4649-709c-9269-7d92ac49807a/runtime.json +11 -0
- package/.ikie/ferments/019f2767-465e-76ec-a7c0-c63d79f0807f/runtime.json +9 -0
- package/.ikie/ferments/019f2767-4679-76c1-8e62-1c105c4c6b0b/runtime.json +13 -0
- package/.ikie/ferments/019f2767-4692-762a-963b-a53456d259fc/runtime.json +11 -0
- package/.ikie/ferments/019f2767-46a7-7236-9510-fd0d5ecf273f/runtime.json +11 -0
- package/.ikie/ferments/019f2767-46ee-705c-ad1a-e028ca79062a/runtime.json +11 -0
- package/.ikie/ferments/019f2767-4702-741b-bb09-b4fd8cd9f15a/runtime.json +9 -0
- package/.ikie/ferments/019f2767-4720-7192-9e90-89cc2710255a/runtime.json +9 -0
- package/.ikie/ferments/019f2767-475f-70dc-9883-271aaa69c2b4/runtime.json +11 -0
- package/.ikie/ferments/019f2767-4852-749f-9c8b-920b2c2b25d3/runtime.json +11 -0
- package/.ikie/ferments/019f2767-486c-7309-a9ff-92579b04dc8c/runtime.json +12 -0
- package/.ikie/ferments/019f2767-4899-771f-9f50-89e448dff488/runtime.json +11 -0
- package/.ikie/ferments/019f2767-48ae-7328-a163-a959e2087743/runtime.json +11 -0
- package/.ikie/ferments/019f2767-48ce-717a-828c-6b765da0a306/runtime.json +11 -0
- package/.ikie/ferments/019f2767-48ef-707c-a17e-9db9da0eee1f/runtime.json +11 -0
- package/.ikie/ferments/019f2767-490b-704b-9369-05fcbb050e2b/runtime.json +13 -0
- package/.ikie/ferments/019f2767-4938-752e-a022-f76dadf8fcaf/runtime.json +11 -0
- package/.ikie/ferments/019f2767-5cc6-73b9-b8e4-cb3719bbdc8d/reviews/phase-phase-1-1.json +41 -0
- package/.ikie/ferments/019f2767-5cc6-73b9-b8e4-cb3719bbdc8d/runtime.json +11 -0
- package/.ikie/ferments/019f2767-5d22-7419-840b-e18d2fe5a41d/reviews/phase-phase-1-1.json +47 -0
- package/.ikie/ferments/019f2767-5d22-7419-840b-e18d2fe5a41d/runtime.json +13 -0
- package/.ikie/ferments/019f2767-5d8c-75b0-bf28-5a0781cd0686/reviews/phase-phase-1-1.json +40 -0
- package/.ikie/ferments/019f2767-5d8c-75b0-bf28-5a0781cd0686/runtime.json +9 -0
- package/.ikie/ferments/019f2767-5dae-76e9-b23a-366527e3a529/reviews/phase-phase-1-1.json +40 -0
- package/.ikie/ferments/019f2767-5dae-76e9-b23a-366527e3a529/runtime.json +9 -0
- package/.ikie/ferments/019f2767-5dd4-73bf-821e-d74e53b266e1/reviews/phase-phase-1-1.json +40 -0
- package/.ikie/ferments/019f2767-5dd4-73bf-821e-d74e53b266e1/runtime.json +9 -0
- package/.ikie/ferments/019f2767-5de9-7518-a677-02b4926a0196/reviews/phase-phase-1-1.json +40 -0
- package/.ikie/ferments/019f2767-5de9-7518-a677-02b4926a0196/runtime.json +9 -0
- package/.ikie/ferments/019f2767-5dff-772a-b855-57afbb5e9c7e/reviews/phase-phase-1-1.json +40 -0
- package/.ikie/ferments/019f2767-5dff-772a-b855-57afbb5e9c7e/runtime.json +9 -0
- package/.ikie/ferments/019f2767-5e39-76a5-8dcc-6f9004f4a58e/reviews/phase-phase-1-1.json +62 -0
- package/.ikie/ferments/019f2767-5e39-76a5-8dcc-6f9004f4a58e/runtime.json +9 -0
- package/.ikie/ferments/019f2769-b766-74eb-844e-9903bf64f06d/runtime.json +11 -0
- package/.ikie/ferments/019f2769-b784-72fa-a138-7bdc2fc6e070/runtime.json +11 -0
- package/.ikie/ferments/019f2769-b79d-745b-b577-2ee15d5649b0/runtime.json +11 -0
- package/.ikie/ferments/019f2769-b7c3-75be-9db0-360b0deea44b/runtime.json +12 -0
- package/.ikie/ferments/019f2769-b7e0-758f-bd6a-734520ad3afa/runtime.json +11 -0
- package/.ikie/ferments/019f2769-b807-721e-8827-30e490c8823c/runtime.json +11 -0
- package/.ikie/ferments/019f2769-b836-727d-9c7f-b5a5f03dcc56/runtime.json +15 -0
- package/.ikie/ferments/019f2769-b858-76ae-9fe0-b56d97afdf9b/runtime.json +15 -0
- package/.ikie/ferments/019f2769-b87a-716c-9c81-14f1fa52f217/runtime.json +15 -0
- package/.ikie/ferments/019f2769-b8a2-73dc-9d6d-ac781b700816/runtime.json +13 -0
- package/.ikie/ferments/019f2769-b8d1-7689-9405-e97b063ec3a1/runtime.json +15 -0
- package/.ikie/ferments/019f2769-b904-7154-8946-12e041f89921/runtime.json +15 -0
- package/.ikie/ferments/019f2769-b941-713f-8e2b-1a608dec7ca6/runtime.json +11 -0
- package/.ikie/ferments/019f2769-b95b-7122-bb5d-0bb3a2ad220a/runtime.json +15 -0
- package/.ikie/ferments/019f2769-b97d-728d-b8fb-b1f302b1d819/runtime.json +15 -0
- package/.ikie/ferments/019f2769-b99d-747b-853b-e415c006bfd2/runtime.json +15 -0
- package/.ikie/ferments/019f2769-b9c0-76d6-a254-fba31ac6b662/runtime.json +15 -0
- package/.ikie/ferments/019f2769-b9dd-7349-b246-95853d5d3af0/runtime.json +15 -0
- package/.ikie/ferments/019f2769-b9fe-774f-80cd-06bfedd8a956/runtime.json +15 -0
- package/.ikie/ferments/019f2769-ba1e-70d2-af18-3ea245abc903/runtime.json +15 -0
- package/.ikie/ferments/019f2769-ba45-7730-aae9-9ca14bc6a81b/runtime.json +15 -0
- package/.ikie/ferments/019f2769-ba72-7273-903c-d33bcd036a6b/runtime.json +15 -0
- package/.ikie/ferments/019f2769-ba93-70f3-8884-7b067dd711a4/runtime.json +11 -0
- package/.ikie/ferments/019f2769-baad-714f-8207-a7d630f37e84/runtime.json +11 -0
- package/.ikie/ferments/019f2769-bac7-75ae-95cb-dda85f7fd6a8/reviews/phase-phase-1-1.json +63 -0
- package/.ikie/ferments/019f2769-bac7-75ae-95cb-dda85f7fd6a8/runtime.json +17 -0
- package/.ikie/ferments/019f2769-bbf3-745d-87d3-d594593afbf0/reviews/phase-phase-1-1.json +63 -0
- package/.ikie/ferments/019f2769-bbf3-745d-87d3-d594593afbf0/runtime.json +17 -0
- package/.ikie/ferments/019f2769-bd4e-735d-b931-2077f62d385a/runtime.json +11 -0
- package/.ikie/ferments/019f2769-c103-723f-aebe-ab3ae76aedd9/runtime.json +11 -0
- package/.ikie/ferments/019f2769-c11e-771a-b365-96bf54691b95/runtime.json +11 -0
- package/.ikie/ferments/019f2769-c13b-749e-840d-5136528371f3/runtime.json +11 -0
- package/.ikie/ferments/019f2769-c15a-7065-83b5-2064b699a6d9/runtime.json +11 -0
- package/.ikie/ferments/019f2769-c175-77b2-80df-918134508175/pending-proposal.json +45 -0
- package/.ikie/ferments/019f2769-c189-7508-8a46-3ff461bf759f/pending-proposal.json +45 -0
- package/.ikie/ferments/019f2769-c27c-71eb-910f-36daf69588f8/pending-proposal.json +45 -0
- package/.ikie/ferments/019f2769-c2c5-71bd-b6a6-dd0f8365cc7c/pending-proposal.json +45 -0
- package/.ikie/ferments/019f2769-c2d6-7260-bab6-3e46b6e9100c/pending-proposal.json +45 -0
- package/.ikie/ferments/019f2769-e6d9-700b-a486-64cad0909610/runtime.json +11 -0
- package/.ikie/ferments/019f2769-e6f5-7524-955a-dd4d91813ee5/runtime.json +11 -0
- package/.ikie/ferments/019f2769-e713-715e-9450-42b5250709c8/runtime.json +11 -0
- package/.ikie/ferments/019f2769-e738-7537-b5d5-5209200233da/runtime.json +12 -0
- package/.ikie/ferments/019f2769-e769-752f-b806-14f369200356/runtime.json +11 -0
- package/.ikie/ferments/019f2769-e795-77e8-bc69-fa7496923f00/runtime.json +15 -0
- package/.ikie/ferments/019f2769-e7bb-72a8-ba2a-6d90fe6003cc/runtime.json +15 -0
- package/.ikie/ferments/019f2769-e7e1-719b-becd-d456fe580bf8/runtime.json +15 -0
- package/.ikie/ferments/019f2769-e80b-7539-ac23-4ccf01499e01/runtime.json +13 -0
- package/.ikie/ferments/019f2769-e83e-77c7-8415-7b3e76c827b1/runtime.json +15 -0
- package/.ikie/ferments/019f2769-e86c-7008-8cdb-4d2ae411fc57/runtime.json +15 -0
- package/.ikie/ferments/019f2769-e8ac-7480-b1cc-6913e20e012f/runtime.json +11 -0
- package/.ikie/ferments/019f2769-e8ca-76bd-b0be-bee2f2a97d7d/runtime.json +15 -0
- package/.ikie/ferments/019f2769-e904-7759-b2aa-dbb47427c11b/runtime.json +15 -0
- package/.ikie/ferments/019f2769-e92a-7285-bbd7-ed4220ac3f44/runtime.json +15 -0
- package/.ikie/ferments/019f2769-e95e-77eb-9e17-6b2ad4532f0c/runtime.json +15 -0
- package/.ikie/ferments/019f2769-e992-75ea-adf9-53f548b600a0/runtime.json +15 -0
- package/.ikie/ferments/019f2769-e9b9-75bc-ab7a-a4ba5e8f1124/runtime.json +15 -0
- package/.ikie/ferments/019f2769-e9ec-700b-990f-320c347ee271/runtime.json +15 -0
- package/.ikie/ferments/019f2769-ea15-72cb-96af-a45603082ee1/runtime.json +15 -0
- package/.ikie/ferments/019f2769-ea42-735c-b71e-259c75688841/runtime.json +15 -0
- package/.ikie/ferments/019f2769-ea6f-7074-acde-65385abd199a/runtime.json +11 -0
- package/.ikie/ferments/019f2769-ea98-759c-aeda-90b28cab640c/runtime.json +11 -0
- package/.ikie/ferments/019f2769-eac3-70a7-993e-435d9a1dfd91/reviews/phase-phase-1-1.json +63 -0
- package/.ikie/ferments/019f2769-eac3-70a7-993e-435d9a1dfd91/runtime.json +17 -0
- package/.ikie/ferments/019f2769-ec3c-7674-829a-fba66a9bc62e/reviews/phase-phase-1-1.json +63 -0
- package/.ikie/ferments/019f2769-ec3c-7674-829a-fba66a9bc62e/runtime.json +17 -0
- package/.ikie/ferments/019f2769-edcb-748c-be28-51e21c608c6f/runtime.json +11 -0
- package/.ikie/ferments/019f2769-f2df-7759-811f-ef76a54375e8/runtime.json +11 -0
- package/.ikie/ferments/019f2769-f311-7641-88b0-81c54945642f/runtime.json +11 -0
- package/.ikie/ferments/019f2769-f363-723b-80f1-b52334dc6a15/runtime.json +11 -0
- package/.ikie/ferments/019f2769-f38e-72cc-a4ac-81cefc3a95f4/runtime.json +11 -0
- package/.ikie/ferments/019f2769-f3b6-763a-bf65-011ce164f5d4/pending-proposal.json +45 -0
- package/.ikie/ferments/019f2769-f3c7-745e-9da1-37e14b1cfddf/pending-proposal.json +45 -0
- package/.ikie/ferments/019f2769-f4e4-71b1-83f1-b16014904ec3/pending-proposal.json +45 -0
- package/.ikie/ferments/019f2769-f556-761d-b331-acc7cc02317d/pending-proposal.json +45 -0
- package/.ikie/ferments/019f2769-f56d-77af-82f3-b9915ca80a61/pending-proposal.json +45 -0
- package/.ikie/ferments/019f276a-23f9-7653-8be0-dca748ac5e0f/runtime.json +13 -0
- package/.ikie/ferments/019f276a-2428-731f-959b-8d346551f0c4/runtime.json +11 -0
- package/.ikie/ferments/019f276a-2446-7250-be5c-bdb0ac1ef2fa/runtime.json +11 -0
- package/.ikie/ferments/019f276a-2462-764e-a7f4-d9ab3876fbd2/runtime.json +11 -0
- package/.ikie/ferments/019f276a-2482-768b-919e-d81a0709abd5/runtime.json +11 -0
- package/.ikie/ferments/019f276a-2494-77ee-8b28-72b9b0d19d56/runtime.json +11 -0
- package/.ikie/ferments/019f276a-24aa-76fd-8fba-2a1d73960010/runtime.json +11 -0
- package/.ikie/ferments/019f276a-24c3-7799-bd35-0a3374f3e469/runtime.json +11 -0
- package/.ikie/ferments/019f276a-24f1-7498-a372-975f72302a0d/runtime.json +9 -0
- package/.ikie/ferments/019f276a-251e-71ac-ba90-af2a49c22b6b/runtime.json +13 -0
- package/.ikie/ferments/019f276a-2545-746f-bdf3-ca3c11ab9968/runtime.json +11 -0
- package/.ikie/ferments/019f276a-256d-765b-9f94-90047d4ca21e/runtime.json +11 -0
- package/.ikie/ferments/019f276a-25cb-753b-9905-7250e4eea970/runtime.json +11 -0
- package/.ikie/ferments/019f276a-25f8-73a2-aede-f2c017fa80c9/runtime.json +9 -0
- package/.ikie/ferments/019f276a-2613-774b-80c0-3b206ac95435/runtime.json +9 -0
- package/.ikie/ferments/019f276a-264e-73a3-90ad-017ef8ea05b6/runtime.json +11 -0
- package/.ikie/ferments/019f276a-2760-758f-b0a6-cd04a8b0ee76/runtime.json +11 -0
- package/.ikie/ferments/019f276a-277b-73a9-8655-6bf7018262dc/runtime.json +12 -0
- package/.ikie/ferments/019f276a-27a6-709d-a90f-f1784e248fca/runtime.json +11 -0
- package/.ikie/ferments/019f276a-27b7-75bf-b0b5-013581917821/runtime.json +11 -0
- package/.ikie/ferments/019f276a-27ce-759a-93de-474988efc050/runtime.json +11 -0
- package/.ikie/ferments/019f276a-27e9-7564-999a-73beef96d35c/runtime.json +11 -0
- package/.ikie/ferments/019f276a-27fc-714b-9ddb-117b439b664e/runtime.json +13 -0
- package/.ikie/ferments/019f276a-2824-762e-8def-3c17aa4041f9/runtime.json +11 -0
- package/.ikie/ferments/019f276a-38fe-725b-9c16-f1b5174302d0/reviews/phase-phase-1-1.json +41 -0
- package/.ikie/ferments/019f276a-38fe-725b-9c16-f1b5174302d0/runtime.json +11 -0
- package/.ikie/ferments/019f276a-393c-75e2-b29f-092b82105a74/reviews/phase-phase-1-1.json +47 -0
- package/.ikie/ferments/019f276a-393c-75e2-b29f-092b82105a74/runtime.json +13 -0
- package/.ikie/ferments/019f276a-3990-75f9-9b6f-ab6d45bf8e32/reviews/phase-phase-1-1.json +40 -0
- package/.ikie/ferments/019f276a-3990-75f9-9b6f-ab6d45bf8e32/runtime.json +9 -0
- package/.ikie/ferments/019f276a-39ab-76bb-be69-8658a1b6a76f/reviews/phase-phase-1-1.json +40 -0
- package/.ikie/ferments/019f276a-39ab-76bb-be69-8658a1b6a76f/runtime.json +9 -0
- package/.ikie/ferments/019f276a-39c9-76ac-95a8-2d5575d26573/reviews/phase-phase-1-1.json +40 -0
- package/.ikie/ferments/019f276a-39c9-76ac-95a8-2d5575d26573/runtime.json +9 -0
- package/.ikie/ferments/019f276a-39f6-76cc-9011-3f6b08068155/reviews/phase-phase-1-1.json +40 -0
- package/.ikie/ferments/019f276a-39f6-76cc-9011-3f6b08068155/runtime.json +9 -0
- package/.ikie/ferments/019f276a-3a0c-76a9-80b2-2bb7952fe9d7/reviews/phase-phase-1-1.json +40 -0
- package/.ikie/ferments/019f276a-3a0c-76a9-80b2-2bb7952fe9d7/runtime.json +9 -0
- package/.ikie/ferments/019f276a-3a22-7140-8a4d-0d17ada653b3/reviews/phase-phase-1-1.json +62 -0
- package/.ikie/ferments/019f276a-3a22-7140-8a4d-0d17ada653b3/runtime.json +9 -0
- package/.ikie/ferments/019f276c-2f88-74ae-8bc2-5cec42d56757/runtime.json +11 -0
- package/.ikie/ferments/019f276c-2fb8-7599-b61c-e73c85399ee0/runtime.json +11 -0
- package/.ikie/ferments/019f276c-2fd9-75db-8e13-8e9137cecedd/runtime.json +11 -0
- package/.ikie/ferments/019f276c-302f-760f-97e7-2f10f283dfe1/runtime.json +12 -0
- package/.ikie/ferments/019f276c-3060-77ca-a0e3-d49781feca6d/runtime.json +11 -0
- package/.ikie/ferments/019f276c-3091-744e-9394-a59b9f37db9e/runtime.json +11 -0
- package/.ikie/ferments/019f276c-30da-76ba-bd76-a72e053f218d/runtime.json +15 -0
- package/.ikie/ferments/019f276c-3110-7277-ab9a-820992db76da/runtime.json +15 -0
- package/.ikie/ferments/019f276c-314a-740f-b533-a31c4e9ebd52/runtime.json +15 -0
- package/.ikie/ferments/019f276c-3189-732c-a4ec-09e4f1e3a8da/runtime.json +13 -0
- package/.ikie/ferments/019f276c-31ce-75c8-a4e9-507d408920b6/runtime.json +15 -0
- package/.ikie/ferments/019f276c-320e-710b-b32a-4577244dcc6a/runtime.json +15 -0
- package/.ikie/ferments/019f276c-3262-7611-af21-ad12693acdd5/runtime.json +11 -0
- package/.ikie/ferments/019f276c-3288-7559-b7c3-299dd548decb/runtime.json +15 -0
- package/.ikie/ferments/019f276c-32c4-70a0-899d-ad17469a015c/runtime.json +15 -0
- package/.ikie/ferments/019f276c-32f0-7036-86ae-19c9f703cd9a/runtime.json +15 -0
- package/.ikie/ferments/019f276c-3324-7021-8f89-d46fbfa45e00/runtime.json +15 -0
- package/.ikie/ferments/019f276c-334b-71df-b20d-d9a7bcccdc0a/runtime.json +15 -0
- package/.ikie/ferments/019f276c-3379-7593-957a-ee9631368280/runtime.json +15 -0
- package/.ikie/ferments/019f276c-33a9-705d-a590-eff1c46bcd67/runtime.json +15 -0
- package/.ikie/ferments/019f276c-33d5-7784-b35a-01d3c06b16c0/runtime.json +15 -0
- package/.ikie/ferments/019f276c-341c-76ce-b950-7a7e7472eeb8/runtime.json +15 -0
- package/.ikie/ferments/019f276c-3462-744d-b42a-9756a33b7223/runtime.json +11 -0
- package/.ikie/ferments/019f276c-348e-706a-9791-5213dfd00593/runtime.json +11 -0
- package/.ikie/ferments/019f276c-34b6-70f9-b678-d3a7d876758c/reviews/phase-phase-1-1.json +63 -0
- package/.ikie/ferments/019f276c-34b6-70f9-b678-d3a7d876758c/runtime.json +17 -0
- package/.ikie/ferments/019f276c-3640-75da-915e-b0dba80bfcda/reviews/phase-phase-1-1.json +63 -0
- package/.ikie/ferments/019f276c-3640-75da-915e-b0dba80bfcda/runtime.json +17 -0
- package/.ikie/ferments/019f276c-37df-76f9-b7a8-1285ee0ac11d/runtime.json +11 -0
- package/.ikie/ferments/019f276c-3caa-748a-a0aa-9e068f18f2ac/runtime.json +11 -0
- package/.ikie/ferments/019f276c-3cc8-7347-9764-dd4ab7f87646/runtime.json +11 -0
- package/.ikie/ferments/019f276c-3cef-75dd-be90-593fd20a850d/runtime.json +11 -0
- package/.ikie/ferments/019f276c-3d14-72af-ae89-6c0605227a05/runtime.json +11 -0
- package/.ikie/ferments/019f276c-3d36-716c-ac4e-59444fdec814/pending-proposal.json +45 -0
- package/.ikie/ferments/019f276c-3d4c-7208-9130-7f168aeba08e/pending-proposal.json +45 -0
- package/.ikie/ferments/019f276c-3e7f-7552-a37f-61442d720fb9/pending-proposal.json +45 -0
- package/.ikie/ferments/019f276c-3ed9-74f2-9332-d5a492d39130/pending-proposal.json +45 -0
- package/.ikie/ferments/019f276c-3ef4-757e-b0c6-9d7c6f0326e7/pending-proposal.json +45 -0
- package/.ikie/ferments/019f276c-651d-70ac-bfb4-5d033388e28c/runtime.json +13 -0
- package/.ikie/ferments/019f276c-6546-7569-b609-74b2258985a8/runtime.json +11 -0
- package/.ikie/ferments/019f276c-6566-71e2-b937-390aea78900a/runtime.json +11 -0
- package/.ikie/ferments/019f276c-657c-75ee-864b-5b5601e3b9d1/runtime.json +11 -0
- package/.ikie/ferments/019f276c-6590-7729-a6e7-466ace311e0d/runtime.json +11 -0
- package/.ikie/ferments/019f276c-65a5-779f-a3da-36bc91cf31f3/runtime.json +11 -0
- package/.ikie/ferments/019f276c-65b9-77f0-97fc-fcf70d7125b8/runtime.json +11 -0
- package/.ikie/ferments/019f276c-65cd-74ef-9094-db3c5a98348b/runtime.json +11 -0
- package/.ikie/ferments/019f276c-65e3-7632-9df9-58cfa083a065/runtime.json +9 -0
- package/.ikie/ferments/019f276c-65fb-763a-aec7-54ece64d7342/runtime.json +13 -0
- package/.ikie/ferments/019f276c-661a-74e9-81b1-d1ba625c04b0/runtime.json +11 -0
- package/.ikie/ferments/019f276c-6630-7748-ab90-869f75ed2de5/runtime.json +11 -0
- package/.ikie/ferments/019f276c-6670-758f-b0da-673d81bd319e/runtime.json +11 -0
- package/.ikie/ferments/019f276c-6687-71fa-8286-2d25de36c9b4/runtime.json +9 -0
- package/.ikie/ferments/019f276c-669d-7679-91d5-4df6315d3823/runtime.json +9 -0
- package/.ikie/ferments/019f276c-66b3-72a6-974d-1bc3477eb6f2/runtime.json +11 -0
- package/.ikie/ferments/019f276c-6769-776c-9868-0c929ee31f5f/runtime.json +11 -0
- package/.ikie/ferments/019f276c-678e-7588-a059-c1efd9e9c9a6/runtime.json +12 -0
- package/.ikie/ferments/019f276c-67af-729c-a5f8-79e8e78bbe9b/runtime.json +11 -0
- package/.ikie/ferments/019f276c-67c3-70b8-8606-aad72ab0cd6f/runtime.json +11 -0
- package/.ikie/ferments/019f276c-67d7-734c-83fd-132c54564004/runtime.json +11 -0
- package/.ikie/ferments/019f276c-67ec-710d-8497-eba65301d741/runtime.json +11 -0
- package/.ikie/ferments/019f276c-6805-742c-8a1c-f370733226ae/runtime.json +13 -0
- package/.ikie/ferments/019f276c-6825-7768-8ca1-f5dac5c1d374/runtime.json +11 -0
- package/.ikie/ferments/019f276c-7f49-751d-bbb8-f828debd3cb9/reviews/phase-phase-1-1.json +41 -0
- package/.ikie/ferments/019f276c-7f49-751d-bbb8-f828debd3cb9/runtime.json +11 -0
- package/.ikie/ferments/019f276c-7f7b-74d0-b46e-e8efa73fb5b5/reviews/phase-phase-1-1.json +47 -0
- package/.ikie/ferments/019f276c-7f7b-74d0-b46e-e8efa73fb5b5/runtime.json +13 -0
- package/.ikie/ferments/019f276c-8004-74fe-b37f-f9fc659f7f0c/reviews/phase-phase-1-1.json +40 -0
- package/.ikie/ferments/019f276c-8004-74fe-b37f-f9fc659f7f0c/runtime.json +9 -0
- package/.ikie/ferments/019f276c-8025-7328-afef-6703215c208c/reviews/phase-phase-1-1.json +40 -0
- package/.ikie/ferments/019f276c-8025-7328-afef-6703215c208c/runtime.json +9 -0
- package/.ikie/ferments/019f276c-8043-749c-8cbb-47d0df9819df/reviews/phase-phase-1-1.json +40 -0
- package/.ikie/ferments/019f276c-8043-749c-8cbb-47d0df9819df/runtime.json +9 -0
- package/.ikie/ferments/019f276c-8062-7436-99eb-80e09bc6b067/reviews/phase-phase-1-1.json +40 -0
- package/.ikie/ferments/019f276c-8062-7436-99eb-80e09bc6b067/runtime.json +9 -0
- package/.ikie/ferments/019f276c-8081-727c-aa11-d606a64b88ed/reviews/phase-phase-1-1.json +40 -0
- package/.ikie/ferments/019f276c-8081-727c-aa11-d606a64b88ed/runtime.json +9 -0
- package/.ikie/ferments/019f276c-80b6-7528-8687-e11cc4691930/reviews/phase-phase-1-1.json +62 -0
- package/.ikie/ferments/019f276c-80b6-7528-8687-e11cc4691930/runtime.json +9 -0
- package/AGENTS.md +120 -0
- package/CLA.md +39 -0
- package/CODE_OF_CONDUCT.md +83 -0
- package/CONTRIBUTING.md +57 -0
- package/LICENSE +203 -0
- package/NOTICE +28 -0
- package/README.md +568 -0
- package/SECURITY.md +36 -0
- package/TODO.md +33 -0
- package/benchmark/audit-session/README.md +217 -0
- package/benchmark/audit-session/audit-session-prompt.md +557 -0
- package/benchmark/audit-session/audit-session.sh +323 -0
- package/benchmark/manual/README.md +166 -0
- package/benchmark/manual/__pycache__/check-session.cpython-313.pyc +0 -0
- package/benchmark/manual/analyze-session.py +290 -0
- package/benchmark/manual/benchmark.json +4 -0
- package/benchmark/manual/check-session.py +268 -0
- package/benchmark/manual/compare-sessions.py +118 -0
- package/benchmark/manual/lib.sh +284 -0
- package/benchmark/manual/new-session-claude.sh +86 -0
- package/benchmark/manual/new-session.sh +191 -0
- package/benchmark/manual/run-evaluation.sh +201 -0
- package/benchmark/manual/seeds/explore-refactor/cmd/server/main.go +37 -0
- package/benchmark/manual/seeds/explore-refactor/go.mod +3 -0
- package/benchmark/manual/seeds/explore-refactor/internal/handler/audit.go +39 -0
- package/benchmark/manual/seeds/explore-refactor/internal/handler/invitation.go +56 -0
- package/benchmark/manual/seeds/explore-refactor/internal/handler/team.go +86 -0
- package/benchmark/manual/seeds/explore-refactor/internal/handler/user.go +126 -0
- package/benchmark/manual/seeds/explore-refactor/internal/model/model.go +37 -0
- package/benchmark/manual/seeds/explore-refactor/internal/repository/audit.go +57 -0
- package/benchmark/manual/seeds/explore-refactor/internal/repository/invitation.go +58 -0
- package/benchmark/manual/seeds/explore-refactor/internal/repository/team.go +66 -0
- package/benchmark/manual/seeds/explore-refactor/internal/repository/user.go +91 -0
- package/benchmark/manual/seeds/explore-refactor/internal/service/invitation.go +45 -0
- package/benchmark/manual/seeds/explore-refactor/internal/service/team.go +62 -0
- package/benchmark/manual/seeds/explore-refactor/internal/service/user.go +94 -0
- package/benchmark/manual/self-improvement.md +203 -0
- package/benchmark/manual/session-summary.py +95 -0
- package/benchmark/manual/start-self-improvement.sh +27 -0
- package/benchmark/manual/tasks.md +154 -0
- package/benchmark/terminal-bench-2/README.md +261 -0
- package/benchmark/terminal-bench-2/config/retry.yaml +48 -0
- package/benchmark/terminal-bench-2/docs/ferment-terminal-bench-analysis.md +233 -0
- package/benchmark/terminal-bench-2/pyproject.toml +32 -0
- package/benchmark/terminal-bench-2/scripts/analyze-ferment-bench.py +1193 -0
- package/benchmark/terminal-bench-2/scripts/run-claude-code-ikie.sh +41 -0
- package/benchmark/terminal-bench-2/scripts/run-gsd-ikie.sh +29 -0
- package/benchmark/terminal-bench-2/scripts/run-local.sh +32 -0
- package/benchmark/terminal-bench-2/scripts/run-opencode-ikie.sh +30 -0
- package/benchmark/terminal-bench-2/scripts/run-release.sh +28 -0
- package/benchmark/terminal-bench-2/src/ikie_agent/__init__.py +6 -0
- package/benchmark/terminal-bench-2/src/ikie_agent/agent.py +445 -0
- package/benchmark/terminal-bench-2/src/ikie_agent/agent_test.py +233 -0
- package/benchmark/terminal-bench-2/src/ikie_agent/claude_code_ikie.py +356 -0
- package/benchmark/terminal-bench-2/src/ikie_agent/claude_code_ikie_test.py +506 -0
- package/benchmark/terminal-bench-2/src/ikie_agent/config.py +56 -0
- package/benchmark/terminal-bench-2/src/ikie_agent/gateway.py +163 -0
- package/benchmark/terminal-bench-2/src/ikie_agent/gsd_ikie.py +340 -0
- package/benchmark/terminal-bench-2/src/ikie_agent/gsd_ikie_test.py +304 -0
- package/benchmark/terminal-bench-2/src/ikie_agent/messages.py +27 -0
- package/benchmark/terminal-bench-2/src/ikie_agent/opencode_ikie.py +146 -0
- package/benchmark/terminal-bench-2/src/ikie_agent/opencode_ikie_test.py +308 -0
- package/benchmark/terminal-bench-2/src/ikie_agent/release.py +174 -0
- package/benchmark/terminal-bench-2/src/ikie_agent/retry_config_test.py +55 -0
- package/benchmark/terminal-bench-2/uv.lock +1948 -0
- package/biome.json +54 -0
- package/docs/agents.md +295 -0
- package/docs/bash-tool-guard.md +206 -0
- package/docs/expected-execution-scenarios.md +348 -0
- package/docs/ferment-storage-schema.md +199 -0
- package/docs/ferment.md +633 -0
- package/docs/hooks.md +263 -0
- package/docs/subagents/README.md +22 -0
- package/docs/subagents/code-reviewer.md +39 -0
- package/docs/subagents/research-assistant.md +81 -0
- package/docs/subagents/test-writer.md +49 -0
- package/docs/teleport.md +424 -0
- package/docs/windows/README.md +226 -0
- package/extensions/active-tools.ts +74 -0
- package/ikie.png +0 -0
- package/package.json +125 -0
- package/patches/@earendil-works__pi-ai@0.78.1.patch +68 -0
- package/patches/@earendil-works__pi-coding-agent@0.78.1.patch +535 -0
- package/patches/@earendil-works__pi-tui.patch +171 -0
- package/patches/playwright-core@1.59.1.patch +24 -0
- package/resources/oauth/error.html +185 -0
- package/resources/oauth/success.html +185 -0
- package/scripts/build-binary.js +113 -0
- package/scripts/build-proxy-helper.js +66 -0
- package/scripts/copy-resources.js +104 -0
- package/scripts/dev-overlay.sh +52 -0
- package/scripts/dev-startup.sh +82 -0
- package/scripts/install-local.js +34 -0
- package/scripts/install.ps1 +258 -0
- package/scripts/install.sh +160 -0
- package/scripts/package-release-asset.js +82 -0
- package/scripts/patch-pi-ai-oauth.js +109 -0
- package/scripts/run-tui-e2e.js +153 -0
- package/scripts/set-version.js +31 -0
- package/scripts/verify-acp-load.mjs +358 -0
- package/scripts/verify-acp.mjs +217 -0
- package/src/__mocks__/earendil-clipboard-image.js +6 -0
- package/src/agent-discovery/agents/claude-code.test.ts +156 -0
- package/src/agent-discovery/agents/claude-code.ts +85 -0
- package/src/agent-discovery/agents/cursor.test.ts +178 -0
- package/src/agent-discovery/agents/cursor.ts +74 -0
- package/src/agent-discovery/agents/opencode.test.ts +461 -0
- package/src/agent-discovery/agents/opencode.ts +156 -0
- package/src/agent-discovery/agents/skills-only.test.ts +77 -0
- package/src/agent-discovery/agents/skills-only.ts +47 -0
- package/src/agent-discovery/engine.test.ts +408 -0
- package/src/agent-discovery/engine.ts +117 -0
- package/src/agent-discovery/index.ts +75 -0
- package/src/agent-discovery/jsonc.ts +52 -0
- package/src/ansi.ts +51 -0
- package/src/api/me.test.ts +86 -0
- package/src/api/me.ts +59 -0
- package/src/auth/validator.test.ts +106 -0
- package/src/auth/validator.ts +103 -0
- package/src/auxiliary-files/resolver.test.ts +85 -0
- package/src/auxiliary-files/resolver.ts +27 -0
- package/src/auxiliary-files/validator.test.ts +68 -0
- package/src/auxiliary-files/validator.ts +31 -0
- package/src/cli-args.test.ts +232 -0
- package/src/cli-args.ts +94 -0
- package/src/cli-auth/callback-server.test.ts +169 -0
- package/src/cli-auth/callback-server.ts +165 -0
- package/src/cli-auth/index.test.ts +103 -0
- package/src/cli-auth/index.ts +117 -0
- package/src/cli-auth/oauth-page.ts +94 -0
- package/src/cli.ts +564 -0
- package/src/commands/_helpers.ts +87 -0
- package/src/commands/banner.test.ts +39 -0
- package/src/commands/banner.ts +74 -0
- package/src/commands/claude.ts +28 -0
- package/src/commands/config.test.ts +149 -0
- package/src/commands/config.ts +98 -0
- package/src/commands/cursor.ts +23 -0
- package/src/commands/dispatch.test.ts +102 -0
- package/src/commands/dispatch.ts +40 -0
- package/src/commands/gsd2.ts +23 -0
- package/src/commands/help.ts +104 -0
- package/src/commands/login.ts +46 -0
- package/src/commands/openclaw.ts +23 -0
- package/src/commands/opencode.ts +31 -0
- package/src/commands/registry.ts +44 -0
- package/src/commands/resources.ts +77 -0
- package/src/commands/setup-tools.test.ts +231 -0
- package/src/commands/setup-tools.ts +164 -0
- package/src/commands/setup.ts +28 -0
- package/src/commands/update.test.ts +312 -0
- package/src/commands/update.ts +291 -0
- package/src/commands/version.ts +9 -0
- package/src/components/editor.test.ts +182 -0
- package/src/components/editor.ts +186 -0
- package/src/components/footer.test.ts +790 -0
- package/src/components/footer.ts +640 -0
- package/src/components/logo-art.test.ts +30 -0
- package/src/components/logo-art.ts +66 -0
- package/src/components/logo.test.ts +316 -0
- package/src/components/logo.ts +127 -0
- package/src/components/tool-block.test.ts +75 -0
- package/src/components/tool-block.ts +166 -0
- package/src/config/footer-config.test.ts +191 -0
- package/src/config/footer-config.ts +130 -0
- package/src/config/json.test.ts +78 -0
- package/src/config/json.ts +112 -0
- package/src/config/scope.test.ts +49 -0
- package/src/config/scope.ts +38 -0
- package/src/config/shell-profile.test.ts +130 -0
- package/src/config/shell-profile.ts +131 -0
- package/src/config.test.ts +723 -0
- package/src/config.ts +697 -0
- package/src/entry.ts +62 -0
- package/src/env.ts +4 -0
- package/src/expand-state.ts +41 -0
- package/src/extensions/activity.test.ts +160 -0
- package/src/extensions/activity.ts +192 -0
- package/src/extensions/agent-worker-context.test.ts +31 -0
- package/src/extensions/agent-worker-context.ts +11 -0
- package/src/extensions/agents/default-agents.test.ts +24 -0
- package/src/extensions/agents/discovery-priority.test.ts +65 -0
- package/src/extensions/agents/env.ts +33 -0
- package/src/extensions/agents/index.test.ts +32 -0
- package/src/extensions/agents/index.ts +2226 -0
- package/src/extensions/agents/manager/agent-manager.test.ts +896 -0
- package/src/extensions/agents/manager/agent-manager.ts +714 -0
- package/src/extensions/agents/manager/agent-runner.test.ts +1846 -0
- package/src/extensions/agents/manager/agent-runner.ts +964 -0
- package/src/extensions/agents/manager/budget-retry-guard.test.ts +95 -0
- package/src/extensions/agents/manager/budget-retry-guard.ts +57 -0
- package/src/extensions/agents/manager/constants.ts +1 -0
- package/src/extensions/agents/manager/group-join.ts +136 -0
- package/src/extensions/agents/manager/output-file.test.ts +31 -0
- package/src/extensions/agents/manager/output-file.ts +92 -0
- package/src/extensions/agents/manager/session-file.test.ts +59 -0
- package/src/extensions/agents/manager/session-file.ts +37 -0
- package/src/extensions/agents/manager/usage.ts +52 -0
- package/src/extensions/agents/memory/memory.test.ts +54 -0
- package/src/extensions/agents/memory/memory.ts +166 -0
- package/src/extensions/agents/memory.test.ts +54 -0
- package/src/extensions/agents/package-resources.test.ts +147 -0
- package/src/extensions/agents/package-resources.ts +37 -0
- package/src/extensions/agents/personas/__snapshots__/default-agents.test.ts.snap +75 -0
- package/src/extensions/agents/personas/agent-types.test.ts +33 -0
- package/src/extensions/agents/personas/agent-types.ts +150 -0
- package/src/extensions/agents/personas/custom-agents.test.ts +171 -0
- package/src/extensions/agents/personas/custom-agents.ts +147 -0
- package/src/extensions/agents/personas/default-agents.test.ts +101 -0
- package/src/extensions/agents/personas/default-agents.ts +335 -0
- package/src/extensions/agents/personas/discovery-priority.test.ts +65 -0
- package/src/extensions/agents/personas/types.ts +229 -0
- package/src/extensions/agents/prompt/context.ts +54 -0
- package/src/extensions/agents/prompt/prompts.test.ts +314 -0
- package/src/extensions/agents/prompt/prompts.ts +164 -0
- package/src/extensions/agents/prompt/skill-loader.test.ts +41 -0
- package/src/extensions/agents/prompt/skill-loader.ts +80 -0
- package/src/extensions/agents/resolution/invocation-config.test.ts +81 -0
- package/src/extensions/agents/resolution/invocation-config.ts +68 -0
- package/src/extensions/agents/resolution/model-resolver.ts +85 -0
- package/src/extensions/agents/resume-tool.test.ts +146 -0
- package/src/extensions/agents/resume-tool.ts +90 -0
- package/src/extensions/agents/settings.ts +163 -0
- package/src/extensions/agents/skill-loader.test.ts +41 -0
- package/src/extensions/agents/tool-result.ts +4 -0
- package/src/extensions/agents/ui/agent-widget.ts +458 -0
- package/src/extensions/agents/ui/conversation-viewer.ts +261 -0
- package/src/extensions/agents/worker-budget-policy.ts +48 -0
- package/src/extensions/agents/worker-report.test.ts +69 -0
- package/src/extensions/agents/worker-report.ts +72 -0
- package/src/extensions/assistant-prefix.ts +80 -0
- package/src/extensions/bash-collapse.test.ts +21 -0
- package/src/extensions/bash-collapse.ts +3 -0
- package/src/extensions/bash-default-timeout.test.ts +189 -0
- package/src/extensions/bash-default-timeout.ts +73 -0
- package/src/extensions/bash-tool-guard-events.ts +39 -0
- package/src/extensions/bash-tool-guard.integration.test.ts +771 -0
- package/src/extensions/bash-tool-guard.test.ts +890 -0
- package/src/extensions/bash-tool-guard.ts +640 -0
- package/src/extensions/behaviours/bash-tokenize.test.ts +125 -0
- package/src/extensions/behaviours/bash-tokenize.ts +272 -0
- package/src/extensions/behaviours/bodies/bound-tool-output.md +11 -0
- package/src/extensions/behaviours/bodies/gh-cli.md +80 -0
- package/src/extensions/behaviours/bodies/git-hygiene.md +13 -0
- package/src/extensions/behaviours/bodies/glab-cli.md +95 -0
- package/src/extensions/behaviours/bodies/python-edit.md +10 -0
- package/src/extensions/behaviours/bodies/re-read-before-edit.md +10 -0
- package/src/extensions/behaviours/bodies.d.ts +7 -0
- package/src/extensions/behaviours/build.test.ts +89 -0
- package/src/extensions/behaviours/build.ts +63 -0
- package/src/extensions/behaviours/engine.test.ts +300 -0
- package/src/extensions/behaviours/engine.ts +131 -0
- package/src/extensions/behaviours/eval-engine.test.ts +165 -0
- package/src/extensions/behaviours/eval-engine.ts +104 -0
- package/src/extensions/behaviours/frontmatter.ts +22 -0
- package/src/extensions/behaviours/index.ts +35 -0
- package/src/extensions/behaviours/matchers.test.ts +153 -0
- package/src/extensions/behaviours/matchers.ts +69 -0
- package/src/extensions/behaviours/registry.ts +73 -0
- package/src/extensions/behaviours/session-context.test.ts +192 -0
- package/src/extensions/behaviours/session-context.ts +170 -0
- package/src/extensions/behaviours/stats.ts +47 -0
- package/src/extensions/behaviours/tool-args.smoke.test.ts +34 -0
- package/src/extensions/behaviours/tool-args.ts +65 -0
- package/src/extensions/behaviours/triggers.ts +164 -0
- package/src/extensions/behaviours/types.ts +49 -0
- package/src/extensions/behaviours/wiring.smoke.test.ts +488 -0
- package/src/extensions/behaviours/wiring.ts +196 -0
- package/src/extensions/branch-command.test.ts +208 -0
- package/src/extensions/branch-command.ts +89 -0
- package/src/extensions/claude-code-hook-adapter/definition.test.ts +51 -0
- package/src/extensions/claude-code-hook-adapter/definition.ts +36 -0
- package/src/extensions/claude-code-hook-adapter/index.ts +6 -0
- package/src/extensions/claude-code-skills/definition.test.ts +228 -0
- package/src/extensions/claude-code-skills/definition.ts +475 -0
- package/src/extensions/claude-code-skills/index.test.ts +227 -0
- package/src/extensions/claude-code-skills/index.ts +101 -0
- package/src/extensions/clipboard-image.test.ts +383 -0
- package/src/extensions/clipboard-image.ts +266 -0
- package/src/extensions/compaction-thresholds.test.ts +8 -0
- package/src/extensions/compaction-thresholds.ts +13 -0
- package/src/extensions/curator/index.test.ts +33 -0
- package/src/extensions/curator/index.ts +296 -0
- package/src/extensions/curator/review.test.ts +82 -0
- package/src/extensions/curator/review.ts +438 -0
- package/src/extensions/curator/state.test.ts +79 -0
- package/src/extensions/curator/state.ts +61 -0
- package/src/extensions/curator/transitions.test.ts +96 -0
- package/src/extensions/curator/transitions.ts +56 -0
- package/src/extensions/customize-footer-command.test.ts +258 -0
- package/src/extensions/customize-footer-command.ts +158 -0
- package/src/extensions/deferred-action.ts +38 -0
- package/src/extensions/disabled/tool-result-pruning.test.ts +397 -0
- package/src/extensions/disabled/tool-result-pruning.ts +181 -0
- package/src/extensions/exit-utils.ts +8 -0
- package/src/extensions/exploration-guard.test.ts +646 -0
- package/src/extensions/exploration-guard.ts +293 -0
- package/src/extensions/ferment/action-tool-names.ts +25 -0
- package/src/extensions/ferment/agent-spawn-guard.test.ts +339 -0
- package/src/extensions/ferment/agent-spawn-guard.ts +188 -0
- package/src/extensions/ferment/ask-user.test.ts +838 -0
- package/src/extensions/ferment/ask-user.ts +569 -0
- package/src/extensions/ferment/auto-compaction.test.ts +933 -0
- package/src/extensions/ferment/auto-compaction.ts +525 -0
- package/src/extensions/ferment/breadcrumb-renderer.ts +46 -0
- package/src/extensions/ferment/colors.ts +95 -0
- package/src/extensions/ferment/command-parser.test.ts +82 -0
- package/src/extensions/ferment/command-parser.ts +52 -0
- package/src/extensions/ferment/commands.test.ts +1659 -0
- package/src/extensions/ferment/commands.ts +1025 -0
- package/src/extensions/ferment/constants.ts +37 -0
- package/src/extensions/ferment/contextual-options.test.ts +70 -0
- package/src/extensions/ferment/contextual-options.ts +107 -0
- package/src/extensions/ferment/continuation.test.ts +141 -0
- package/src/extensions/ferment/continuation.ts +59 -0
- package/src/extensions/ferment/derive-state.test.ts +222 -0
- package/src/extensions/ferment/derive-state.ts +158 -0
- package/src/extensions/ferment/domain-events-emitter.ts +255 -0
- package/src/extensions/ferment/domain-events.ts +146 -0
- package/src/extensions/ferment/events.test.ts +616 -0
- package/src/extensions/ferment/events.ts +561 -0
- package/src/extensions/ferment/footer-status.test.ts +62 -0
- package/src/extensions/ferment/footer-status.ts +61 -0
- package/src/extensions/ferment/format.test.ts +55 -0
- package/src/extensions/ferment/format.ts +111 -0
- package/src/extensions/ferment/fsm-adapter.test.ts +43 -0
- package/src/extensions/ferment/fsm-adapter.ts +112 -0
- package/src/extensions/ferment/gate-registry.test.ts +176 -0
- package/src/extensions/ferment/gate-registry.ts +352 -0
- package/src/extensions/ferment/gate-validation.test.ts +319 -0
- package/src/extensions/ferment/gate-validation.ts +160 -0
- package/src/extensions/ferment/git-init.test.ts +146 -0
- package/src/extensions/ferment/git-init.ts +66 -0
- package/src/extensions/ferment/index.test.ts +1439 -0
- package/src/extensions/ferment/index.ts +337 -0
- package/src/extensions/ferment/judge.test.ts +172 -0
- package/src/extensions/ferment/judge.ts +342 -0
- package/src/extensions/ferment/nudge.test.ts +700 -0
- package/src/extensions/ferment/nudge.ts +332 -0
- package/src/extensions/ferment/oneshot.test.ts +115 -0
- package/src/extensions/ferment/oneshot.ts +52 -0
- package/src/extensions/ferment/pending-proposal-store.test.ts +272 -0
- package/src/extensions/ferment/pending-proposal-store.ts +142 -0
- package/src/extensions/ferment/phase-editor.test.ts +174 -0
- package/src/extensions/ferment/phase-editor.ts +148 -0
- package/src/extensions/ferment/phase-evidence.test.ts +154 -0
- package/src/extensions/ferment/phase-evidence.ts +179 -0
- package/src/extensions/ferment/plan-review-trigger.ts +34 -0
- package/src/extensions/ferment/plan-review.test.ts +182 -0
- package/src/extensions/ferment/plan-review.ts +205 -0
- package/src/extensions/ferment/progress-overlay.test.ts +197 -0
- package/src/extensions/ferment/progress-overlay.ts +326 -0
- package/src/extensions/ferment/project-tests.test.ts +160 -0
- package/src/extensions/ferment/project-tests.ts +246 -0
- package/src/extensions/ferment/prompt-block.test.ts +501 -0
- package/src/extensions/ferment/prompt-block.ts +203 -0
- package/src/extensions/ferment/prompt-ui.test.ts +311 -0
- package/src/extensions/ferment/prompt-ui.ts +302 -0
- package/src/extensions/ferment/resume.test.ts +218 -0
- package/src/extensions/ferment/resume.ts +180 -0
- package/src/extensions/ferment/review-evidence.ts +269 -0
- package/src/extensions/ferment/runtime-state-store.test.ts +148 -0
- package/src/extensions/ferment/runtime-state-store.ts +132 -0
- package/src/extensions/ferment/runtime.test.ts +38 -0
- package/src/extensions/ferment/runtime.ts +208 -0
- package/src/extensions/ferment/scheduler.ts +226 -0
- package/src/extensions/ferment/scoping-benchmark.test.ts +137 -0
- package/src/extensions/ferment/scoping-confirmation.test.ts +209 -0
- package/src/extensions/ferment/scoping-confirmation.ts +87 -0
- package/src/extensions/ferment/scoping-flow.integration.test.ts +203 -0
- package/src/extensions/ferment/scoping.test.ts +235 -0
- package/src/extensions/ferment/scoping.ts +208 -0
- package/src/extensions/ferment/state.test.ts +300 -0
- package/src/extensions/ferment/state.ts +696 -0
- package/src/extensions/ferment/tips.test.ts +171 -0
- package/src/extensions/ferment/tips.ts +61 -0
- package/src/extensions/ferment/todo-headless-wiring.test.ts +641 -0
- package/src/extensions/ferment/todo-sync.test.ts +805 -0
- package/src/extensions/ferment/todo-sync.ts +520 -0
- package/src/extensions/ferment/tool-helpers.test.ts +121 -0
- package/src/extensions/ferment/tool-helpers.ts +217 -0
- package/src/extensions/ferment/tool-names.test.ts +55 -0
- package/src/extensions/ferment/tool-names.ts +78 -0
- package/src/extensions/ferment/tool-schemas.test.ts +587 -0
- package/src/extensions/ferment/tool-schemas.ts +428 -0
- package/src/extensions/ferment/tool-scope.test.ts +373 -0
- package/src/extensions/ferment/tool-scope.ts +176 -0
- package/src/extensions/ferment/tools/knowledge.ts +60 -0
- package/src/extensions/ferment/tools/lifecycle.test.ts +1196 -0
- package/src/extensions/ferment/tools/lifecycle.ts +1296 -0
- package/src/extensions/ferment/tools/phases.test.ts +379 -0
- package/src/extensions/ferment/tools/phases.ts +757 -0
- package/src/extensions/ferment/tools/steps.test.ts +998 -0
- package/src/extensions/ferment/tools/steps.ts +765 -0
- package/src/extensions/ferment/tools.integration.test.ts +1975 -0
- package/src/extensions/ferment/ui.ts +10 -0
- package/src/extensions/ferment/worker-prompt.test.ts +285 -0
- package/src/extensions/ferment/worker-prompt.ts +85 -0
- package/src/extensions/ferment/worktree.ts +44 -0
- package/src/extensions/format.ts +12 -0
- package/src/extensions/help.ts +172 -0
- package/src/extensions/hide-thinking.test.ts +407 -0
- package/src/extensions/hide-thinking.ts +375 -0
- package/src/extensions/hook-adapters/adapter.integration.test.ts +134 -0
- package/src/extensions/hook-adapters/adapter.test.ts +1062 -0
- package/src/extensions/hook-adapters/adapter.ts +784 -0
- package/src/extensions/hook-adapters/discovery.test.ts +105 -0
- package/src/extensions/hook-adapters/discovery.ts +213 -0
- package/src/extensions/ide-adapter/ARCHITECTURE.md +77 -0
- package/src/extensions/ide-adapter/CONTRACT.md +129 -0
- package/src/extensions/ide-adapter/README.md +24 -0
- package/src/extensions/ide-adapter/at-mentions.test.ts +40 -0
- package/src/extensions/ide-adapter/at-mentions.ts +44 -0
- package/src/extensions/ide-adapter/index.test.ts +434 -0
- package/src/extensions/ide-adapter/index.ts +250 -0
- package/src/extensions/ide-adapter/lockfile.test.ts +137 -0
- package/src/extensions/ide-adapter/lockfile.ts +82 -0
- package/src/extensions/ide-adapter/mcp-client.test.ts +285 -0
- package/src/extensions/ide-adapter/mcp-client.ts +208 -0
- package/src/extensions/ide-adapter/types.ts +47 -0
- package/src/extensions/ikie-minimal-tints.ts +124 -0
- package/src/extensions/ikie-process.ts +49 -0
- package/src/extensions/improve/SKILL.md +51 -0
- package/src/extensions/improve/index.ts +72 -0
- package/src/extensions/input-history.test.ts +475 -0
- package/src/extensions/input-history.ts +111 -0
- package/src/extensions/llm-response-log.test.ts +200 -0
- package/src/extensions/llm-response-log.ts +87 -0
- package/src/extensions/login/flow.test.ts +47 -0
- package/src/extensions/login/flow.ts +638 -0
- package/src/extensions/login/index.ts +57 -0
- package/src/extensions/login/startup-auth.test.ts +510 -0
- package/src/extensions/login/startup-auth.ts +205 -0
- package/src/extensions/loop-guard.test.ts +993 -0
- package/src/extensions/loop-guard.ts +710 -0
- package/src/extensions/lsp/client.ts +501 -0
- package/src/extensions/lsp/edits.test.ts +69 -0
- package/src/extensions/lsp/edits.ts +78 -0
- package/src/extensions/lsp/lsp-entry.test.ts +24 -0
- package/src/extensions/lsp/servers.ts +76 -0
- package/src/extensions/lsp/types.ts +166 -0
- package/src/extensions/lsp/utils.test.ts +81 -0
- package/src/extensions/lsp/utils.ts +80 -0
- package/src/extensions/lsp.test.ts +1049 -0
- package/src/extensions/lsp.ts +470 -0
- package/src/extensions/mcp-adapter/CHANGELOG.md +264 -0
- package/src/extensions/mcp-adapter/LICENSE +21 -0
- package/src/extensions/mcp-adapter/README.md +316 -0
- package/src/extensions/mcp-adapter/app-bridge.bundle.js +10430 -0
- package/src/extensions/mcp-adapter/bm25.ts +187 -0
- package/src/extensions/mcp-adapter/cache-resolver.integration.test.ts +282 -0
- package/src/extensions/mcp-adapter/commands.ts +235 -0
- package/src/extensions/mcp-adapter/config.test.ts +189 -0
- package/src/extensions/mcp-adapter/config.ts +233 -0
- package/src/extensions/mcp-adapter/consent-manager.ts +64 -0
- package/src/extensions/mcp-adapter/context-providers.test.ts +123 -0
- package/src/extensions/mcp-adapter/context-providers.ts +55 -0
- package/src/extensions/mcp-adapter/direct-tool-visibility.test.ts +61 -0
- package/src/extensions/mcp-adapter/direct-tool-visibility.ts +47 -0
- package/src/extensions/mcp-adapter/direct-tools.ts +413 -0
- package/src/extensions/mcp-adapter/errors.ts +198 -0
- package/src/extensions/mcp-adapter/glimpse-ui.ts +78 -0
- package/src/extensions/mcp-adapter/host-html-template.ts +423 -0
- package/src/extensions/mcp-adapter/index.test.ts +323 -0
- package/src/extensions/mcp-adapter/index.ts +604 -0
- package/src/extensions/mcp-adapter/init.ts +402 -0
- package/src/extensions/mcp-adapter/lifecycle.ts +93 -0
- package/src/extensions/mcp-adapter/logger.ts +169 -0
- package/src/extensions/mcp-adapter/mcp-auth-flow.ts +394 -0
- package/src/extensions/mcp-adapter/mcp-auth.ts +267 -0
- package/src/extensions/mcp-adapter/mcp-callback-server.ts +284 -0
- package/src/extensions/mcp-adapter/mcp-oauth-provider.ts +288 -0
- package/src/extensions/mcp-adapter/mcp-panel.test.ts +321 -0
- package/src/extensions/mcp-adapter/mcp-panel.ts +835 -0
- package/src/extensions/mcp-adapter/metadata-cache.test.ts +83 -0
- package/src/extensions/mcp-adapter/metadata-cache.ts +332 -0
- package/src/extensions/mcp-adapter/npx-resolver.ts +429 -0
- package/src/extensions/mcp-adapter/oauth-handler.ts +57 -0
- package/src/extensions/mcp-adapter/proxy-modes.test.ts +147 -0
- package/src/extensions/mcp-adapter/proxy-modes.ts +1035 -0
- package/src/extensions/mcp-adapter/resource-tools.ts +17 -0
- package/src/extensions/mcp-adapter/server-manager.ts +355 -0
- package/src/extensions/mcp-adapter/state.ts +45 -0
- package/src/extensions/mcp-adapter/tool-metadata.test.ts +115 -0
- package/src/extensions/mcp-adapter/tool-metadata.ts +185 -0
- package/src/extensions/mcp-adapter/tool-registrar.ts +46 -0
- package/src/extensions/mcp-adapter/types.ts +423 -0
- package/src/extensions/mcp-adapter/ui-resource-handler.ts +143 -0
- package/src/extensions/mcp-adapter/ui-server.ts +619 -0
- package/src/extensions/mcp-adapter/ui-session.ts +378 -0
- package/src/extensions/mcp-adapter/ui-stream-types.ts +93 -0
- package/src/extensions/mcp-adapter/utils.ts +76 -0
- package/src/extensions/model-catalog/builtin-models.ts +180 -0
- package/src/extensions/model-catalog/guidelines/claude-family.ts +49 -0
- package/src/extensions/model-catalog/guidelines/default-orchestration-guidelines.ts +11 -0
- package/src/extensions/model-catalog/guidelines/default-phase-guidelines.ts +59 -0
- package/src/extensions/model-catalog/guidelines/guidelines-resolver.test.ts +191 -0
- package/src/extensions/model-catalog/guidelines/guidelines-resolver.ts +39 -0
- package/src/extensions/model-catalog/guidelines/kimi-family.ts +82 -0
- package/src/extensions/model-catalog/guidelines/minimax-family.ts +62 -0
- package/src/extensions/model-catalog/guidelines/nemotron-family.ts +53 -0
- package/src/extensions/model-catalog/index.ts +10 -0
- package/src/extensions/model-catalog/model-metadata.test.ts +688 -0
- package/src/extensions/model-catalog/model-metadata.ts +250 -0
- package/src/extensions/model-catalog/model-registry.test.ts +228 -0
- package/src/extensions/model-catalog/model-registry.ts +116 -0
- package/src/extensions/model-catalog/ref-utils.ts +22 -0
- package/src/extensions/model-catalog/types.ts +41 -0
- package/src/extensions/model-guard.test.ts +756 -0
- package/src/extensions/model-guard.ts +402 -0
- package/src/extensions/model-switch.test.ts +1105 -0
- package/src/extensions/model-switch.ts +261 -0
- package/src/extensions/onboarding/picker-editor.ts +22 -0
- package/src/extensions/onboarding/session-mode-picker.test.ts +135 -0
- package/src/extensions/onboarding/session-mode-picker.ts +136 -0
- package/src/extensions/onboarding/session-mode-startup.test.ts +237 -0
- package/src/extensions/onboarding/session-mode-startup.ts +36 -0
- package/src/extensions/onboarding/session-mode.test.ts +501 -0
- package/src/extensions/onboarding/session-mode.ts +363 -0
- package/src/extensions/orchestration/continuation-nudge.test.ts +595 -0
- package/src/extensions/orchestration/continuation-nudge.ts +270 -0
- package/src/extensions/orchestration/model-metadata.test.ts +671 -0
- package/src/extensions/orchestration/model-metadata.ts +246 -0
- package/src/extensions/orchestration/model-ref-utils.ts +5 -0
- package/src/extensions/orchestration/model-registry/builtin-models.ts +223 -0
- package/src/extensions/orchestration/model-registry/guidelines/claude-family.ts +49 -0
- package/src/extensions/orchestration/model-registry/guidelines/default-orchestration-guidelines.ts +11 -0
- package/src/extensions/orchestration/model-registry/guidelines/default-phase-guidelines.ts +67 -0
- package/src/extensions/orchestration/model-registry/guidelines/guidelines-resolver.test.ts +273 -0
- package/src/extensions/orchestration/model-registry/guidelines/guidelines-resolver.ts +39 -0
- package/src/extensions/orchestration/model-registry/guidelines/kimi-family.ts +89 -0
- package/src/extensions/orchestration/model-registry/guidelines/minimax-family.ts +68 -0
- package/src/extensions/orchestration/model-registry/guidelines/nemotron-family.ts +60 -0
- package/src/extensions/orchestration/model-registry/index.ts +4 -0
- package/src/extensions/orchestration/model-registry/model-registry.test.ts +228 -0
- package/src/extensions/orchestration/model-registry/model-registry.ts +116 -0
- package/src/extensions/orchestration/model-registry/types.ts +41 -0
- package/src/extensions/orchestration/model-roles-command.test.ts +367 -0
- package/src/extensions/orchestration/model-roles-command.ts +531 -0
- package/src/extensions/orchestration/model-roles.test.ts +448 -0
- package/src/extensions/orchestration/model-roles.ts +302 -0
- package/src/extensions/orchestration/orchestration-instructions.test.ts +459 -0
- package/src/extensions/orchestration/orchestration-instructions.ts +614 -0
- package/src/extensions/orphan-tool-result-sanitizer.test.ts +198 -0
- package/src/extensions/orphan-tool-result-sanitizer.ts +128 -0
- package/src/extensions/permissions/classifier-model.test.ts +127 -0
- package/src/extensions/permissions/classifier-model.ts +65 -0
- package/src/extensions/permissions/classifier.test.ts +334 -0
- package/src/extensions/permissions/classifier.ts +228 -0
- package/src/extensions/permissions/commands.ts +244 -0
- package/src/extensions/permissions/config.test.ts +101 -0
- package/src/extensions/permissions/config.ts +143 -0
- package/src/extensions/permissions/constants.ts +1 -0
- package/src/extensions/permissions/index.test.ts +1822 -0
- package/src/extensions/permissions/index.ts +1193 -0
- package/src/extensions/permissions/keybindings.test.ts +130 -0
- package/src/extensions/permissions/keybindings.ts +91 -0
- package/src/extensions/permissions/mode-controller-registry.ts +50 -0
- package/src/extensions/permissions/mode-controller.ts +91 -0
- package/src/extensions/permissions/mode.test.ts +51 -0
- package/src/extensions/permissions/mode.ts +29 -0
- package/src/extensions/permissions/plan-persistence.test.ts +56 -0
- package/src/extensions/permissions/plan-persistence.ts +12 -0
- package/src/extensions/permissions/plan-persona.test.ts +42 -0
- package/src/extensions/permissions/prompter.ts +21 -0
- package/src/extensions/permissions/prompts/classifier-system-prompt.ts +33 -0
- package/src/extensions/permissions/prompts/plan-mode-supplement.test.ts +59 -0
- package/src/extensions/permissions/prompts/plan-mode-supplement.ts +38 -0
- package/src/extensions/permissions/prompts.test.ts +67 -0
- package/src/extensions/permissions/prompts.ts +212 -0
- package/src/extensions/permissions/rules.test.ts +327 -0
- package/src/extensions/permissions/rules.ts +210 -0
- package/src/extensions/permissions/select-utils.ts +2 -0
- package/src/extensions/permissions/session-memory.test.ts +75 -0
- package/src/extensions/permissions/session-memory.ts +94 -0
- package/src/extensions/permissions/taxonomy.test.ts +684 -0
- package/src/extensions/permissions/taxonomy.ts +616 -0
- package/src/extensions/permissions/types.ts +70 -0
- package/src/extensions/pi-compat.test.ts +201 -0
- package/src/extensions/pi-package-lookup/index.test.ts +177 -0
- package/src/extensions/pi-package-lookup/index.ts +263 -0
- package/src/extensions/pi-package-lookup/native-compat.test.ts +230 -0
- package/src/extensions/pi-package-lookup/native-compat.ts +279 -0
- package/src/extensions/plugin-package-hook-adapter/definition.test.ts +220 -0
- package/src/extensions/plugin-package-hook-adapter/definition.ts +60 -0
- package/src/extensions/plugin-package-hook-adapter/index.ts +4 -0
- package/src/extensions/prompt-construction/context-files.test.ts +167 -0
- package/src/extensions/prompt-construction/context-files.ts +111 -0
- package/src/extensions/prompt-construction/index.ts +8 -0
- package/src/extensions/prompt-construction/prompt-enrichment.test.ts +1103 -0
- package/src/extensions/prompt-construction/prompt-enrichment.ts +588 -0
- package/src/extensions/prompt-construction/system-prompt-blocks.test.ts +323 -0
- package/src/extensions/prompt-construction/system-prompt-blocks.ts +122 -0
- package/src/extensions/prompt-construction/system-prompt.test.ts +528 -0
- package/src/extensions/prompt-construction/system-prompt.ts +316 -0
- package/src/extensions/prompt-construction/tool-visibility.test.ts +170 -0
- package/src/extensions/prompt-construction/tool-visibility.ts +121 -0
- package/src/extensions/prompt-summary.test.ts +56 -0
- package/src/extensions/prompt-summary.ts +258 -0
- package/src/extensions/questionnaire/constants.ts +6 -0
- package/src/extensions/questionnaire/index.ts +8 -0
- package/src/extensions/questionnaire/questionnaire-fallback.test.ts +948 -0
- package/src/extensions/questionnaire/questionnaire-fallback.ts +230 -0
- package/src/extensions/questionnaire/questionnaire-form.ts +314 -0
- package/src/extensions/questionnaire/questionnaire-reducer.test.ts +508 -0
- package/src/extensions/questionnaire/questionnaire-reducer.ts +510 -0
- package/src/extensions/questionnaire/questionnaire.test.ts +425 -0
- package/src/extensions/questionnaire/questionnaire.ts +280 -0
- package/src/extensions/report-bug.test.ts +301 -0
- package/src/extensions/report-bug.ts +93 -0
- package/src/extensions/review-write-guard.integration.test.ts +167 -0
- package/src/extensions/review-write-guard.test.ts +150 -0
- package/src/extensions/review-write-guard.ts +143 -0
- package/src/extensions/rtk-rewrite.test.ts +325 -0
- package/src/extensions/rtk-rewrite.ts +201 -0
- package/src/extensions/session-metadata/index.test.ts +158 -0
- package/src/extensions/session-metadata/index.ts +66 -0
- package/src/extensions/session-name.test.ts +248 -0
- package/src/extensions/session-name.ts +192 -0
- package/src/extensions/session-repair/orphan-tool-result-repair.test.ts +227 -0
- package/src/extensions/session-repair/orphan-tool-result-repair.ts +183 -0
- package/src/extensions/shared-footer.ts +24 -0
- package/src/extensions/shared-input.test.ts +27 -0
- package/src/extensions/shared-input.ts +24 -0
- package/src/extensions/shutdown-marker.test.ts +195 -0
- package/src/extensions/shutdown-marker.ts +61 -0
- package/src/extensions/skills-manager/index.test.ts +17 -0
- package/src/extensions/skills-manager/index.ts +18 -0
- package/src/extensions/skills-manager/skill-manager.test.ts +350 -0
- package/src/extensions/skills-manager/skill-manager.ts +508 -0
- package/src/extensions/skills-manager/tool.test.ts +234 -0
- package/src/extensions/skills-manager/tool.ts +241 -0
- package/src/extensions/skills-manager/usage.test.ts +119 -0
- package/src/extensions/skills-manager/usage.ts +249 -0
- package/src/extensions/slash-commands.ts +22 -0
- package/src/extensions/spinner.ts +117 -0
- package/src/extensions/stale-ctx.ts +15 -0
- package/src/extensions/startup-update.test.ts +130 -0
- package/src/extensions/startup-update.ts +33 -0
- package/src/extensions/stats/api.ts +168 -0
- package/src/extensions/stats/display.ts +210 -0
- package/src/extensions/stats/index.ts +130 -0
- package/src/extensions/stats/stats.test.ts +547 -0
- package/src/extensions/stats/types.ts +263 -0
- package/src/extensions/stats/visual.ts +439 -0
- package/src/extensions/strip-images.test.ts +118 -0
- package/src/extensions/strip-images.ts +162 -0
- package/src/extensions/superpowers/config.ts +10 -0
- package/src/extensions/superpowers.test.ts +17 -0
- package/src/extensions/superpowers.ts +5 -0
- package/src/extensions/surveys/index.test.ts +200 -0
- package/src/extensions/surveys/index.ts +107 -0
- package/src/extensions/surveys/survey.test.ts +157 -0
- package/src/extensions/surveys/survey.ts +204 -0
- package/src/extensions/tags.test.ts +275 -0
- package/src/extensions/tags.ts +662 -0
- package/src/extensions/telemetry/README.md +113 -0
- package/src/extensions/telemetry/accumulator.test.ts +260 -0
- package/src/extensions/telemetry/accumulator.ts +146 -0
- package/src/extensions/telemetry/config-snapshot.test.ts +259 -0
- package/src/extensions/telemetry/config-snapshot.ts +177 -0
- package/src/extensions/telemetry/handlers/messages.test.ts +422 -0
- package/src/extensions/telemetry/handlers/messages.ts +113 -0
- package/src/extensions/telemetry/handlers/session.test.ts +198 -0
- package/src/extensions/telemetry/handlers/session.ts +24 -0
- package/src/extensions/telemetry/handlers/tools.test.ts +416 -0
- package/src/extensions/telemetry/handlers/tools.ts +171 -0
- package/src/extensions/telemetry/handlers/transport-errors.test.ts +178 -0
- package/src/extensions/telemetry/handlers/transport-errors.ts +42 -0
- package/src/extensions/telemetry/helpers.test.ts +266 -0
- package/src/extensions/telemetry/helpers.ts +146 -0
- package/src/extensions/telemetry/index.test.ts +1170 -0
- package/src/extensions/telemetry/index.ts +609 -0
- package/src/extensions/telemetry/pre-session.test.ts +390 -0
- package/src/extensions/telemetry/pre-session.ts +135 -0
- package/src/extensions/telemetry/session-context.test.ts +487 -0
- package/src/extensions/telemetry/session-context.ts +281 -0
- package/src/extensions/telemetry/session-type.ts +5 -0
- package/src/extensions/telemetry/settings-change-emitter.test.ts +197 -0
- package/src/extensions/telemetry/settings-change-emitter.ts +127 -0
- package/src/extensions/telemetry/survey.test.ts +140 -0
- package/src/extensions/telemetry/survey.ts +70 -0
- package/src/extensions/telemetry/transport.test.ts +301 -0
- package/src/extensions/telemetry/transport.ts +217 -0
- package/src/extensions/teleport/commands/args.test.ts +166 -0
- package/src/extensions/teleport/commands/args.ts +226 -0
- package/src/extensions/teleport/commands/attach.test.ts +209 -0
- package/src/extensions/teleport/commands/attach.ts +91 -0
- package/src/extensions/teleport/commands/errors.ts +26 -0
- package/src/extensions/teleport/commands/remote-sessions.test.ts +350 -0
- package/src/extensions/teleport/commands/remote-sessions.ts +193 -0
- package/src/extensions/teleport/commands/ssh-config.ts +25 -0
- package/src/extensions/teleport/commands/sync.test.ts +104 -0
- package/src/extensions/teleport/commands/sync.ts +205 -0
- package/src/extensions/teleport/commands/teleport.test.ts +593 -0
- package/src/extensions/teleport/commands/teleport.ts +359 -0
- package/src/extensions/teleport/commands/terminal.test.ts +228 -0
- package/src/extensions/teleport/commands/terminal.ts +97 -0
- package/src/extensions/teleport/commands/workspace-ref.test.ts +269 -0
- package/src/extensions/teleport/commands/workspace-ref.ts +105 -0
- package/src/extensions/teleport/index.test.ts +72 -0
- package/src/extensions/teleport/index.ts +66 -0
- package/src/extensions/teleport/overlay/keybindings.test.ts +101 -0
- package/src/extensions/teleport/overlay/keybindings.ts +65 -0
- package/src/extensions/teleport/overlay/overlay-component.test.ts +102 -0
- package/src/extensions/teleport/overlay/overlay-component.ts +284 -0
- package/src/extensions/teleport/overlay/reconnect-banner.test.ts +63 -0
- package/src/extensions/teleport/overlay/reconnect-banner.ts +69 -0
- package/src/extensions/teleport/overlay/tab-bar.test.ts +72 -0
- package/src/extensions/teleport/overlay/tab-bar.ts +146 -0
- package/src/extensions/teleport/overlay/tab-manager.test.ts +484 -0
- package/src/extensions/teleport/overlay/tab-manager.ts +293 -0
- package/src/extensions/teleport/preflight/git.test.ts +94 -0
- package/src/extensions/teleport/preflight/git.ts +40 -0
- package/src/extensions/teleport/preflight/index.test.ts +97 -0
- package/src/extensions/teleport/preflight/index.ts +43 -0
- package/src/extensions/teleport/preflight/rsync.test.ts +39 -0
- package/src/extensions/teleport/preflight/rsync.ts +23 -0
- package/src/extensions/teleport/preflight/workspace-size.ts +2 -0
- package/src/extensions/teleport/provisioning/concurrency.ts +40 -0
- package/src/extensions/teleport/provisioning/constants.ts +3 -0
- package/src/extensions/teleport/provisioning/estimate-bytes.test.ts +107 -0
- package/src/extensions/teleport/provisioning/estimate-bytes.ts +123 -0
- package/src/extensions/teleport/provisioning/git-provision.test.ts +76 -0
- package/src/extensions/teleport/provisioning/git-provision.ts +54 -0
- package/src/extensions/teleport/provisioning/include-list.test.ts +222 -0
- package/src/extensions/teleport/provisioning/include-list.ts +203 -0
- package/src/extensions/teleport/provisioning/paths.ts +54 -0
- package/src/extensions/teleport/provisioning/proxy-command.ts +30 -0
- package/src/extensions/teleport/provisioning/rsync-runner.test.ts +544 -0
- package/src/extensions/teleport/provisioning/rsync-runner.ts +675 -0
- package/src/extensions/teleport/pty/mouse-capture.ts +7 -0
- package/src/extensions/teleport/pty/reconnect-supervisor.ts +117 -0
- package/src/extensions/teleport/pty/terminal-component.test.ts +282 -0
- package/src/extensions/teleport/pty/terminal-component.ts +331 -0
- package/src/extensions/teleport/pty/websocket-transport.test.ts +440 -0
- package/src/extensions/teleport/pty/websocket-transport.ts +228 -0
- package/src/extensions/teleport/pty/xterm-core.test.ts +79 -0
- package/src/extensions/teleport/pty/xterm-core.ts +159 -0
- package/src/extensions/teleport/session-filter.ts +10 -0
- package/src/extensions/teleport/ssh-config/paths.ts +27 -0
- package/src/extensions/teleport/ssh-config/render.test.ts +111 -0
- package/src/extensions/teleport/ssh-config/render.ts +97 -0
- package/src/extensions/teleport/ssh-config/sync.test.ts +170 -0
- package/src/extensions/teleport/ssh-config/sync.ts +92 -0
- package/src/extensions/teleport/types.ts +14 -0
- package/src/extensions/teleport/ui/format-bytes.ts +13 -0
- package/src/extensions/teleport/ui/git-token-prompt.ts +164 -0
- package/src/extensions/teleport/ui/help-modal.ts +100 -0
- package/src/extensions/teleport/ui/progress.test.ts +236 -0
- package/src/extensions/teleport/ui/progress.ts +345 -0
- package/src/extensions/teleport/ui/remote-sessions-panel.test.ts +221 -0
- package/src/extensions/teleport/ui/remote-sessions-panel.ts +309 -0
- package/src/extensions/teleport/ui/sessions-table.ts +24 -0
- package/src/extensions/teleport/ui/sync-progress-row.ts +30 -0
- package/src/extensions/teleport/ui/tty-handoff.ts +131 -0
- package/src/extensions/teleport/ui/workspaces-panel.test.ts +307 -0
- package/src/extensions/teleport/ui/workspaces-panel.ts +364 -0
- package/src/extensions/teleport/ui/workspaces-table.ts +12 -0
- package/src/extensions/terminal-colors.ts +256 -0
- package/src/extensions/terminal-compat/keyboard-capability.test.ts +69 -0
- package/src/extensions/terminal-compat/keyboard-capability.ts +103 -0
- package/src/extensions/terminal-compat/startup-warning.test.ts +273 -0
- package/src/extensions/terminal-compat/startup-warning.ts +77 -0
- package/src/extensions/theme-selector.test.ts +297 -0
- package/src/extensions/theme-selector.ts +156 -0
- package/src/extensions/thinking-steps/index.ts +429 -0
- package/src/extensions/thinking-steps/internal-patch.ts +483 -0
- package/src/extensions/thinking-steps/parse.ts +1376 -0
- package/src/extensions/thinking-steps/persistence.ts +95 -0
- package/src/extensions/thinking-steps/render.ts +496 -0
- package/src/extensions/thinking-steps/state.ts +482 -0
- package/src/extensions/thinking-steps/types.ts +55 -0
- package/src/extensions/tips/general-tips.test.ts +33 -0
- package/src/extensions/tips/general-tips.ts +81 -0
- package/src/extensions/tips/index.test.ts +198 -0
- package/src/extensions/tips/index.ts +231 -0
- package/src/extensions/tips/presenter.test.ts +160 -0
- package/src/extensions/tips/presenter.ts +170 -0
- package/src/extensions/tips/registry.test.ts +59 -0
- package/src/extensions/tips/registry.ts +66 -0
- package/src/extensions/tips/tip-row.test.ts +97 -0
- package/src/extensions/tips/tip-row.ts +48 -0
- package/src/extensions/tips/tips-panel.test.ts +222 -0
- package/src/extensions/tips/tips-panel.ts +310 -0
- package/src/extensions/tips/types.ts +21 -0
- package/src/extensions/todos/command.test.ts +103 -0
- package/src/extensions/todos/command.ts +266 -0
- package/src/extensions/todos/constants.ts +1 -0
- package/src/extensions/todos/index.test.ts +405 -0
- package/src/extensions/todos/index.ts +238 -0
- package/src/extensions/todos/prompt-block.test.ts +219 -0
- package/src/extensions/todos/prompt-block.ts +176 -0
- package/src/extensions/todos/reducer.test.ts +141 -0
- package/src/extensions/todos/reducer.ts +155 -0
- package/src/extensions/todos/scope.test.ts +42 -0
- package/src/extensions/todos/scope.ts +109 -0
- package/src/extensions/todos/store.test.ts +78 -0
- package/src/extensions/todos/store.ts +92 -0
- package/src/extensions/todos/tool.test.ts +84 -0
- package/src/extensions/todos/tool.ts +240 -0
- package/src/extensions/todos/types.ts +79 -0
- package/src/extensions/todos/widget.test.ts +348 -0
- package/src/extensions/todos/widget.ts +332 -0
- package/src/extensions/tool-grouping.test.ts +387 -0
- package/src/extensions/tool-grouping.ts +346 -0
- package/src/extensions/tool-rendering.test.ts +401 -0
- package/src/extensions/tool-rendering.ts +4511 -0
- package/src/extensions/trace-id.test.ts +230 -0
- package/src/extensions/trace-id.ts +46 -0
- package/src/extensions/ui-branch-poll.test.ts +164 -0
- package/src/extensions/ui-branch-poll.ts +57 -0
- package/src/extensions/ui.test.ts +185 -0
- package/src/extensions/ui.ts +649 -0
- package/src/extensions/web-fetch/browser-pool.test.ts +237 -0
- package/src/extensions/web-fetch/browser-pool.ts +145 -0
- package/src/extensions/web-fetch/cache.test.ts +196 -0
- package/src/extensions/web-fetch/cache.ts +114 -0
- package/src/extensions/web-fetch/content-converter.test.ts +341 -0
- package/src/extensions/web-fetch/content-converter.ts +188 -0
- package/src/extensions/web-fetch/execute-handler.test.ts +384 -0
- package/src/extensions/web-fetch/execute-handler.ts +131 -0
- package/src/extensions/web-fetch/index.ts +113 -0
- package/src/extensions/web-fetch/integration.test.ts +618 -0
- package/src/extensions/web-fetch/page-fetcher.test.ts +532 -0
- package/src/extensions/web-fetch/page-fetcher.ts +358 -0
- package/src/extensions/web-fetch/url-validator.test.ts +230 -0
- package/src/extensions/web-fetch/url-validator.ts +153 -0
- package/src/extensions/web-search/execute-handler.test.ts +216 -0
- package/src/extensions/web-search/execute-handler.ts +151 -0
- package/src/extensions/web-search/index.ts +107 -0
- package/src/ferment/engine.test.ts +279 -0
- package/src/ferment/engine.ts +320 -0
- package/src/ferment/event-mapper.ts +313 -0
- package/src/ferment/event-store.property.test.ts +240 -0
- package/src/ferment/event-store.test.ts +780 -0
- package/src/ferment/event-store.ts +1332 -0
- package/src/ferment/fsm.test.ts +630 -0
- package/src/ferment/fsm.ts +466 -0
- package/src/ferment/lifecycle.ts +35 -0
- package/src/ferment/state-machine.test.ts +1215 -0
- package/src/ferment/state-machine.ts +994 -0
- package/src/ferment/stats.test.ts +31 -0
- package/src/ferment/stats.ts +334 -0
- package/src/ferment/store.test.ts +543 -0
- package/src/ferment/store.ts +906 -0
- package/src/ferment/success-criteria.ts +51 -0
- package/src/ferment/text.ts +11 -0
- package/src/ferment/title.test.ts +35 -0
- package/src/ferment/title.ts +28 -0
- package/src/ferment/types.ts +277 -0
- package/src/fs-paths.test.ts +104 -0
- package/src/fs-paths.ts +112 -0
- package/src/integrations/__fixtures__/models.ts +72 -0
- package/src/integrations/bun-sqlite.d.ts +22 -0
- package/src/integrations/claude-code.test.ts +488 -0
- package/src/integrations/claude-code.ts +221 -0
- package/src/integrations/constants.ts +9 -0
- package/src/integrations/cursor.test.ts +91 -0
- package/src/integrations/cursor.ts +188 -0
- package/src/integrations/detect.ts +92 -0
- package/src/integrations/gsd2.test.ts +146 -0
- package/src/integrations/gsd2.ts +162 -0
- package/src/integrations/models.ts +212 -0
- package/src/integrations/openclaw.test.ts +314 -0
- package/src/integrations/openclaw.ts +276 -0
- package/src/integrations/opencode.test.ts +216 -0
- package/src/integrations/opencode.ts +226 -0
- package/src/integrations/provider/opencode.ts +37 -0
- package/src/integrations/registry.test.ts +43 -0
- package/src/integrations/registry.ts +33 -0
- package/src/integrations/spawn.ts +88 -0
- package/src/integrations/types.ts +35 -0
- package/src/login-command-patch.test.ts +609 -0
- package/src/login-command-patch.ts +299 -0
- package/src/models.test.ts +827 -0
- package/src/models.ts +379 -0
- package/src/modes/acp/acp-prompter.ts +64 -0
- package/src/modes/acp/acp-ui-context.test.ts +1001 -0
- package/src/modes/acp/acp-ui-context.ts +435 -0
- package/src/modes/acp/capabilities.ts +36 -0
- package/src/modes/acp/commands.test.ts +29 -0
- package/src/modes/acp/commands.ts +19 -0
- package/src/modes/acp/permission-prompter-registry.ts +17 -0
- package/src/modes/acp/server.test.ts +4392 -0
- package/src/modes/acp/server.ts +1569 -0
- package/src/modes/acp/utils.ts +10 -0
- package/src/oauth-page-patch.test.ts +84 -0
- package/src/ollama.test.ts +1469 -0
- package/src/ollama.ts +491 -0
- package/src/paste-interceptor.test.ts +179 -0
- package/src/paste-interceptor.ts +61 -0
- package/src/paste-to-editor-patch.test.ts +24 -0
- package/src/paste-to-editor-patch.ts +27 -0
- package/src/posthog-device.ts +31 -0
- package/src/proxy.test.ts +36 -0
- package/src/proxy.ts +36 -0
- package/src/resources/bash-hook-discovery.ts +69 -0
- package/src/resources/bash-hooks.test.ts +93 -0
- package/src/resources/bash-hooks.ts +109 -0
- package/src/resources/claude-code-hook-resources.ts +35 -0
- package/src/resources/definitions.test.ts +92 -0
- package/src/resources/definitions.ts +149 -0
- package/src/resources/extension.test.ts +168 -0
- package/src/resources/extension.ts +114 -0
- package/src/resources/filter.ts +11 -0
- package/src/resources/package-resources.test.ts +234 -0
- package/src/resources/package-resources.ts +152 -0
- package/src/resources/rtk-install.test.ts +37 -0
- package/src/resources/rtk-install.ts +289 -0
- package/src/resources/store.test.ts +118 -0
- package/src/resources/store.ts +76 -0
- package/src/resources/tool-blocker.ts +14 -0
- package/src/resources/types.ts +23 -0
- package/src/resources/ui.test.ts +74 -0
- package/src/resources/ui.ts +221 -0
- package/src/sandbox/cloud/auth.test.ts +219 -0
- package/src/sandbox/cloud/auth.ts +127 -0
- package/src/sandbox/cloud/http.test.ts +88 -0
- package/src/sandbox/cloud/http.ts +46 -0
- package/src/sandbox/cloud/index.ts +18 -0
- package/src/sandbox/cloud/keys.test.ts +44 -0
- package/src/sandbox/cloud/keys.ts +34 -0
- package/src/sandbox/cloud/readiness.test.ts +115 -0
- package/src/sandbox/cloud/readiness.ts +122 -0
- package/src/sandbox/cloud/types.ts +70 -0
- package/src/sandbox/cloud/uri.test.ts +51 -0
- package/src/sandbox/cloud/uri.ts +30 -0
- package/src/sandbox/cloud/workspaces.test.ts +249 -0
- package/src/sandbox/cloud/workspaces.ts +161 -0
- package/src/sandbox/constants.ts +2 -0
- package/src/sandbox/git-credentials.test.ts +89 -0
- package/src/sandbox/git-credentials.ts +72 -0
- package/src/sandbox/worker/client.test.ts +156 -0
- package/src/sandbox/worker/client.ts +201 -0
- package/src/sandbox/worker/git-identity.test.ts +99 -0
- package/src/sandbox/worker/git-identity.ts +69 -0
- package/src/sandbox/worker/index.ts +36 -0
- package/src/sandbox/worker/secrets.test.ts +61 -0
- package/src/sandbox/worker/secrets.ts +28 -0
- package/src/sandbox/worker/sessions.test.ts +197 -0
- package/src/sandbox/worker/sessions.ts +32 -0
- package/src/sandbox/worker/status.test.ts +57 -0
- package/src/sandbox/worker/status.ts +6 -0
- package/src/sandbox/worker/types.ts +119 -0
- package/src/set-package-dir.ts +5 -0
- package/src/settings-watcher.test.ts +116 -0
- package/src/settings-watcher.ts +79 -0
- package/src/setup-wizard/apply-tools.test.ts +131 -0
- package/src/setup-wizard/apply-tools.ts +70 -0
- package/src/setup-wizard/index.ts +107 -0
- package/src/setup-wizard/prompt.ts +126 -0
- package/src/setup-wizard/shell-profile.test.ts +154 -0
- package/src/setup-wizard/shell-profile.ts +169 -0
- package/src/setup-wizard/state.ts +45 -0
- package/src/setup-wizard/steps/auth.test.ts +145 -0
- package/src/setup-wizard/steps/auth.ts +130 -0
- package/src/setup-wizard/steps/done.test.ts +267 -0
- package/src/setup-wizard/steps/done.ts +121 -0
- package/src/setup-wizard/steps/rtk.ts +6 -0
- package/src/setup-wizard/steps/telemetry.test.ts +46 -0
- package/src/setup-wizard/steps/telemetry.ts +41 -0
- package/src/setup-wizard/steps/tools.ts +45 -0
- package/src/setup-wizard/steps/welcome.ts +42 -0
- package/src/setup-wizard.test.ts +384 -0
- package/src/setup-wizard.ts +405 -0
- package/src/shared/planning/entry-trigger-registry.test.ts +427 -0
- package/src/shared/planning/entry-trigger-registry.ts +216 -0
- package/src/shared/planning/plan-artifact-store.test.ts +338 -0
- package/src/shared/planning/plan-artifact-store.ts +244 -0
- package/src/shared/planning/plan-decomposition.test.ts +183 -0
- package/src/shared/planning/plan-decomposition.ts +338 -0
- package/src/shared/planning/planning-stop-nudge.test.ts +217 -0
- package/src/shared/planning/planning-stop-nudge.ts +133 -0
- package/src/shared/planning/prompt-supplement-registry.test.ts +264 -0
- package/src/shared/planning/prompt-supplement-registry.ts +250 -0
- package/src/shared/planning/read-only-tool-registry.test.ts +96 -0
- package/src/shared/planning/read-only-tool-registry.ts +98 -0
- package/src/shared/planning/shared-planning-process.test.ts +224 -0
- package/src/shared/planning/shared-planning-process.ts +128 -0
- package/src/shared/planning/tool-catalog.test.ts +344 -0
- package/src/shared/planning/tool-catalog.ts +258 -0
- package/src/shared/planning/tool-profile-manager.test.ts +409 -0
- package/src/shared/planning/tool-profile-manager.ts +281 -0
- package/src/skill-paths.test.ts +33 -0
- package/src/skill-paths.ts +18 -0
- package/src/skills-wizard.ts +44 -0
- package/src/ssh-proxy.test.ts +102 -0
- package/src/ssh-proxy.ts +79 -0
- package/src/startup-context.ts +23 -0
- package/src/startup-settings.test.ts +37 -0
- package/src/startup-settings.ts +26 -0
- package/src/terminal-bg-probe.test.ts +131 -0
- package/src/terminal-bg-probe.ts +238 -0
- package/src/theme-file-watcher.ts +95 -0
- package/src/types/before-provider-headers.ts +48 -0
- package/src/types/pi-coding-agent-utils.d.ts +34 -0
- package/src/update/extract.ts +75 -0
- package/src/update/github.test.ts +133 -0
- package/src/update/github.ts +190 -0
- package/src/update/install.test.ts +210 -0
- package/src/update/install.ts +205 -0
- package/src/update/paths.test.ts +97 -0
- package/src/update/paths.ts +109 -0
- package/src/update/state.test.ts +215 -0
- package/src/update/state.ts +94 -0
- package/src/update/workflow.test.ts +397 -0
- package/src/update/workflow.ts +217 -0
- package/src/upstream-retry-patch.test.ts +77 -0
- package/src/upstream-retry-patch.ts +41 -0
- package/src/utils/clipboard-image.test.ts +117 -0
- package/src/utils/clipboard-image.ts +316 -0
- package/src/utils/clipboard-linux-routing.test.ts +100 -0
- package/src/utils/clipboard-linux-subprocess.test.ts +176 -0
- package/src/utils/clipboard-linux-subprocess.ts +58 -0
- package/src/utils/clipboard-native-harness-wsl.test.ts +109 -0
- package/src/utils/clipboard-native-harness.test.ts +54 -0
- package/src/utils/clipboard-native-harness.ts +146 -0
- package/src/utils/clipboard-read.test.ts +88 -0
- package/src/utils/clipboard-read.ts +69 -0
- package/src/utils/export-post-process.test.ts +539 -0
- package/src/utils/export-post-process.ts +213 -0
- package/src/utils/http.test.ts +302 -0
- package/src/utils/http.ts +106 -0
- package/src/utils/image-registry.test.ts +88 -0
- package/src/utils/image-registry.ts +132 -0
- package/src/utils/image-utils.test.ts +58 -0
- package/src/utils/image-utils.ts +38 -0
- package/src/utils/os-metadata.ts +65 -0
- package/src/utils/sandbox.test.ts +98 -0
- package/src/utils/sandbox.ts +24 -0
- package/src/utils/session-metadata-store.test.ts +228 -0
- package/src/utils/session-metadata-store.ts +96 -0
- package/src/utils/spawn-ikie-subprocess.ts +57 -0
- package/src/utils/trace-id-export.test.ts +343 -0
- package/src/utils/trace-id-export.ts +84 -0
- package/src/utils.test.ts +38 -0
- package/src/utils.ts +65 -0
- package/test-cases/README.md +54 -0
- package/test-cases/bitcoin-price.md +52 -0
- package/test-cases/golang-question.md +29 -0
- package/test-cases/offender.md +32 -0
- package/test-cases/pi-mono-design.md +27 -0
- package/test-cases/pi-mono-tool-card-loop.txt +1381 -0
- package/test-cases/pi-mono-tool-card.md +60 -0
- package/test-cases/pokemon.md +27 -0
- package/test-cases/problem-740.md +20 -0
- package/test-cases/python-project.md +24 -0
- package/test-cases/remove-home-directory.md +53 -0
- package/test-cases/use-gh.md +25 -0
- package/tests/e2e/acp/all-capabilities.test.ts +102 -0
- package/tests/e2e/acp/elicitation-dialogs.test.ts +139 -0
- package/tests/e2e/acp/elicitation-only.test.ts +76 -0
- package/tests/e2e/acp/message-id.test.ts +139 -0
- package/tests/e2e/acp/no-capabilities.test.ts +71 -0
- package/tests/e2e/acp/permission-flow.test.ts +237 -0
- package/tests/e2e/acp/support/acp-fixture.ts +413 -0
- package/tests/e2e/acp/support/scenarios.ts +55 -0
- package/tests/e2e/acp/support/test-dialog-extension.js +22 -0
- package/tests/e2e/acp/support/test-ui-extension.js +14 -0
- package/tests/e2e/acp/vitest.config.ts +12 -0
- package/tests/e2e/tui/ask-user-form.test.ts +310 -0
- package/tests/e2e/tui/basic-session-lifecycle.test.ts +20 -0
- package/tests/e2e/tui/branch-resume.test.ts +71 -0
- package/tests/e2e/tui/cooking-animation.test.ts +213 -0
- package/tests/e2e/tui/editor-narrow-layout.test.ts +47 -0
- package/tests/e2e/tui/extension-custom-headers.test.ts +75 -0
- package/tests/e2e/tui/ferment-draft-proposal-persistence.test.ts +125 -0
- package/tests/e2e/tui/ferment-new-runs-planning.test.ts +211 -0
- package/tests/e2e/tui/ferment-phase-review.test.ts +78 -0
- package/tests/e2e/tui/ferment-plan-review-suppression.test.ts +404 -0
- package/tests/e2e/tui/multi-model-command.test.ts +624 -0
- package/tests/e2e/tui/nudge-wiring.test.ts +129 -0
- package/tests/e2e/tui/ollama-models.test.ts +143 -0
- package/tests/e2e/tui/oneshot-bypasses-dropdown.test.ts +97 -0
- package/tests/e2e/tui/plan-mode-tool-switch.test.ts +73 -0
- package/tests/e2e/tui/plan-review-dismissal.test.ts +291 -0
- package/tests/e2e/tui/plan-to-ferment-promo.test.ts +204 -0
- package/tests/e2e/tui/skip-list.js +9 -0
- package/tests/e2e/tui/support/assertions.ts +41 -0
- package/tests/e2e/tui/support/fake-ollama-server.ts +356 -0
- package/tests/e2e/tui/support/fake-openai-server.ts +361 -0
- package/tests/e2e/tui/support/ikie-fixture.ts +374 -0
- package/tests/e2e/tui/theme-selector.test.ts +99 -0
- package/tests/e2e/tui/todo-overlay.test.ts +163 -0
- package/tests/e2e/tui/todo-widget-ferment.test.ts +346 -0
- package/tests/e2e/tui/tui-test.config.ts +6 -0
- package/tests/smoke/agent-session-tracking.test.ts +203 -0
- package/tests/smoke/binary.test.ts +186 -0
- package/tests/smoke/ferment-oneshot-exit.test.ts +514 -0
- package/tests/smoke/harness.ts +236 -0
- package/tests/smoke/interactive-paste.test.ts +167 -0
- package/tests/smoke/vitest.config.ts +12 -0
- package/tests/smoke/web-fetch.test.ts +41 -0
- package/tests/smoke/web-search.test.ts +47 -0
- package/themes/catppuccin-macchiato.json +82 -0
- package/themes/dark.json +87 -0
- package/themes/dracula.json +79 -0
- package/themes/github-dark.json +80 -0
- package/themes/github-light.json +80 -0
- package/themes/ikie-light.json +92 -0
- package/themes/ikie-minimal.json +79 -0
- package/themes/ikie.json +96 -0
- package/themes/light.json +86 -0
- package/themes/lucent-orng.json +79 -0
- package/themes/monokai.json +78 -0
- package/themes/neon.json +87 -0
- package/themes/night-owl.json +87 -0
- package/themes/nord.json +82 -0
- package/themes/one-dark.json +79 -0
- package/themes/solarized-dark.json +81 -0
- package/themes/solarized-light.json +81 -0
- package/tools/proxy-helper/Makefile +11 -0
- package/tools/proxy-helper/cmd/proxy/proxy.go +211 -0
- package/tools/proxy-helper/cmd/proxy/proxy_test.go +309 -0
- package/tools/proxy-helper/go.mod +13 -0
- package/tools/proxy-helper/go.sum +12 -0
- package/tools/proxy-helper/main.go +29 -0
- package/tools/proxy-helper/pkg/cast/cast.go +287 -0
- package/tsconfig.json +17 -0
- package/vendor/superpowers/.claude-plugin/marketplace.json +20 -0
- package/vendor/superpowers/.claude-plugin/plugin.json +20 -0
- package/vendor/superpowers/.codex-plugin/plugin.json +47 -0
- package/vendor/superpowers/.cursor-plugin/plugin.json +25 -0
- package/vendor/superpowers/.gitattributes +18 -0
- package/vendor/superpowers/.github/FUNDING.yml +3 -0
- package/vendor/superpowers/.github/ISSUE_TEMPLATE/bug_report.md +52 -0
- package/vendor/superpowers/.github/ISSUE_TEMPLATE/config.yml +5 -0
- package/vendor/superpowers/.github/ISSUE_TEMPLATE/feature_request.md +34 -0
- package/vendor/superpowers/.github/ISSUE_TEMPLATE/platform_support.md +23 -0
- package/vendor/superpowers/.github/PULL_REQUEST_TEMPLATE.md +126 -0
- package/vendor/superpowers/.opencode/INSTALL.md +110 -0
- package/vendor/superpowers/.opencode/plugins/superpowers.js +135 -0
- package/vendor/superpowers/.version-bump.json +20 -0
- package/vendor/superpowers/CLAUDE.md +106 -0
- package/vendor/superpowers/CODE_OF_CONDUCT.md +128 -0
- package/vendor/superpowers/GEMINI.md +2 -0
- package/vendor/superpowers/LICENSE +21 -0
- package/vendor/superpowers/README.md +233 -0
- package/vendor/superpowers/RELEASE-NOTES.md +1180 -0
- package/vendor/superpowers/assets/app-icon.png +0 -0
- package/vendor/superpowers/assets/superpowers-small.svg +1 -0
- package/vendor/superpowers/docs/README.opencode.md +157 -0
- package/vendor/superpowers/docs/plans/2025-11-22-opencode-support-design.md +294 -0
- package/vendor/superpowers/docs/plans/2025-11-22-opencode-support-implementation.md +1095 -0
- package/vendor/superpowers/docs/plans/2025-11-28-skills-improvements-from-user-feedback.md +711 -0
- package/vendor/superpowers/docs/plans/2026-01-17-visual-brainstorming.md +571 -0
- package/vendor/superpowers/docs/superpowers/plans/2026-01-22-document-review-system.md +301 -0
- package/vendor/superpowers/docs/superpowers/plans/2026-02-19-visual-brainstorming-refactor.md +523 -0
- package/vendor/superpowers/docs/superpowers/plans/2026-03-11-zero-dep-brainstorm-server.md +479 -0
- package/vendor/superpowers/docs/superpowers/plans/2026-03-23-codex-app-compatibility.md +564 -0
- package/vendor/superpowers/docs/superpowers/plans/2026-04-06-worktree-rototill.md +879 -0
- package/vendor/superpowers/docs/superpowers/specs/2026-01-22-document-review-system-design.md +136 -0
- package/vendor/superpowers/docs/superpowers/specs/2026-02-19-visual-brainstorming-refactor-design.md +162 -0
- package/vendor/superpowers/docs/superpowers/specs/2026-03-11-zero-dep-brainstorm-server-design.md +118 -0
- package/vendor/superpowers/docs/superpowers/specs/2026-03-23-codex-app-compatibility-design.md +244 -0
- package/vendor/superpowers/docs/superpowers/specs/2026-04-06-worktree-rototill-design.md +342 -0
- package/vendor/superpowers/docs/testing.md +303 -0
- package/vendor/superpowers/docs/windows/polyglot-hooks.md +212 -0
- package/vendor/superpowers/gemini-extension.json +6 -0
- package/vendor/superpowers/hooks/hooks-cursor.json +10 -0
- package/vendor/superpowers/hooks/hooks.json +16 -0
- package/vendor/superpowers/hooks/run-hook.cmd +46 -0
- package/vendor/superpowers/hooks/session-start +57 -0
- package/vendor/superpowers/package.json +6 -0
- package/vendor/superpowers/scripts/bump-version.sh +220 -0
- package/vendor/superpowers/scripts/sync-to-codex-plugin.sh +462 -0
- package/vendor/superpowers/skills/brainstorming/SKILL.md +164 -0
- package/vendor/superpowers/skills/brainstorming/scripts/frame-template.html +214 -0
- package/vendor/superpowers/skills/brainstorming/scripts/helper.js +88 -0
- package/vendor/superpowers/skills/brainstorming/scripts/server.cjs +354 -0
- package/vendor/superpowers/skills/brainstorming/scripts/start-server.sh +148 -0
- package/vendor/superpowers/skills/brainstorming/scripts/stop-server.sh +56 -0
- package/vendor/superpowers/skills/brainstorming/spec-document-reviewer-prompt.md +49 -0
- package/vendor/superpowers/skills/brainstorming/visual-companion.md +287 -0
- package/vendor/superpowers/skills/dispatching-parallel-agents/SKILL.md +182 -0
- package/vendor/superpowers/skills/executing-plans/SKILL.md +70 -0
- package/vendor/superpowers/skills/finishing-a-development-branch/SKILL.md +251 -0
- package/vendor/superpowers/skills/receiving-code-review/SKILL.md +213 -0
- package/vendor/superpowers/skills/requesting-code-review/SKILL.md +103 -0
- package/vendor/superpowers/skills/requesting-code-review/code-reviewer.md +168 -0
- package/vendor/superpowers/skills/subagent-driven-development/SKILL.md +279 -0
- package/vendor/superpowers/skills/subagent-driven-development/code-quality-reviewer-prompt.md +25 -0
- package/vendor/superpowers/skills/subagent-driven-development/implementer-prompt.md +113 -0
- package/vendor/superpowers/skills/subagent-driven-development/spec-reviewer-prompt.md +61 -0
- package/vendor/superpowers/skills/systematic-debugging/CREATION-LOG.md +119 -0
- package/vendor/superpowers/skills/systematic-debugging/SKILL.md +296 -0
- package/vendor/superpowers/skills/systematic-debugging/condition-based-waiting-example.ts +158 -0
- package/vendor/superpowers/skills/systematic-debugging/condition-based-waiting.md +115 -0
- package/vendor/superpowers/skills/systematic-debugging/defense-in-depth.md +122 -0
- package/vendor/superpowers/skills/systematic-debugging/find-polluter.sh +63 -0
- package/vendor/superpowers/skills/systematic-debugging/root-cause-tracing.md +169 -0
- package/vendor/superpowers/skills/systematic-debugging/test-academic.md +14 -0
- package/vendor/superpowers/skills/systematic-debugging/test-pressure-1.md +58 -0
- package/vendor/superpowers/skills/systematic-debugging/test-pressure-2.md +68 -0
- package/vendor/superpowers/skills/systematic-debugging/test-pressure-3.md +69 -0
- package/vendor/superpowers/skills/test-driven-development/SKILL.md +371 -0
- package/vendor/superpowers/skills/test-driven-development/testing-anti-patterns.md +299 -0
- package/vendor/superpowers/skills/using-git-worktrees/SKILL.md +215 -0
- package/vendor/superpowers/skills/using-superpowers/SKILL.md +117 -0
- package/vendor/superpowers/skills/using-superpowers/references/codex-tools.md +59 -0
- package/vendor/superpowers/skills/using-superpowers/references/copilot-tools.md +42 -0
- package/vendor/superpowers/skills/using-superpowers/references/gemini-tools.md +51 -0
- package/vendor/superpowers/skills/verification-before-completion/SKILL.md +139 -0
- package/vendor/superpowers/skills/writing-plans/SKILL.md +152 -0
- package/vendor/superpowers/skills/writing-plans/plan-document-reviewer-prompt.md +49 -0
- package/vendor/superpowers/skills/writing-skills/SKILL.md +655 -0
- package/vendor/superpowers/skills/writing-skills/anthropic-best-practices.md +1150 -0
- package/vendor/superpowers/skills/writing-skills/examples/CLAUDE_MD_TESTING.md +189 -0
- package/vendor/superpowers/skills/writing-skills/graphviz-conventions.dot +172 -0
- package/vendor/superpowers/skills/writing-skills/persuasion-principles.md +187 -0
- package/vendor/superpowers/skills/writing-skills/render-graphs.js +168 -0
- package/vendor/superpowers/skills/writing-skills/testing-skills-with-subagents.md +384 -0
- package/vendor/superpowers/tests/brainstorm-server/package-lock.json +36 -0
- package/vendor/superpowers/tests/brainstorm-server/package.json +10 -0
- package/vendor/superpowers/tests/brainstorm-server/server.test.js +427 -0
- package/vendor/superpowers/tests/brainstorm-server/windows-lifecycle.test.sh +351 -0
- package/vendor/superpowers/tests/brainstorm-server/ws-protocol.test.js +392 -0
- package/vendor/superpowers/tests/claude-code/README.md +170 -0
- package/vendor/superpowers/tests/claude-code/analyze-token-usage.py +168 -0
- package/vendor/superpowers/tests/claude-code/run-skill-tests.sh +188 -0
- package/vendor/superpowers/tests/claude-code/test-document-review-system.sh +177 -0
- package/vendor/superpowers/tests/claude-code/test-helpers.sh +202 -0
- package/vendor/superpowers/tests/claude-code/test-requesting-code-review.sh +214 -0
- package/vendor/superpowers/tests/claude-code/test-subagent-driven-development-integration.sh +322 -0
- package/vendor/superpowers/tests/claude-code/test-subagent-driven-development.sh +165 -0
- package/vendor/superpowers/tests/claude-code/test-worktree-native-preference.sh +176 -0
- package/vendor/superpowers/tests/codex-plugin-sync/test-sync-to-codex-plugin.sh +615 -0
- package/vendor/superpowers/tests/explicit-skill-requests/prompts/action-oriented.txt +3 -0
- package/vendor/superpowers/tests/explicit-skill-requests/prompts/after-planning-flow.txt +17 -0
- package/vendor/superpowers/tests/explicit-skill-requests/prompts/claude-suggested-it.txt +11 -0
- package/vendor/superpowers/tests/explicit-skill-requests/prompts/i-know-what-sdd-means.txt +8 -0
- package/vendor/superpowers/tests/explicit-skill-requests/prompts/mid-conversation-execute-plan.txt +3 -0
- package/vendor/superpowers/tests/explicit-skill-requests/prompts/please-use-brainstorming.txt +1 -0
- package/vendor/superpowers/tests/explicit-skill-requests/prompts/skip-formalities.txt +3 -0
- package/vendor/superpowers/tests/explicit-skill-requests/prompts/subagent-driven-development-please.txt +1 -0
- package/vendor/superpowers/tests/explicit-skill-requests/prompts/use-systematic-debugging.txt +1 -0
- package/vendor/superpowers/tests/explicit-skill-requests/run-all.sh +70 -0
- package/vendor/superpowers/tests/explicit-skill-requests/run-claude-describes-sdd.sh +100 -0
- package/vendor/superpowers/tests/explicit-skill-requests/run-extended-multiturn-test.sh +113 -0
- package/vendor/superpowers/tests/explicit-skill-requests/run-haiku-test.sh +144 -0
- package/vendor/superpowers/tests/explicit-skill-requests/run-multiturn-test.sh +143 -0
- package/vendor/superpowers/tests/explicit-skill-requests/run-test.sh +136 -0
- package/vendor/superpowers/tests/opencode/run-tests.sh +165 -0
- package/vendor/superpowers/tests/opencode/setup.sh +88 -0
- package/vendor/superpowers/tests/opencode/test-bootstrap-caching.mjs +124 -0
- package/vendor/superpowers/tests/opencode/test-bootstrap-caching.sh +32 -0
- package/vendor/superpowers/tests/opencode/test-plugin-loading.sh +82 -0
- package/vendor/superpowers/tests/opencode/test-priority.sh +217 -0
- package/vendor/superpowers/tests/opencode/test-tools.sh +95 -0
- package/vendor/superpowers/tests/skill-triggering/prompts/dispatching-parallel-agents.txt +8 -0
- package/vendor/superpowers/tests/skill-triggering/prompts/executing-plans.txt +1 -0
- package/vendor/superpowers/tests/skill-triggering/prompts/requesting-code-review.txt +3 -0
- package/vendor/superpowers/tests/skill-triggering/prompts/systematic-debugging.txt +11 -0
- package/vendor/superpowers/tests/skill-triggering/prompts/test-driven-development.txt +7 -0
- package/vendor/superpowers/tests/skill-triggering/prompts/writing-plans.txt +10 -0
- package/vendor/superpowers/tests/skill-triggering/run-all.sh +60 -0
- package/vendor/superpowers/tests/skill-triggering/run-test.sh +88 -0
- package/vendor/superpowers/tests/subagent-driven-dev/go-fractals/design.md +81 -0
- package/vendor/superpowers/tests/subagent-driven-dev/go-fractals/plan.md +172 -0
- package/vendor/superpowers/tests/subagent-driven-dev/go-fractals/scaffold.sh +45 -0
- package/vendor/superpowers/tests/subagent-driven-dev/run-test.sh +106 -0
- package/vendor/superpowers/tests/subagent-driven-dev/svelte-todo/design.md +70 -0
- package/vendor/superpowers/tests/subagent-driven-dev/svelte-todo/plan.md +222 -0
- package/vendor/superpowers/tests/subagent-driven-dev/svelte-todo/scaffold.sh +46 -0
- package/vitest.config.ts +22 -0
|
@@ -0,0 +1,2226 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ikie sub-agents.
|
|
3
|
+
*
|
|
4
|
+
* Tools:
|
|
5
|
+
* Agent - LLM-callable: spawn a sub-agent
|
|
6
|
+
* resume_subagent - LLM-callable: continue an existing sub-agent session
|
|
7
|
+
* get_subagent_result - LLM-callable: check background agent status/result
|
|
8
|
+
* steer_subagent - LLM-callable: send a steering message to a running agent
|
|
9
|
+
*
|
|
10
|
+
* Commands:
|
|
11
|
+
* /agents - Interactive agent management menu
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
import { existsSync, mkdirSync, readFileSync, unlinkSync } from "node:fs"
|
|
15
|
+
import { join } from "node:path"
|
|
16
|
+
import {
|
|
17
|
+
type ExtensionAPI,
|
|
18
|
+
type ExtensionCommandContext,
|
|
19
|
+
type ExtensionContext,
|
|
20
|
+
defineTool,
|
|
21
|
+
getAgentDir,
|
|
22
|
+
} from "@earendil-works/pi-coding-agent"
|
|
23
|
+
import { Text } from "@earendil-works/pi-tui"
|
|
24
|
+
import { Type } from "typebox"
|
|
25
|
+
import { isToolExpanded, registerToolCall } from "../../expand-state.js"
|
|
26
|
+
import { filterThinkingForDisplay } from "../hide-thinking.js"
|
|
27
|
+
import { sessionHasImages } from "../model-guard.js"
|
|
28
|
+
import { IKIE_DEV_PROVIDER, MODEL_CAPABILITIES } from "../orchestration/model-registry/index.js"
|
|
29
|
+
import { trackSubagentSpawned } from "../telemetry/index.js"
|
|
30
|
+
import { AgentManager, buildAgentOutcome } from "./manager/agent-manager.js"
|
|
31
|
+
import {
|
|
32
|
+
getAgentConversation,
|
|
33
|
+
getDefaultMaxTurns,
|
|
34
|
+
getGraceTurns,
|
|
35
|
+
normalizeMaxTurns,
|
|
36
|
+
setDefaultMaxTurns,
|
|
37
|
+
setGraceTurns,
|
|
38
|
+
steerAgent,
|
|
39
|
+
} from "./manager/agent-runner.js"
|
|
40
|
+
import {
|
|
41
|
+
type BudgetRetryBlock,
|
|
42
|
+
type BudgetRetryCandidate,
|
|
43
|
+
createBudgetRetryBlockFromCompletion,
|
|
44
|
+
shouldBlockBudgetRetry,
|
|
45
|
+
} from "./manager/budget-retry-guard.js"
|
|
46
|
+
import { GroupJoinManager } from "./manager/group-join.js"
|
|
47
|
+
import { createOutputFilePath, streamToOutputFile, writeInitialEntry } from "./manager/output-file.js"
|
|
48
|
+
import { prepareAgentSessionFile } from "./manager/session-file.js"
|
|
49
|
+
import { type LifetimeUsage, addUsage, getLifetimeTotal, getSessionContextPercent } from "./manager/usage.js"
|
|
50
|
+
import {
|
|
51
|
+
BUILTIN_TOOL_NAMES,
|
|
52
|
+
getAgentConfig,
|
|
53
|
+
getAllTypes,
|
|
54
|
+
getAvailableTypes,
|
|
55
|
+
getDefaultAgentNames,
|
|
56
|
+
getUserAgentNames,
|
|
57
|
+
registerAgents,
|
|
58
|
+
resolveType,
|
|
59
|
+
} from "./personas/agent-types.js"
|
|
60
|
+
import { loadCustomAgents } from "./personas/custom-agents.js"
|
|
61
|
+
import {
|
|
62
|
+
AGENT_GENERAL_PURPOSE,
|
|
63
|
+
type AgentAbortReason,
|
|
64
|
+
type AgentConfig,
|
|
65
|
+
type AgentOutcome,
|
|
66
|
+
type AgentRecord,
|
|
67
|
+
type AgentTaskRef,
|
|
68
|
+
type AgentVisibility,
|
|
69
|
+
type JoinMode,
|
|
70
|
+
type NotificationDetails,
|
|
71
|
+
type SubagentType,
|
|
72
|
+
} from "./personas/types.js"
|
|
73
|
+
import { resolveAgentInvocationConfig, resolveJoinMode } from "./resolution/invocation-config.js"
|
|
74
|
+
import { type ModelRegistry, resolveModel } from "./resolution/model-resolver.js"
|
|
75
|
+
import { registerResumeSubagentTool } from "./resume-tool.js"
|
|
76
|
+
import { type SubagentsSettings, applyAndEmitLoaded, saveAndEmitChanged } from "./settings.js"
|
|
77
|
+
import {
|
|
78
|
+
type AgentActivity,
|
|
79
|
+
type AgentDetails,
|
|
80
|
+
AgentWidget,
|
|
81
|
+
SPINNER,
|
|
82
|
+
type Theme,
|
|
83
|
+
type UICtx,
|
|
84
|
+
describeActivity,
|
|
85
|
+
formatDuration,
|
|
86
|
+
formatMs,
|
|
87
|
+
formatTokens,
|
|
88
|
+
formatTurns,
|
|
89
|
+
getDisplayName,
|
|
90
|
+
} from "./ui/agent-widget.js"
|
|
91
|
+
|
|
92
|
+
// ---- Shared helpers ----
|
|
93
|
+
|
|
94
|
+
// Give aborted sub-agents a bounded chance to reach runner finally blocks.
|
|
95
|
+
// If they do not settle, manager.dispose() still runs hard-fallback cleanup.
|
|
96
|
+
const SUBAGENT_SHUTDOWN_WAIT_MS = 5_000
|
|
97
|
+
|
|
98
|
+
export const AGENT_TOOL_GUIDELINES = `Guidelines:
|
|
99
|
+
- If the user explicitly asks to use the Agent tool, call Agent exactly once with the requested agent type and token_budget. Do not refuse or preflight the budget in prose; let the tool enforce it.
|
|
100
|
+
- For parallel work, use run_in_background: true on each agent. Foreground calls run sequentially — only one executes at a time.
|
|
101
|
+
- Keep each Agent call focused on a single outcome. Agents succeed when given 1–2 files or one mechanical change; they time out when asked to perform multi-file patch-and-verify workflows in one call. Split large tasks into smaller, independent Agent calls.
|
|
102
|
+
- Use Explore for bounded fact-finding that answers one decision-relevant question for the parent orchestrator. Before delegating requested files, directories, or symbols to Explore, do cheap parent-side discovery/existence checks with available read-only tools so the prompt starts from real anchors.
|
|
103
|
+
- Scope every Explore prompt with exact starting files and/or directories, prioritized symbols/search terms, one question to answer, allowed expansion rules for when it may follow imports/callers/related tests, and a qualitative stop condition tied to that question. Keep the scope bounded by relevance, not by a hard maximum file count.
|
|
104
|
+
- Explore is read-only and should return decision-ready findings to you. Do not ask Explore agents to write reports, create docs, edit files, save findings to disk, or produce polished artifacts. You should consume the returned findings directly and decide the next step.
|
|
105
|
+
- If you cannot provide concrete starting points for Explore, run a cheap parent-side search first or ask a narrower follow-up instead of sending a broad exploration prompt.
|
|
106
|
+
- Good Explore prompt: "Inspect /app/src/program.cbl. Answer only: what are the SELECT/FD entries and PIC-derived record widths? Follow no procedure logic. Stop once record layouts are known. Return decision-ready findings to the parent; do not write files."
|
|
107
|
+
- Bad Explore prompt: "Analyze the COBOL program and write a complete implementation spec."
|
|
108
|
+
- Use Plan for architecture and implementation planning.
|
|
109
|
+
- Use Researcher for web/docs research with cited sources.
|
|
110
|
+
- Use General-Purpose for complex tasks that need file editing.
|
|
111
|
+
- Provide clear, detailed prompts so the agent can work autonomously.
|
|
112
|
+
- Agent results are returned as text — summarize them for the user.
|
|
113
|
+
- Use run_in_background for work you don't need immediately. You will be notified when it completes.
|
|
114
|
+
- Use resume with an agent ID to continue a previous agent's work.
|
|
115
|
+
- Use steer_subagent to send mid-run messages to a running background agent.
|
|
116
|
+
- Use thinking to request an extended thinking level when the selected agent profile does not fix one.
|
|
117
|
+
- Use token_budget to cap the agent's cumulative output token usage when the task scope is small or bounded. Only output tokens (tokens generated by the agent) count toward the budget; input tokens do not.
|
|
118
|
+
- Treat token_budget as a hard caller constraint. If an agent aborts because of token_budget, do not retry with a higher budget unless the user explicitly asks.
|
|
119
|
+
- Use max_duration for long-running agents that might hang or run indefinitely (e.g., build tasks with many test iterations, background tasks with unpredictable completion times). Timeouts protect against stalled work without relying on token budgets. Short-lived agents (single queries, simple edits) typically do not need a duration limit.
|
|
120
|
+
- Use inherit_context if the agent needs the parent conversation history.`
|
|
121
|
+
|
|
122
|
+
export const AGENT_MODEL_PARAMETER_DESCRIPTION =
|
|
123
|
+
'Model identifier for the spawned agent. If omitted, the agent uses the current session model. Follow your system prompt\'s delegation rules when deciding whether to provide this. Format "provider/modelId" (e.g. "ikie-dev/minimax-m2.7"). Partial model IDs such as "kimi" or "nemotron" are accepted when unambiguous; specify the full versioned model ID when the exact version matters.'
|
|
124
|
+
|
|
125
|
+
function textResult<T = AgentDetails>(msg: string, details?: T) {
|
|
126
|
+
return { content: [{ type: "text" as const, text: msg }], details: details as unknown }
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
interface GetSubagentResultDetails {
|
|
130
|
+
agentId: string
|
|
131
|
+
displayName: string
|
|
132
|
+
description: string
|
|
133
|
+
status: string
|
|
134
|
+
visibility?: AgentVisibility
|
|
135
|
+
abortReason?: AgentAbortReason
|
|
136
|
+
toolUses: number
|
|
137
|
+
tokens: string
|
|
138
|
+
contextPercent: number | null
|
|
139
|
+
compactionCount?: number
|
|
140
|
+
durationMs?: number
|
|
141
|
+
error?: string
|
|
142
|
+
bodyText: string
|
|
143
|
+
agentOutcome?: AgentOutcome
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
function formatAgentOutcomeBlock(outcome: AgentOutcome | undefined): string {
|
|
147
|
+
if (!outcome) return ""
|
|
148
|
+
return `\n\nagent_outcome:\n${JSON.stringify(outcome, null, 2)}`
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
function formatAgentBodyForDisplay(raw: string): string {
|
|
152
|
+
const cleaned = filterThinkingForDisplay(raw)
|
|
153
|
+
return cleaned.replace(/\n{3,}/g, "\n\n").trimEnd()
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
function getSubagentResultIcon(status: string, theme: Theme): string {
|
|
157
|
+
switch (status) {
|
|
158
|
+
case "running":
|
|
159
|
+
case "queued":
|
|
160
|
+
return theme.fg("accent", SPINNER[0])
|
|
161
|
+
case "error":
|
|
162
|
+
case "aborted":
|
|
163
|
+
return theme.fg("error", "✗")
|
|
164
|
+
case "stopped":
|
|
165
|
+
return theme.fg("dim", "■")
|
|
166
|
+
case "steered":
|
|
167
|
+
return theme.fg("warning", "✓")
|
|
168
|
+
default:
|
|
169
|
+
return theme.fg("success", "✓")
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
function extractImagePathsFromSession(ctx: ExtensionContext): string[] {
|
|
174
|
+
const entries = ctx.sessionManager.getBranch()
|
|
175
|
+
const imagePaths = new Set<string>()
|
|
176
|
+
const readPathsByToolCallId = new Map<string, string>()
|
|
177
|
+
|
|
178
|
+
for (const entry of entries) {
|
|
179
|
+
if (entry.type !== "message") continue
|
|
180
|
+
const msg = entry.message
|
|
181
|
+
|
|
182
|
+
if (msg.role === "assistant") {
|
|
183
|
+
const content = msg.content
|
|
184
|
+
if (Array.isArray(content)) {
|
|
185
|
+
for (const block of content) {
|
|
186
|
+
if (block.type !== "toolCall") continue
|
|
187
|
+
const toolBlock = block as { id?: string; name?: string; arguments?: Record<string, unknown> }
|
|
188
|
+
if (toolBlock.name === "read" && toolBlock.id && typeof toolBlock.arguments?.path === "string") {
|
|
189
|
+
readPathsByToolCallId.set(toolBlock.id, toolBlock.arguments.path)
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
} else if (msg.role === "toolResult") {
|
|
194
|
+
const toolResultMsg = msg as { toolCallId?: string; content?: unknown[] }
|
|
195
|
+
const content = toolResultMsg.content
|
|
196
|
+
if (Array.isArray(content)) {
|
|
197
|
+
const hasImage = content.some((block) => (block as { type?: string }).type === "image")
|
|
198
|
+
const path = toolResultMsg.toolCallId ? readPathsByToolCallId.get(toolResultMsg.toolCallId) : undefined
|
|
199
|
+
if (hasImage && path) {
|
|
200
|
+
imagePaths.add(path)
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
if (toolResultMsg.toolCallId) {
|
|
204
|
+
readPathsByToolCallId.delete(toolResultMsg.toolCallId)
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
return Array.from(imagePaths)
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
export function summaryForStatus(status: string, error?: string, abortReason?: AgentAbortReason): string {
|
|
213
|
+
switch (status) {
|
|
214
|
+
case "running":
|
|
215
|
+
case "queued":
|
|
216
|
+
return "Still running"
|
|
217
|
+
case "completed":
|
|
218
|
+
return "Done"
|
|
219
|
+
case "steered":
|
|
220
|
+
return "Wrapped up (turn limit)"
|
|
221
|
+
case "aborted":
|
|
222
|
+
return getAbortLabel(abortReason)
|
|
223
|
+
case "stopped":
|
|
224
|
+
return "Stopped"
|
|
225
|
+
case "error":
|
|
226
|
+
return `Error: ${error?.split("\n")[0]?.trim() || "unknown"}`
|
|
227
|
+
default:
|
|
228
|
+
return status
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
function formatLifetimeTokens(o: { lifetimeUsage: LifetimeUsage }): string {
|
|
233
|
+
const t = getLifetimeTotal(o.lifetimeUsage)
|
|
234
|
+
return t > 0 ? formatTokens(t) : ""
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
function createActivityTracker(maxTurns?: number, onStreamUpdate?: () => void) {
|
|
238
|
+
const state: AgentActivity = {
|
|
239
|
+
activeTools: new Map(),
|
|
240
|
+
toolUses: 0,
|
|
241
|
+
turnCount: 1,
|
|
242
|
+
maxTurns,
|
|
243
|
+
responseText: "",
|
|
244
|
+
session: undefined,
|
|
245
|
+
lifetimeUsage: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
const callbacks = {
|
|
249
|
+
onToolActivity: (activity: { type: "start" | "end"; toolName: string }) => {
|
|
250
|
+
if (activity.type === "start") {
|
|
251
|
+
state.activeTools.set(`${activity.toolName}_${Date.now()}`, activity.toolName)
|
|
252
|
+
} else {
|
|
253
|
+
for (const [key, name] of state.activeTools) {
|
|
254
|
+
if (name === activity.toolName) {
|
|
255
|
+
state.activeTools.delete(key)
|
|
256
|
+
break
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
state.toolUses++
|
|
260
|
+
}
|
|
261
|
+
onStreamUpdate?.()
|
|
262
|
+
},
|
|
263
|
+
onTextDelta: (_delta: string, fullText: string) => {
|
|
264
|
+
state.responseText = fullText
|
|
265
|
+
onStreamUpdate?.()
|
|
266
|
+
},
|
|
267
|
+
onTurnEnd: (turnCount: number) => {
|
|
268
|
+
state.turnCount = turnCount
|
|
269
|
+
onStreamUpdate?.()
|
|
270
|
+
},
|
|
271
|
+
onSessionCreated: (session: unknown) => {
|
|
272
|
+
state.session = session as AgentActivity["session"]
|
|
273
|
+
},
|
|
274
|
+
onAssistantUsage: (usage: LifetimeUsage) => {
|
|
275
|
+
addUsage(state.lifetimeUsage, usage)
|
|
276
|
+
onStreamUpdate?.()
|
|
277
|
+
},
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
return { state, callbacks }
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
function getAbortLabel(reason?: AgentAbortReason): string {
|
|
284
|
+
switch (reason) {
|
|
285
|
+
case "max_turns":
|
|
286
|
+
return "Aborted (max turns exceeded)"
|
|
287
|
+
case "token_budget":
|
|
288
|
+
return "Aborted (token budget exceeded)"
|
|
289
|
+
case "inactivity":
|
|
290
|
+
return "Aborted (inactivity timeout)"
|
|
291
|
+
case "max_duration":
|
|
292
|
+
return "Aborted (duration limit exceeded)"
|
|
293
|
+
default:
|
|
294
|
+
return "Aborted"
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
function getAbortNote(reason?: AgentAbortReason): string {
|
|
299
|
+
switch (reason) {
|
|
300
|
+
case "max_turns":
|
|
301
|
+
return " (aborted - max turns exceeded, output may be incomplete)"
|
|
302
|
+
case "token_budget":
|
|
303
|
+
return " (aborted - token budget exceeded, output may be incomplete)"
|
|
304
|
+
case "inactivity":
|
|
305
|
+
return " (aborted - agent became unresponsive, output may be incomplete)"
|
|
306
|
+
case "max_duration":
|
|
307
|
+
return " (aborted - wall-clock duration limit exceeded, output may be incomplete)"
|
|
308
|
+
default:
|
|
309
|
+
return " (aborted, output may be incomplete)"
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
function getStatusLabel(status: string, error?: string, abortReason?: AgentAbortReason): string {
|
|
314
|
+
switch (status) {
|
|
315
|
+
case "error":
|
|
316
|
+
return `Error: ${error ?? "unknown"}`
|
|
317
|
+
case "aborted":
|
|
318
|
+
return getAbortLabel(abortReason)
|
|
319
|
+
case "steered":
|
|
320
|
+
return "Wrapped up (turn limit)"
|
|
321
|
+
case "stopped":
|
|
322
|
+
return "Stopped"
|
|
323
|
+
default:
|
|
324
|
+
return "Done"
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
function getStatusNote(status: string, abortReason?: AgentAbortReason): string {
|
|
329
|
+
if (status === "error")
|
|
330
|
+
return "\nThe agent encountered an error. Review the error message and partial results before deciding how to proceed."
|
|
331
|
+
if (status === "stopped") return "\nThe agent was manually stopped by the user."
|
|
332
|
+
if (status === "aborted" && abortReason === "token_budget")
|
|
333
|
+
return "\nThe agent ran out of its token budget. See agent_outcome.recovery_guidance for next steps."
|
|
334
|
+
if (status === "aborted" && abortReason === "inactivity")
|
|
335
|
+
return "\nThe agent stopped producing output and was terminated. See agent_outcome.recovery_guidance for next steps."
|
|
336
|
+
if (status === "aborted" && abortReason === "max_duration")
|
|
337
|
+
return "\nThe agent exceeded its maximum allowed duration. See agent_outcome.recovery_guidance for next steps."
|
|
338
|
+
if (status === "aborted" && abortReason === "max_turns")
|
|
339
|
+
return "\nThe agent exhausted its turn budget. See agent_outcome.recovery_guidance for next steps."
|
|
340
|
+
return ""
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
function getStatusInstruction(status: string, abortReason?: AgentAbortReason): string {
|
|
344
|
+
if (status === "aborted" && abortReason === "token_budget") {
|
|
345
|
+
return "\nThe agent ran out of its token budget. Inspect the worker report before acting. Use resume_subagent with a bounded steering prompt when remaining_steps are a direct continuation; spawn a narrower replacement Agent when remaining_steps have a clean task boundary; use resume_subagent with purpose finalize_report if the report is missing; or stop/report if blocked. Do not blindly retry the same prompt."
|
|
346
|
+
}
|
|
347
|
+
if (status === "aborted" && abortReason === "inactivity") {
|
|
348
|
+
return "\nThe agent stopped producing output and was terminated. Inspect the worker report before acting; this may indicate a stall. Resume only with a steering prompt that continues the same thread while avoiding the stalled operation, or spawn a narrower replacement Agent if remaining_steps have a clean task boundary."
|
|
349
|
+
}
|
|
350
|
+
if (status === "aborted" && abortReason === "max_duration") {
|
|
351
|
+
return "\nThe agent exceeded its maximum allowed wall-clock duration and was terminated. Inspect the worker report before acting; this may indicate a hang or blocked command. Resume only with a bounded steering prompt that avoids the stalled operation and directly continues the same thread, or spawn a follow-up Agent scoped to a narrower task boundary. Do NOT implement the remaining work yourself — the orchestrator must delegate, not build."
|
|
352
|
+
}
|
|
353
|
+
if (status === "aborted" && abortReason === "max_turns") {
|
|
354
|
+
return "\nThe agent exhausted its turn budget. Do not mark delegated work complete from an aborted result. Inspect the worker report first: use resume_subagent with a bounded steering prompt when remaining_steps are a direct continuation; spawn a narrower linked replacement Agent when remaining_steps have a clean task boundary; use resume_subagent with purpose finalize_report if the report is missing; or stop/report if blocked. Do NOT implement the remaining work yourself — the orchestrator must delegate, not build."
|
|
355
|
+
}
|
|
356
|
+
return ""
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
function escapeXml(s: string): string {
|
|
360
|
+
return s.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">")
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
function formatTaskNotification(record: AgentRecord, resultMaxLen: number): string {
|
|
364
|
+
const status = getStatusLabel(record.status, record.error, record.abortReason)
|
|
365
|
+
const durationMs = record.completedAt ? record.completedAt - record.startedAt : 0
|
|
366
|
+
const totalTokens = getLifetimeTotal(record.lifetimeUsage)
|
|
367
|
+
const contextPercent = getSessionContextPercent(record.session)
|
|
368
|
+
const ctxXml = contextPercent !== null ? `<context_percent>${Math.round(contextPercent)}</context_percent>` : ""
|
|
369
|
+
const compactXml = record.compactionCount ? `<compactions>${record.compactionCount}</compactions>` : ""
|
|
370
|
+
|
|
371
|
+
const resultPreview = record.result
|
|
372
|
+
? record.result.length > resultMaxLen
|
|
373
|
+
? `${record.result.slice(0, resultMaxLen)}\n...(truncated, use get_subagent_result for full output)`
|
|
374
|
+
: record.result
|
|
375
|
+
: "No output."
|
|
376
|
+
|
|
377
|
+
return [
|
|
378
|
+
"<task-notification>",
|
|
379
|
+
`<task-id>${record.id}</task-id>`,
|
|
380
|
+
record.toolCallId ? `<tool-use-id>${escapeXml(record.toolCallId)}</tool-use-id>` : null,
|
|
381
|
+
record.outputFile ? `<output-file>${escapeXml(record.outputFile)}</output-file>` : null,
|
|
382
|
+
`<status>${escapeXml(status)}</status>`,
|
|
383
|
+
`<summary>Agent "${escapeXml(record.description)}" ${record.status}</summary>`,
|
|
384
|
+
`<result>${escapeXml(resultPreview)}</result>`,
|
|
385
|
+
`<usage><total_tokens>${totalTokens}</total_tokens><tool_uses>${record.toolUses}</tool_uses>${ctxXml}${compactXml}<duration_ms>${durationMs}</duration_ms></usage>`,
|
|
386
|
+
"</task-notification>",
|
|
387
|
+
]
|
|
388
|
+
.filter(Boolean)
|
|
389
|
+
.join("\n")
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
function buildDetails(
|
|
393
|
+
base: Pick<AgentDetails, "displayName" | "description" | "subagentType" | "modelName" | "tags" | "visibility">,
|
|
394
|
+
record: AgentRecord,
|
|
395
|
+
activity?: AgentActivity,
|
|
396
|
+
overrides?: Partial<AgentDetails>,
|
|
397
|
+
): AgentDetails {
|
|
398
|
+
return {
|
|
399
|
+
...base,
|
|
400
|
+
toolUses: record.toolUses,
|
|
401
|
+
tokens: formatLifetimeTokens(record),
|
|
402
|
+
tokenUsage: {
|
|
403
|
+
input: record.lifetimeUsage.input,
|
|
404
|
+
output: record.lifetimeUsage.output,
|
|
405
|
+
cacheRead: record.lifetimeUsage.cacheRead,
|
|
406
|
+
cacheWrite: record.lifetimeUsage.cacheWrite,
|
|
407
|
+
},
|
|
408
|
+
turnCount: activity?.turnCount,
|
|
409
|
+
maxTurns: activity?.maxTurns,
|
|
410
|
+
durationMs: (record.completedAt ?? Date.now()) - record.startedAt,
|
|
411
|
+
status: record.status as AgentDetails["status"],
|
|
412
|
+
agentId: record.id,
|
|
413
|
+
sessionFile: record.sessionFile,
|
|
414
|
+
error: record.error,
|
|
415
|
+
abortReason: record.abortReason,
|
|
416
|
+
agentOutcome: record.latestOutcome,
|
|
417
|
+
...overrides,
|
|
418
|
+
}
|
|
419
|
+
}
|
|
420
|
+
|
|
421
|
+
function buildNotificationDetails(
|
|
422
|
+
record: AgentRecord,
|
|
423
|
+
resultMaxLen: number,
|
|
424
|
+
activity?: AgentActivity,
|
|
425
|
+
): NotificationDetails {
|
|
426
|
+
const totalTokens = getLifetimeTotal(record.lifetimeUsage)
|
|
427
|
+
|
|
428
|
+
return {
|
|
429
|
+
id: record.id,
|
|
430
|
+
description: record.description,
|
|
431
|
+
status: record.status,
|
|
432
|
+
abortReason: record.abortReason,
|
|
433
|
+
toolUses: record.toolUses,
|
|
434
|
+
turnCount: activity?.turnCount ?? 0,
|
|
435
|
+
maxTurns: activity?.maxTurns,
|
|
436
|
+
totalTokens,
|
|
437
|
+
durationMs: record.completedAt ? record.completedAt - record.startedAt : 0,
|
|
438
|
+
outputFile: record.outputFile,
|
|
439
|
+
error: record.error,
|
|
440
|
+
resultPreview: record.result
|
|
441
|
+
? record.result.length > resultMaxLen
|
|
442
|
+
? `${record.result.slice(0, resultMaxLen)}...`
|
|
443
|
+
: record.result
|
|
444
|
+
: "No output.",
|
|
445
|
+
}
|
|
446
|
+
}
|
|
447
|
+
|
|
448
|
+
let activeManager: AgentManager | undefined
|
|
449
|
+
let budgetRetryBlock: BudgetRetryBlock | undefined
|
|
450
|
+
const budgetRetryCandidates = new Map<string, BudgetRetryCandidate>()
|
|
451
|
+
|
|
452
|
+
function blockBudgetRetryIfNeeded(record: AgentRecord, candidate: BudgetRetryCandidate | undefined): void {
|
|
453
|
+
const block = createBudgetRetryBlockFromCompletion(candidate, record)
|
|
454
|
+
if (block) budgetRetryBlock = block
|
|
455
|
+
}
|
|
456
|
+
|
|
457
|
+
export function getActiveAgentCount(): number {
|
|
458
|
+
return activeManager?.getRunningCount() ?? 0
|
|
459
|
+
}
|
|
460
|
+
|
|
461
|
+
export function getActiveAgentModelIds(): string[] {
|
|
462
|
+
if (!activeManager) return []
|
|
463
|
+
return activeManager
|
|
464
|
+
.listAgents()
|
|
465
|
+
.filter((a) => a.status === "running" || a.status === "queued")
|
|
466
|
+
.map((a) => a.modelId)
|
|
467
|
+
.filter((id): id is string => id != null)
|
|
468
|
+
}
|
|
469
|
+
|
|
470
|
+
/**
|
|
471
|
+
* Returns a read-only snapshot of the agent record for task validation.
|
|
472
|
+
* The returned object is a shallow copy — nested objects (session, lifetimeUsage,
|
|
473
|
+
* etc.) are shared references. Callers MUST NOT mutate nested properties;
|
|
474
|
+
* doing so would corrupt the live agent's state in the manager.
|
|
475
|
+
*/
|
|
476
|
+
export function getAgentRecordForTaskValidation(id: string): Readonly<AgentRecord> | undefined {
|
|
477
|
+
const record = activeManager?.getRecord(id)
|
|
478
|
+
if (!record || record.visibility === "system") return undefined
|
|
479
|
+
return { ...record, latestOutcome: record.latestOutcome ?? buildAgentOutcome(record) }
|
|
480
|
+
}
|
|
481
|
+
|
|
482
|
+
function readAgentTaskRef(params: Record<string, unknown>): AgentTaskRef | undefined {
|
|
483
|
+
const ref = params.task_ref as Partial<AgentTaskRef> | undefined
|
|
484
|
+
if (
|
|
485
|
+
ref?.kind === "ferment_step" &&
|
|
486
|
+
typeof ref.ferment_id === "string" &&
|
|
487
|
+
typeof ref.phase_id === "string" &&
|
|
488
|
+
typeof ref.step_id === "string"
|
|
489
|
+
) {
|
|
490
|
+
return {
|
|
491
|
+
kind: "ferment_step",
|
|
492
|
+
ferment_id: ref.ferment_id,
|
|
493
|
+
phase_id: ref.phase_id,
|
|
494
|
+
step_id: ref.step_id,
|
|
495
|
+
...(ref.budget_tier === "narrow" || ref.budget_tier === "standard" || ref.budget_tier === "complex"
|
|
496
|
+
? { budget_tier: ref.budget_tier }
|
|
497
|
+
: {}),
|
|
498
|
+
}
|
|
499
|
+
}
|
|
500
|
+
return undefined
|
|
501
|
+
}
|
|
502
|
+
|
|
503
|
+
export default function (pi: ExtensionAPI) {
|
|
504
|
+
pi.on("message_start", (event) => {
|
|
505
|
+
if (event.message.role === "user") budgetRetryBlock = undefined
|
|
506
|
+
})
|
|
507
|
+
|
|
508
|
+
// ---- Register custom notification renderer ----
|
|
509
|
+
pi.registerMessageRenderer<NotificationDetails>("subagent-notification", (message, { expanded }, theme) => {
|
|
510
|
+
const d = message.details
|
|
511
|
+
if (!d) return undefined
|
|
512
|
+
|
|
513
|
+
function renderOne(d: NotificationDetails): string {
|
|
514
|
+
const isError = d.status === "error" || d.status === "stopped" || d.status === "aborted"
|
|
515
|
+
const icon = isError ? theme.fg("error", "✗") : theme.fg("success", "✓")
|
|
516
|
+
const statusText =
|
|
517
|
+
d.status === "aborted"
|
|
518
|
+
? getAbortLabel(d.abortReason)
|
|
519
|
+
: isError
|
|
520
|
+
? d.status
|
|
521
|
+
: d.status === "steered"
|
|
522
|
+
? "completed (steered)"
|
|
523
|
+
: "completed"
|
|
524
|
+
|
|
525
|
+
let line = `${icon} ${theme.bold(d.description)} ${theme.fg("dim", statusText)}`
|
|
526
|
+
|
|
527
|
+
const parts: string[] = []
|
|
528
|
+
if (d.turnCount > 0) parts.push(formatTurns(d.turnCount, d.maxTurns))
|
|
529
|
+
if (d.toolUses > 0) parts.push(`${d.toolUses} tool use${d.toolUses === 1 ? "" : "s"}`)
|
|
530
|
+
if (d.totalTokens > 0) parts.push(formatTokens(d.totalTokens))
|
|
531
|
+
if (d.durationMs > 0) parts.push(formatMs(d.durationMs))
|
|
532
|
+
if (parts.length) {
|
|
533
|
+
line += `\n ${parts.map((p) => theme.fg("dim", p)).join(` ${theme.fg("dim", "·")} `)}`
|
|
534
|
+
}
|
|
535
|
+
|
|
536
|
+
if (expanded) {
|
|
537
|
+
const lines = d.resultPreview.split("\n").slice(0, 30)
|
|
538
|
+
for (const l of lines) line += `\n${theme.fg("dim", ` ${l}`)}`
|
|
539
|
+
} else {
|
|
540
|
+
const preview = d.resultPreview.split("\n")[0]?.slice(0, 80) ?? ""
|
|
541
|
+
line += `\n ${theme.fg("dim", `⎿ ${preview}`)}`
|
|
542
|
+
}
|
|
543
|
+
|
|
544
|
+
if (d.outputFile) {
|
|
545
|
+
line += `\n ${theme.fg("muted", `transcript: ${d.outputFile}`)}`
|
|
546
|
+
}
|
|
547
|
+
|
|
548
|
+
return line
|
|
549
|
+
}
|
|
550
|
+
|
|
551
|
+
const all = [d, ...(d.others ?? [])]
|
|
552
|
+
return new Text(all.map(renderOne).join("\n"), 0, 0)
|
|
553
|
+
})
|
|
554
|
+
|
|
555
|
+
const reloadCustomAgents = (cwd: string = process.cwd()) => {
|
|
556
|
+
const userAgents = loadCustomAgents(cwd)
|
|
557
|
+
registerAgents(userAgents)
|
|
558
|
+
}
|
|
559
|
+
|
|
560
|
+
reloadCustomAgents()
|
|
561
|
+
|
|
562
|
+
const agentActivity = new Map<string, AgentActivity>()
|
|
563
|
+
|
|
564
|
+
// ---- Cancellable pending notifications ----
|
|
565
|
+
const pendingNudges = new Map<string, ReturnType<typeof setTimeout>>()
|
|
566
|
+
const NUDGE_HOLD_MS = 200
|
|
567
|
+
|
|
568
|
+
function scheduleNudge(key: string, send: () => void, delay = NUDGE_HOLD_MS) {
|
|
569
|
+
cancelNudge(key)
|
|
570
|
+
pendingNudges.set(
|
|
571
|
+
key,
|
|
572
|
+
setTimeout(() => {
|
|
573
|
+
pendingNudges.delete(key)
|
|
574
|
+
send()
|
|
575
|
+
}, delay),
|
|
576
|
+
)
|
|
577
|
+
}
|
|
578
|
+
|
|
579
|
+
function cancelNudge(key: string) {
|
|
580
|
+
const timer = pendingNudges.get(key)
|
|
581
|
+
if (timer != null) {
|
|
582
|
+
clearTimeout(timer)
|
|
583
|
+
pendingNudges.delete(key)
|
|
584
|
+
}
|
|
585
|
+
}
|
|
586
|
+
|
|
587
|
+
function emitIndividualNudge(record: AgentRecord) {
|
|
588
|
+
if (record.visibility === "system") return
|
|
589
|
+
if (record.resultConsumed) return
|
|
590
|
+
|
|
591
|
+
const notification = formatTaskNotification(record, 500)
|
|
592
|
+
const footer = record.outputFile ? `\nFull transcript available at: ${record.outputFile}` : ""
|
|
593
|
+
|
|
594
|
+
pi.sendMessage<NotificationDetails>(
|
|
595
|
+
{
|
|
596
|
+
customType: "subagent-notification",
|
|
597
|
+
content: notification + footer,
|
|
598
|
+
display: true,
|
|
599
|
+
details: buildNotificationDetails(record, 500, agentActivity.get(record.id)),
|
|
600
|
+
},
|
|
601
|
+
{ deliverAs: "followUp", triggerTurn: true },
|
|
602
|
+
)
|
|
603
|
+
}
|
|
604
|
+
|
|
605
|
+
function sendIndividualNudge(record: AgentRecord) {
|
|
606
|
+
agentActivity.delete(record.id)
|
|
607
|
+
widget.markFinished(record.id)
|
|
608
|
+
scheduleNudge(record.id, () => emitIndividualNudge(record))
|
|
609
|
+
widget.update()
|
|
610
|
+
}
|
|
611
|
+
|
|
612
|
+
// ---- Group join manager ----
|
|
613
|
+
const groupJoin = new GroupJoinManager((records, partial) => {
|
|
614
|
+
for (const r of records) {
|
|
615
|
+
agentActivity.delete(r.id)
|
|
616
|
+
widget.markFinished(r.id)
|
|
617
|
+
}
|
|
618
|
+
|
|
619
|
+
const groupKey = `group:${records.map((r) => r.id).join(",")}`
|
|
620
|
+
scheduleNudge(groupKey, () => {
|
|
621
|
+
const unconsumed = records.filter((r) => !r.resultConsumed)
|
|
622
|
+
if (unconsumed.length === 0) {
|
|
623
|
+
widget.update()
|
|
624
|
+
return
|
|
625
|
+
}
|
|
626
|
+
|
|
627
|
+
const notifications = unconsumed.map((r) => formatTaskNotification(r, 300)).join("\n\n")
|
|
628
|
+
const label = partial
|
|
629
|
+
? `${unconsumed.length} agent(s) finished (partial - others still running)`
|
|
630
|
+
: `${unconsumed.length} agent(s) finished`
|
|
631
|
+
|
|
632
|
+
const [first, ...rest] = unconsumed
|
|
633
|
+
const details = buildNotificationDetails(first, 300, agentActivity.get(first.id))
|
|
634
|
+
if (rest.length > 0) {
|
|
635
|
+
details.others = rest.map((r) => buildNotificationDetails(r, 300, agentActivity.get(r.id)))
|
|
636
|
+
}
|
|
637
|
+
|
|
638
|
+
pi.sendMessage<NotificationDetails>(
|
|
639
|
+
{
|
|
640
|
+
customType: "subagent-notification",
|
|
641
|
+
content: `Background agent group completed: ${label}\n\n${notifications}\n\nUse get_subagent_result for full output.`,
|
|
642
|
+
display: true,
|
|
643
|
+
details,
|
|
644
|
+
},
|
|
645
|
+
{ deliverAs: "followUp", triggerTurn: true },
|
|
646
|
+
)
|
|
647
|
+
})
|
|
648
|
+
widget.update()
|
|
649
|
+
}, 30_000)
|
|
650
|
+
|
|
651
|
+
function buildEventData(record: AgentRecord) {
|
|
652
|
+
const durationMs = record.completedAt ? record.completedAt - record.startedAt : Date.now() - record.startedAt
|
|
653
|
+
const u = record.lifetimeUsage
|
|
654
|
+
const total = getLifetimeTotal(u)
|
|
655
|
+
const tokens = total > 0 ? { input: u.input, output: u.output, total } : undefined
|
|
656
|
+
return {
|
|
657
|
+
id: record.id,
|
|
658
|
+
type: record.type,
|
|
659
|
+
description: record.description,
|
|
660
|
+
result: record.result,
|
|
661
|
+
error: record.error,
|
|
662
|
+
status: record.status,
|
|
663
|
+
visibility: record.visibility,
|
|
664
|
+
abortReason: record.abortReason,
|
|
665
|
+
toolUses: record.toolUses,
|
|
666
|
+
durationMs,
|
|
667
|
+
tokens,
|
|
668
|
+
}
|
|
669
|
+
}
|
|
670
|
+
|
|
671
|
+
let currentBatchAgents: { id: string; joinMode: JoinMode }[] = []
|
|
672
|
+
let batchFinalizeTimer: ReturnType<typeof setTimeout> | undefined
|
|
673
|
+
let batchCounter = 0
|
|
674
|
+
|
|
675
|
+
function finalizeBatch() {
|
|
676
|
+
batchFinalizeTimer = undefined
|
|
677
|
+
const batchAgents = [...currentBatchAgents]
|
|
678
|
+
currentBatchAgents = []
|
|
679
|
+
|
|
680
|
+
const smartAgents = batchAgents.filter((a) => a.joinMode === "smart" || a.joinMode === "group")
|
|
681
|
+
if (smartAgents.length >= 2) {
|
|
682
|
+
const groupId = `batch-${++batchCounter}`
|
|
683
|
+
const ids = smartAgents.map((a) => a.id)
|
|
684
|
+
groupJoin.registerGroup(groupId, ids)
|
|
685
|
+
for (const id of ids) {
|
|
686
|
+
const record = manager.getRecord(id)
|
|
687
|
+
if (!record) continue
|
|
688
|
+
record.groupId = groupId
|
|
689
|
+
if (record.completedAt != null && !record.resultConsumed) {
|
|
690
|
+
groupJoin.onAgentComplete(record)
|
|
691
|
+
}
|
|
692
|
+
}
|
|
693
|
+
} else {
|
|
694
|
+
for (const { id } of batchAgents) {
|
|
695
|
+
const record = manager.getRecord(id)
|
|
696
|
+
if (record?.completedAt != null && !record.resultConsumed) {
|
|
697
|
+
sendIndividualNudge(record)
|
|
698
|
+
}
|
|
699
|
+
}
|
|
700
|
+
}
|
|
701
|
+
}
|
|
702
|
+
|
|
703
|
+
const manager = new AgentManager(
|
|
704
|
+
(record) => {
|
|
705
|
+
const retryCandidate = budgetRetryCandidates.get(record.id)
|
|
706
|
+
budgetRetryCandidates.delete(record.id)
|
|
707
|
+
blockBudgetRetryIfNeeded(record, retryCandidate)
|
|
708
|
+
|
|
709
|
+
const isError = record.status === "error" || record.status === "stopped" || record.status === "aborted"
|
|
710
|
+
const eventData = buildEventData(record)
|
|
711
|
+
if (isError) {
|
|
712
|
+
pi.events.emit("subagents:failed", eventData)
|
|
713
|
+
} else {
|
|
714
|
+
pi.events.emit("subagents:completed", eventData)
|
|
715
|
+
}
|
|
716
|
+
|
|
717
|
+
pi.appendEntry("subagents:record", {
|
|
718
|
+
id: record.id,
|
|
719
|
+
type: record.type,
|
|
720
|
+
description: record.description,
|
|
721
|
+
visibility: record.visibility,
|
|
722
|
+
status: record.status,
|
|
723
|
+
abortReason: record.abortReason,
|
|
724
|
+
result: record.result,
|
|
725
|
+
error: record.error,
|
|
726
|
+
startedAt: record.startedAt,
|
|
727
|
+
completedAt: record.completedAt,
|
|
728
|
+
})
|
|
729
|
+
|
|
730
|
+
if (record.resultConsumed) {
|
|
731
|
+
agentActivity.delete(record.id)
|
|
732
|
+
widget.markFinished(record.id)
|
|
733
|
+
widget.update()
|
|
734
|
+
return
|
|
735
|
+
}
|
|
736
|
+
|
|
737
|
+
if (record.visibility === "system") {
|
|
738
|
+
// System agents never appear in the widget (AgentWidget filters them
|
|
739
|
+
// out at render time), so markFinished/update are no-ops that would
|
|
740
|
+
// just accrue dead state in `finishedTurnAge` and trigger spurious
|
|
741
|
+
// repaints. Just drop the activity entry and bail.
|
|
742
|
+
agentActivity.delete(record.id)
|
|
743
|
+
return
|
|
744
|
+
}
|
|
745
|
+
|
|
746
|
+
if (currentBatchAgents.some((a) => a.id === record.id)) {
|
|
747
|
+
widget.update()
|
|
748
|
+
return
|
|
749
|
+
}
|
|
750
|
+
|
|
751
|
+
const result = groupJoin.onAgentComplete(record)
|
|
752
|
+
if (result === "pass") {
|
|
753
|
+
sendIndividualNudge(record)
|
|
754
|
+
}
|
|
755
|
+
widget.update()
|
|
756
|
+
},
|
|
757
|
+
undefined,
|
|
758
|
+
(record) => {
|
|
759
|
+
pi.events.emit("subagents:started", {
|
|
760
|
+
id: record.id,
|
|
761
|
+
type: record.type,
|
|
762
|
+
description: record.description,
|
|
763
|
+
visibility: record.visibility,
|
|
764
|
+
})
|
|
765
|
+
void trackSubagentSpawned(record)
|
|
766
|
+
},
|
|
767
|
+
(record, info) => {
|
|
768
|
+
pi.events.emit("subagents:compacted", {
|
|
769
|
+
id: record.id,
|
|
770
|
+
type: record.type,
|
|
771
|
+
description: record.description,
|
|
772
|
+
visibility: record.visibility,
|
|
773
|
+
reason: info.reason,
|
|
774
|
+
tokensBefore: info.tokensBefore,
|
|
775
|
+
compactionCount: record.compactionCount,
|
|
776
|
+
})
|
|
777
|
+
},
|
|
778
|
+
)
|
|
779
|
+
activeManager = manager
|
|
780
|
+
|
|
781
|
+
pi.on("session_start", async (_event, ctx) => {
|
|
782
|
+
manager.clearCompleted()
|
|
783
|
+
// Re-discover custom agents using the new session's cwd, so a session
|
|
784
|
+
// that started in a different project picks up that project's
|
|
785
|
+
// .ikie/agents/ directory and forgets the previous one.
|
|
786
|
+
reloadCustomAgents(ctx.cwd)
|
|
787
|
+
})
|
|
788
|
+
|
|
789
|
+
pi.on("session_before_switch", () => {
|
|
790
|
+
manager.clearCompleted()
|
|
791
|
+
})
|
|
792
|
+
|
|
793
|
+
pi.events.emit("subagents:ready", {})
|
|
794
|
+
|
|
795
|
+
const widget = new AgentWidget(manager, agentActivity)
|
|
796
|
+
const listUserVisibleAgents = () => manager.listAgents().filter((a) => a.visibility !== "system")
|
|
797
|
+
|
|
798
|
+
pi.on("session_shutdown", async () => {
|
|
799
|
+
manager.abortAll()
|
|
800
|
+
budgetRetryCandidates.clear()
|
|
801
|
+
for (const timer of pendingNudges.values()) clearTimeout(timer)
|
|
802
|
+
pendingNudges.clear()
|
|
803
|
+
await waitForSubagentShutdown(manager)
|
|
804
|
+
widget.dispose()
|
|
805
|
+
manager.dispose()
|
|
806
|
+
})
|
|
807
|
+
|
|
808
|
+
let defaultJoinMode: JoinMode = "smart"
|
|
809
|
+
function getDefaultJoinMode(): JoinMode {
|
|
810
|
+
return defaultJoinMode
|
|
811
|
+
}
|
|
812
|
+
function setDefaultJoinMode(mode: JoinMode) {
|
|
813
|
+
defaultJoinMode = mode
|
|
814
|
+
}
|
|
815
|
+
|
|
816
|
+
pi.on("tool_execution_start", async (_event, ctx) => {
|
|
817
|
+
widget.setUICtx(ctx.ui as UICtx)
|
|
818
|
+
widget.onTurnStart()
|
|
819
|
+
})
|
|
820
|
+
|
|
821
|
+
const buildTypeListText = () => {
|
|
822
|
+
const defaultNames = getDefaultAgentNames()
|
|
823
|
+
const userNames = getUserAgentNames()
|
|
824
|
+
|
|
825
|
+
const formatModels = (cfg: ReturnType<typeof getAgentConfig>) => {
|
|
826
|
+
if (!cfg?.models?.length) return ""
|
|
827
|
+
if (cfg.models.length === 1) return ` [model: ${getModelLabelFromConfig(cfg.models[0])}]`
|
|
828
|
+
const labels = cfg.models.map((m) => getModelLabelFromConfig(m))
|
|
829
|
+
return ` [models: ${labels.join(" | ")}]`
|
|
830
|
+
}
|
|
831
|
+
|
|
832
|
+
const defaultDescs = defaultNames.map((name) => {
|
|
833
|
+
const cfg = getAgentConfig(name)
|
|
834
|
+
return `- ${name}: ${cfg?.description ?? name}${formatModels(cfg)}`
|
|
835
|
+
})
|
|
836
|
+
|
|
837
|
+
const customDescs = userNames.map((name) => {
|
|
838
|
+
const cfg = getAgentConfig(name)
|
|
839
|
+
return `- ${name}: ${cfg?.description ?? name}${formatModels(cfg)}`
|
|
840
|
+
})
|
|
841
|
+
|
|
842
|
+
return [
|
|
843
|
+
"Default agents:",
|
|
844
|
+
...defaultDescs,
|
|
845
|
+
...(customDescs.length > 0 ? ["", "Custom agents:", ...customDescs] : []),
|
|
846
|
+
"",
|
|
847
|
+
`Custom agents can be defined in .ikie/agents/<name>.md (project) or ${getAgentDir()}/agents/<name>.md (global) - they are picked up automatically. Project-level agents override global ones. Creating a .md file with the same name as a default agent overrides it.`,
|
|
848
|
+
`Global user instructions (applied to every session) can be placed in the global ${getAgentDir()}/AGENTS.md. Project-level AGENTS.md or CLAUDE.md files in the working directory tree are combined with it.`,
|
|
849
|
+
].join("\n")
|
|
850
|
+
}
|
|
851
|
+
|
|
852
|
+
function getModelLabelFromConfig(model: string): string {
|
|
853
|
+
// biome-ignore lint/style/noNonNullAssertion: split() of a string containing "/" always yields >=2 elements
|
|
854
|
+
const name = model.includes("/") ? model.split("/").pop()! : model
|
|
855
|
+
return name.replace(/-\d{8}$/, "")
|
|
856
|
+
}
|
|
857
|
+
|
|
858
|
+
const typeListText = buildTypeListText()
|
|
859
|
+
|
|
860
|
+
applyAndEmitLoaded(
|
|
861
|
+
{
|
|
862
|
+
setMaxConcurrent: (n) => manager.setMaxConcurrent(n),
|
|
863
|
+
setDefaultMaxTurns,
|
|
864
|
+
setGraceTurns,
|
|
865
|
+
setDefaultJoinMode,
|
|
866
|
+
},
|
|
867
|
+
(event, payload) => pi.events.emit(event, payload),
|
|
868
|
+
)
|
|
869
|
+
|
|
870
|
+
// ---- Agent tool ----
|
|
871
|
+
|
|
872
|
+
pi.registerTool(
|
|
873
|
+
defineTool({
|
|
874
|
+
name: "Agent",
|
|
875
|
+
label: "Agent",
|
|
876
|
+
description: `Launch a new agent to handle complex, multi-step tasks autonomously.
|
|
877
|
+
|
|
878
|
+
The Agent tool launches specialized agents that autonomously handle complex tasks. Each agent type has specific capabilities and tools available to it.
|
|
879
|
+
|
|
880
|
+
Available agent types:
|
|
881
|
+
${typeListText}
|
|
882
|
+
|
|
883
|
+
${AGENT_TOOL_GUIDELINES}`,
|
|
884
|
+
parameters: Type.Object({
|
|
885
|
+
prompt: Type.String({
|
|
886
|
+
description: "The task for the agent to perform.",
|
|
887
|
+
}),
|
|
888
|
+
description: Type.String({
|
|
889
|
+
description: "A short (3-5 word) description of the task (shown in UI).",
|
|
890
|
+
}),
|
|
891
|
+
subagent_type: Type.String({
|
|
892
|
+
description: `The type of specialized agent to use. Available types: ${getAvailableTypes().join(", ")}. Custom agents from .ikie/agents/*.md (project) or ${getAgentDir()}/agents/*.md (global) are also available.`,
|
|
893
|
+
}),
|
|
894
|
+
model: Type.Optional(
|
|
895
|
+
Type.String({
|
|
896
|
+
description: AGENT_MODEL_PARAMETER_DESCRIPTION,
|
|
897
|
+
}),
|
|
898
|
+
),
|
|
899
|
+
thinking: Type.Optional(
|
|
900
|
+
Type.String({
|
|
901
|
+
description:
|
|
902
|
+
"Requested thinking level: off, minimal, low, medium, high, xhigh. Agent profiles with fixed thinking keep their profile value.",
|
|
903
|
+
}),
|
|
904
|
+
),
|
|
905
|
+
max_turns: Type.Optional(
|
|
906
|
+
Type.Number({
|
|
907
|
+
description:
|
|
908
|
+
"Requested maximum agentic turns before stopping. Agent profiles with fixed maxTurns keep their profile value.",
|
|
909
|
+
minimum: 1,
|
|
910
|
+
}),
|
|
911
|
+
),
|
|
912
|
+
token_budget: Type.Optional(
|
|
913
|
+
Type.Integer({
|
|
914
|
+
description:
|
|
915
|
+
"Maximum cumulative output tokens this agent is allowed to generate. Input tokens are not counted.",
|
|
916
|
+
minimum: 1,
|
|
917
|
+
}),
|
|
918
|
+
),
|
|
919
|
+
max_duration: Type.Optional(
|
|
920
|
+
Type.Integer({
|
|
921
|
+
description: "Maximum wall-clock duration in seconds. The agent is aborted when this limit is exceeded.",
|
|
922
|
+
minimum: 1,
|
|
923
|
+
}),
|
|
924
|
+
),
|
|
925
|
+
run_in_background: Type.Optional(
|
|
926
|
+
Type.Boolean({
|
|
927
|
+
description:
|
|
928
|
+
"Set to true to run in background. Returns agent ID immediately. You will be notified on completion.",
|
|
929
|
+
}),
|
|
930
|
+
),
|
|
931
|
+
isolated: Type.Optional(
|
|
932
|
+
Type.Boolean({
|
|
933
|
+
description: "If true, agent gets no extension/MCP tools - only built-in tools.",
|
|
934
|
+
}),
|
|
935
|
+
),
|
|
936
|
+
inherit_context: Type.Optional(
|
|
937
|
+
Type.Boolean({
|
|
938
|
+
description: "If true, fork parent conversation into the agent. Default: false (fresh context).",
|
|
939
|
+
}),
|
|
940
|
+
),
|
|
941
|
+
task_ref: Type.Optional(
|
|
942
|
+
Type.Object({
|
|
943
|
+
kind: Type.Literal("ferment_step"),
|
|
944
|
+
ferment_id: Type.String(),
|
|
945
|
+
phase_id: Type.String(),
|
|
946
|
+
step_id: Type.String(),
|
|
947
|
+
budget_tier: Type.Optional(
|
|
948
|
+
Type.Union([Type.Literal("narrow"), Type.Literal("standard"), Type.Literal("complex")]),
|
|
949
|
+
),
|
|
950
|
+
}),
|
|
951
|
+
),
|
|
952
|
+
}),
|
|
953
|
+
|
|
954
|
+
renderCall(args, theme) {
|
|
955
|
+
// Defense-in-depth: `visibility` is not in this tool's public schema (see execute()),
|
|
956
|
+
// but if an LLM hallucinates the arg we'd rather hide the tool call than render it.
|
|
957
|
+
if ((args as Record<string, unknown>).visibility === "system") return new Text("", 0, 0)
|
|
958
|
+
const displayName = args.subagent_type ? getDisplayName(args.subagent_type as string) : "Agent"
|
|
959
|
+
const desc = (args.description as string) ?? ""
|
|
960
|
+
return new Text(
|
|
961
|
+
`▸ ${theme.fg("toolTitle", theme.bold(displayName))}${desc ? ` ${theme.fg("muted", desc)}` : ""}`,
|
|
962
|
+
0,
|
|
963
|
+
0,
|
|
964
|
+
)
|
|
965
|
+
},
|
|
966
|
+
|
|
967
|
+
renderResult(result, { expanded: piExpanded, isPartial }, theme, context) {
|
|
968
|
+
// Wire ikie's global ctrl+o cycle: register on first render, then read the
|
|
969
|
+
// per-tool flag back. Falls back to pi's renderer flag if available.
|
|
970
|
+
if (context?.toolCallId) registerToolCall(context.toolCallId)
|
|
971
|
+
const expanded = piExpanded || (context?.toolCallId ? isToolExpanded(context.toolCallId) : false)
|
|
972
|
+
|
|
973
|
+
const details = result.details as AgentDetails | undefined
|
|
974
|
+
if (details?.visibility === "system") return new Text("", 0, 0)
|
|
975
|
+
if (!details) {
|
|
976
|
+
const text = result.content[0]?.type === "text" ? result.content[0].text : ""
|
|
977
|
+
return new Text(text, 0, 0)
|
|
978
|
+
}
|
|
979
|
+
|
|
980
|
+
const stats = (d: AgentDetails) => {
|
|
981
|
+
const parts: string[] = []
|
|
982
|
+
if (d.modelName) parts.push(d.modelName)
|
|
983
|
+
if (d.tags) parts.push(...d.tags)
|
|
984
|
+
if (d.turnCount != null && d.turnCount > 0) {
|
|
985
|
+
parts.push(formatTurns(d.turnCount, d.maxTurns))
|
|
986
|
+
}
|
|
987
|
+
if (d.toolUses > 0) parts.push(`${d.toolUses} tool use${d.toolUses === 1 ? "" : "s"}`)
|
|
988
|
+
if (d.tokens) parts.push(d.tokens)
|
|
989
|
+
return parts.map((p) => theme.fg("dim", p)).join(` ${theme.fg("dim", "·")} `)
|
|
990
|
+
}
|
|
991
|
+
|
|
992
|
+
if (isPartial || details.status === "running") {
|
|
993
|
+
const frame = SPINNER[details.spinnerFrame ?? 0]
|
|
994
|
+
const s = stats(details)
|
|
995
|
+
let line = theme.fg("accent", frame) + (s ? ` ${s}` : "")
|
|
996
|
+
line += `\n${theme.fg("dim", ` ⎿ ${details.activity ?? "thinking..."}`)}`
|
|
997
|
+
return new Text(line, 0, 0)
|
|
998
|
+
}
|
|
999
|
+
|
|
1000
|
+
if (details.status === "background") {
|
|
1001
|
+
return new Text(theme.fg("dim", ` ⎿ Running in background (ID: ${details.agentId})`), 0, 0)
|
|
1002
|
+
}
|
|
1003
|
+
|
|
1004
|
+
if (details.status === "completed" || details.status === "steered") {
|
|
1005
|
+
const duration = formatMs(details.durationMs)
|
|
1006
|
+
const isSteered = details.status === "steered"
|
|
1007
|
+
const icon = isSteered ? theme.fg("warning", "✓") : theme.fg("success", "✓")
|
|
1008
|
+
const s = stats(details)
|
|
1009
|
+
let line = icon + (s ? ` ${s}` : "")
|
|
1010
|
+
line += ` ${theme.fg("dim", "·")} ${theme.fg("dim", duration)}`
|
|
1011
|
+
|
|
1012
|
+
if (expanded) {
|
|
1013
|
+
const resultText = result.content[0]?.type === "text" ? result.content[0].text : ""
|
|
1014
|
+
if (resultText) {
|
|
1015
|
+
const lines = resultText.split("\n").slice(0, 50)
|
|
1016
|
+
for (const l of lines) {
|
|
1017
|
+
line += `\n${theme.fg("dim", ` ${l}`)}`
|
|
1018
|
+
}
|
|
1019
|
+
if (resultText.split("\n").length > 50) {
|
|
1020
|
+
line += `\n${theme.fg("muted", " ... (use get_subagent_result with verbose for full output)")}`
|
|
1021
|
+
}
|
|
1022
|
+
}
|
|
1023
|
+
} else {
|
|
1024
|
+
const doneText = isSteered ? "Wrapped up (turn limit)" : "Done"
|
|
1025
|
+
line += `\n${theme.fg("dim", ` ⎿ ${doneText}`)}`
|
|
1026
|
+
}
|
|
1027
|
+
return new Text(line, 0, 0)
|
|
1028
|
+
}
|
|
1029
|
+
|
|
1030
|
+
if (details.status === "stopped") {
|
|
1031
|
+
const s = stats(details)
|
|
1032
|
+
let line = theme.fg("dim", "■") + (s ? ` ${s}` : "")
|
|
1033
|
+
line += `\n${theme.fg("dim", " ⎿ Stopped")}`
|
|
1034
|
+
return new Text(line, 0, 0)
|
|
1035
|
+
}
|
|
1036
|
+
|
|
1037
|
+
const s = stats(details)
|
|
1038
|
+
let line = theme.fg("error", "✗") + (s ? ` ${s}` : "")
|
|
1039
|
+
|
|
1040
|
+
if (details.status === "error") {
|
|
1041
|
+
line += `\n${theme.fg("error", ` ⎿ Error: ${details.error ?? "unknown"}`)}`
|
|
1042
|
+
} else {
|
|
1043
|
+
line += `\n${theme.fg("warning", ` ⎿ ${getAbortLabel(details.abortReason)}`)}`
|
|
1044
|
+
}
|
|
1045
|
+
|
|
1046
|
+
return new Text(line, 0, 0)
|
|
1047
|
+
},
|
|
1048
|
+
|
|
1049
|
+
execute: async (toolCallId, params, signal, onUpdate, ctx) => {
|
|
1050
|
+
widget.setUICtx(ctx.ui as UICtx)
|
|
1051
|
+
|
|
1052
|
+
reloadCustomAgents()
|
|
1053
|
+
|
|
1054
|
+
const rawType = params.subagent_type as SubagentType
|
|
1055
|
+
const resolved = resolveType(rawType)
|
|
1056
|
+
const subagentType = resolved ?? AGENT_GENERAL_PURPOSE
|
|
1057
|
+
const fellBack = resolved === undefined
|
|
1058
|
+
|
|
1059
|
+
const displayName = getDisplayName(subagentType)
|
|
1060
|
+
|
|
1061
|
+
const customConfig = getAgentConfig(subagentType)
|
|
1062
|
+
|
|
1063
|
+
const resolvedConfig = resolveAgentInvocationConfig(
|
|
1064
|
+
customConfig,
|
|
1065
|
+
params as Parameters<typeof resolveAgentInvocationConfig>[1],
|
|
1066
|
+
)
|
|
1067
|
+
|
|
1068
|
+
let model = ctx.model
|
|
1069
|
+
if (resolvedConfig.modelInput) {
|
|
1070
|
+
const resolvedModel = resolveModel(resolvedConfig.modelInput, ctx.modelRegistry as ModelRegistry)
|
|
1071
|
+
if (typeof resolvedModel === "string") {
|
|
1072
|
+
if (resolvedConfig.modelFromParams) return textResult(resolvedModel)
|
|
1073
|
+
} else {
|
|
1074
|
+
model = resolvedModel as typeof ctx.model
|
|
1075
|
+
}
|
|
1076
|
+
}
|
|
1077
|
+
|
|
1078
|
+
const explicitTokenBudget =
|
|
1079
|
+
(params as { token_budget?: number; tokenBudget?: number }).token_budget ??
|
|
1080
|
+
(params as { token_budget?: number; tokenBudget?: number }).tokenBudget
|
|
1081
|
+
const activeBudgetRetryBlock = budgetRetryBlock
|
|
1082
|
+
if (
|
|
1083
|
+
activeBudgetRetryBlock &&
|
|
1084
|
+
shouldBlockBudgetRetry(activeBudgetRetryBlock, {
|
|
1085
|
+
tokenBudget: resolvedConfig.tokenBudget,
|
|
1086
|
+
subagentType,
|
|
1087
|
+
description: params.description as string,
|
|
1088
|
+
prompt: params.prompt as string,
|
|
1089
|
+
})
|
|
1090
|
+
) {
|
|
1091
|
+
return textResult(
|
|
1092
|
+
`Agent retry blocked: the previous Agent call for "${activeBudgetRetryBlock.description}" already aborted because the user-supplied token_budget (${formatTokens(activeBudgetRetryBlock.budget)}) was too small. Do not raise the budget or retry the Agent tool unless the user explicitly asks.`,
|
|
1093
|
+
)
|
|
1094
|
+
}
|
|
1095
|
+
|
|
1096
|
+
const thinking = resolvedConfig.thinking
|
|
1097
|
+
const inheritContext = resolvedConfig.inheritContext
|
|
1098
|
+
const isolated = resolvedConfig.isolated
|
|
1099
|
+
const taskRef = readAgentTaskRef(params)
|
|
1100
|
+
if (taskRef && (params.max_turns == null || params.max_duration == null || params.token_budget == null)) {
|
|
1101
|
+
return textResult(
|
|
1102
|
+
"Ferment-linked Agent calls require explicit max_turns, max_duration, and token_budget from the shared worker budget policy.",
|
|
1103
|
+
)
|
|
1104
|
+
}
|
|
1105
|
+
if (taskRef && isolated) {
|
|
1106
|
+
return textResult(
|
|
1107
|
+
"Agent task_ref cannot be used with isolated: true. Ferment-linked workers must have extension tools enabled so they can call submit_agent_report.",
|
|
1108
|
+
)
|
|
1109
|
+
}
|
|
1110
|
+
// The `visibility` field is intentionally NOT exposed in this tool's public schema -
|
|
1111
|
+
// LLMs and personas cannot create hidden agents. Internal ikie callers (e.g. permission
|
|
1112
|
+
// classifiers, future MCP adapters) spawn hidden agents directly via `AgentManager.spawn(..., { visibility: "system" })`,
|
|
1113
|
+
// which bypasses the tool layer entirely. Hardcoding "user" here ensures any defiant
|
|
1114
|
+
// LLM that hallucinates a `visibility` arg gets ignored at the source.
|
|
1115
|
+
const visibility: AgentVisibility = "user"
|
|
1116
|
+
const runInBackground = resolvedConfig.runInBackground
|
|
1117
|
+
|
|
1118
|
+
// Image forwarding: when session has images and subagent model supports vision,
|
|
1119
|
+
// extract image paths from read tool calls and prepend them to the prompt.
|
|
1120
|
+
const effectivePrompt = (() => {
|
|
1121
|
+
const base = params.prompt as string
|
|
1122
|
+
if (!sessionHasImages()) return base
|
|
1123
|
+
const modelInput = (model as { input?: string[] } | undefined)?.input
|
|
1124
|
+
if (!modelInput?.includes("image")) return base
|
|
1125
|
+
|
|
1126
|
+
const imagePaths = extractImagePathsFromSession(ctx)
|
|
1127
|
+
if (imagePaths.length === 0) return base
|
|
1128
|
+
|
|
1129
|
+
const pathList = imagePaths.join(", ")
|
|
1130
|
+
return `Context images from parent session: ${pathList}. Read them if needed for your task.\n\n${base}`
|
|
1131
|
+
})()
|
|
1132
|
+
|
|
1133
|
+
const parentModelId = ctx.model?.id
|
|
1134
|
+
const effectiveModelId = (model as { id?: string } | undefined)?.id
|
|
1135
|
+
const agentModelName =
|
|
1136
|
+
effectiveModelId && effectiveModelId !== parentModelId
|
|
1137
|
+
? ((model as { name?: string; id?: string } | undefined)?.name ?? effectiveModelId)
|
|
1138
|
+
.replace(/^Claude\s+/i, "")
|
|
1139
|
+
.toLowerCase()
|
|
1140
|
+
: undefined
|
|
1141
|
+
const agentTags: string[] = []
|
|
1142
|
+
if (thinking) agentTags.push(`thinking: ${thinking}`)
|
|
1143
|
+
if (resolvedConfig.tokenBudget != null) agentTags.push(`budget: ${formatTokens(resolvedConfig.tokenBudget)}`)
|
|
1144
|
+
if (isolated) agentTags.push("isolated")
|
|
1145
|
+
const effectiveMaxTurns = normalizeMaxTurns(resolvedConfig.maxTurns ?? getDefaultMaxTurns())
|
|
1146
|
+
const detailBase = {
|
|
1147
|
+
displayName,
|
|
1148
|
+
description: params.description as string,
|
|
1149
|
+
subagentType,
|
|
1150
|
+
visibility,
|
|
1151
|
+
modelName: agentModelName,
|
|
1152
|
+
tags: agentTags.length > 0 ? agentTags : undefined,
|
|
1153
|
+
}
|
|
1154
|
+
|
|
1155
|
+
if (runInBackground) {
|
|
1156
|
+
const { state: bgState, callbacks: bgCallbacks } = createActivityTracker(effectiveMaxTurns)
|
|
1157
|
+
let childSessionFile: string | undefined
|
|
1158
|
+
const parentSessionDir = ctx.sessionManager.getSessionDir()
|
|
1159
|
+
try {
|
|
1160
|
+
childSessionFile = prepareAgentSessionFile(
|
|
1161
|
+
parentSessionDir,
|
|
1162
|
+
ctx.sessionManager.getSessionFile(),
|
|
1163
|
+
ctx.cwd,
|
|
1164
|
+
)?.sessionFile
|
|
1165
|
+
} catch (err) {
|
|
1166
|
+
const detail = err instanceof Error ? err.message : String(err)
|
|
1167
|
+
return textResult(`Failed to pre-write Agent session file under ${parentSessionDir}: ${detail}`)
|
|
1168
|
+
}
|
|
1169
|
+
|
|
1170
|
+
let id: string
|
|
1171
|
+
const origBgOnSession = bgCallbacks.onSessionCreated
|
|
1172
|
+
bgCallbacks.onSessionCreated = (session: unknown) => {
|
|
1173
|
+
origBgOnSession(session)
|
|
1174
|
+
const rec = manager.getRecord(id)
|
|
1175
|
+
if (rec?.outputFile) {
|
|
1176
|
+
rec.outputCleanup = streamToOutputFile(
|
|
1177
|
+
session as Parameters<typeof streamToOutputFile>[0],
|
|
1178
|
+
rec.outputFile,
|
|
1179
|
+
id,
|
|
1180
|
+
ctx.cwd,
|
|
1181
|
+
)
|
|
1182
|
+
}
|
|
1183
|
+
}
|
|
1184
|
+
|
|
1185
|
+
try {
|
|
1186
|
+
id = manager.spawn(pi, ctx, subagentType, effectivePrompt, {
|
|
1187
|
+
description: params.description as string,
|
|
1188
|
+
visibility,
|
|
1189
|
+
model: model as Parameters<typeof manager.spawn>[4]["model"],
|
|
1190
|
+
maxTurns: effectiveMaxTurns,
|
|
1191
|
+
tokenBudget: resolvedConfig.tokenBudget,
|
|
1192
|
+
taskRef,
|
|
1193
|
+
maxDuration: resolvedConfig.maxDuration,
|
|
1194
|
+
isolated,
|
|
1195
|
+
inheritContext,
|
|
1196
|
+
thinkingLevel: thinking,
|
|
1197
|
+
isBackground: true,
|
|
1198
|
+
sessionFile: childSessionFile,
|
|
1199
|
+
sessionDir: parentSessionDir,
|
|
1200
|
+
...bgCallbacks,
|
|
1201
|
+
})
|
|
1202
|
+
} catch (err) {
|
|
1203
|
+
return textResult(err instanceof Error ? err.message : String(err))
|
|
1204
|
+
}
|
|
1205
|
+
|
|
1206
|
+
const joinMode = resolveJoinMode(getDefaultJoinMode(), true)
|
|
1207
|
+
const record = manager.getRecord(id)
|
|
1208
|
+
if (record && joinMode) {
|
|
1209
|
+
record.joinMode = joinMode
|
|
1210
|
+
record.toolCallId = toolCallId
|
|
1211
|
+
record.outputFile = createOutputFilePath(ctx.cwd, id, ctx.sessionManager.getSessionId(), parentSessionDir)
|
|
1212
|
+
writeInitialEntry(record.outputFile, id, params.prompt as string, ctx.cwd)
|
|
1213
|
+
}
|
|
1214
|
+
if (explicitTokenBudget != null) {
|
|
1215
|
+
budgetRetryCandidates.set(id, {
|
|
1216
|
+
budget: explicitTokenBudget,
|
|
1217
|
+
subagentType,
|
|
1218
|
+
description: params.description as string,
|
|
1219
|
+
prompt: params.prompt as string,
|
|
1220
|
+
})
|
|
1221
|
+
}
|
|
1222
|
+
|
|
1223
|
+
if (joinMode != null && joinMode !== "async") {
|
|
1224
|
+
currentBatchAgents.push({ id, joinMode })
|
|
1225
|
+
if (batchFinalizeTimer) clearTimeout(batchFinalizeTimer)
|
|
1226
|
+
batchFinalizeTimer = setTimeout(finalizeBatch, 100)
|
|
1227
|
+
}
|
|
1228
|
+
|
|
1229
|
+
agentActivity.set(id, bgState)
|
|
1230
|
+
widget.ensureTimer()
|
|
1231
|
+
widget.update()
|
|
1232
|
+
|
|
1233
|
+
pi.events.emit("subagents:created", {
|
|
1234
|
+
id,
|
|
1235
|
+
type: subagentType,
|
|
1236
|
+
description: params.description,
|
|
1237
|
+
isBackground: true,
|
|
1238
|
+
visibility,
|
|
1239
|
+
})
|
|
1240
|
+
|
|
1241
|
+
const isQueued = record?.status === "queued"
|
|
1242
|
+
return textResult(
|
|
1243
|
+
`Agent ${isQueued ? "queued" : "started"} in background.\nAgent ID: ${id}\nType: ${displayName}\nDescription: ${params.description}\n${record?.outputFile ? `Output file: ${record.outputFile}\n` : ""}${isQueued ? `Position: queued (max ${manager.getMaxConcurrent()} concurrent)\n` : ""}\nYou will be notified when this agent completes.\nUse get_subagent_result to retrieve full results, or steer_subagent to send it messages.\nDo not duplicate this agent's work.`,
|
|
1244
|
+
{ ...detailBase, toolUses: 0, tokens: "", durationMs: 0, status: "background" as const, agentId: id },
|
|
1245
|
+
)
|
|
1246
|
+
}
|
|
1247
|
+
|
|
1248
|
+
// Foreground (synchronous) execution
|
|
1249
|
+
let spinnerFrame = 0
|
|
1250
|
+
const startedAt = Date.now()
|
|
1251
|
+
let fgId: string | undefined
|
|
1252
|
+
|
|
1253
|
+
const streamUpdate = () => {
|
|
1254
|
+
const details: AgentDetails = {
|
|
1255
|
+
...detailBase,
|
|
1256
|
+
toolUses: fgState.toolUses,
|
|
1257
|
+
tokens: formatLifetimeTokens(fgState),
|
|
1258
|
+
turnCount: fgState.turnCount,
|
|
1259
|
+
maxTurns: fgState.maxTurns,
|
|
1260
|
+
durationMs: Date.now() - startedAt,
|
|
1261
|
+
status: "running",
|
|
1262
|
+
activity: describeActivity(fgState.activeTools, fgState.responseText),
|
|
1263
|
+
spinnerFrame: spinnerFrame % SPINNER.length,
|
|
1264
|
+
}
|
|
1265
|
+
onUpdate?.({
|
|
1266
|
+
content: [{ type: "text", text: `${fgState.toolUses} tool uses...` }],
|
|
1267
|
+
details: details as unknown,
|
|
1268
|
+
})
|
|
1269
|
+
}
|
|
1270
|
+
|
|
1271
|
+
const { state: fgState, callbacks: fgCallbacks } = createActivityTracker(effectiveMaxTurns, streamUpdate)
|
|
1272
|
+
|
|
1273
|
+
const origOnSession = fgCallbacks.onSessionCreated
|
|
1274
|
+
fgCallbacks.onSessionCreated = (session: unknown) => {
|
|
1275
|
+
origOnSession(session)
|
|
1276
|
+
for (const a of manager.listAgents()) {
|
|
1277
|
+
if (a.session === session) {
|
|
1278
|
+
fgId = a.id
|
|
1279
|
+
agentActivity.set(a.id, fgState)
|
|
1280
|
+
widget.ensureTimer()
|
|
1281
|
+
break
|
|
1282
|
+
}
|
|
1283
|
+
}
|
|
1284
|
+
}
|
|
1285
|
+
|
|
1286
|
+
const spinnerInterval = setInterval(() => {
|
|
1287
|
+
spinnerFrame++
|
|
1288
|
+
streamUpdate()
|
|
1289
|
+
}, 80)
|
|
1290
|
+
|
|
1291
|
+
streamUpdate()
|
|
1292
|
+
|
|
1293
|
+
let record: AgentRecord
|
|
1294
|
+
let childSessionFile: string | undefined
|
|
1295
|
+
const parentSessionDir = ctx.sessionManager.getSessionDir()
|
|
1296
|
+
try {
|
|
1297
|
+
childSessionFile = prepareAgentSessionFile(
|
|
1298
|
+
parentSessionDir,
|
|
1299
|
+
ctx.sessionManager.getSessionFile(),
|
|
1300
|
+
ctx.cwd,
|
|
1301
|
+
)?.sessionFile
|
|
1302
|
+
} catch (err) {
|
|
1303
|
+
clearInterval(spinnerInterval)
|
|
1304
|
+
const detail = err instanceof Error ? err.message : String(err)
|
|
1305
|
+
return textResult(`Failed to pre-write Agent session file under ${parentSessionDir}: ${detail}`)
|
|
1306
|
+
}
|
|
1307
|
+
try {
|
|
1308
|
+
record = await manager.spawnAndWait(pi, ctx, subagentType, effectivePrompt, {
|
|
1309
|
+
description: params.description as string,
|
|
1310
|
+
visibility,
|
|
1311
|
+
model: model as Parameters<typeof manager.spawnAndWait>[4]["model"],
|
|
1312
|
+
maxTurns: effectiveMaxTurns,
|
|
1313
|
+
tokenBudget: resolvedConfig.tokenBudget,
|
|
1314
|
+
taskRef,
|
|
1315
|
+
maxDuration: resolvedConfig.maxDuration,
|
|
1316
|
+
isolated,
|
|
1317
|
+
inheritContext,
|
|
1318
|
+
thinkingLevel: thinking,
|
|
1319
|
+
sessionFile: childSessionFile,
|
|
1320
|
+
sessionDir: parentSessionDir,
|
|
1321
|
+
signal,
|
|
1322
|
+
...fgCallbacks,
|
|
1323
|
+
})
|
|
1324
|
+
} catch (err) {
|
|
1325
|
+
clearInterval(spinnerInterval)
|
|
1326
|
+
return textResult(err instanceof Error ? err.message : String(err))
|
|
1327
|
+
}
|
|
1328
|
+
|
|
1329
|
+
clearInterval(spinnerInterval)
|
|
1330
|
+
|
|
1331
|
+
if (fgId) {
|
|
1332
|
+
agentActivity.delete(fgId)
|
|
1333
|
+
widget.markFinished(fgId)
|
|
1334
|
+
}
|
|
1335
|
+
|
|
1336
|
+
const tokenText = formatLifetimeTokens(fgState)
|
|
1337
|
+
|
|
1338
|
+
const details = buildDetails(detailBase, record, fgState, { tokens: tokenText })
|
|
1339
|
+
|
|
1340
|
+
const fallbackNote = fellBack
|
|
1341
|
+
? `Note: Unknown agent type "${rawType}" - using ${AGENT_GENERAL_PURPOSE}.\n\n`
|
|
1342
|
+
: ""
|
|
1343
|
+
|
|
1344
|
+
if (record.status === "error") {
|
|
1345
|
+
return textResult(`${fallbackNote}Agent failed: ${record.error}`, details)
|
|
1346
|
+
}
|
|
1347
|
+
blockBudgetRetryIfNeeded(
|
|
1348
|
+
record,
|
|
1349
|
+
explicitTokenBudget != null
|
|
1350
|
+
? {
|
|
1351
|
+
budget: explicitTokenBudget,
|
|
1352
|
+
subagentType,
|
|
1353
|
+
description: params.description as string,
|
|
1354
|
+
prompt: params.prompt as string,
|
|
1355
|
+
}
|
|
1356
|
+
: undefined,
|
|
1357
|
+
)
|
|
1358
|
+
|
|
1359
|
+
const durationMs = (record.completedAt ?? Date.now()) - record.startedAt
|
|
1360
|
+
const statsParts = [`${record.toolUses} tool uses`]
|
|
1361
|
+
if (tokenText) statsParts.push(tokenText)
|
|
1362
|
+
const outcome = record.status === "aborted" ? "aborted" : record.status === "stopped" ? "stopped" : "completed"
|
|
1363
|
+
record.latestOutcome ??= buildAgentOutcome(record)
|
|
1364
|
+
return textResult(
|
|
1365
|
+
`${fallbackNote}Agent ${outcome} in ${formatMs(durationMs)} (${statsParts.join(", ")})${getStatusNote(record.status, record.abortReason)}.${getStatusInstruction(record.status, record.abortReason)}\n\n${record.result?.trim() || "No output."}${formatAgentOutcomeBlock(record.latestOutcome)}`,
|
|
1366
|
+
details,
|
|
1367
|
+
)
|
|
1368
|
+
},
|
|
1369
|
+
}),
|
|
1370
|
+
)
|
|
1371
|
+
|
|
1372
|
+
registerResumeSubagentTool(pi, manager)
|
|
1373
|
+
|
|
1374
|
+
// ---- get_subagent_result tool ----
|
|
1375
|
+
|
|
1376
|
+
pi.registerTool(
|
|
1377
|
+
defineTool({
|
|
1378
|
+
name: "get_subagent_result",
|
|
1379
|
+
label: "Get Agent Result",
|
|
1380
|
+
description:
|
|
1381
|
+
"Check status and retrieve results from a background agent. Use the agent ID returned by Agent with run_in_background.",
|
|
1382
|
+
parameters: Type.Object({
|
|
1383
|
+
agent_id: Type.String({
|
|
1384
|
+
description: "The agent ID to check.",
|
|
1385
|
+
}),
|
|
1386
|
+
wait: Type.Optional(
|
|
1387
|
+
Type.Boolean({
|
|
1388
|
+
description: "If true, wait for the agent to complete before returning. Default: false.",
|
|
1389
|
+
}),
|
|
1390
|
+
),
|
|
1391
|
+
verbose: Type.Optional(
|
|
1392
|
+
Type.Boolean({
|
|
1393
|
+
description: "If true, include the agent's full conversation (messages + tool calls). Default: false.",
|
|
1394
|
+
}),
|
|
1395
|
+
),
|
|
1396
|
+
}),
|
|
1397
|
+
|
|
1398
|
+
renderResult(result, { expanded: piExpanded }, theme, context) {
|
|
1399
|
+
if (context?.toolCallId) registerToolCall(context.toolCallId)
|
|
1400
|
+
const expanded = piExpanded || (context?.toolCallId ? isToolExpanded(context.toolCallId) : false)
|
|
1401
|
+
|
|
1402
|
+
const details = result.details as GetSubagentResultDetails | undefined
|
|
1403
|
+
// Defense-in-depth: hide get_subagent_result output for system agents in the TUI
|
|
1404
|
+
// (consistency with the Agent tool's renderCall/renderResult short-circuits).
|
|
1405
|
+
if (details?.visibility === "system") return new Text("", 0, 0)
|
|
1406
|
+
if (!details) {
|
|
1407
|
+
const text = result.content[0]?.type === "text" ? result.content[0].text : ""
|
|
1408
|
+
return new Text(text, 0, 0)
|
|
1409
|
+
}
|
|
1410
|
+
|
|
1411
|
+
const statsLine = (d: GetSubagentResultDetails) => {
|
|
1412
|
+
const parts: string[] = [d.status]
|
|
1413
|
+
if (d.toolUses > 0) parts.push(`${d.toolUses} tool use${d.toolUses === 1 ? "" : "s"}`)
|
|
1414
|
+
if (d.tokens) parts.push(d.tokens)
|
|
1415
|
+
if (d.contextPercent != null) parts.push(`${Math.round(d.contextPercent)}% ctx`)
|
|
1416
|
+
if (d.compactionCount && d.compactionCount > 0) {
|
|
1417
|
+
parts.push(`${d.compactionCount} compaction${d.compactionCount === 1 ? "" : "s"}`)
|
|
1418
|
+
}
|
|
1419
|
+
return parts.map((p) => theme.fg("dim", p)).join(` ${theme.fg("dim", "·")} `)
|
|
1420
|
+
}
|
|
1421
|
+
|
|
1422
|
+
const icon = getSubagentResultIcon(details.status, theme)
|
|
1423
|
+
|
|
1424
|
+
const headerName = theme.fg("toolTitle", theme.bold("Get Agent Result"))
|
|
1425
|
+
const headerDesc = details.description ? ` ${theme.fg("muted", details.description)}` : ""
|
|
1426
|
+
const durationTail =
|
|
1427
|
+
details.durationMs != null ? ` ${theme.fg("dim", "·")} ${theme.fg("dim", formatMs(details.durationMs))}` : ""
|
|
1428
|
+
|
|
1429
|
+
let line = `${icon} ${headerName}${headerDesc}${durationTail}`
|
|
1430
|
+
const stats = statsLine(details)
|
|
1431
|
+
if (stats) line += `\n${theme.fg("dim", " ⎿ ")}${stats}`
|
|
1432
|
+
|
|
1433
|
+
const bodyText = details.bodyText ?? ""
|
|
1434
|
+
if (expanded && bodyText) {
|
|
1435
|
+
const lines = bodyText.split("\n")
|
|
1436
|
+
const maxLines = 50
|
|
1437
|
+
const visible = lines.slice(0, maxLines)
|
|
1438
|
+
for (const l of visible) {
|
|
1439
|
+
line += `\n${theme.fg("dim", ` ${l}`)}`
|
|
1440
|
+
}
|
|
1441
|
+
if (lines.length > maxLines) {
|
|
1442
|
+
line += `\n${theme.fg("muted", ` ... (${lines.length - maxLines} more lines - use verbose: true for full output)`)}`
|
|
1443
|
+
}
|
|
1444
|
+
} else if (!expanded) {
|
|
1445
|
+
const summary = summaryForStatus(details.status, details.error, details.abortReason)
|
|
1446
|
+
line += `\n${theme.fg("dim", ` ⎿ ${summary}`)}`
|
|
1447
|
+
}
|
|
1448
|
+
|
|
1449
|
+
return new Text(line, 0, 0)
|
|
1450
|
+
},
|
|
1451
|
+
|
|
1452
|
+
execute: async (_toolCallId, params, _signal, _onUpdate, _ctx) => {
|
|
1453
|
+
const record = manager.getRecord(params.agent_id as string)
|
|
1454
|
+
if (!record) {
|
|
1455
|
+
return textResult(`Agent not found: "${params.agent_id}". It may have been cleaned up.`)
|
|
1456
|
+
}
|
|
1457
|
+
|
|
1458
|
+
if (params.wait && record.status === "running" && record.promise) {
|
|
1459
|
+
record.resultConsumed = true
|
|
1460
|
+
cancelNudge(params.agent_id as string)
|
|
1461
|
+
await record.promise
|
|
1462
|
+
}
|
|
1463
|
+
|
|
1464
|
+
const displayName = getDisplayName(record.type)
|
|
1465
|
+
const duration = formatDuration(record.startedAt, record.completedAt)
|
|
1466
|
+
const tokens = formatLifetimeTokens(record)
|
|
1467
|
+
const contextPercent = getSessionContextPercent(record.session)
|
|
1468
|
+
const statsParts = [`Tool uses: ${record.toolUses}`]
|
|
1469
|
+
if (tokens) statsParts.push(tokens)
|
|
1470
|
+
if (contextPercent !== null) statsParts.push(`Context: ${Math.round(contextPercent)}%`)
|
|
1471
|
+
if (record.compactionCount) statsParts.push(`Compactions: ${record.compactionCount}`)
|
|
1472
|
+
statsParts.push(`Duration: ${duration}`)
|
|
1473
|
+
|
|
1474
|
+
let output =
|
|
1475
|
+
`Agent: ${record.id}\n` +
|
|
1476
|
+
`Type: ${displayName} | Status: ${record.status} | ${statsParts.join(" | ")}\n` +
|
|
1477
|
+
`Description: ${record.description}\n\n`
|
|
1478
|
+
|
|
1479
|
+
let bodyForDisplay: string
|
|
1480
|
+
if (record.status === "running") {
|
|
1481
|
+
bodyForDisplay = "Agent is still running. Use wait: true or check back later."
|
|
1482
|
+
output += bodyForDisplay
|
|
1483
|
+
} else if (record.status === "error") {
|
|
1484
|
+
bodyForDisplay = `Error: ${record.error}`
|
|
1485
|
+
output += bodyForDisplay
|
|
1486
|
+
} else {
|
|
1487
|
+
bodyForDisplay = record.result?.trim() || "No output."
|
|
1488
|
+
output += bodyForDisplay
|
|
1489
|
+
}
|
|
1490
|
+
record.latestOutcome ??= buildAgentOutcome(record)
|
|
1491
|
+
if (record.latestOutcome && record.status !== "running" && record.status !== "queued") {
|
|
1492
|
+
const outcomeBlock = formatAgentOutcomeBlock(record.latestOutcome)
|
|
1493
|
+
output += outcomeBlock
|
|
1494
|
+
bodyForDisplay += outcomeBlock
|
|
1495
|
+
}
|
|
1496
|
+
|
|
1497
|
+
if (record.status !== "running" && record.status !== "queued") {
|
|
1498
|
+
record.resultConsumed = true
|
|
1499
|
+
cancelNudge(params.agent_id as string)
|
|
1500
|
+
}
|
|
1501
|
+
|
|
1502
|
+
if (params.verbose && record.session) {
|
|
1503
|
+
const conversation = getAgentConversation(record.session)
|
|
1504
|
+
if (conversation) {
|
|
1505
|
+
const verboseTail = `\n\n--- Agent Conversation ---\n${conversation}`
|
|
1506
|
+
output += verboseTail
|
|
1507
|
+
bodyForDisplay += verboseTail
|
|
1508
|
+
}
|
|
1509
|
+
}
|
|
1510
|
+
|
|
1511
|
+
const completedAt = record.completedAt ?? Date.now()
|
|
1512
|
+
const durationMs = record.startedAt != null ? completedAt - record.startedAt : undefined
|
|
1513
|
+
const details: GetSubagentResultDetails = {
|
|
1514
|
+
agentId: record.id,
|
|
1515
|
+
displayName,
|
|
1516
|
+
description: record.description,
|
|
1517
|
+
status: record.status,
|
|
1518
|
+
visibility: record.visibility,
|
|
1519
|
+
abortReason: record.abortReason,
|
|
1520
|
+
toolUses: record.toolUses,
|
|
1521
|
+
tokens,
|
|
1522
|
+
contextPercent,
|
|
1523
|
+
compactionCount: record.compactionCount,
|
|
1524
|
+
durationMs,
|
|
1525
|
+
error: record.error,
|
|
1526
|
+
bodyText: formatAgentBodyForDisplay(bodyForDisplay),
|
|
1527
|
+
agentOutcome: record.latestOutcome,
|
|
1528
|
+
}
|
|
1529
|
+
|
|
1530
|
+
return textResult(output, details)
|
|
1531
|
+
},
|
|
1532
|
+
}),
|
|
1533
|
+
)
|
|
1534
|
+
|
|
1535
|
+
// ---- steer_subagent tool ----
|
|
1536
|
+
|
|
1537
|
+
pi.registerTool(
|
|
1538
|
+
defineTool({
|
|
1539
|
+
name: "steer_subagent",
|
|
1540
|
+
label: "Steer Agent",
|
|
1541
|
+
description:
|
|
1542
|
+
"Send a steering message to a running agent. The message will interrupt the agent after its current tool execution " +
|
|
1543
|
+
"and be injected into its conversation, allowing you to redirect its work mid-run. Only works on running agents.",
|
|
1544
|
+
parameters: Type.Object({
|
|
1545
|
+
agent_id: Type.String({
|
|
1546
|
+
description: "The agent ID to steer (must be currently running).",
|
|
1547
|
+
}),
|
|
1548
|
+
message: Type.String({
|
|
1549
|
+
description: "The steering message to send. This will appear as a user message in the agent's conversation.",
|
|
1550
|
+
}),
|
|
1551
|
+
}),
|
|
1552
|
+
execute: async (_toolCallId, params, _signal, _onUpdate, _ctx) => {
|
|
1553
|
+
const record = manager.getRecord(params.agent_id as string)
|
|
1554
|
+
if (!record) {
|
|
1555
|
+
return textResult(`Agent not found: "${params.agent_id}". It may have been cleaned up.`)
|
|
1556
|
+
}
|
|
1557
|
+
if (record.status !== "running") {
|
|
1558
|
+
return textResult(
|
|
1559
|
+
`Agent "${params.agent_id}" is not running (status: ${record.status}). Cannot steer a non-running agent.`,
|
|
1560
|
+
)
|
|
1561
|
+
}
|
|
1562
|
+
if (!record.session) {
|
|
1563
|
+
if (!record.pendingSteers) record.pendingSteers = []
|
|
1564
|
+
record.pendingSteers.push(params.message as string)
|
|
1565
|
+
pi.events.emit("subagents:steered", { id: record.id, message: params.message })
|
|
1566
|
+
return textResult(
|
|
1567
|
+
`Steering message queued for agent ${record.id}. It will be delivered once the session initializes.`,
|
|
1568
|
+
)
|
|
1569
|
+
}
|
|
1570
|
+
|
|
1571
|
+
try {
|
|
1572
|
+
await steerAgent(record.session, params.message as string)
|
|
1573
|
+
pi.events.emit("subagents:steered", { id: record.id, message: params.message })
|
|
1574
|
+
const tokens = formatLifetimeTokens(record)
|
|
1575
|
+
const contextPercent = getSessionContextPercent(record.session)
|
|
1576
|
+
const stateParts: string[] = []
|
|
1577
|
+
if (tokens) stateParts.push(tokens)
|
|
1578
|
+
stateParts.push(`${record.toolUses} tool ${record.toolUses === 1 ? "use" : "uses"}`)
|
|
1579
|
+
if (contextPercent !== null) stateParts.push(`context ${Math.round(contextPercent)}% full`)
|
|
1580
|
+
if (record.compactionCount)
|
|
1581
|
+
stateParts.push(`${record.compactionCount} compaction${record.compactionCount === 1 ? "" : "s"}`)
|
|
1582
|
+
return textResult(
|
|
1583
|
+
`Steering message sent to agent ${record.id}. The agent will process it after its current tool execution.\n` +
|
|
1584
|
+
`Current state: ${stateParts.join(" · ")}`,
|
|
1585
|
+
)
|
|
1586
|
+
} catch (err) {
|
|
1587
|
+
return textResult(`Failed to steer agent: ${err instanceof Error ? err.message : String(err)}`)
|
|
1588
|
+
}
|
|
1589
|
+
},
|
|
1590
|
+
}),
|
|
1591
|
+
)
|
|
1592
|
+
|
|
1593
|
+
// ---- /agents interactive menu ----
|
|
1594
|
+
|
|
1595
|
+
const projectAgentsDir = () => join(process.cwd(), ".ikie", "agents")
|
|
1596
|
+
const personalAgentsDir = () => join(getAgentDir(), "agents")
|
|
1597
|
+
|
|
1598
|
+
function findAgentFile(name: string): { path: string; location: "project" | "personal" } | undefined {
|
|
1599
|
+
const projectPath = join(projectAgentsDir(), `${name}.md`)
|
|
1600
|
+
if (existsSync(projectPath)) return { path: projectPath, location: "project" }
|
|
1601
|
+
const personalPath = join(personalAgentsDir(), `${name}.md`)
|
|
1602
|
+
if (existsSync(personalPath)) return { path: personalPath, location: "personal" }
|
|
1603
|
+
return undefined
|
|
1604
|
+
}
|
|
1605
|
+
|
|
1606
|
+
/** Max number of models to display in the /agents menu list. */
|
|
1607
|
+
const MAX_MODELS_IN_MENU = 5
|
|
1608
|
+
|
|
1609
|
+
function getModelLabel(type: string, registry?: ModelRegistry): string {
|
|
1610
|
+
const cfg = getAgentConfig(type)
|
|
1611
|
+
if (!cfg?.models?.length) return "inherit"
|
|
1612
|
+
if (registry) {
|
|
1613
|
+
// Probe the first entry - if even that doesn't resolve, the agent
|
|
1614
|
+
// will inherit the parent's model anyway.
|
|
1615
|
+
const resolvedM = resolveModel(cfg.models[0], registry)
|
|
1616
|
+
if (typeof resolvedM === "string") return "inherit"
|
|
1617
|
+
}
|
|
1618
|
+
const visible = cfg.models.slice(0, MAX_MODELS_IN_MENU).map((m) => getModelLabelFromConfig(m))
|
|
1619
|
+
const overflow = cfg.models.length - visible.length
|
|
1620
|
+
const list = visible.join(" | ")
|
|
1621
|
+
return overflow > 0 ? `${list} (+${overflow} more)` : list
|
|
1622
|
+
}
|
|
1623
|
+
|
|
1624
|
+
async function showAgentsMenu(ctx: ExtensionCommandContext) {
|
|
1625
|
+
reloadCustomAgents()
|
|
1626
|
+
const allNames = getAllTypes()
|
|
1627
|
+
|
|
1628
|
+
const options: string[] = []
|
|
1629
|
+
|
|
1630
|
+
const agents = listUserVisibleAgents()
|
|
1631
|
+
if (agents.length > 0) {
|
|
1632
|
+
const running = agents.filter((a) => a.status === "running" || a.status === "queued").length
|
|
1633
|
+
const done = agents.filter((a) => a.status === "completed" || a.status === "steered").length
|
|
1634
|
+
options.push(`Running agents (${agents.length}) - ${running} running, ${done} done`)
|
|
1635
|
+
}
|
|
1636
|
+
|
|
1637
|
+
if (allNames.length > 0) {
|
|
1638
|
+
options.push(`Agent types (${allNames.length})`)
|
|
1639
|
+
}
|
|
1640
|
+
|
|
1641
|
+
options.push("Create new agent")
|
|
1642
|
+
options.push("Settings")
|
|
1643
|
+
|
|
1644
|
+
const noAgentsMsg =
|
|
1645
|
+
allNames.length === 0 && agents.length === 0
|
|
1646
|
+
? "No agents found. Create specialized subagents that can be delegated to.\n\n" +
|
|
1647
|
+
"Each subagent has its own context window, custom system prompt, and specific tools.\n\n" +
|
|
1648
|
+
"Try creating: Code Reviewer, Security Auditor, Test Writer, or Documentation Writer.\n\n"
|
|
1649
|
+
: ""
|
|
1650
|
+
|
|
1651
|
+
if (noAgentsMsg) {
|
|
1652
|
+
ctx.ui.notify(noAgentsMsg, "info")
|
|
1653
|
+
}
|
|
1654
|
+
|
|
1655
|
+
const choice = await ctx.ui.select("Agents", options)
|
|
1656
|
+
if (!choice) return
|
|
1657
|
+
|
|
1658
|
+
if (choice.startsWith("Running agents (")) {
|
|
1659
|
+
await showRunningAgents(ctx)
|
|
1660
|
+
await showAgentsMenu(ctx)
|
|
1661
|
+
} else if (choice.startsWith("Agent types (")) {
|
|
1662
|
+
await showAllAgentsList(ctx)
|
|
1663
|
+
await showAgentsMenu(ctx)
|
|
1664
|
+
} else if (choice === "Create new agent") {
|
|
1665
|
+
await showCreateWizard(ctx)
|
|
1666
|
+
} else if (choice === "Settings") {
|
|
1667
|
+
await showSettings(ctx)
|
|
1668
|
+
await showAgentsMenu(ctx)
|
|
1669
|
+
}
|
|
1670
|
+
}
|
|
1671
|
+
|
|
1672
|
+
async function showAllAgentsList(ctx: ExtensionCommandContext) {
|
|
1673
|
+
const allNames = getAllTypes()
|
|
1674
|
+
if (allNames.length === 0) {
|
|
1675
|
+
ctx.ui.notify("No agents.", "info")
|
|
1676
|
+
return
|
|
1677
|
+
}
|
|
1678
|
+
|
|
1679
|
+
const sourceIndicator = (cfg: AgentConfig | undefined) => {
|
|
1680
|
+
const disabled = cfg?.enabled === false
|
|
1681
|
+
if (cfg?.source === "project") return disabled ? "✕• " : "• "
|
|
1682
|
+
if (cfg?.source === "global") return disabled ? "✕◦ " : "◦ "
|
|
1683
|
+
if (disabled) return "✕ "
|
|
1684
|
+
return " "
|
|
1685
|
+
}
|
|
1686
|
+
|
|
1687
|
+
const entries = allNames.map((name) => {
|
|
1688
|
+
const cfg = getAgentConfig(name)
|
|
1689
|
+
const disabled = cfg?.enabled === false
|
|
1690
|
+
const model = getModelLabel(name, ctx.modelRegistry as ModelRegistry)
|
|
1691
|
+
const indicator = sourceIndicator(cfg)
|
|
1692
|
+
const prefix = `${indicator}${name} · ${model}`
|
|
1693
|
+
const desc = disabled ? "(disabled)" : (cfg?.description ?? name)
|
|
1694
|
+
return { name, prefix, desc }
|
|
1695
|
+
})
|
|
1696
|
+
const maxPrefix = Math.max(...entries.map((e) => e.prefix.length))
|
|
1697
|
+
|
|
1698
|
+
const hasCustom = allNames.some((n) => {
|
|
1699
|
+
const c = getAgentConfig(n)
|
|
1700
|
+
return c && !c.isDefault && c.enabled !== false
|
|
1701
|
+
})
|
|
1702
|
+
const hasDisabled = allNames.some((n) => getAgentConfig(n)?.enabled === false)
|
|
1703
|
+
const legendParts: string[] = []
|
|
1704
|
+
if (hasCustom) legendParts.push("• = project ◦ = global")
|
|
1705
|
+
if (hasDisabled) legendParts.push("✕ = disabled")
|
|
1706
|
+
const legend = legendParts.length ? `\n${legendParts.join(" ")}` : ""
|
|
1707
|
+
|
|
1708
|
+
const options = entries.map(({ prefix, desc }) => `${prefix.padEnd(maxPrefix)} - ${desc}`)
|
|
1709
|
+
if (legend) options.push(legend)
|
|
1710
|
+
|
|
1711
|
+
const choice = await ctx.ui.select("Agent types", options)
|
|
1712
|
+
if (!choice) return
|
|
1713
|
+
|
|
1714
|
+
const agentName = choice
|
|
1715
|
+
.split(" · ")[0]
|
|
1716
|
+
.replace(/^[•◦✕\s]+/, "")
|
|
1717
|
+
.trim()
|
|
1718
|
+
if (getAgentConfig(agentName)) {
|
|
1719
|
+
await showAgentDetail(ctx, agentName)
|
|
1720
|
+
await showAllAgentsList(ctx)
|
|
1721
|
+
}
|
|
1722
|
+
}
|
|
1723
|
+
|
|
1724
|
+
async function showRunningAgents(ctx: ExtensionCommandContext) {
|
|
1725
|
+
const agents = listUserVisibleAgents()
|
|
1726
|
+
if (agents.length === 0) {
|
|
1727
|
+
ctx.ui.notify("No agents.", "info")
|
|
1728
|
+
return
|
|
1729
|
+
}
|
|
1730
|
+
|
|
1731
|
+
const options = agents.map((a) => {
|
|
1732
|
+
const dn = getDisplayName(a.type)
|
|
1733
|
+
const dur = formatDuration(a.startedAt, a.completedAt)
|
|
1734
|
+
return `${dn} (${a.description}) · ${a.toolUses} tools · ${a.status} · ${dur}`
|
|
1735
|
+
})
|
|
1736
|
+
|
|
1737
|
+
const choice = await ctx.ui.select("Running agents", options)
|
|
1738
|
+
if (!choice) return
|
|
1739
|
+
|
|
1740
|
+
const idx = options.indexOf(choice)
|
|
1741
|
+
if (idx < 0) return
|
|
1742
|
+
const record = agents[idx]
|
|
1743
|
+
|
|
1744
|
+
await viewAgentConversation(ctx, record)
|
|
1745
|
+
await showRunningAgents(ctx)
|
|
1746
|
+
}
|
|
1747
|
+
|
|
1748
|
+
async function viewAgentConversation(ctx: ExtensionCommandContext, record: AgentRecord) {
|
|
1749
|
+
if (!record.session) {
|
|
1750
|
+
ctx.ui.notify(`Agent is ${record.status === "queued" ? "queued" : "expired"} - no session available.`, "info")
|
|
1751
|
+
return
|
|
1752
|
+
}
|
|
1753
|
+
|
|
1754
|
+
if (ctx.mode !== "tui") {
|
|
1755
|
+
return
|
|
1756
|
+
}
|
|
1757
|
+
|
|
1758
|
+
const { ConversationViewer } = await import("./ui/conversation-viewer.js")
|
|
1759
|
+
const session = record.session
|
|
1760
|
+
const activity = agentActivity.get(record.id)
|
|
1761
|
+
|
|
1762
|
+
await ctx.ui.custom<undefined>(
|
|
1763
|
+
(tui, theme, _keybindings, done) => {
|
|
1764
|
+
return new ConversationViewer(tui, session, record, activity, theme, done)
|
|
1765
|
+
},
|
|
1766
|
+
{
|
|
1767
|
+
overlay: true,
|
|
1768
|
+
overlayOptions: { anchor: "center", width: "90%" },
|
|
1769
|
+
},
|
|
1770
|
+
)
|
|
1771
|
+
}
|
|
1772
|
+
|
|
1773
|
+
async function showAgentDetail(ctx: ExtensionCommandContext, name: string) {
|
|
1774
|
+
const cfg = getAgentConfig(name)
|
|
1775
|
+
if (!cfg) {
|
|
1776
|
+
ctx.ui.notify(`Agent config not found for "${name}".`, "warning")
|
|
1777
|
+
return
|
|
1778
|
+
}
|
|
1779
|
+
|
|
1780
|
+
const file = findAgentFile(name)
|
|
1781
|
+
const isDefault = cfg.isDefault === true
|
|
1782
|
+
const disabled = cfg.enabled === false
|
|
1783
|
+
|
|
1784
|
+
let menuOptions: string[]
|
|
1785
|
+
if (disabled && file) {
|
|
1786
|
+
menuOptions = isDefault
|
|
1787
|
+
? ["Enable", "Edit", "Reset to default", "Delete", "Back"]
|
|
1788
|
+
: ["Enable", "Edit", "Delete", "Back"]
|
|
1789
|
+
} else if (isDefault && !file) {
|
|
1790
|
+
menuOptions = ["Eject (export as .md)", "Disable", "Back"]
|
|
1791
|
+
} else if (isDefault && file) {
|
|
1792
|
+
menuOptions = ["Edit", "Disable", "Reset to default", "Delete", "Back"]
|
|
1793
|
+
} else {
|
|
1794
|
+
menuOptions = ["Edit", "Disable", "Delete", "Back"]
|
|
1795
|
+
}
|
|
1796
|
+
|
|
1797
|
+
const choice = await ctx.ui.select(name, menuOptions)
|
|
1798
|
+
if (!choice || choice === "Back") return
|
|
1799
|
+
|
|
1800
|
+
if (choice === "Edit" && file) {
|
|
1801
|
+
const content = readFileSync(file.path, "utf-8")
|
|
1802
|
+
const edited = await ctx.ui.editor(`Edit ${name}`, content)
|
|
1803
|
+
if (edited !== undefined && edited !== content) {
|
|
1804
|
+
const { writeFileSync } = await import("node:fs")
|
|
1805
|
+
writeFileSync(file.path, edited, "utf-8")
|
|
1806
|
+
reloadCustomAgents()
|
|
1807
|
+
ctx.ui.notify(`Updated ${file.path}`, "info")
|
|
1808
|
+
}
|
|
1809
|
+
} else if (choice === "Delete") {
|
|
1810
|
+
if (file) {
|
|
1811
|
+
const confirmed = await ctx.ui.confirm("Delete agent", `Delete ${name} from ${file.location} (${file.path})?`)
|
|
1812
|
+
if (confirmed) {
|
|
1813
|
+
unlinkSync(file.path)
|
|
1814
|
+
reloadCustomAgents()
|
|
1815
|
+
ctx.ui.notify(`Deleted ${file.path}`, "info")
|
|
1816
|
+
}
|
|
1817
|
+
}
|
|
1818
|
+
} else if (choice === "Reset to default" && file) {
|
|
1819
|
+
const confirmed = await ctx.ui.confirm(
|
|
1820
|
+
"Reset to default",
|
|
1821
|
+
`Delete override ${file.path} and restore embedded default?`,
|
|
1822
|
+
)
|
|
1823
|
+
if (confirmed) {
|
|
1824
|
+
unlinkSync(file.path)
|
|
1825
|
+
reloadCustomAgents()
|
|
1826
|
+
ctx.ui.notify(`Restored default ${name}`, "info")
|
|
1827
|
+
}
|
|
1828
|
+
} else if (choice.startsWith("Eject")) {
|
|
1829
|
+
await ejectAgent(ctx, name, cfg)
|
|
1830
|
+
} else if (choice === "Disable") {
|
|
1831
|
+
await disableAgent(ctx, name)
|
|
1832
|
+
} else if (choice === "Enable") {
|
|
1833
|
+
await enableAgent(ctx, name)
|
|
1834
|
+
}
|
|
1835
|
+
}
|
|
1836
|
+
|
|
1837
|
+
async function ejectAgent(ctx: ExtensionCommandContext, name: string, cfg: AgentConfig) {
|
|
1838
|
+
const location = await ctx.ui.select("Choose location", [
|
|
1839
|
+
"Project (.ikie/agents/)",
|
|
1840
|
+
`Personal (${personalAgentsDir()})`,
|
|
1841
|
+
])
|
|
1842
|
+
if (!location) return
|
|
1843
|
+
|
|
1844
|
+
const targetDir = location.startsWith("Project") ? projectAgentsDir() : personalAgentsDir()
|
|
1845
|
+
mkdirSync(targetDir, { recursive: true })
|
|
1846
|
+
|
|
1847
|
+
const targetPath = join(targetDir, `${name}.md`)
|
|
1848
|
+
if (existsSync(targetPath)) {
|
|
1849
|
+
const overwrite = await ctx.ui.confirm("Overwrite", `${targetPath} already exists. Overwrite?`)
|
|
1850
|
+
if (!overwrite) return
|
|
1851
|
+
}
|
|
1852
|
+
|
|
1853
|
+
const fmFields: string[] = []
|
|
1854
|
+
fmFields.push(`description: ${cfg.description}`)
|
|
1855
|
+
if (cfg.displayName) fmFields.push(`display_name: ${cfg.displayName}`)
|
|
1856
|
+
fmFields.push(`tools: ${cfg.builtinToolNames?.join(", ") || "all"}`)
|
|
1857
|
+
if (cfg.models?.length) fmFields.push(`models: [${cfg.models.map((m) => `"${m}"`).join(", ")}]`)
|
|
1858
|
+
if (cfg.thinking) fmFields.push(`thinking: ${cfg.thinking}`)
|
|
1859
|
+
if (cfg.maxTurns) fmFields.push(`max_turns: ${cfg.maxTurns}`)
|
|
1860
|
+
fmFields.push(`prompt_mode: ${cfg.promptMode}`)
|
|
1861
|
+
if (cfg.extensions === false) fmFields.push("extensions: false")
|
|
1862
|
+
else if (Array.isArray(cfg.extensions)) fmFields.push(`extensions: ${cfg.extensions.join(", ")}`)
|
|
1863
|
+
if (cfg.skills === false) fmFields.push("skills: false")
|
|
1864
|
+
else if (Array.isArray(cfg.skills)) fmFields.push(`skills: ${cfg.skills.join(", ")}`)
|
|
1865
|
+
if (cfg.disallowedTools?.length) fmFields.push(`disallowed_tools: ${cfg.disallowedTools.join(", ")}`)
|
|
1866
|
+
if (cfg.inheritContext) fmFields.push("inherit_context: true")
|
|
1867
|
+
if (cfg.runInBackground) fmFields.push("run_in_background: true")
|
|
1868
|
+
if (cfg.isolated) fmFields.push("isolated: true")
|
|
1869
|
+
if (cfg.memory) fmFields.push(`memory: ${cfg.memory}`)
|
|
1870
|
+
if (cfg.isolation) fmFields.push(`isolation: ${cfg.isolation}`)
|
|
1871
|
+
|
|
1872
|
+
const content = `---\n${fmFields.join("\n")}\n---\n\n${cfg.systemPrompt}\n`
|
|
1873
|
+
|
|
1874
|
+
const { writeFileSync } = await import("node:fs")
|
|
1875
|
+
writeFileSync(targetPath, content, "utf-8")
|
|
1876
|
+
reloadCustomAgents()
|
|
1877
|
+
ctx.ui.notify(`Ejected ${name} to ${targetPath}`, "info")
|
|
1878
|
+
}
|
|
1879
|
+
|
|
1880
|
+
async function disableAgent(ctx: ExtensionCommandContext, name: string) {
|
|
1881
|
+
const file = findAgentFile(name)
|
|
1882
|
+
if (file) {
|
|
1883
|
+
const content = readFileSync(file.path, "utf-8")
|
|
1884
|
+
if (content.includes("\nenabled: false\n")) {
|
|
1885
|
+
ctx.ui.notify(`${name} is already disabled.`, "info")
|
|
1886
|
+
return
|
|
1887
|
+
}
|
|
1888
|
+
const updated = content.replace(/^---\n/, "---\nenabled: false\n")
|
|
1889
|
+
const { writeFileSync } = await import("node:fs")
|
|
1890
|
+
writeFileSync(file.path, updated, "utf-8")
|
|
1891
|
+
reloadCustomAgents()
|
|
1892
|
+
ctx.ui.notify(`Disabled ${name} (${file.path})`, "info")
|
|
1893
|
+
return
|
|
1894
|
+
}
|
|
1895
|
+
|
|
1896
|
+
const location = await ctx.ui.select("Choose location", [
|
|
1897
|
+
"Project (.ikie/agents/)",
|
|
1898
|
+
`Personal (${personalAgentsDir()})`,
|
|
1899
|
+
])
|
|
1900
|
+
if (!location) return
|
|
1901
|
+
|
|
1902
|
+
const targetDir = location.startsWith("Project") ? projectAgentsDir() : personalAgentsDir()
|
|
1903
|
+
mkdirSync(targetDir, { recursive: true })
|
|
1904
|
+
|
|
1905
|
+
const targetPath = join(targetDir, `${name}.md`)
|
|
1906
|
+
const { writeFileSync } = await import("node:fs")
|
|
1907
|
+
writeFileSync(targetPath, "---\nenabled: false\n---\n", "utf-8")
|
|
1908
|
+
reloadCustomAgents()
|
|
1909
|
+
ctx.ui.notify(`Disabled ${name} (${targetPath})`, "info")
|
|
1910
|
+
}
|
|
1911
|
+
|
|
1912
|
+
async function enableAgent(ctx: ExtensionCommandContext, name: string) {
|
|
1913
|
+
const file = findAgentFile(name)
|
|
1914
|
+
if (!file) return
|
|
1915
|
+
|
|
1916
|
+
const content = readFileSync(file.path, "utf-8")
|
|
1917
|
+
const updated = content.replace(/^(---\n)enabled: false\n/, "$1")
|
|
1918
|
+
const { writeFileSync } = await import("node:fs")
|
|
1919
|
+
|
|
1920
|
+
if (updated.trim() === "---\n---" || updated.trim() === "---\n---\n") {
|
|
1921
|
+
unlinkSync(file.path)
|
|
1922
|
+
reloadCustomAgents()
|
|
1923
|
+
ctx.ui.notify(`Enabled ${name} (removed ${file.path})`, "info")
|
|
1924
|
+
} else {
|
|
1925
|
+
writeFileSync(file.path, updated, "utf-8")
|
|
1926
|
+
reloadCustomAgents()
|
|
1927
|
+
ctx.ui.notify(`Enabled ${name} (${file.path})`, "info")
|
|
1928
|
+
}
|
|
1929
|
+
}
|
|
1930
|
+
|
|
1931
|
+
async function showCreateWizard(ctx: ExtensionCommandContext) {
|
|
1932
|
+
const location = await ctx.ui.select("Choose location", [
|
|
1933
|
+
"Project (.ikie/agents/)",
|
|
1934
|
+
`Personal (${personalAgentsDir()})`,
|
|
1935
|
+
])
|
|
1936
|
+
if (!location) return
|
|
1937
|
+
|
|
1938
|
+
const targetDir = location.startsWith("Project") ? projectAgentsDir() : personalAgentsDir()
|
|
1939
|
+
|
|
1940
|
+
const method = await ctx.ui.select("Creation method", ["Generate with AI (recommended)", "Manual configuration"])
|
|
1941
|
+
if (!method) return
|
|
1942
|
+
|
|
1943
|
+
if (method.startsWith("Generate")) {
|
|
1944
|
+
await showGenerateWizard(ctx, targetDir)
|
|
1945
|
+
} else {
|
|
1946
|
+
await showManualWizard(ctx, targetDir)
|
|
1947
|
+
}
|
|
1948
|
+
}
|
|
1949
|
+
|
|
1950
|
+
async function showGenerateWizard(ctx: ExtensionCommandContext, targetDir: string) {
|
|
1951
|
+
const description = await ctx.ui.input("Describe what this agent should do")
|
|
1952
|
+
if (!description) return
|
|
1953
|
+
|
|
1954
|
+
const name = await ctx.ui.input("Agent name (filename, no spaces)")
|
|
1955
|
+
if (!name) return
|
|
1956
|
+
|
|
1957
|
+
mkdirSync(targetDir, { recursive: true })
|
|
1958
|
+
|
|
1959
|
+
const targetPath = join(targetDir, `${name}.md`)
|
|
1960
|
+
if (existsSync(targetPath)) {
|
|
1961
|
+
const overwrite = await ctx.ui.confirm("Overwrite", `${targetPath} already exists. Overwrite?`)
|
|
1962
|
+
if (!overwrite) return
|
|
1963
|
+
}
|
|
1964
|
+
|
|
1965
|
+
ctx.ui.notify("Generating agent definition...", "info")
|
|
1966
|
+
|
|
1967
|
+
const generatePrompt = `Create a custom ikie sub-agent definition file based on this description: "${description}"
|
|
1968
|
+
|
|
1969
|
+
Write a markdown file to: ${targetPath}
|
|
1970
|
+
|
|
1971
|
+
The file format is a markdown file with YAML frontmatter and a system prompt body:
|
|
1972
|
+
|
|
1973
|
+
\`\`\`markdown
|
|
1974
|
+
---
|
|
1975
|
+
description: <one-line description shown in UI>
|
|
1976
|
+
tools: <comma-separated built-in tools: read, bash, edit, write, grep, find, ls. Use "none" for no tools. Omit for all tools>
|
|
1977
|
+
models: <optional ordered list of models, e.g. ["ikie-dev/minimax-m2.7"]. Omit to inherit parent model>
|
|
1978
|
+
thinking: <optional thinking level: off, minimal, low, medium, high, xhigh. Omit to inherit>
|
|
1979
|
+
max_turns: <optional max agentic turns. 0 or omit for unlimited (default)>
|
|
1980
|
+
token_budget: <optional maximum total tokens for this agent. Omit for no profile budget>
|
|
1981
|
+
prompt_mode: <"replace" (body IS the full system prompt) or "append" (body is appended to default prompt). Default: replace>
|
|
1982
|
+
extensions: <true (inherit all MCP/extension tools), false (none), or comma-separated names. Default: true>
|
|
1983
|
+
skills: <true (inherit all), false (none), or comma-separated skill names to preload into prompt. Default: true>
|
|
1984
|
+
disallowed_tools: <comma-separated tool names to block, even if otherwise available. Omit for none>
|
|
1985
|
+
inherit_context: <true to fork parent conversation into agent so it sees chat history. Default: false>
|
|
1986
|
+
run_in_background: <true to run in background by default. Default: false>
|
|
1987
|
+
isolated: <true for no extension/MCP tools, only built-in tools. Default: false>
|
|
1988
|
+
memory: <"user" (global), "project" (per-project), or "local" (gitignored per-project) for persistent memory. Omit for none>
|
|
1989
|
+
---
|
|
1990
|
+
|
|
1991
|
+
<system prompt body - instructions for the agent>
|
|
1992
|
+
\`\`\`
|
|
1993
|
+
|
|
1994
|
+
Write the file using the write tool. Only write the file, nothing else.`
|
|
1995
|
+
|
|
1996
|
+
const record = await manager.spawnAndWait(pi, ctx as ExtensionContext, AGENT_GENERAL_PURPOSE, generatePrompt, {
|
|
1997
|
+
description: `Generate ${name} agent`,
|
|
1998
|
+
maxTurns: 5,
|
|
1999
|
+
})
|
|
2000
|
+
|
|
2001
|
+
if (record.status === "error") {
|
|
2002
|
+
ctx.ui.notify(`Generation failed: ${record.error}`, "warning")
|
|
2003
|
+
return
|
|
2004
|
+
}
|
|
2005
|
+
|
|
2006
|
+
reloadCustomAgents()
|
|
2007
|
+
|
|
2008
|
+
if (existsSync(targetPath)) {
|
|
2009
|
+
ctx.ui.notify(`Created ${targetPath}`, "info")
|
|
2010
|
+
} else {
|
|
2011
|
+
ctx.ui.notify("Agent generation completed but file was not created. Check the agent output.", "warning")
|
|
2012
|
+
}
|
|
2013
|
+
}
|
|
2014
|
+
|
|
2015
|
+
async function showManualWizard(ctx: ExtensionCommandContext, targetDir: string) {
|
|
2016
|
+
const name = await ctx.ui.input("Agent name (filename, no spaces)")
|
|
2017
|
+
if (!name) return
|
|
2018
|
+
|
|
2019
|
+
const description = await ctx.ui.input("Description (one line)")
|
|
2020
|
+
if (!description) return
|
|
2021
|
+
|
|
2022
|
+
const toolChoice = await ctx.ui.select("Tools", [
|
|
2023
|
+
"all",
|
|
2024
|
+
"none",
|
|
2025
|
+
"read-only (read, bash, grep, find, ls)",
|
|
2026
|
+
"custom...",
|
|
2027
|
+
])
|
|
2028
|
+
if (!toolChoice) return
|
|
2029
|
+
|
|
2030
|
+
let tools: string
|
|
2031
|
+
if (toolChoice === "all") {
|
|
2032
|
+
tools = BUILTIN_TOOL_NAMES.join(", ")
|
|
2033
|
+
} else if (toolChoice === "none") {
|
|
2034
|
+
tools = "none"
|
|
2035
|
+
} else if (toolChoice.startsWith("read-only")) {
|
|
2036
|
+
tools = "read, bash, grep, find, ls"
|
|
2037
|
+
} else {
|
|
2038
|
+
const customTools = await ctx.ui.input("Tools (comma-separated)", BUILTIN_TOOL_NAMES.join(", "))
|
|
2039
|
+
if (!customTools) return
|
|
2040
|
+
tools = customTools
|
|
2041
|
+
}
|
|
2042
|
+
|
|
2043
|
+
const wizardModelChoices = Array.from(MODEL_CAPABILITIES.entries())
|
|
2044
|
+
.filter(([, entry]) => entry !== "ignored")
|
|
2045
|
+
.map(([id]) => id)
|
|
2046
|
+
.sort()
|
|
2047
|
+
|
|
2048
|
+
const modelChoice = await ctx.ui.select("Model", ["inherit (parent model)", ...wizardModelChoices, "custom..."])
|
|
2049
|
+
if (!modelChoice) return
|
|
2050
|
+
|
|
2051
|
+
let modelLine = ""
|
|
2052
|
+
if (wizardModelChoices.includes(modelChoice)) {
|
|
2053
|
+
modelLine = `\nmodels: ["${IKIE_DEV_PROVIDER}/${modelChoice}"]`
|
|
2054
|
+
} else if (modelChoice === "custom...") {
|
|
2055
|
+
const customModel = await ctx.ui.input("Model (provider/modelId)")
|
|
2056
|
+
if (customModel) modelLine = `\nmodels: ["${customModel}"]`
|
|
2057
|
+
}
|
|
2058
|
+
|
|
2059
|
+
const thinkingChoice = await ctx.ui.select("Thinking level", [
|
|
2060
|
+
"inherit",
|
|
2061
|
+
"off",
|
|
2062
|
+
"minimal",
|
|
2063
|
+
"low",
|
|
2064
|
+
"medium",
|
|
2065
|
+
"high",
|
|
2066
|
+
"xhigh",
|
|
2067
|
+
])
|
|
2068
|
+
if (!thinkingChoice) return
|
|
2069
|
+
|
|
2070
|
+
let thinkingLine = ""
|
|
2071
|
+
if (thinkingChoice !== "inherit") thinkingLine = `\nthinking: ${thinkingChoice}`
|
|
2072
|
+
|
|
2073
|
+
const maxTurnsInput = await ctx.ui.input("Max turns (optional, blank for unlimited)", "")
|
|
2074
|
+
let maxTurnsLine = ""
|
|
2075
|
+
if (maxTurnsInput?.trim()) {
|
|
2076
|
+
const trimmed = maxTurnsInput.trim()
|
|
2077
|
+
if (!/^\d+$/.test(trimmed)) {
|
|
2078
|
+
ctx.ui.notify("Max turns must be a non-negative integer.", "warning")
|
|
2079
|
+
return
|
|
2080
|
+
}
|
|
2081
|
+
const maxTurns = Number.parseInt(trimmed, 10)
|
|
2082
|
+
maxTurnsLine = `\nmax_turns: ${maxTurns}`
|
|
2083
|
+
}
|
|
2084
|
+
|
|
2085
|
+
const tokenBudgetInput = await ctx.ui.input("Token budget (optional, blank for none)", "")
|
|
2086
|
+
let tokenBudgetLine = ""
|
|
2087
|
+
if (tokenBudgetInput?.trim()) {
|
|
2088
|
+
const trimmed = tokenBudgetInput.trim()
|
|
2089
|
+
if (!/^\d+$/.test(trimmed)) {
|
|
2090
|
+
ctx.ui.notify("Token budget must be a positive integer.", "warning")
|
|
2091
|
+
return
|
|
2092
|
+
}
|
|
2093
|
+
const tokenBudget = Number.parseInt(trimmed, 10)
|
|
2094
|
+
if (tokenBudget <= 0) {
|
|
2095
|
+
ctx.ui.notify("Token budget must be a positive integer.", "warning")
|
|
2096
|
+
return
|
|
2097
|
+
}
|
|
2098
|
+
tokenBudgetLine = `\ntoken_budget: ${tokenBudget}`
|
|
2099
|
+
}
|
|
2100
|
+
|
|
2101
|
+
const systemPrompt = await ctx.ui.editor("System prompt", "")
|
|
2102
|
+
if (systemPrompt === undefined) return
|
|
2103
|
+
|
|
2104
|
+
const content = `---
|
|
2105
|
+
description: ${description}
|
|
2106
|
+
tools: ${tools}${modelLine}${thinkingLine}${maxTurnsLine}${tokenBudgetLine}
|
|
2107
|
+
prompt_mode: replace
|
|
2108
|
+
---
|
|
2109
|
+
|
|
2110
|
+
${systemPrompt}
|
|
2111
|
+
`
|
|
2112
|
+
|
|
2113
|
+
mkdirSync(targetDir, { recursive: true })
|
|
2114
|
+
const targetPath = join(targetDir, `${name}.md`)
|
|
2115
|
+
|
|
2116
|
+
if (existsSync(targetPath)) {
|
|
2117
|
+
const overwrite = await ctx.ui.confirm("Overwrite", `${targetPath} already exists. Overwrite?`)
|
|
2118
|
+
if (!overwrite) return
|
|
2119
|
+
}
|
|
2120
|
+
|
|
2121
|
+
const { writeFileSync } = await import("node:fs")
|
|
2122
|
+
writeFileSync(targetPath, content, "utf-8")
|
|
2123
|
+
reloadCustomAgents()
|
|
2124
|
+
ctx.ui.notify(`Created ${targetPath}`, "info")
|
|
2125
|
+
}
|
|
2126
|
+
|
|
2127
|
+
function snapshotSettings(): SubagentsSettings {
|
|
2128
|
+
return {
|
|
2129
|
+
maxConcurrent: manager.getMaxConcurrent(),
|
|
2130
|
+
defaultMaxTurns: getDefaultMaxTurns() ?? 0,
|
|
2131
|
+
graceTurns: getGraceTurns(),
|
|
2132
|
+
defaultJoinMode: getDefaultJoinMode(),
|
|
2133
|
+
}
|
|
2134
|
+
}
|
|
2135
|
+
|
|
2136
|
+
async function showSettings(ctx: ExtensionCommandContext) {
|
|
2137
|
+
const choice = await ctx.ui.select("Settings", [
|
|
2138
|
+
`Max concurrency (current: ${manager.getMaxConcurrent()})`,
|
|
2139
|
+
`Default max turns (current: ${getDefaultMaxTurns() ?? "unlimited"})`,
|
|
2140
|
+
`Grace turns (current: ${getGraceTurns()})`,
|
|
2141
|
+
`Join mode (current: ${getDefaultJoinMode()})`,
|
|
2142
|
+
])
|
|
2143
|
+
if (!choice) return
|
|
2144
|
+
|
|
2145
|
+
if (choice.startsWith("Max concurrency")) {
|
|
2146
|
+
const val = await ctx.ui.input("Max concurrent background agents", String(manager.getMaxConcurrent()))
|
|
2147
|
+
if (val) {
|
|
2148
|
+
const n = Number.parseInt(val, 10)
|
|
2149
|
+
if (n >= 1) {
|
|
2150
|
+
manager.setMaxConcurrent(n)
|
|
2151
|
+
notifyApplied(ctx, `Max concurrency set to ${n}`)
|
|
2152
|
+
} else {
|
|
2153
|
+
ctx.ui.notify("Must be a positive integer.", "warning")
|
|
2154
|
+
}
|
|
2155
|
+
}
|
|
2156
|
+
} else if (choice.startsWith("Default max turns")) {
|
|
2157
|
+
const val = await ctx.ui.input(
|
|
2158
|
+
"Default max turns before wrap-up (0 = unlimited)",
|
|
2159
|
+
String(getDefaultMaxTurns() ?? 0),
|
|
2160
|
+
)
|
|
2161
|
+
if (val) {
|
|
2162
|
+
const n = Number.parseInt(val, 10)
|
|
2163
|
+
if (n === 0) {
|
|
2164
|
+
setDefaultMaxTurns(undefined)
|
|
2165
|
+
notifyApplied(ctx, "Default max turns set to unlimited")
|
|
2166
|
+
} else if (n >= 1) {
|
|
2167
|
+
setDefaultMaxTurns(n)
|
|
2168
|
+
notifyApplied(ctx, `Default max turns set to ${n}`)
|
|
2169
|
+
} else {
|
|
2170
|
+
ctx.ui.notify("Must be 0 (unlimited) or a positive integer.", "warning")
|
|
2171
|
+
}
|
|
2172
|
+
}
|
|
2173
|
+
} else if (choice.startsWith("Grace turns")) {
|
|
2174
|
+
const val = await ctx.ui.input("Grace turns after wrap-up steer", String(getGraceTurns()))
|
|
2175
|
+
if (val) {
|
|
2176
|
+
const n = Number.parseInt(val, 10)
|
|
2177
|
+
if (n >= 1) {
|
|
2178
|
+
setGraceTurns(n)
|
|
2179
|
+
notifyApplied(ctx, `Grace turns set to ${n}`)
|
|
2180
|
+
} else {
|
|
2181
|
+
ctx.ui.notify("Must be a positive integer.", "warning")
|
|
2182
|
+
}
|
|
2183
|
+
}
|
|
2184
|
+
} else if (choice.startsWith("Join mode")) {
|
|
2185
|
+
const val = await ctx.ui.select("Default join mode for background agents", [
|
|
2186
|
+
"smart - auto-group 2+ agents in same turn (default)",
|
|
2187
|
+
"async - always notify individually",
|
|
2188
|
+
"group - always group background agents",
|
|
2189
|
+
])
|
|
2190
|
+
if (val) {
|
|
2191
|
+
const mode = val.split(" ")[0] as JoinMode
|
|
2192
|
+
setDefaultJoinMode(mode)
|
|
2193
|
+
notifyApplied(ctx, `Default join mode set to ${mode}`)
|
|
2194
|
+
}
|
|
2195
|
+
}
|
|
2196
|
+
}
|
|
2197
|
+
|
|
2198
|
+
function notifyApplied(ctx: ExtensionCommandContext, successMsg: string) {
|
|
2199
|
+
const { message, level } = saveAndEmitChanged(snapshotSettings(), successMsg, (event, payload) =>
|
|
2200
|
+
pi.events.emit(event, payload),
|
|
2201
|
+
)
|
|
2202
|
+
ctx.ui.notify(message, level)
|
|
2203
|
+
}
|
|
2204
|
+
|
|
2205
|
+
pi.registerCommand("agents", {
|
|
2206
|
+
description: "Manage agents",
|
|
2207
|
+
handler: async (_args, ctx) => {
|
|
2208
|
+
await showAgentsMenu(ctx)
|
|
2209
|
+
},
|
|
2210
|
+
})
|
|
2211
|
+
}
|
|
2212
|
+
|
|
2213
|
+
async function waitForSubagentShutdown(manager: AgentManager): Promise<void> {
|
|
2214
|
+
let timeout: ReturnType<typeof setTimeout> | undefined
|
|
2215
|
+
try {
|
|
2216
|
+
await Promise.race([
|
|
2217
|
+
manager.waitForAll(),
|
|
2218
|
+
new Promise<void>((resolve) => {
|
|
2219
|
+
timeout = setTimeout(resolve, SUBAGENT_SHUTDOWN_WAIT_MS)
|
|
2220
|
+
timeout.unref?.()
|
|
2221
|
+
}),
|
|
2222
|
+
])
|
|
2223
|
+
} finally {
|
|
2224
|
+
if (timeout) clearTimeout(timeout)
|
|
2225
|
+
}
|
|
2226
|
+
}
|