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.
- package/.claude-plugin/plugin.json +1 -1
- package/.codebuddy-plugin/plugin.json +1 -1
- package/.codex-plugin/plugin.json +2 -2
- package/.cursor-plugin/plugin.json +1 -1
- package/.kimi-plugin/plugin.json +1 -1
- package/.qoder-plugin/plugin.json +1 -1
- package/CHANGELOG.md +55 -0
- package/INSTALL.md +2 -2
- package/INSTALL.zh-CN.md +2 -2
- package/README.md +11 -15
- package/README.zh-CN.md +11 -15
- package/adapters/claude/.claude-plugin/plugin.json +1 -1
- package/adapters/claude/bin/release-skill.bundle.mjs +195 -11
- package/adapters/claude/skills/release-help/SKILL.md +8 -2
- package/adapters/codex/.codex-plugin/plugin.json +2 -2
- package/adapters/codex/bin/release-skill.bundle.mjs +195 -11
- package/adapters/codex/skills/release-help/SKILL.md +8 -2
- package/adapters/cursor/.cursor-plugin/plugin.json +1 -1
- package/adapters/cursor/bin/release-skill.bundle.mjs +195 -11
- package/adapters/cursor/skills/release-help/SKILL.md +8 -2
- package/adapters/kimi/.kimi-plugin/plugin.json +1 -1
- package/adapters/kimi/bin/release-skill.bundle.mjs +195 -11
- package/adapters/kimi/skills/release-help/SKILL.md +8 -2
- package/adapters/qoder/.qoder-plugin/plugin.json +1 -1
- package/adapters/qoder/bin/release-skill.bundle.mjs +195 -11
- package/adapters/qoder/skills/release-help/SKILL.md +8 -2
- package/adapters/workbuddy/.codebuddy-plugin/plugin.json +1 -1
- package/adapters/workbuddy/bin/release-skill.bundle.mjs +195 -11
- package/adapters/workbuddy/skills/release-help/SKILL.md +8 -2
- package/bin/release-skill.bundle.mjs +195 -11
- package/package.json +1 -1
- package/platform-manifest.json +4 -4
- package/skills/release-help/SKILL.md +8 -2
- package/skills-src/release-help/SKILL.md +8 -2
- package/src/commands/post-release-finish.mjs +1 -1
- 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
|
-
? `
|
|
1480
|
-
|
|
1481
|
-
|
|
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
|
-
-
|
|
1484
|
-
|
|
1485
|
-
send -- "\\033\\[13u"
|
|
1565
|
+
-nocase -re {Remove [^\\r\\n]*\\([^\\r\\n]+\\)\\?} {
|
|
1566
|
+
append dialogBuffer $expect_out(buffer)
|
|
1486
1567
|
}
|
|
1487
|
-
timeout { failTimeout
|
|
1488
|
-
eof { failEof
|
|
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 }
|