release-skill 0.9.30 → 0.9.32

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.
Files changed (36) hide show
  1. package/.claude-plugin/plugin.json +1 -1
  2. package/.codebuddy-plugin/plugin.json +1 -1
  3. package/.codex-plugin/plugin.json +2 -2
  4. package/.cursor-plugin/plugin.json +1 -1
  5. package/.kimi-plugin/plugin.json +1 -1
  6. package/.qoder-plugin/plugin.json +1 -1
  7. package/CHANGELOG.md +55 -0
  8. package/INSTALL.md +2 -2
  9. package/INSTALL.zh-CN.md +2 -2
  10. package/README.md +11 -15
  11. package/README.zh-CN.md +11 -15
  12. package/adapters/claude/.claude-plugin/plugin.json +1 -1
  13. package/adapters/claude/bin/release-skill.bundle.mjs +195 -11
  14. package/adapters/claude/skills/release-help/SKILL.md +8 -2
  15. package/adapters/codex/.codex-plugin/plugin.json +2 -2
  16. package/adapters/codex/bin/release-skill.bundle.mjs +195 -11
  17. package/adapters/codex/skills/release-help/SKILL.md +8 -2
  18. package/adapters/cursor/.cursor-plugin/plugin.json +1 -1
  19. package/adapters/cursor/bin/release-skill.bundle.mjs +195 -11
  20. package/adapters/cursor/skills/release-help/SKILL.md +8 -2
  21. package/adapters/kimi/.kimi-plugin/plugin.json +1 -1
  22. package/adapters/kimi/bin/release-skill.bundle.mjs +195 -11
  23. package/adapters/kimi/skills/release-help/SKILL.md +8 -2
  24. package/adapters/qoder/.qoder-plugin/plugin.json +1 -1
  25. package/adapters/qoder/bin/release-skill.bundle.mjs +195 -11
  26. package/adapters/qoder/skills/release-help/SKILL.md +8 -2
  27. package/adapters/workbuddy/.codebuddy-plugin/plugin.json +1 -1
  28. package/adapters/workbuddy/bin/release-skill.bundle.mjs +195 -11
  29. package/adapters/workbuddy/skills/release-help/SKILL.md +8 -2
  30. package/bin/release-skill.bundle.mjs +195 -11
  31. package/package.json +1 -1
  32. package/platform-manifest.json +4 -4
  33. package/skills/release-help/SKILL.md +8 -2
  34. package/skills-src/release-help/SKILL.md +8 -2
  35. package/src/commands/post-release-finish.mjs +1 -1
  36. package/src/commands/post-release-local.mjs +192 -8
@@ -1476,17 +1476,198 @@ function parseCodeBuddyRemoteObservation(target, stdout) {
1476
1476
 
1477
1477
  function kimiExpectProgram({ removePlugin } = {}) {
1478
1478
  const removeCommand = removePlugin
1479
- ? `submitCommand "/plugins remove $removePlugin"
1480
- expect {
1481
- -nocase -re {(remove|delete|uninstall).*(confirm|sure)|(confirm|sure).*(remove|delete|uninstall)} {
1479
+ ? `proc kimi22RemoveIdentity {dialog} {
1480
+ set identity ""
1481
+ foreach rawLine [split $dialog "\\n"] {
1482
+ set line [string trim $rawLine]
1483
+ if {[regexp -nocase {Remove .+ \\(([^()]+)\\)\\?} $line match pluginId]} {
1484
+ if {$identity ne "" && $identity ne $pluginId} { return "" }
1485
+ set identity $pluginId
1486
+ }
1487
+ }
1488
+ return $identity
1489
+ }
1490
+
1491
+ proc kimi22RemoveDialogComplete {dialog} {
1492
+ set hasCancel 0
1493
+ set hasRemove 0
1494
+ foreach rawLine [split $dialog "\\n"] {
1495
+ set line [string trim $rawLine]
1496
+ regsub {^❯[ \\t]*} $line {} label
1497
+ set label [string trim $label]
1498
+ if {[string equal -nocase $label "Cancel"]} { set hasCancel 1 }
1499
+ if {[string equal -nocase $label "Remove plugin"]} { set hasRemove 1 }
1500
+ }
1501
+ return [expr {$hasCancel && $hasRemove}]
1502
+ }
1503
+
1504
+ proc kimi22RemoveAction {dialog state unknownCode} {
1505
+ set labels {}
1506
+ set selectedCount 0
1507
+ set selectedIndex -1
1508
+ set selectedLabel ""
1509
+ set removeCount 0
1510
+ set removeIndex -1
1511
+ foreach rawLine [split $dialog "\\n"] {
1512
+ set line [string trim $rawLine]
1513
+ if {$line eq ""} { continue }
1514
+ set selected [regexp {^❯[ \\t]*} $line]
1515
+ if {$selected} {
1516
+ regsub {^❯[ \\t]*} $line {} label
1517
+ set label [string trim $label]
1518
+ } else {
1519
+ set label $line
1520
+ }
1521
+ set knownAction [expr {
1522
+ [string equal -nocase $label "Cancel"]
1523
+ || [string equal -nocase $label "Remove plugin"]
1524
+ }]
1525
+ if {!$knownAction && $selected} {
1526
+ puts stderr "KIMI_TUI_STATE:$state:unknown"
1527
+ exit $unknownCode
1528
+ }
1529
+ if {!$knownAction} { continue }
1530
+ set index [llength $labels]
1531
+ lappend labels $label
1532
+ if {[string equal -nocase $label "Remove plugin"]} {
1533
+ incr removeCount
1534
+ set removeIndex $index
1535
+ }
1536
+ if {$selected} {
1537
+ incr selectedCount
1538
+ set selectedIndex $index
1539
+ set selectedLabel $label
1540
+ }
1541
+ }
1542
+ if {[llength $labels] != 2 || $removeCount != 1 || $selectedCount != 1} {
1543
+ puts stderr "KIMI_TUI_STATE:$state:unknown"
1544
+ exit $unknownCode
1545
+ }
1546
+ if {[string equal -nocase $selectedLabel "Remove plugin"]} {
1547
+ return selected-remove
1548
+ }
1549
+ if {![string equal -nocase $selectedLabel "Cancel"]} {
1550
+ puts stderr "KIMI_TUI_STATE:$state:unknown"
1551
+ exit $unknownCode
1552
+ }
1553
+ if {$selectedIndex + 1 == $removeIndex} { return move-down }
1554
+ if {$selectedIndex - 1 == $removeIndex} { return move-up }
1555
+ puts stderr "KIMI_TUI_STATE:$state:unknown"
1556
+ exit $unknownCode
1557
+ }
1558
+
1559
+ proc readKimi22RemoveDialog {prefix state timeoutCode unknownCode eofCode} {
1560
+ global expect_out
1561
+ set dialogBuffer $prefix
1562
+ set cleaned [cleanScreen $dialogBuffer]
1563
+ if {![regexp -nocase {Remove .+ \\(([^()]+)\\)\\?} $cleaned]} {
1482
1564
  expect {
1483
- -ex $removePlugin {
1484
- send -- "\\033\\[B"
1485
- send -- "\\033\\[13u"
1565
+ -nocase -re {Remove [^\\r\\n]*\\([^\\r\\n]+\\)\\?} {
1566
+ append dialogBuffer $expect_out(buffer)
1486
1567
  }
1487
- timeout { failTimeout remove-confirmation 125 127 }
1488
- eof { failEof remove-confirmation 126 }
1568
+ timeout { failTimeout $state $timeoutCode $unknownCode }
1569
+ eof { failEof $state $eofCode }
1489
1570
  }
1571
+ set cleaned [cleanScreen $dialogBuffer]
1572
+ }
1573
+ while {![kimi22RemoveDialogComplete $cleaned]} {
1574
+ expect {
1575
+ -nocase -re {Trust this folder\\?} { unexpectedDirectoryTrust }
1576
+ -nocase -re {(?:Cancel|Remove plugin)[^\\r\\n]*\\r*\\n} {
1577
+ append dialogBuffer $expect_out(buffer)
1578
+ }
1579
+ -re {([^\\r\\n]+\\r*\\n)} {
1580
+ append dialogBuffer $expect_out(buffer)
1581
+ }
1582
+ timeout { failTimeout $state $timeoutCode $unknownCode }
1583
+ eof { failEof $state $eofCode }
1584
+ }
1585
+ set cleaned [cleanScreen $dialogBuffer]
1586
+ }
1587
+ # Consume the initial synchronized frame before sending a selection key.
1588
+ # Otherwise its remaining rows can be mistaken for the selection repaint.
1589
+ if {[string last "\\033\\[?2026h" $dialogBuffer] > [string last "\\033\\[?2026l" $dialogBuffer]} {
1590
+ expect {
1591
+ -exact "\\033\\[?2026l" { append dialogBuffer $expect_out(buffer) }
1592
+ timeout { failTimeout $state $timeoutCode $unknownCode }
1593
+ eof { failEof $state $eofCode }
1594
+ }
1595
+ set cleaned [cleanScreen $dialogBuffer]
1596
+ }
1597
+ return $cleaned
1598
+ }
1599
+
1600
+ proc readKimi22RemoveSelection {} {
1601
+ global expect_out removePlugin
1602
+ expect {
1603
+ -nocase -re {Trust this folder\\?} { unexpectedDirectoryTrust }
1604
+ -nocase -re {Remove [^\\r\\n]*\\([^\\r\\n]+\\)\\?} {
1605
+ set dialog [readKimi22RemoveDialog $expect_out(buffer) remove-confirm-selection 125 127 126]
1606
+ if {[kimi22RemoveIdentity $dialog] ne $removePlugin} {
1607
+ puts stderr "KIMI_TUI_STATE:remove-confirm-selection:unknown"
1608
+ exit 127
1609
+ }
1610
+ return $dialog
1611
+ }
1612
+ -exact "\\033\\[?2026l" {
1613
+ # Kimi 2.2 redraws only the changed menu rows, with no title or final newline.
1614
+ # The initial dialog already bound the plugin; require one complete new frame.
1615
+ if {[string first "\\033\\[?2026h" $expect_out(buffer)] < 0} {
1616
+ puts stderr "KIMI_TUI_STATE:remove-confirm-selection:unknown"
1617
+ exit 127
1618
+ }
1619
+ return [cleanScreen $expect_out(buffer)]
1620
+ }
1621
+ timeout { failTimeout remove-confirm-selection 125 127 }
1622
+ eof { failEof remove-confirm-selection 126 }
1623
+ }
1624
+ }
1625
+
1626
+ proc confirmKimi22Remove {} {
1627
+ global expect_out promptPattern removePlugin
1628
+ set dialog [readKimi22RemoveDialog $expect_out(buffer) remove-confirmation 125 127 126]
1629
+ set identity [kimi22RemoveIdentity $dialog]
1630
+ if {$identity eq "" || $identity ne $removePlugin} {
1631
+ puts stderr "KIMI_TUI_STATE:remove-confirmation:unknown"
1632
+ exit 127
1633
+ }
1634
+ set action [kimi22RemoveAction $dialog remove-confirmation 127]
1635
+ if {$action eq "move-down"} {
1636
+ send -- "\\033\\[B"
1637
+ } elseif {$action eq "move-up"} {
1638
+ send -- "\\033\\[A"
1639
+ }
1640
+ if {$action ne "selected-remove"} {
1641
+ set confirmedDialog [readKimi22RemoveSelection]
1642
+ set confirmedIdentity [kimi22RemoveIdentity $confirmedDialog]
1643
+ if {$confirmedIdentity ne "" && $confirmedIdentity ne $removePlugin} {
1644
+ puts stderr "KIMI_TUI_STATE:remove-confirm-selection:unknown"
1645
+ exit 127
1646
+ }
1647
+ set confirmedAction [kimi22RemoveAction $confirmedDialog remove-confirm-selection 127]
1648
+ if {$confirmedAction ne "selected-remove"} {
1649
+ puts stderr "KIMI_TUI_STATE:remove-confirm-selection:unknown"
1650
+ exit 127
1651
+ }
1652
+ }
1653
+ send -- "\\033\\[13u"
1654
+ expect {
1655
+ -nocase -re {Trust this folder\\?} { unexpectedDirectoryTrust }
1656
+ -re $promptPattern {}
1657
+ timeout { failTimeout remove-prompt 128 130 }
1658
+ eof { failEof remove-prompt 129 }
1659
+ }
1660
+ }
1661
+
1662
+ submitCommand "/plugins remove $removePlugin"
1663
+ expect {
1664
+ -nocase -re {Confirm remove plugin "([^"\\r\\n]+)"\\?\\r*\\n} {
1665
+ if {$expect_out(1,string) ne $removePlugin} {
1666
+ puts stderr "KIMI_TUI_STATE:remove-confirmation:unknown"
1667
+ exit 127
1668
+ }
1669
+ send -- "\\033\\[B"
1670
+ send -- "\\033\\[13u"
1490
1671
  expect {
1491
1672
  -nocase -re {Trust this folder\\?} { unexpectedDirectoryTrust }
1492
1673
  -re $promptPattern {}
@@ -1494,6 +1675,9 @@ expect {
1494
1675
  eof { failEof remove-prompt 129 }
1495
1676
  }
1496
1677
  }
1678
+ -nocase -re {Remove [^\\r\\n]*\\([^\\r\\n]+\\)\\?} {
1679
+ confirmKimi22Remove
1680
+ }
1497
1681
  -re $promptPattern {}
1498
1682
  -nocase -re {Trust this folder\\?} { unexpectedDirectoryTrust }
1499
1683
  timeout { failTimeout remove-dialog 122 124 }