@ikie-dev/cli 9.8.7 → 9.9.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/.ikie/ferments/019f2b5d-426e-741a-a176-6031399e42cd/runtime.json +11 -0
- package/.ikie/ferments/019f2b5d-4289-71d5-9c92-949495910599/runtime.json +11 -0
- package/.ikie/ferments/019f2b5d-42a0-74f5-b804-1dd55616035a/runtime.json +11 -0
- package/.ikie/ferments/019f2b5d-42c5-7381-83e5-548f04ddbc55/runtime.json +12 -0
- package/.ikie/ferments/019f2b5d-42fd-702c-baef-81f5354cc24e/runtime.json +11 -0
- package/.ikie/ferments/019f2b5d-432e-7322-9af5-5333b4686468/runtime.json +15 -0
- package/.ikie/ferments/019f2b5d-434d-7429-b25f-0b58109fa362/runtime.json +15 -0
- package/.ikie/ferments/019f2b5d-436e-7389-b2ad-6a02cda4f9bb/runtime.json +15 -0
- package/.ikie/ferments/019f2b5d-439d-74dd-9786-13df51571d6b/runtime.json +13 -0
- package/.ikie/ferments/019f2b5d-43ce-71c9-81e0-16aa00ff9e28/runtime.json +15 -0
- package/.ikie/ferments/019f2b5d-440e-72cc-8509-b6b3fd2b6c6c/runtime.json +15 -0
- package/.ikie/ferments/019f2b5d-444f-73c1-8172-dbad1e42640a/runtime.json +11 -0
- package/.ikie/ferments/019f2b5d-4469-71c1-97ff-23e2bb7ccc3b/runtime.json +15 -0
- package/.ikie/ferments/019f2b5d-448d-714d-b181-338e8a5dc8e1/runtime.json +15 -0
- package/.ikie/ferments/019f2b5d-44ad-71fb-b0a9-a1f949f9129a/runtime.json +15 -0
- package/.ikie/ferments/019f2b5d-44ca-730d-993c-9a827d415ffd/runtime.json +15 -0
- package/.ikie/ferments/019f2b5d-44ec-71c8-8523-031284e26b4b/runtime.json +15 -0
- package/.ikie/ferments/019f2b5d-450e-7013-93c5-3dd9b900ebd3/runtime.json +15 -0
- package/.ikie/ferments/019f2b5d-452a-714d-aff8-fdaca0988792/runtime.json +15 -0
- package/.ikie/ferments/019f2b5d-4550-749d-8807-3e9493ba614b/runtime.json +15 -0
- package/.ikie/ferments/019f2b5d-4570-7713-8d0f-5d13e8446bfb/runtime.json +15 -0
- package/.ikie/ferments/019f2b5d-459a-778a-a7f7-3317ecd6837f/runtime.json +11 -0
- package/.ikie/ferments/019f2b5d-45c1-718d-9ba5-b55dd0160a78/runtime.json +11 -0
- package/.ikie/ferments/019f2b5d-45f9-7381-9394-4647f47a2132/reviews/phase-phase-1-1.json +63 -0
- package/.ikie/ferments/019f2b5d-45f9-7381-9394-4647f47a2132/runtime.json +17 -0
- package/.ikie/ferments/019f2b5d-4782-71d4-89de-9c3e734707c8/reviews/phase-phase-1-1.json +63 -0
- package/.ikie/ferments/019f2b5d-4782-71d4-89de-9c3e734707c8/runtime.json +17 -0
- package/.ikie/ferments/019f2b5d-4950-728c-bf46-542c8ec21a6c/runtime.json +11 -0
- package/.ikie/ferments/019f2b5d-4de5-75df-8d7d-a1cd2588a596/runtime.json +11 -0
- package/.ikie/ferments/019f2b5d-4e07-70d4-9152-0925c5f81057/runtime.json +11 -0
- package/.ikie/ferments/019f2b5d-4e28-7770-8b24-587c856e4b9b/runtime.json +11 -0
- package/.ikie/ferments/019f2b5d-4e48-7159-9cb7-6401c6930ed4/runtime.json +11 -0
- package/.ikie/ferments/019f2b5d-4e6e-73a9-8bfd-639e394f48a4/pending-proposal.json +45 -0
- package/.ikie/ferments/019f2b5d-4e85-73c4-b099-4f6dc69c5268/pending-proposal.json +45 -0
- package/.ikie/ferments/019f2b5d-4fd0-7019-a28a-49af2a0266ed/pending-proposal.json +45 -0
- package/.ikie/ferments/019f2b5d-5045-70cc-b084-9ccd595944b3/pending-proposal.json +45 -0
- package/.ikie/ferments/019f2b5d-5056-759a-ae60-d4e8d2f7554f/pending-proposal.json +45 -0
- package/.ikie/ferments/019f2b5d-883b-759c-8453-2a7e8200e481/runtime.json +13 -0
- package/.ikie/ferments/019f2b5d-8873-723e-9b60-75d7ece374f9/runtime.json +11 -0
- package/.ikie/ferments/019f2b5d-8898-70a3-8c9d-ef7f569c3e72/runtime.json +11 -0
- package/.ikie/ferments/019f2b5d-88b4-710c-ba72-ef0fc3dbf0ae/runtime.json +11 -0
- package/.ikie/ferments/019f2b5d-88d2-73cf-8983-953907020e62/runtime.json +11 -0
- package/.ikie/ferments/019f2b5d-88f3-73df-9ffa-dd262c3d4163/runtime.json +11 -0
- package/.ikie/ferments/019f2b5d-8912-74db-b14a-95e882507c3e/runtime.json +11 -0
- package/.ikie/ferments/019f2b5d-892b-76c2-b9b3-42dbf26fa1c5/runtime.json +11 -0
- package/.ikie/ferments/019f2b5d-8956-74d1-883d-b974060e341f/runtime.json +9 -0
- package/.ikie/ferments/019f2b5d-8979-741b-9ecc-2fe299103e8e/runtime.json +13 -0
- package/.ikie/ferments/019f2b5d-89a1-74ed-83f8-f19dd9f63c9d/runtime.json +11 -0
- package/.ikie/ferments/019f2b5d-89c9-71d8-88b2-8ded0c6a473e/runtime.json +11 -0
- package/.ikie/ferments/019f2b5d-8a28-7309-a773-95dde5282ddf/runtime.json +11 -0
- package/.ikie/ferments/019f2b5d-8a3c-7088-85cd-9e45836799c8/runtime.json +9 -0
- package/.ikie/ferments/019f2b5d-8a58-727b-8607-94e087e8b56f/runtime.json +9 -0
- package/.ikie/ferments/019f2b5d-8a6d-7465-bd8e-ab8c1cdbeef8/runtime.json +11 -0
- package/.ikie/ferments/019f2b5d-8b30-75d0-9526-93a548435f3a/runtime.json +11 -0
- package/.ikie/ferments/019f2b5d-8b4b-7352-a7a2-899427c50e5d/runtime.json +12 -0
- package/.ikie/ferments/019f2b5d-8b6f-723b-83fa-556273e78c4e/runtime.json +11 -0
- package/.ikie/ferments/019f2b5d-8b95-74b2-b003-5ecf17ff2936/runtime.json +11 -0
- package/.ikie/ferments/019f2b5d-8ba6-71f3-90eb-37751e5bab04/runtime.json +11 -0
- package/.ikie/ferments/019f2b5d-8bbe-7251-b4f0-5d52ca8bbd0f/runtime.json +11 -0
- package/.ikie/ferments/019f2b5d-8bd6-779d-b55d-3df6cfd3d4ba/runtime.json +13 -0
- package/.ikie/ferments/019f2b5d-8bee-75b5-acf7-95f68fd37837/runtime.json +11 -0
- package/.ikie/ferments/019f2b5d-9b8e-7307-a95c-7e184eed7946/reviews/phase-phase-1-1.json +41 -0
- package/.ikie/ferments/019f2b5d-9b8e-7307-a95c-7e184eed7946/runtime.json +11 -0
- package/.ikie/ferments/019f2b5d-9bd7-7418-a977-3d39b5027fcc/reviews/phase-phase-1-1.json +47 -0
- package/.ikie/ferments/019f2b5d-9bd7-7418-a977-3d39b5027fcc/runtime.json +13 -0
- package/.ikie/ferments/019f2b5d-9c36-738b-9800-c32b17ab0a08/reviews/phase-phase-1-1.json +40 -0
- package/.ikie/ferments/019f2b5d-9c36-738b-9800-c32b17ab0a08/runtime.json +9 -0
- package/.ikie/ferments/019f2b5d-9c67-76b8-9a49-00bf505ca1b8/reviews/phase-phase-1-1.json +40 -0
- package/.ikie/ferments/019f2b5d-9c67-76b8-9a49-00bf505ca1b8/runtime.json +9 -0
- package/.ikie/ferments/019f2b5d-9c80-73ba-98ca-fa4595c45658/reviews/phase-phase-1-1.json +40 -0
- package/.ikie/ferments/019f2b5d-9c80-73ba-98ca-fa4595c45658/runtime.json +9 -0
- package/.ikie/ferments/019f2b5d-9c9e-71a5-bd87-e317142e21fd/reviews/phase-phase-1-1.json +40 -0
- package/.ikie/ferments/019f2b5d-9c9e-71a5-bd87-e317142e21fd/runtime.json +9 -0
- package/.ikie/ferments/019f2b5d-9cc1-73bf-98ae-cdd3759fdbd4/reviews/phase-phase-1-1.json +40 -0
- package/.ikie/ferments/019f2b5d-9cc1-73bf-98ae-cdd3759fdbd4/runtime.json +9 -0
- package/.ikie/ferments/019f2b5d-9cd9-7478-aa4d-68ff15ec302e/reviews/phase-phase-1-1.json +62 -0
- package/.ikie/ferments/019f2b5d-9cd9-7478-aa4d-68ff15ec302e/runtime.json +9 -0
- package/.ikie/ferments/019f2b6e-10f5-71fd-b0ac-906640800f2a/runtime.json +11 -0
- package/.ikie/ferments/019f2b6e-111f-75fe-af2b-0a9cf1727058/runtime.json +11 -0
- package/.ikie/ferments/019f2b6e-113b-73de-9df2-3dc2058b0037/runtime.json +11 -0
- package/.ikie/ferments/019f2b6e-115e-772e-91f2-45da602cc046/runtime.json +12 -0
- package/.ikie/ferments/019f2b6e-1174-70a1-a06e-4c9a676e7a44/runtime.json +11 -0
- package/.ikie/ferments/019f2b6e-1199-70d9-ae9a-01e965e953f1/runtime.json +11 -0
- package/.ikie/ferments/019f2b6e-11d1-74af-ab47-8e94823af880/runtime.json +15 -0
- package/.ikie/ferments/019f2b6e-11f3-7087-a610-3673d9a730c8/runtime.json +15 -0
- package/.ikie/ferments/019f2b6e-1214-7778-974a-3773b4f88517/runtime.json +15 -0
- package/.ikie/ferments/019f2b6e-123b-762d-8600-80a4da430695/runtime.json +13 -0
- package/.ikie/ferments/019f2b6e-1271-76b7-8c79-2c86e0e70e8c/runtime.json +15 -0
- package/.ikie/ferments/019f2b6e-129a-731e-93aa-a4f113bfeda8/runtime.json +15 -0
- package/.ikie/ferments/019f2b6e-12db-728a-bea2-d97e3310b918/runtime.json +11 -0
- package/.ikie/ferments/019f2b6e-12f5-72a8-8ea9-e83e907bb297/runtime.json +15 -0
- package/.ikie/ferments/019f2b6e-131a-714e-8d20-eb7a6aaeed29/runtime.json +15 -0
- package/.ikie/ferments/019f2b6e-1349-72aa-a518-6fac705a8a5f/runtime.json +15 -0
- package/.ikie/ferments/019f2b6e-1374-740e-8b66-ccc849baf168/runtime.json +15 -0
- package/.ikie/ferments/019f2b6e-13a6-75fd-a594-0e6dec52929b/runtime.json +15 -0
- package/.ikie/ferments/019f2b6e-13d3-775b-a8ad-e8efc6332d52/runtime.json +15 -0
- package/.ikie/ferments/019f2b6e-13ff-753a-aac4-207bd4d84720/runtime.json +15 -0
- package/.ikie/ferments/019f2b6e-1423-71ba-9cb9-8d5dc4ba44af/runtime.json +15 -0
- package/.ikie/ferments/019f2b6e-1449-77b9-95f8-c8b9a5cdbe1b/runtime.json +15 -0
- package/.ikie/ferments/019f2b6e-1475-771f-95b7-41248e78e547/runtime.json +11 -0
- package/.ikie/ferments/019f2b6e-1498-76c2-a4c3-4a9d6ea8727d/runtime.json +11 -0
- package/.ikie/ferments/019f2b6e-14bd-77ad-89ea-7706d62850c0/reviews/phase-phase-1-1.json +63 -0
- package/.ikie/ferments/019f2b6e-14bd-77ad-89ea-7706d62850c0/runtime.json +17 -0
- package/.ikie/ferments/019f2b6e-1627-755e-943c-164dc672353c/reviews/phase-phase-1-1.json +63 -0
- package/.ikie/ferments/019f2b6e-1627-755e-943c-164dc672353c/runtime.json +17 -0
- package/.ikie/ferments/019f2b6e-17a9-74b2-921b-1d9ec0a01d5f/runtime.json +11 -0
- package/.ikie/ferments/019f2b6e-1bb3-71ad-8be1-e8e3cd1a78b8/runtime.json +11 -0
- package/.ikie/ferments/019f2b6e-1bde-778e-9fd2-dc5291b667d4/runtime.json +11 -0
- package/.ikie/ferments/019f2b6e-1bfd-717c-8ab8-6d6b97e73a76/runtime.json +11 -0
- package/.ikie/ferments/019f2b6e-1c1e-724b-80f7-e8084123ea42/runtime.json +11 -0
- package/.ikie/ferments/019f2b6e-1c3c-70a8-ab5c-8858a41b1111/pending-proposal.json +45 -0
- package/.ikie/ferments/019f2b6e-1c52-71af-975e-f514de2d2a9f/pending-proposal.json +45 -0
- package/.ikie/ferments/019f2b6e-1d84-726a-9382-0f49ac269f40/pending-proposal.json +45 -0
- package/.ikie/ferments/019f2b6e-1dcb-760e-b2cd-c06ba8d57f7c/pending-proposal.json +45 -0
- package/.ikie/ferments/019f2b6e-1de3-74a8-8567-7960dca0da46/pending-proposal.json +45 -0
- package/.ikie/ferments/019f2b6e-50b5-77dc-a145-de2797f954ba/runtime.json +13 -0
- package/.ikie/ferments/019f2b6e-513b-7019-9404-f46db9a8b3ec/runtime.json +11 -0
- package/.ikie/ferments/019f2b6e-5159-7711-9957-3393d05b23a3/runtime.json +11 -0
- package/.ikie/ferments/019f2b6e-5175-771d-8391-8f6b9f807ea8/runtime.json +11 -0
- package/.ikie/ferments/019f2b6e-519c-730d-bfed-592ef56a2720/runtime.json +11 -0
- package/.ikie/ferments/019f2b6e-51cd-709b-b3b5-352e20717ad9/runtime.json +11 -0
- package/.ikie/ferments/019f2b6e-51f0-728a-9edf-7e48bd6c69a7/runtime.json +11 -0
- package/.ikie/ferments/019f2b6e-521b-763a-9fe9-c7197b8209cd/runtime.json +11 -0
- package/.ikie/ferments/019f2b6e-5242-702d-a4aa-feb8569b86ad/runtime.json +9 -0
- package/.ikie/ferments/019f2b6e-5269-725a-be96-7135e5857c5f/runtime.json +13 -0
- package/.ikie/ferments/019f2b6e-52a5-74c9-b708-335a2e9bf42b/runtime.json +11 -0
- package/.ikie/ferments/019f2b6e-52e4-7506-89cb-182398a88f40/runtime.json +11 -0
- package/.ikie/ferments/019f2b6e-5389-736c-b328-dd8fa27082f9/runtime.json +11 -0
- package/.ikie/ferments/019f2b6e-53be-774f-9a27-291c66f2747a/runtime.json +9 -0
- package/.ikie/ferments/019f2b6e-53f4-73ae-bbca-2124c710812b/runtime.json +9 -0
- package/.ikie/ferments/019f2b6e-542e-71ee-87b1-37bbc5f40ccd/runtime.json +11 -0
- package/.ikie/ferments/019f2b6e-55b4-7238-89f5-a2a50dcaff05/runtime.json +11 -0
- package/.ikie/ferments/019f2b6e-55ec-72ba-a3b7-3b7739efe858/runtime.json +12 -0
- package/.ikie/ferments/019f2b6e-563d-721b-8ba0-f3286b33f62f/runtime.json +11 -0
- package/.ikie/ferments/019f2b6e-565b-7453-9046-2a7e60c63c62/runtime.json +11 -0
- package/.ikie/ferments/019f2b6e-5684-7125-a1ef-41494eb8be74/runtime.json +11 -0
- package/.ikie/ferments/019f2b6e-56a7-7512-b7e5-3c709a24a5e9/runtime.json +11 -0
- package/.ikie/ferments/019f2b6e-56ea-702a-9a97-7911f5f2caad/runtime.json +13 -0
- package/.ikie/ferments/019f2b6e-5730-75fb-bad2-18d701837e37/runtime.json +11 -0
- package/.ikie/ferments/019f2b6e-645f-7522-a80c-ddcd6935f5dc/reviews/phase-phase-1-1.json +41 -0
- package/.ikie/ferments/019f2b6e-645f-7522-a80c-ddcd6935f5dc/runtime.json +11 -0
- package/.ikie/ferments/019f2b6e-64aa-7328-ae9b-04f663f377b8/reviews/phase-phase-1-1.json +47 -0
- package/.ikie/ferments/019f2b6e-64aa-7328-ae9b-04f663f377b8/runtime.json +13 -0
- package/.ikie/ferments/019f2b6e-64fe-723a-99a2-0fab54b29f4a/reviews/phase-phase-1-1.json +40 -0
- package/.ikie/ferments/019f2b6e-64fe-723a-99a2-0fab54b29f4a/runtime.json +9 -0
- package/.ikie/ferments/019f2b6e-651b-7018-91c0-baa3cf77c217/reviews/phase-phase-1-1.json +40 -0
- package/.ikie/ferments/019f2b6e-651b-7018-91c0-baa3cf77c217/runtime.json +9 -0
- package/.ikie/ferments/019f2b6e-6533-70ee-a6de-6b3bc5ca17ef/reviews/phase-phase-1-1.json +40 -0
- package/.ikie/ferments/019f2b6e-6533-70ee-a6de-6b3bc5ca17ef/runtime.json +9 -0
- package/.ikie/ferments/019f2b6e-654d-7760-942f-6ea45bebb394/reviews/phase-phase-1-1.json +40 -0
- package/.ikie/ferments/019f2b6e-654d-7760-942f-6ea45bebb394/runtime.json +9 -0
- package/.ikie/ferments/019f2b6e-6563-74c5-bfd2-d8075d4005db/reviews/phase-phase-1-1.json +40 -0
- package/.ikie/ferments/019f2b6e-6563-74c5-bfd2-d8075d4005db/runtime.json +9 -0
- package/.ikie/ferments/019f2b6e-6586-748a-83ac-05ea7a9e24f3/reviews/phase-phase-1-1.json +62 -0
- package/.ikie/ferments/019f2b6e-6586-748a-83ac-05ea7a9e24f3/runtime.json +9 -0
- package/.ikie/ferments/019f2b8e-485a-722f-ab3e-0b23bdf37851/runtime.json +11 -0
- package/.ikie/ferments/019f2b8e-4876-7247-ba41-e38f1dc709af/runtime.json +11 -0
- package/.ikie/ferments/019f2b8e-488d-732e-9b99-75f4ad2f9983/runtime.json +11 -0
- package/.ikie/ferments/019f2b8e-48ad-70b7-b262-ecb600a8be1a/runtime.json +12 -0
- package/.ikie/ferments/019f2b8e-48d9-73af-92cb-aa861441eef8/runtime.json +11 -0
- package/.ikie/ferments/019f2b8e-4906-7494-9168-5e15c0e984ed/runtime.json +15 -0
- package/.ikie/ferments/019f2b8e-4929-71db-a7b5-b8686b433b49/runtime.json +15 -0
- package/.ikie/ferments/019f2b8e-494a-774c-8e7e-e881204e3b2b/runtime.json +15 -0
- package/.ikie/ferments/019f2b8e-4972-70ab-8b70-9f8ac3ad9f33/runtime.json +13 -0
- package/.ikie/ferments/019f2b8e-49a7-7058-95e7-ea362f0554ba/runtime.json +15 -0
- package/.ikie/ferments/019f2b8e-49d5-750e-a1e0-7e7cf027c6c7/runtime.json +15 -0
- package/.ikie/ferments/019f2b8e-4a12-7181-a65a-c6bbb6e750f3/runtime.json +11 -0
- package/.ikie/ferments/019f2b8e-4a2a-7741-a5d7-8109a9bf4c22/runtime.json +15 -0
- package/.ikie/ferments/019f2b8e-4a4e-712f-9830-598e984f59b5/runtime.json +15 -0
- package/.ikie/ferments/019f2b8e-4a72-71da-97bf-f2970d34ae8d/runtime.json +15 -0
- package/.ikie/ferments/019f2b8e-4a93-76bc-8a04-28cdbb24a987/runtime.json +15 -0
- package/.ikie/ferments/019f2b8e-4ab9-770e-b160-59b011c69b81/runtime.json +15 -0
- package/.ikie/ferments/019f2b8e-4ae2-7619-8055-ddefbc9f4698/runtime.json +15 -0
- package/.ikie/ferments/019f2b8e-4b0c-722e-9afe-6fab90611474/runtime.json +15 -0
- package/.ikie/ferments/019f2b8e-4b3f-7143-b577-91721e39f89d/runtime.json +15 -0
- package/.ikie/ferments/019f2b8e-4b72-720d-a104-19ce38a362e2/runtime.json +15 -0
- package/.ikie/ferments/019f2b8e-4bab-70e9-ac26-136c55e9e4c0/runtime.json +11 -0
- package/.ikie/ferments/019f2b8e-4bca-714d-80d0-317ca4733687/runtime.json +11 -0
- package/.ikie/ferments/019f2b8e-4bf1-7029-a93f-c509e847ec71/reviews/phase-phase-1-1.json +63 -0
- package/.ikie/ferments/019f2b8e-4bf1-7029-a93f-c509e847ec71/runtime.json +17 -0
- package/.ikie/ferments/019f2b8e-4d51-75ff-951e-652cf6a5e901/reviews/phase-phase-1-1.json +63 -0
- package/.ikie/ferments/019f2b8e-4d51-75ff-951e-652cf6a5e901/runtime.json +17 -0
- package/.ikie/ferments/019f2b8e-4ece-70cf-a9bb-9ba0327f74f1/runtime.json +11 -0
- package/.ikie/ferments/019f2b8e-52f5-71dc-86d6-d08c3dba9c10/runtime.json +11 -0
- package/.ikie/ferments/019f2b8e-5313-747f-b0b7-9ec09f80674a/runtime.json +11 -0
- package/.ikie/ferments/019f2b8e-5333-759e-9a2e-2198d28d8a31/runtime.json +11 -0
- package/.ikie/ferments/019f2b8e-535d-7501-86c4-2d120359fda5/runtime.json +11 -0
- package/.ikie/ferments/019f2b8e-537e-7528-b236-a550ec6f9b9b/pending-proposal.json +45 -0
- package/.ikie/ferments/019f2b8e-5393-74aa-86a6-31db0e99c73c/pending-proposal.json +45 -0
- package/.ikie/ferments/019f2b8e-54cd-7573-bb52-14899e431b6a/pending-proposal.json +45 -0
- package/.ikie/ferments/019f2b8e-551d-755d-9aa9-52bb0c7ce63e/pending-proposal.json +45 -0
- package/.ikie/ferments/019f2b8e-5549-708c-8b89-1a6cc53a4ec5/pending-proposal.json +45 -0
- package/.ikie/ferments/019f2b8e-8874-7469-a3ca-1f19416a5413/runtime.json +13 -0
- package/.ikie/ferments/019f2b8e-88a4-737d-82ba-59fb52017a81/runtime.json +11 -0
- package/.ikie/ferments/019f2b8e-88c7-7448-a22d-bc9dcd6e06a2/runtime.json +11 -0
- package/.ikie/ferments/019f2b8e-88dc-72a8-813b-c9f1c91a6dd2/runtime.json +11 -0
- package/.ikie/ferments/019f2b8e-88ee-7600-a227-18ca80b3d525/runtime.json +11 -0
- package/.ikie/ferments/019f2b8e-88ff-7027-9bb9-e583b435e8b0/runtime.json +11 -0
- package/.ikie/ferments/019f2b8e-8919-737a-9f89-b74eeb851e5c/runtime.json +11 -0
- package/.ikie/ferments/019f2b8e-8936-71cc-9056-bca6ef3cbb91/runtime.json +11 -0
- package/.ikie/ferments/019f2b8e-8966-77f5-b367-a9262cc45f25/runtime.json +9 -0
- package/.ikie/ferments/019f2b8e-8990-747d-b585-59cd82d765c6/runtime.json +13 -0
- package/.ikie/ferments/019f2b8e-89c9-71ed-a2e6-016626cbe5aa/runtime.json +11 -0
- package/.ikie/ferments/019f2b8e-89de-741f-ba71-489cca892cc4/runtime.json +11 -0
- package/.ikie/ferments/019f2b8e-8a1e-727d-b14a-daf7374500ea/runtime.json +11 -0
- package/.ikie/ferments/019f2b8e-8a35-7463-803e-de399c8d3158/runtime.json +9 -0
- package/.ikie/ferments/019f2b8e-8a51-72ad-b6d1-966e350960b7/runtime.json +9 -0
- package/.ikie/ferments/019f2b8e-8a6c-73e1-a3ab-f1e554db6b03/runtime.json +11 -0
- package/.ikie/ferments/019f2b8e-8b16-7688-a299-84f3acc74338/runtime.json +11 -0
- package/.ikie/ferments/019f2b8e-8b2f-71bf-8c76-21f5ce28b4fd/runtime.json +12 -0
- package/.ikie/ferments/019f2b8e-8b54-711e-b25c-8e06b22d52a3/runtime.json +11 -0
- package/.ikie/ferments/019f2b8e-8b66-7039-97d2-00e7b31d85fe/runtime.json +11 -0
- package/.ikie/ferments/019f2b8e-8b7a-76c8-8456-727db5f07f3f/runtime.json +11 -0
- package/.ikie/ferments/019f2b8e-8b8e-7451-a3d6-7fbcc67a28c9/runtime.json +11 -0
- package/.ikie/ferments/019f2b8e-8ba1-73e8-bff2-bfbc47873b3b/runtime.json +13 -0
- package/.ikie/ferments/019f2b8e-8bb9-721b-aad5-fab25fa9b1d1/runtime.json +11 -0
- package/.ikie/ferments/019f2b8e-982a-74b9-b1b2-ad6c1b598e0a/reviews/phase-phase-1-1.json +41 -0
- package/.ikie/ferments/019f2b8e-982a-74b9-b1b2-ad6c1b598e0a/runtime.json +11 -0
- package/.ikie/ferments/019f2b8e-986d-7469-949a-be76ce3780d3/reviews/phase-phase-1-1.json +47 -0
- package/.ikie/ferments/019f2b8e-986d-7469-949a-be76ce3780d3/runtime.json +13 -0
- package/.ikie/ferments/019f2b8e-98ba-749a-839a-f5b64fbca3bc/reviews/phase-phase-1-1.json +40 -0
- package/.ikie/ferments/019f2b8e-98ba-749a-839a-f5b64fbca3bc/runtime.json +9 -0
- package/.ikie/ferments/019f2b8e-98f7-7482-b89d-ca40d860d72b/reviews/phase-phase-1-1.json +40 -0
- package/.ikie/ferments/019f2b8e-98f7-7482-b89d-ca40d860d72b/runtime.json +9 -0
- package/.ikie/ferments/019f2b8e-991a-729a-83c8-0da93e3f26ff/reviews/phase-phase-1-1.json +40 -0
- package/.ikie/ferments/019f2b8e-991a-729a-83c8-0da93e3f26ff/runtime.json +9 -0
- package/.ikie/ferments/019f2b8e-9931-713f-845d-211cb77d0482/reviews/phase-phase-1-1.json +40 -0
- package/.ikie/ferments/019f2b8e-9931-713f-845d-211cb77d0482/runtime.json +9 -0
- package/.ikie/ferments/019f2b8e-9952-734c-a3b4-8877348a7856/reviews/phase-phase-1-1.json +40 -0
- package/.ikie/ferments/019f2b8e-9952-734c-a3b4-8877348a7856/runtime.json +9 -0
- package/.ikie/ferments/019f2b8e-9974-700e-b045-cc2244e4d691/reviews/phase-phase-1-1.json +62 -0
- package/.ikie/ferments/019f2b8e-9974-700e-b045-cc2244e4d691/runtime.json +9 -0
- package/benchmark/audit-session/audit-session.sh +0 -0
- package/benchmark/manual/check-session.py +0 -0
- package/benchmark/manual/new-session-claude.sh +0 -0
- package/benchmark/manual/new-session.sh +0 -0
- package/benchmark/manual/run-evaluation.sh +0 -0
- package/benchmark/manual/start-self-improvement.sh +0 -0
- package/benchmark/terminal-bench-2/scripts/analyze-ferment-bench.py +0 -0
- package/benchmark/terminal-bench-2/scripts/run-claude-code-ikie.sh +0 -0
- package/benchmark/terminal-bench-2/scripts/run-gsd-ikie.sh +0 -0
- package/benchmark/terminal-bench-2/scripts/run-local.sh +0 -0
- package/benchmark/terminal-bench-2/scripts/run-opencode-ikie.sh +0 -0
- package/benchmark/terminal-bench-2/scripts/run-release.sh +0 -0
- package/package.json +103 -125
- package/scripts/dev-overlay.sh +0 -0
- package/scripts/dev-startup.sh +0 -0
- package/scripts/install.sh +0 -0
- package/scripts/prepublish-npm.js +1 -1
- package/scripts/verify-acp-load.mjs +0 -0
- package/src/cli-auth/index.test.ts +14 -10
- package/src/extensions/agents/prompt/skill-loader.test.ts +18 -0
- package/src/extensions/agents/prompt/skill-loader.ts +4 -1
- package/src/extensions/ferment/index.ts +2 -0
- package/src/extensions/ferment/tools/escalate.ts +70 -0
- package/src/extensions/orchestration/continuation-nudge.test.ts +9 -0
- package/src/extensions/orchestration/continuation-nudge.ts +8 -0
- package/src/extensions/orchestration/model-roles.test.ts +6 -1
- package/src/extensions/orchestration/model-roles.ts +6 -0
- package/src/extensions/prompt-construction/prompt-enrichment.test.ts +49 -3
- package/src/extensions/prompt-construction/prompt-enrichment.ts +4 -1
- package/src/extensions/skills-manager/skill-manager.test.ts +31 -14
- package/src/extensions/skills-manager/skill-manager.ts +14 -5
- package/src/extensions/skills-manager/skill-sanitizer.test.ts +287 -0
- package/src/extensions/skills-manager/skill-sanitizer.ts +269 -0
- package/src/models.test.ts +3 -1
- package/src/shared/planning/tool-catalog.test.ts +15 -8
- package/src/shared/planning/tool-catalog.ts +4 -3
- package/vendor/superpowers/hooks/run-hook.cmd +0 -0
- package/vendor/superpowers/hooks/session-start +0 -0
- package/vendor/superpowers/scripts/bump-version.sh +0 -0
- package/vendor/superpowers/scripts/sync-to-codex-plugin.sh +0 -0
- package/vendor/superpowers/skills/brainstorming/scripts/start-server.sh +0 -0
- package/vendor/superpowers/skills/brainstorming/scripts/stop-server.sh +0 -0
- package/vendor/superpowers/skills/systematic-debugging/find-polluter.sh +0 -0
- package/vendor/superpowers/skills/writing-skills/render-graphs.js +0 -0
- package/vendor/superpowers/tests/brainstorm-server/windows-lifecycle.test.sh +0 -0
- package/vendor/superpowers/tests/claude-code/analyze-token-usage.py +0 -0
- package/vendor/superpowers/tests/claude-code/run-skill-tests.sh +0 -0
- package/vendor/superpowers/tests/claude-code/test-document-review-system.sh +0 -0
- package/vendor/superpowers/tests/claude-code/test-helpers.sh +0 -0
- package/vendor/superpowers/tests/claude-code/test-requesting-code-review.sh +0 -0
- package/vendor/superpowers/tests/claude-code/test-subagent-driven-development-integration.sh +0 -0
- package/vendor/superpowers/tests/claude-code/test-subagent-driven-development.sh +0 -0
- package/vendor/superpowers/tests/claude-code/test-worktree-native-preference.sh +0 -0
- package/vendor/superpowers/tests/codex-plugin-sync/test-sync-to-codex-plugin.sh +0 -0
- package/vendor/superpowers/tests/explicit-skill-requests/run-all.sh +0 -0
- package/vendor/superpowers/tests/explicit-skill-requests/run-claude-describes-sdd.sh +0 -0
- package/vendor/superpowers/tests/explicit-skill-requests/run-extended-multiturn-test.sh +0 -0
- package/vendor/superpowers/tests/explicit-skill-requests/run-haiku-test.sh +0 -0
- package/vendor/superpowers/tests/explicit-skill-requests/run-multiturn-test.sh +0 -0
- package/vendor/superpowers/tests/explicit-skill-requests/run-test.sh +0 -0
- package/vendor/superpowers/tests/opencode/run-tests.sh +0 -0
- package/vendor/superpowers/tests/opencode/setup.sh +0 -0
- package/vendor/superpowers/tests/opencode/test-bootstrap-caching.sh +0 -0
- package/vendor/superpowers/tests/opencode/test-plugin-loading.sh +0 -0
- package/vendor/superpowers/tests/opencode/test-priority.sh +0 -0
- package/vendor/superpowers/tests/opencode/test-tools.sh +0 -0
- package/vendor/superpowers/tests/skill-triggering/run-all.sh +0 -0
- package/vendor/superpowers/tests/skill-triggering/run-test.sh +0 -0
- package/vendor/superpowers/tests/subagent-driven-dev/go-fractals/scaffold.sh +0 -0
- package/vendor/superpowers/tests/subagent-driven-dev/run-test.sh +0 -0
- package/vendor/superpowers/tests/subagent-driven-dev/svelte-todo/scaffold.sh +0 -0
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"fermentId": "019f2b8e-9974-700e-b045-cc2244e4d691",
|
|
4
|
+
"phaseId": "phase-1",
|
|
5
|
+
"phaseName": "Phase 1",
|
|
6
|
+
"attempt": 1,
|
|
7
|
+
"timestamp": "2026-07-04T05:16:33.545Z",
|
|
8
|
+
"goal": "Build 1",
|
|
9
|
+
"summary": "phase done",
|
|
10
|
+
"stepSummaries": " 1. Step 1 [done]",
|
|
11
|
+
"diffAvailable": false,
|
|
12
|
+
"flags": [],
|
|
13
|
+
"derivedGrade": "A",
|
|
14
|
+
"reviewerRationale": "All gates pass; project checks validate.",
|
|
15
|
+
"gateVerdicts": [
|
|
16
|
+
{
|
|
17
|
+
"id": "F1",
|
|
18
|
+
"verdict": "pass",
|
|
19
|
+
"rationale": "All step verifications were real.",
|
|
20
|
+
"evidence": "step-1 used smoke"
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"id": "F2",
|
|
24
|
+
"verdict": "pass",
|
|
25
|
+
"rationale": "Phase goal delivered.",
|
|
26
|
+
"evidence": "feature.ts:1-40"
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
"id": "F3",
|
|
30
|
+
"verdict": "pass",
|
|
31
|
+
"rationale": "Nothing deferred.",
|
|
32
|
+
"evidence": "n/a"
|
|
33
|
+
}
|
|
34
|
+
],
|
|
35
|
+
"projectChecks": {
|
|
36
|
+
"discovered": true,
|
|
37
|
+
"anyFailed": false,
|
|
38
|
+
"commands": [
|
|
39
|
+
{
|
|
40
|
+
"kind": "test",
|
|
41
|
+
"command": "npm test",
|
|
42
|
+
"exitCode": 0,
|
|
43
|
+
"durationMs": 0,
|
|
44
|
+
"timedOut": false
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
"kind": "lint",
|
|
48
|
+
"command": "npm run lint",
|
|
49
|
+
"exitCode": 0,
|
|
50
|
+
"durationMs": 0,
|
|
51
|
+
"timedOut": false
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
"kind": "typecheck",
|
|
55
|
+
"command": "npm run typecheck",
|
|
56
|
+
"exitCode": 0,
|
|
57
|
+
"durationMs": 0,
|
|
58
|
+
"timedOut": false
|
|
59
|
+
}
|
|
60
|
+
]
|
|
61
|
+
}
|
|
62
|
+
}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
package/package.json
CHANGED
|
@@ -1,126 +1,104 @@
|
|
|
1
1
|
{
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
},
|
|
106
|
-
"packageManager": "pnpm@10.8.1",
|
|
107
|
-
"pnpm": {
|
|
108
|
-
"onlyBuiltDependencies": [
|
|
109
|
-
"@biomejs/biome",
|
|
110
|
-
"esbuild",
|
|
111
|
-
"koffi",
|
|
112
|
-
"node-pty",
|
|
113
|
-
"protobufjs"
|
|
114
|
-
],
|
|
115
|
-
"ignoredOptionalDependencies": [
|
|
116
|
-
"cpu-features",
|
|
117
|
-
"nan"
|
|
118
|
-
],
|
|
119
|
-
"patchedDependencies": {
|
|
120
|
-
"@earendil-works/pi-tui": "patches/@earendil-works__pi-tui.patch",
|
|
121
|
-
"playwright-core@1.59.1": "patches/playwright-core@1.59.1.patch",
|
|
122
|
-
"@earendil-works/pi-ai@0.78.1": "patches/@earendil-works__pi-ai@0.78.1.patch",
|
|
123
|
-
"@earendil-works/pi-coding-agent@0.78.1": "patches/@earendil-works__pi-coding-agent@0.78.1.patch"
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
}
|
|
2
|
+
"name": "@ikie-dev/cli",
|
|
3
|
+
"version": "9.9.1",
|
|
4
|
+
"description": "ikie — a coding agent CLI powered by ikie AI",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"license": "Apache-2.0",
|
|
7
|
+
"bin": {
|
|
8
|
+
"ikie-cli": "src/entry.ts"
|
|
9
|
+
},
|
|
10
|
+
"piConfig": {
|
|
11
|
+
"name": "ikie",
|
|
12
|
+
"configDir": ".config/ikie/harness"
|
|
13
|
+
},
|
|
14
|
+
"dependencies": {
|
|
15
|
+
"@agentclientprotocol/sdk": "0.19.2",
|
|
16
|
+
"@clack/prompts": "^1.3.0",
|
|
17
|
+
"@earendil-works/pi-ai": "0.78.1",
|
|
18
|
+
"@earendil-works/pi-coding-agent": "0.78.1",
|
|
19
|
+
"@earendil-works/pi-tui": "0.78.1",
|
|
20
|
+
"@mixmark-io/domino": "^2.2.0",
|
|
21
|
+
"@modelcontextprotocol/ext-apps": "^1.7.1",
|
|
22
|
+
"@modelcontextprotocol/sdk": "^1.29.0",
|
|
23
|
+
"@shikijs/cli": "^4.0.2",
|
|
24
|
+
"@types/diff": "^8.0.0",
|
|
25
|
+
"@types/proper-lockfile": "^4.1.4",
|
|
26
|
+
"@types/ssh2": "^1.15.5",
|
|
27
|
+
"@xterm/headless": "^6.0.0",
|
|
28
|
+
"diff": "^9.0.0",
|
|
29
|
+
"micromatch": "^4.0.8",
|
|
30
|
+
"open": "^10.2.0",
|
|
31
|
+
"proper-lockfile": "^4.1.2",
|
|
32
|
+
"shell-quote": "^1.8.3",
|
|
33
|
+
"shiki": "^4.0.2",
|
|
34
|
+
"ssh2": "^1.17.0",
|
|
35
|
+
"tar": "^7.5.15",
|
|
36
|
+
"turndown": "^7.2.4",
|
|
37
|
+
"undici": "^8.2.0",
|
|
38
|
+
"uuid": "^14.0.0",
|
|
39
|
+
"wcwidth": "^1.0.1",
|
|
40
|
+
"ws": "^8.20.1",
|
|
41
|
+
"yaml": "^2.8.4",
|
|
42
|
+
"zod": "^4.4.3"
|
|
43
|
+
},
|
|
44
|
+
"peerDependencies": {
|
|
45
|
+
"typebox": "*"
|
|
46
|
+
},
|
|
47
|
+
"optionalDependencies": {
|
|
48
|
+
"@mariozechner/clipboard-darwin-arm64": "0.3.6",
|
|
49
|
+
"@mariozechner/clipboard-darwin-universal": "0.3.6",
|
|
50
|
+
"@mariozechner/clipboard-darwin-x64": "0.3.6",
|
|
51
|
+
"@mariozechner/clipboard-linux-arm64-gnu": "0.3.6",
|
|
52
|
+
"@mariozechner/clipboard-linux-arm64-musl": "0.3.6",
|
|
53
|
+
"@mariozechner/clipboard-linux-x64-gnu": "0.3.6",
|
|
54
|
+
"@mariozechner/clipboard-linux-x64-musl": "0.3.6",
|
|
55
|
+
"@mariozechner/clipboard-win32-arm64-msvc": "0.3.6",
|
|
56
|
+
"@mariozechner/clipboard-win32-x64-msvc": "0.3.6"
|
|
57
|
+
},
|
|
58
|
+
"devDependencies": {
|
|
59
|
+
"@biomejs/biome": "^1.9.4",
|
|
60
|
+
"@microsoft/tui-test": "0.0.4",
|
|
61
|
+
"@types/micromatch": "^4.0.10",
|
|
62
|
+
"@types/node": "^22.19.18",
|
|
63
|
+
"@types/shell-quote": "^1.7.5",
|
|
64
|
+
"@types/tar": "^7.0.87",
|
|
65
|
+
"@types/turndown": "^5.0.6",
|
|
66
|
+
"@types/ws": "^8.18.1",
|
|
67
|
+
"husky": "^9.1.7",
|
|
68
|
+
"node-pty": "^1.1.0",
|
|
69
|
+
"playwright": "^1.59.1",
|
|
70
|
+
"supports-color": "^10.2.2",
|
|
71
|
+
"tsx": "^4.21.0",
|
|
72
|
+
"typescript": "^5.9.3",
|
|
73
|
+
"vitest": "^3.2.4"
|
|
74
|
+
},
|
|
75
|
+
"engines": {
|
|
76
|
+
"node": ">=22.0.0"
|
|
77
|
+
},
|
|
78
|
+
"scripts": {
|
|
79
|
+
"clean": "rm -rf dist",
|
|
80
|
+
"build": "tsc --noEmit && node scripts/copy-resources.js --dev",
|
|
81
|
+
"build:proxy-helper": "node scripts/build-proxy-helper.js",
|
|
82
|
+
"build:binary": "node scripts/build-binary.js",
|
|
83
|
+
"install:local": "node scripts/install-local.js",
|
|
84
|
+
"build:binary-linux-arm64": "node scripts/build-binary.js --target linux-arm64",
|
|
85
|
+
"build:binary-linux-x64": "node scripts/build-binary.js --target linux-x64",
|
|
86
|
+
"build:binary-windows-x64": "node scripts/build-binary.js --target windows-x64",
|
|
87
|
+
"dev": "make -C tools/proxy-helper/ copy-for-dev && bun run --preload ./src/set-package-dir.ts src/entry.ts",
|
|
88
|
+
"dev:overlay": "scripts/dev-overlay.sh",
|
|
89
|
+
"dev:setup": "bun run --preload ./src/set-package-dir.ts src/entry.ts setup",
|
|
90
|
+
"lint": "biome check src/ scripts/",
|
|
91
|
+
"lint:fix": "biome check --write src/ scripts/",
|
|
92
|
+
"typecheck": "tsc --noEmit",
|
|
93
|
+
"check": "pnpm run lint && pnpm run typecheck",
|
|
94
|
+
"test": "vitest run --dir src",
|
|
95
|
+
"test:smoke": "vitest run --config tests/smoke/vitest.config.ts",
|
|
96
|
+
"test:e2e:tui": "pnpm run build:binary && node scripts/run-tui-e2e.js",
|
|
97
|
+
"test:e2e:tui:debug": "pnpm run build:binary && node scripts/run-tui-e2e.js --debug",
|
|
98
|
+
"test:e2e:tui:trace": "pnpm run build:binary && node scripts/run-tui-e2e.js --trace",
|
|
99
|
+
"test:e2e:tui:trace:replay": "node scripts/run-tui-e2e.js replay",
|
|
100
|
+
"test:e2e:acp": "pnpm run build:binary && vitest run --config tests/e2e/acp/vitest.config.ts",
|
|
101
|
+
"postinstall": "node scripts/patch-pi-ai-oauth.js",
|
|
102
|
+
"verify": "pnpm run check && pnpm run build:binary && pnpm run test && pnpm run test:smoke"
|
|
103
|
+
}
|
|
104
|
+
}
|
package/scripts/dev-overlay.sh
CHANGED
|
File without changes
|
package/scripts/dev-startup.sh
CHANGED
|
File without changes
|
package/scripts/install.sh
CHANGED
|
File without changes
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
// - src/core/export-html/<templates> (upstream pi-coding-agent looks there)
|
|
7
7
|
// - package.json at the package root
|
|
8
8
|
|
|
9
|
-
import { cpSync, existsSync, mkdirSync,
|
|
9
|
+
import { cpSync, existsSync, mkdirSync, readFileSync, readdirSync, writeFileSync } from "node:fs"
|
|
10
10
|
import { dirname, join } from "node:path"
|
|
11
11
|
import { fileURLToPath } from "node:url"
|
|
12
12
|
|
|
File without changes
|
|
@@ -7,14 +7,16 @@ const mockFetch = vi.fn()
|
|
|
7
7
|
|
|
8
8
|
const DEFAULT_BASE = "https://ikie-cli.xyz"
|
|
9
9
|
|
|
10
|
-
function deviceResponse(
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
10
|
+
function deviceResponse(
|
|
11
|
+
overrides: Partial<{
|
|
12
|
+
device_code: string
|
|
13
|
+
user_code: string
|
|
14
|
+
verification_uri: string
|
|
15
|
+
verification_uri_complete: string
|
|
16
|
+
expires_in: number
|
|
17
|
+
interval: number
|
|
18
|
+
}> = {},
|
|
19
|
+
) {
|
|
18
20
|
return {
|
|
19
21
|
device_code: "dc-test-123",
|
|
20
22
|
user_code: "ABC-123",
|
|
@@ -91,8 +93,10 @@ describe("authenticateViaBrowser", () => {
|
|
|
91
93
|
})
|
|
92
94
|
|
|
93
95
|
it("throws when cancelled via signal", async () => {
|
|
94
|
-
mockFetch
|
|
95
|
-
|
|
96
|
+
mockFetch.mockResolvedValueOnce({
|
|
97
|
+
ok: true,
|
|
98
|
+
json: () => Promise.resolve(deviceResponse({ expires_in: 60000, interval: 0 })),
|
|
99
|
+
})
|
|
96
100
|
|
|
97
101
|
const ctrl = new AbortController()
|
|
98
102
|
const promise = authenticateViaBrowser({ quiet: true, signal: ctrl.signal })
|
|
@@ -38,4 +38,22 @@ describe("preloadSkills", () => {
|
|
|
38
38
|
expect(results[0].name).toBe("my-skill")
|
|
39
39
|
expect(results[0].content).toContain("This is the skill content.")
|
|
40
40
|
})
|
|
41
|
+
|
|
42
|
+
it("normalizes an invalid skill name before loading", () => {
|
|
43
|
+
const base = join(tmpdir(), `ikie-skill-test-${Date.now()}`)
|
|
44
|
+
const cwd = join(base, "project")
|
|
45
|
+
|
|
46
|
+
// Place skill at <cwd>/.pi/agent/skills (second entry in DEFAULT_SKILL_PATHS)
|
|
47
|
+
const skillDir = join(cwd, ".pi", "agent", "skills", "ckm:slides")
|
|
48
|
+
mkdirSync(skillDir, { recursive: true })
|
|
49
|
+
writeFileSync(
|
|
50
|
+
join(skillDir, "SKILL.md"),
|
|
51
|
+
"---\nname: ckm:slides\ndescription: slides skill\n---\nSlides skill body.",
|
|
52
|
+
)
|
|
53
|
+
|
|
54
|
+
const results = preloadSkills(["ckm-slides"], cwd)
|
|
55
|
+
expect(results).toHaveLength(1)
|
|
56
|
+
expect(results[0].name).toBe("ckm-slides")
|
|
57
|
+
expect(results[0].content).toContain("Slides skill body.")
|
|
58
|
+
})
|
|
41
59
|
})
|
|
@@ -10,8 +10,11 @@ import { isAbsolute, join } from "node:path"
|
|
|
10
10
|
import type { Skill } from "@earendil-works/pi-coding-agent"
|
|
11
11
|
import { loadSkillsFromDir } from "@earendil-works/pi-coding-agent"
|
|
12
12
|
import { DEFAULT_SKILL_PATHS } from "../../../config.js"
|
|
13
|
+
import { createSkillSanitizer } from "../../skills-manager/skill-sanitizer.js"
|
|
13
14
|
import { isUnsafeName } from "../memory/memory.js"
|
|
14
15
|
|
|
16
|
+
const skillSanitizer = createSkillSanitizer()
|
|
17
|
+
|
|
15
18
|
export interface PreloadedSkill {
|
|
16
19
|
name: string
|
|
17
20
|
content: string
|
|
@@ -44,7 +47,7 @@ export function preloadSkills(skillNames: string[], cwd: string): PreloadedSkill
|
|
|
44
47
|
const allSkills = new Map<string, Skill>()
|
|
45
48
|
for (const dir of resolvedPaths) {
|
|
46
49
|
try {
|
|
47
|
-
const { skills } = loadSkillsFromDir({ dir, source: dir })
|
|
50
|
+
const { skills } = loadSkillsFromDir({ dir: skillSanitizer.sanitizePath(dir), source: dir })
|
|
48
51
|
for (const skill of skills) {
|
|
49
52
|
// Later paths (higher priority) override earlier ones
|
|
50
53
|
allSkills.set(skill.name, skill)
|
|
@@ -38,6 +38,7 @@ import { getActive, getActiveId, getContinuationPolicy } from "./state.js"
|
|
|
38
38
|
import { createFermentTipProvider } from "./tips.js"
|
|
39
39
|
import { registerFermentTodoSync } from "./todo-sync.js"
|
|
40
40
|
import { applyFermentRuntimeToolProfile } from "./tool-scope.js"
|
|
41
|
+
import { registerEscalateTool } from "./tools/escalate.js"
|
|
41
42
|
import { registerKnowledgeTools } from "./tools/knowledge.js"
|
|
42
43
|
import { buildFreeformScopingFeedbackMessage, registerLifecycleTools } from "./tools/lifecycle.js"
|
|
43
44
|
import { registerPhaseTools } from "./tools/phases.js"
|
|
@@ -333,5 +334,6 @@ export default function fermentExtension(pi: ExtensionAPI, runtime: FermentRunti
|
|
|
333
334
|
registerPhaseTools(pi, runtime)
|
|
334
335
|
registerStepTools(pi, runtime)
|
|
335
336
|
registerKnowledgeTools(pi, runtime)
|
|
337
|
+
registerEscalateTool(pi, runtime)
|
|
336
338
|
registerAgentSpawnGuard(pi, runtime)
|
|
337
339
|
}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import type { ExtensionAPI } from "@earendil-works/pi-coding-agent"
|
|
2
|
+
import { findFirstPlannedPhase } from "../../../ferment/engine.js"
|
|
3
|
+
import { captureGitHead } from "../phase-evidence.js"
|
|
4
|
+
import type { FermentRuntime } from "../runtime.js"
|
|
5
|
+
import { createApplyAndPersist, toolOk } from "../tool-helpers.js"
|
|
6
|
+
import { applyFermentToolProfile, profileForFerment } from "../tool-scope.js"
|
|
7
|
+
|
|
8
|
+
export function registerEscalateTool(pi: ExtensionAPI, runtime: FermentRuntime): void {
|
|
9
|
+
pi.registerTool({
|
|
10
|
+
name: "escalate_tools",
|
|
11
|
+
label: "Escalate Tools",
|
|
12
|
+
description:
|
|
13
|
+
"Upgrade your tool access when you need write/execute tools (bash, edit, write, start_ferment_step, etc.) that aren't currently available. " +
|
|
14
|
+
"If a ferment exists and is in planning phase, this activates the first planned phase and unlocks the full implementation toolset. " +
|
|
15
|
+
"If no ferment is active, it tells you how to start one.",
|
|
16
|
+
parameters: {
|
|
17
|
+
type: "object",
|
|
18
|
+
properties: {},
|
|
19
|
+
additionalProperties: false,
|
|
20
|
+
},
|
|
21
|
+
async execute() {
|
|
22
|
+
const ferment = runtime.getActive()
|
|
23
|
+
|
|
24
|
+
if (!ferment) {
|
|
25
|
+
return toolOk(
|
|
26
|
+
"No active ferment found. Use `/ferment new <your task>` to start one, then call escalate_tools again after scoping to begin implementation.",
|
|
27
|
+
)
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
const currentProfile = profileForFerment(ferment)
|
|
31
|
+
if (currentProfile === "implementation") {
|
|
32
|
+
return toolOk(
|
|
33
|
+
`Already in implementation phase (ferment: ${ferment.id}). All tools should be available. If something is still missing, check your permissions config.`,
|
|
34
|
+
)
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
const planned = findFirstPlannedPhase(ferment)
|
|
38
|
+
if (!planned) {
|
|
39
|
+
return toolOk(
|
|
40
|
+
`Ferment "${ferment.id}" has no planned phases to activate. Use scope_ferment to define phases, then call escalate_tools again.`,
|
|
41
|
+
)
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
const storage = runtime.getStorage()
|
|
45
|
+
const f = storage.get(ferment.id)
|
|
46
|
+
if (!f) {
|
|
47
|
+
return toolOk(`Ferment "${ferment.id}" not found in storage. Try /ferment list to see available ferments.`)
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
const applyAndPersist = createApplyAndPersist(runtime)
|
|
51
|
+
const outcome = applyAndPersist(ferment.id, { type: "activate_phase", phaseId: planned.id })
|
|
52
|
+
if (!outcome.ok) {
|
|
53
|
+
return toolOk(`Could not activate phase: ${outcome.error.message}`)
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
try {
|
|
57
|
+
applyFermentToolProfile(pi, profileForFerment(outcome.ferment))
|
|
58
|
+
} catch (err) {
|
|
59
|
+
console.error("[ferment] escalate_tools: applyFermentToolProfile failed", err)
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
const headRef = captureGitHead()
|
|
63
|
+
if (headRef) runtime.setPhaseStartRef(ferment.id, planned.id, headRef)
|
|
64
|
+
|
|
65
|
+
return toolOk(
|
|
66
|
+
`Phase "${planned.name}" activated. Tool access upgraded to implementation — you now have bash, edit, write, start_ferment_step, and all other execution tools.`,
|
|
67
|
+
)
|
|
68
|
+
},
|
|
69
|
+
})
|
|
70
|
+
}
|
|
@@ -30,6 +30,9 @@ function makeAssistant(content: AssistantMessage["content"]): AssistantMessage {
|
|
|
30
30
|
}
|
|
31
31
|
|
|
32
32
|
const textOnlyMessage = makeAssistant([{ type: "text", text: "I will delegate this to Nemotron." }])
|
|
33
|
+
const greetingMessage = makeAssistant([
|
|
34
|
+
{ type: "text", text: "Hi there! I'm ready to help. What would you like to work on?" },
|
|
35
|
+
])
|
|
33
36
|
|
|
34
37
|
const toolCallMessage = makeAssistant([
|
|
35
38
|
{
|
|
@@ -193,6 +196,12 @@ describe("ContinuationNudge.evaluateTurn", () => {
|
|
|
193
196
|
simulateSessionWithPriorToolCall(guard)
|
|
194
197
|
expect(guard.evaluateTurn(textOnlyMessage)).toBe(true)
|
|
195
198
|
})
|
|
199
|
+
|
|
200
|
+
it("does not nudge normal conversational replies after prior tool use", () => {
|
|
201
|
+
const guard = new ContinuationNudge()
|
|
202
|
+
simulateSessionWithPriorToolCall(guard)
|
|
203
|
+
expect(guard.evaluateTurn(greetingMessage)).toBe(false)
|
|
204
|
+
})
|
|
196
205
|
})
|
|
197
206
|
|
|
198
207
|
describe("ContinuationNudge session-level tool tracking", () => {
|
|
@@ -44,6 +44,13 @@ export const SECOND_NUDGE_TEXT =
|
|
|
44
44
|
export const EMPTY_TURN_NUDGE_TEXT =
|
|
45
45
|
"If you have finished, please summarize the result for the user. Otherwise, continue with the next tool call."
|
|
46
46
|
|
|
47
|
+
const TOOL_INTENT_RE =
|
|
48
|
+
/\b(?:i(?:'|’)ll|i\s+will|let\s+me|i(?:'|’)m\s+going\s+to|i\s+am\s+going\s+to|going\s+to)\s+(?:delegate|hand\s+off|ask\s+(?:an?\s+)?(?:agent|subagent)|use|call|run|execute|inspect|read|search|grep|find|edit|write|modify|update|create|open|check|test|verify|review|analy[sz]e|investigate)\b|\b(?:delegating|handing\s+off|calling|running|executing|reading|searching|editing|writing|checking|testing|verifying|reviewing|investigating)\b|\b(?:use|call)\s+(?:the\s+)?(?:agent|task|bash|read|grep|glob|webfetch|apply_patch|tool)\b/i
|
|
49
|
+
|
|
50
|
+
function hasPendingToolIntent(message: AssistantMessage): boolean {
|
|
51
|
+
return message.content.some((c) => c.type === "text" && TOOL_INTENT_RE.test(c.text))
|
|
52
|
+
}
|
|
53
|
+
|
|
47
54
|
/** Post-turn state machine for the "text-only drift" nudge.
|
|
48
55
|
*
|
|
49
56
|
* Fires at most twice per user-input cycle, and only when no tool has been
|
|
@@ -140,6 +147,7 @@ export class ContinuationNudge {
|
|
|
140
147
|
const hasToolCalls = message.content.some((c) => c.type === "toolCall")
|
|
141
148
|
const hasText = message.content.some((c) => c.type === "text" && c.text.trim().length > 0)
|
|
142
149
|
if (hasToolCalls || !hasText) return false
|
|
150
|
+
if (!hasPendingToolIntent(message)) return false
|
|
143
151
|
this.nudgeCountThisCycle++
|
|
144
152
|
this.nudgeResponsePending = true
|
|
145
153
|
return true
|
|
@@ -346,8 +346,13 @@ describe("validateModelRoles", () => {
|
|
|
346
346
|
expect(result.unavailable).toHaveLength(0)
|
|
347
347
|
})
|
|
348
348
|
|
|
349
|
-
it("
|
|
349
|
+
it("does not warn for unavailable defaults unless requested", () => {
|
|
350
350
|
const result = validateModelRoles(DEFAULT_MODEL_ROLES, new Set())
|
|
351
|
+
expect(result.unavailable).toHaveLength(0)
|
|
352
|
+
})
|
|
353
|
+
|
|
354
|
+
it("can include unavailable defaults for diagnostics", () => {
|
|
355
|
+
const result = validateModelRoles(DEFAULT_MODEL_ROLES, new Set(), { warnForDefaults: true })
|
|
351
356
|
expect(result.unavailable.length).toBeGreaterThanOrEqual(5)
|
|
352
357
|
const flaggedRoles = new Set(result.unavailable.map((u) => u.role))
|
|
353
358
|
expect(flaggedRoles).toEqual(
|
|
@@ -237,15 +237,21 @@ export interface ModelRoleValidationResult {
|
|
|
237
237
|
unavailable: { role: keyof ModelRoles; configuredModel: string }[]
|
|
238
238
|
}
|
|
239
239
|
|
|
240
|
+
function roleValuesEqual(a: RoleModelAssignment, b: RoleModelAssignment): boolean {
|
|
241
|
+
return JSON.stringify(normalizeRoleModels(a)) === JSON.stringify(normalizeRoleModels(b))
|
|
242
|
+
}
|
|
243
|
+
|
|
240
244
|
/**
|
|
241
245
|
* Validate that each role's model(s) exist in the set of available model IDs.
|
|
242
246
|
*/
|
|
243
247
|
export function validateModelRoles(
|
|
244
248
|
roles: ModelRoles,
|
|
245
249
|
availableModelIds: ReadonlySet<string>,
|
|
250
|
+
options: { warnForDefaults?: boolean } = {},
|
|
246
251
|
): ModelRoleValidationResult {
|
|
247
252
|
const unavailable: ModelRoleValidationResult["unavailable"] = []
|
|
248
253
|
for (const key of ROLE_KEYS) {
|
|
254
|
+
if (!options.warnForDefaults && roleValuesEqual(roles[key], DEFAULT_MODEL_ROLES[key])) continue
|
|
249
255
|
const refs = normalizeRoleModels(roles[key])
|
|
250
256
|
for (const ref of refs) {
|
|
251
257
|
const id = modelIdFromRef(ref)
|