harness-wingman 0.9.0 → 0.9.2
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/apps/cli/dist/main.js +255 -60
- package/apps/panel/dist/assets/index-CW76iTMY.css +1 -0
- package/apps/panel/dist/assets/index-rzWRf5aS.js +348 -0
- package/apps/panel/dist/index.html +2 -2
- package/package.json +2 -2
- package/apps/panel/dist/assets/index-Ahi501ap.css +0 -1
- package/apps/panel/dist/assets/index-CqgLnyEw.js +0 -347
package/apps/cli/dist/main.js
CHANGED
|
@@ -615,6 +615,13 @@ var init_render = __esm({
|
|
|
615
615
|
"packages/i18n/dist/catalog/en/render.js"() {
|
|
616
616
|
"use strict";
|
|
617
617
|
render_default = {
|
|
618
|
+
"panel.render.olderSessions": "{count} older sessions",
|
|
619
|
+
"panel.render.olderSessionsSource": "Source: sessions.ended and lastActivity more than {days} days ago; display only",
|
|
620
|
+
"panel.render.archiveSession": "Archive",
|
|
621
|
+
"panel.render.restoreSession": "Restore",
|
|
622
|
+
"panel.render.archivedSessions": "Archived sessions ({count})",
|
|
623
|
+
"panel.render.sessionArchiveSource": "Source: local task-overlay.json session / project archived; harness data is retained",
|
|
624
|
+
"panel.render.sessionArchiveActivitySource": "Source: session event timestamp > session or project archivedAt",
|
|
618
625
|
"panel.render.ccEnabled": "Enabled",
|
|
619
626
|
"panel.render.ccPartial": "Partly restricted",
|
|
620
627
|
"panel.render.ccDisableAll": "Disable all",
|
|
@@ -650,15 +657,27 @@ var init_render = __esm({
|
|
|
650
657
|
"panel.render.skillFrontmatterSource": "Source: SKILL.md frontmatter disable-model-invocation / user-invocable; invocation mode is determined by SKILL.md. The toggle only controls configuration enablement",
|
|
651
658
|
"panel.render.skillOverridesSource": "Source: settings skillOverrides; disabled in configuration",
|
|
652
659
|
"panel.render.skillConfiguration": "Configuration",
|
|
660
|
+
"panel.render.plugins": "Plugins",
|
|
661
|
+
"panel.render.pluginConfigurationTip": "Configuration enablement does not prove session use; usage comes from the Codex transcript",
|
|
662
|
+
"panel.render.pluginsSummary": "{enabled} plugins enabled \xB7 {used} used this session",
|
|
663
|
+
"panel.render.pluginsUnobserved": "{enabled} plugins enabled \xB7 No plugin calls observed this session",
|
|
664
|
+
"panel.render.pluginsSummarySource": "Source: enabled entries in slots.skills[].enabled scanned from config.toml plugin configuration; session usage is the deduplicated pluginsUsed from matching MCP tool calls in the Codex transcript against configured plugin names (with a few aliases); configuration enablement does not prove session use",
|
|
653
665
|
"panel.render.skillConfigurationTip": "Whether this session actually loaded a skill is determined by the transcript",
|
|
666
|
+
"panel.render.ccSkillsSummary": "{enabled} skills enabled \xB7 {used} used this session",
|
|
667
|
+
"panel.render.ccSkillsUnobserved": "{enabled} skills enabled \xB7 No skill calls observed this session",
|
|
668
|
+
"panel.render.ccSkillsSummarySource": "Source: entries that are not off according to scanned slots.skills[].enabled and invocation (SKILL.md frontmatter); session usage is deduplicated skillsUsed from Skill tool calls or explicit skill command loading records in the Claude Code transcript; configuration enablement does not prove session use",
|
|
669
|
+
"panel.render.ccToolsSummary": "{enabled} MCP servers enabled \xB7 {used} used this session",
|
|
670
|
+
"panel.render.ccToolsUnobserved": "{enabled} MCP servers enabled \xB7 No MCP calls observed this session",
|
|
671
|
+
"panel.render.ccToolsSummarySource": "Source: enabled entries among mcpServers.* in scanned slots.tools[]; session usage is deduplicated mcpUsed from matching mcp__<server>__<tool> calls in the Claude Code transcript against configured server names (- and _ are equivalent); configuration enablement does not prove session use",
|
|
654
672
|
"panel.render.skillsUsed": "Used this session: {skills}",
|
|
655
673
|
"panel.render.skillsUsedSource": "Source: observed Skill tool calls / skill command triggers in the transcript",
|
|
656
674
|
"panel.render.projectMenu": "Project menu",
|
|
657
675
|
"panel.render.archiveProject": "Archive",
|
|
658
676
|
"panel.render.restoreProject": "Restore",
|
|
659
677
|
"panel.render.archivedProjects": "{count} archived projects",
|
|
660
|
-
"panel.render.
|
|
661
|
-
"panel.render.
|
|
678
|
+
"panel.render.projectArchiveNewActivity": "New activity",
|
|
679
|
+
"panel.render.projectArchiveActivitySource": "Source: firstScreen.lastActivity.at > user.archivedAt",
|
|
680
|
+
"panel.render.projectArchiveSource": "Source: local task-overlay.json archived / archivedAt; hidden in all tabs until you restore it, even after new activity",
|
|
662
681
|
"panel.render.moveProjectUp": "Move pinned project up",
|
|
663
682
|
"panel.render.moveProjectDown": "Move pinned project down",
|
|
664
683
|
"panel.render.projectPinSource": "Source: local task-overlay.json pinned / order",
|
|
@@ -670,7 +689,11 @@ var init_render = __esm({
|
|
|
670
689
|
"panel.render.waitTrace": "{label}: {message}{outcome}",
|
|
671
690
|
"panel.render.sessionIdentifier": "Session: {id}",
|
|
672
691
|
"panel.render.operationOnHost": "\xB7 {verb} will happen on this machine",
|
|
673
|
-
"panel.render.protocolFileOperation": "File for protocol {verb}
|
|
692
|
+
"panel.render.protocolFileOperation": "File for protocol {verb}",
|
|
693
|
+
"panel.render.protocolImpactLabel": "Effect on harness and projects",
|
|
694
|
+
"panel.render.protocolImpactInstall": "Only adds one managed block to this file so the agent writes its progress as a plan file. It never rewrites harness behavior or any project code.",
|
|
695
|
+
"panel.render.protocolImpactUpdate": "Only updates the managed block in this file to the new version so the agent writes its progress as a plan file. It never rewrites harness behavior or any project code.",
|
|
696
|
+
"panel.render.protocolImpactUninstall": "Only removes the managed block from this file and keeps everything else as is. It never rewrites harness behavior or any project code.",
|
|
674
697
|
"panel.render.deleteLineNumber": "Delete line {line}",
|
|
675
698
|
"panel.render.close": "Close",
|
|
676
699
|
"panel.render.language": "Language",
|
|
@@ -740,7 +763,7 @@ var init_render = __esm({
|
|
|
740
763
|
"panel.render.confirmWrite": "Confirm write",
|
|
741
764
|
"panel.render.thePlanContainsNoFileChanges": "The plan contains no file changes",
|
|
742
765
|
"panel.render.noOtherReferencesFoundInThe": "No other references found in the scanned content",
|
|
743
|
-
"panel.render.filesToWriteNoBytesChange": "Files to write
|
|
766
|
+
"panel.render.filesToWriteNoBytesChange": "Files to write",
|
|
744
767
|
"panel.render.references": "References",
|
|
745
768
|
"panel.render.matchesThesePlacesMentionItReported": "matches \u2014 these places mention it; reported without edits",
|
|
746
769
|
"panel.render.backup": "Backup",
|
|
@@ -1005,7 +1028,7 @@ var init_render = __esm({
|
|
|
1005
1028
|
"panel.render.dshHasNoUserLevelInstructionFile": "dsh has no user-level instruction file; install the project-level protocol per project",
|
|
1006
1029
|
"panel.render.replaceLtProjectGtWithThe": "; replace <project> with the project path before running",
|
|
1007
1030
|
"panel.render.copyProjectInstallCommand": "Copy project install command",
|
|
1008
|
-
"panel.render.backsUpBeforeUpdatingPreservesContent": "
|
|
1031
|
+
"panel.render.backsUpBeforeUpdatingPreservesContent": "The plan only gives Wingman something to display. It never rewrites harness behavior or any code. Backs up before updating; takes effect in the next new session.",
|
|
1009
1032
|
"panel.render.theProtocolBlockHasBeenModified": "The protocol block has been modified. Existing content is preserved; resolve the changes before reinstalling.",
|
|
1010
1033
|
"panel.render.afterConfirmationInstallsInTheUser": "The plan only gives Wingman something to display. It never rewrites harness behavior or any code.",
|
|
1011
1034
|
"panel.render.reinstall": "Reinstall",
|
|
@@ -1076,7 +1099,6 @@ var init_render = __esm({
|
|
|
1076
1099
|
"panel.render.noPlanFile": "No plan file",
|
|
1077
1100
|
"panel.render.planUnreadable": "Plan unreadable",
|
|
1078
1101
|
"panel.render.cannotDetermineWhetherYouAreNeeded": "Cannot determine whether you are needed",
|
|
1079
|
-
"panel.render.aCurrentPointAndAnOngoing": "A current point and an ongoing session have not both been observed",
|
|
1080
1102
|
"panel.render.copyInstallCommandTip": "{p0} \xB7 Copy install command",
|
|
1081
1103
|
"panel.render.howToProvideAPlan": "How to provide a plan",
|
|
1082
1104
|
"panel.render.createAtTheProjectRoot": "Create at the project root: ",
|
|
@@ -1087,7 +1109,9 @@ var init_render = __esm({
|
|
|
1087
1109
|
"panel.render.pendingTask": "- [ ] Pending task",
|
|
1088
1110
|
"panel.render.connectFeedbackSignals": "Connect feedback signals \xB7",
|
|
1089
1111
|
"panel.render.notEnoughInformation": "Not enough information: ",
|
|
1090
|
-
"panel.render.
|
|
1112
|
+
"panel.render.cannotReadPlanFile": "Cannot read plan file",
|
|
1113
|
+
"panel.render.cannotSeeRequests": "Requests not observable",
|
|
1114
|
+
"panel.render.projectEnded": "Ended",
|
|
1091
1115
|
"panel.render.sourceGETApiProjectsRequestOr": "Source: GET /api/projects request or payload validation failed",
|
|
1092
1116
|
"panel.render.projectRefreshFailedShowingThePrevious": "Project refresh failed. Showing the previous response; action status may have changed",
|
|
1093
1117
|
"panel.render.noProjectGoalProvided": "No project goal provided",
|
|
@@ -1104,6 +1128,11 @@ var init_render = __esm({
|
|
|
1104
1128
|
"panel.render.feedbackSignalsAreNotConnectedOr": "Feedback signals are not connected or unavailable; cannot determine whether you are needed",
|
|
1105
1129
|
"panel.render.viewPlanProtocol": "\xB7 View plan protocol",
|
|
1106
1130
|
"panel.render.currentBranch": "Current branch",
|
|
1131
|
+
"panel.render.moreBranches": "{count} more branches",
|
|
1132
|
+
"panel.render.oneMoreBranch": "{count} more branch",
|
|
1133
|
+
"panel.render.branchCurrentPoints": "{count} current points",
|
|
1134
|
+
"panel.render.branchCurrentPoint": "{count} current point",
|
|
1135
|
+
"panel.render.branchCurrentPointsSource": "Source: currentPoints within this top-level node subtree",
|
|
1107
1136
|
"panel.render.noCurrentBranchProvided": "No current branch provided",
|
|
1108
1137
|
"panel.render.currentTaskLabel": "Current task",
|
|
1109
1138
|
"panel.render.sourceFirstScreenCurrentPointsLength": "Source: firstScreen.currentPoints.length",
|
|
@@ -1183,7 +1212,7 @@ var init_server = __esm({
|
|
|
1183
1212
|
"cli.server.openTimeout": "App activation timed out",
|
|
1184
1213
|
"cli.server.openFailed": "App activation failed",
|
|
1185
1214
|
"cli.server.fixturesOverlay": "Fixtures mode is read-only: task card overlays are not written",
|
|
1186
|
-
"cli.server.overlayShape": "Session requests require a valid harness, a nonempty sessionId and a title/pinned/hidden/accepted patch; project requests require a nonempty root and a pinned/order/hidden/archived patch, with a nonnegative integer order",
|
|
1215
|
+
"cli.server.overlayShape": "Session requests require a valid harness, a nonempty sessionId and a title/pinned/hidden/accepted/archived patch; project requests require a nonempty root and a pinned/order/hidden/archived patch, with a nonnegative integer order",
|
|
1187
1216
|
"cli.server.overlayHome": "Task card overlays require homeDir",
|
|
1188
1217
|
"cli.server.licenseRead": "The license file exceeds the 64KB limit or could not be read",
|
|
1189
1218
|
"cli.server.panelBuild": "The panel has not been built: run pnpm --filter @wingman/panel build, then refresh this page.",
|
|
@@ -1628,7 +1657,7 @@ var init_panel2 = __esm({
|
|
|
1628
1657
|
"packages/i18n/dist/catalog/zh/panel.js"() {
|
|
1629
1658
|
"use strict";
|
|
1630
1659
|
panel_default2 = {
|
|
1631
|
-
"island.waitingForYou": "{p0} \u5728\u7B49\
|
|
1660
|
+
"island.waitingForYou": "{p0} \u5728\u7B49\u5F85:{p1}",
|
|
1632
1661
|
"panel.main.backToSessionSettingsResponseUnavailable": "\u56DE\u8DF3\u8BBE\u7F6E\u54CD\u5E94\u4E0D\u53EF\u7528",
|
|
1633
1662
|
"panel.main.couldNotSaveBackToSession": "\u56DE\u8DF3\u8BBE\u7F6E\u4FDD\u5B58\u5931\u8D25",
|
|
1634
1663
|
"panel.main.couldNotLoadBackToSession": "\u56DE\u8DF3\u8BBE\u7F6E\u8BFB\u53D6\u5931\u8D25",
|
|
@@ -1748,7 +1777,7 @@ var init_panel2 = __esm({
|
|
|
1748
1777
|
"panel.live.liveConnectionEstablished": "\u5B9E\u51B5\u5DF2\u8FDE\u63A5",
|
|
1749
1778
|
"panel.live.disconnectedReconnectingAutomatically": "\u8FDE\u63A5\u65AD\u5F00 \xB7 \u81EA\u52A8\u91CD\u8FDE\u4E2D",
|
|
1750
1779
|
"panel.live.connecting": "\u8FDE\u63A5\u4E2D\u2026",
|
|
1751
|
-
"panel.taskboard.waitingForYou": "\u7B49\
|
|
1780
|
+
"panel.taskboard.waitingForYou": "\u7B49\u5F85",
|
|
1752
1781
|
"panel.taskboard.ended": "\u5DF2\u7ED3\u675F",
|
|
1753
1782
|
"panel.taskboard.inProgress": "\u8FDB\u884C\u4E2D",
|
|
1754
1783
|
"panel.taskboard.dshHasNoObservedCommandTo": "dsh \u672A\u63D0\u4F9B\u6309\u4F1A\u8BDD\u6062\u590D\u7684\u547D\u4EE4(\u672A\u89C2\u5BDF\u5230),\u8BF7\u5728\u539F\u7EC8\u7AEF\u7EE7\u7EED",
|
|
@@ -1782,7 +1811,7 @@ var init_panel_narrative2 = __esm({
|
|
|
1782
1811
|
"panel.narrative.subagent": "\u5B50 agent",
|
|
1783
1812
|
"panel.narrative.mainAgent": "\u4E3B agent",
|
|
1784
1813
|
"panel.narrative.openRequest": "\u6709\u5F85\u5904\u7406\u8BF7\u6C42",
|
|
1785
|
-
"panel.narrative.waitingForYou": "\u7B49\
|
|
1814
|
+
"panel.narrative.waitingForYou": "\u7B49\u5F85",
|
|
1786
1815
|
"panel.narrative.inProgress": "\u8FDB\u884C\u4E2D",
|
|
1787
1816
|
"panel.narrative.notWired": "\u672A\u63A5\u7EBF",
|
|
1788
1817
|
"panel.narrative.waitingEvents": "\u7B49\u5F85\u4E8B\u4EF6",
|
|
@@ -1791,7 +1820,7 @@ var init_panel_narrative2 = __esm({
|
|
|
1791
1820
|
"panel.narrative.invalidProjectProtocol": "harness {harness} \u7684 planProtocol.project \u65E0\u6548",
|
|
1792
1821
|
"panel.narrative.unavailableProject": "\u4E0D\u53EF\u7528\u9879\u76EE {number}",
|
|
1793
1822
|
"panel.narrative.waitOverdue": " \xB7 \u5DF2\u7B49 {minutes}m+",
|
|
1794
|
-
"panel.narrative.waitLabel": "\u7B49\
|
|
1823
|
+
"panel.narrative.waitLabel": "\u7B49\u5F85{who}:{message}{overdue}",
|
|
1795
1824
|
"panel.narrative.event.SessionStart": "\u4F1A\u8BDD\u5F00\u59CB",
|
|
1796
1825
|
"panel.narrative.event.SessionEnd": "\u4F1A\u8BDD\u7ED3\u675F",
|
|
1797
1826
|
"panel.narrative.event.UserPromptSubmit": "\u6536\u5230\u65B0\u63D0\u793A",
|
|
@@ -1814,6 +1843,13 @@ var init_render2 = __esm({
|
|
|
1814
1843
|
"packages/i18n/dist/catalog/zh/render.js"() {
|
|
1815
1844
|
"use strict";
|
|
1816
1845
|
render_default2 = {
|
|
1846
|
+
"panel.render.olderSessions": "\u66F4\u65E9\u7684 {count} \u4E2A\u4F1A\u8BDD",
|
|
1847
|
+
"panel.render.olderSessionsSource": "\u6765\u6E90:sessions.ended \u4E14 lastActivity \u65E9\u4E8E\u5F53\u524D\u65F6\u95F4 {days} \u5929;\u4EC5\u6298\u53E0\u663E\u793A",
|
|
1848
|
+
"panel.render.archiveSession": "\u5F52\u6863",
|
|
1849
|
+
"panel.render.restoreSession": "\u6062\u590D",
|
|
1850
|
+
"panel.render.archivedSessions": "\u5DF2\u5F52\u6863 {count} \u4E2A\u4F1A\u8BDD",
|
|
1851
|
+
"panel.render.sessionArchiveSource": "\u6765\u6E90:\u672C\u673A task-overlay.json \u4F1A\u8BDD / \u9879\u76EE archived;\u4E0D\u5220\u9664 harness \u6570\u636E",
|
|
1852
|
+
"panel.render.sessionArchiveActivitySource": "\u6765\u6E90:\u4F1A\u8BDD\u4E8B\u4EF6\u65F6\u95F4 > \u4F1A\u8BDD\u6216\u9879\u76EE archivedAt",
|
|
1817
1853
|
"panel.render.ccEnabled": "\u5DF2\u5F00\u542F",
|
|
1818
1854
|
"panel.render.ccPartial": "\u90E8\u5206\u53D7\u9650",
|
|
1819
1855
|
"panel.render.ccDisableAll": "\u5168\u90E8\u5173\u95ED",
|
|
@@ -1849,15 +1885,27 @@ var init_render2 = __esm({
|
|
|
1849
1885
|
"panel.render.skillFrontmatterSource": "\u6765\u6E90:SKILL.md frontmatter disable-model-invocation / user-invocable;\u8C03\u7528\u6A21\u5F0F\u7531 SKILL.md \u51B3\u5B9A\uFF0C\u5F00\u5173\u53EA\u63A7\u5236\u914D\u7F6E\u542F\u7528\u72B6\u6001",
|
|
1850
1886
|
"panel.render.skillOverridesSource": "\u6765\u6E90:settings skillOverrides;\u914D\u7F6E\u5DF2\u7981\u7528",
|
|
1851
1887
|
"panel.render.skillConfiguration": "\u914D\u7F6E\u7EA7",
|
|
1888
|
+
"panel.render.plugins": "\u63D2\u4EF6",
|
|
1889
|
+
"panel.render.pluginConfigurationTip": "\u914D\u7F6E\u542F\u7528\u4E0D\u4EE3\u8868\u672C\u4F1A\u8BDD\u8C03\u7528\uFF1B\u4F1A\u8BDD\u4F7F\u7528\u4EE5 Codex transcript \u4E3A\u51C6",
|
|
1890
|
+
"panel.render.pluginsSummary": "{enabled} \u4E2A\u63D2\u4EF6\u5DF2\u542F\u7528 \xB7 \u672C\u4F1A\u8BDD\u7528\u5230 {used} \u4E2A",
|
|
1891
|
+
"panel.render.pluginsUnobserved": "{enabled} \u4E2A\u63D2\u4EF6\u5DF2\u542F\u7528 \xB7 \u672C\u4F1A\u8BDD\u672A\u89C2\u5BDF\u5230\u63D2\u4EF6\u8C03\u7528",
|
|
1892
|
+
"panel.render.pluginsSummarySource": "\u6765\u6E90:config.toml \u63D2\u4EF6\u914D\u7F6E\u626B\u63CF slots.skills[].enabled \u7684\u542F\u7528\u6761\u76EE\u6570\uFF1B\u672C\u4F1A\u8BDD\u7528\u5230\u6570\u6765\u81EA\u6309\u914D\u7F6E\u63D2\u4EF6\u540D\u5339\u914D Codex transcript \u91CC\u7684 MCP \u5DE5\u5177\u8C03\u7528\uFF08\u5C11\u91CF\u522B\u540D\uFF09\u540E\u53BB\u91CD\u7684 pluginsUsed\uFF0C\u914D\u7F6E\u542F\u7528\u4E0D\u7B49\u4E8E\u4F1A\u8BDD\u4F7F\u7528",
|
|
1852
1893
|
"panel.render.skillConfigurationTip": "\u672C\u4F1A\u8BDD\u662F\u5426\u771F\u7684\u52A0\u8F7D\u4EE5 transcript \u4E3A\u51C6",
|
|
1894
|
+
"panel.render.ccSkillsSummary": "{enabled} \u4E2A\u6280\u80FD\u5DF2\u542F\u7528 \xB7 \u672C\u4F1A\u8BDD\u7528\u5230 {used} \u4E2A",
|
|
1895
|
+
"panel.render.ccSkillsUnobserved": "{enabled} \u4E2A\u6280\u80FD\u5DF2\u542F\u7528 \xB7 \u672C\u4F1A\u8BDD\u672A\u89C2\u5BDF\u5230\u6280\u80FD\u8C03\u7528",
|
|
1896
|
+
"panel.render.ccSkillsSummarySource": "\u6765\u6E90:\u914D\u7F6E\u626B\u63CF slots.skills[].enabled \u4E0E invocation\uFF08SKILL.md frontmatter\uFF09\u7684\u975E\u5173\u95ED\u6761\u76EE\u6570\uFF1B\u672C\u4F1A\u8BDD\u7528\u5230\u6570\u6765\u81EA Claude Code transcript \u4E2D Skill \u5DE5\u5177\u8C03\u7528\u6216\u660E\u786E\u6280\u80FD\u547D\u4EE4\u52A0\u8F7D\u8BB0\u5F55\uFF0C\u53BB\u91CD\u540E\u4E3A skillsUsed\uFF0C\u914D\u7F6E\u542F\u7528\u4E0D\u7B49\u4E8E\u4F1A\u8BDD\u4F7F\u7528",
|
|
1897
|
+
"panel.render.ccToolsSummary": "{enabled} \u4E2A MCP \u670D\u52A1\u5DF2\u542F\u7528 \xB7 \u672C\u4F1A\u8BDD\u7528\u5230 {used} \u4E2A",
|
|
1898
|
+
"panel.render.ccToolsUnobserved": "{enabled} \u4E2A MCP \u670D\u52A1\u5DF2\u542F\u7528 \xB7 \u672C\u4F1A\u8BDD\u672A\u89C2\u5BDF\u5230 MCP \u8C03\u7528",
|
|
1899
|
+
"panel.render.ccToolsSummarySource": "\u6765\u6E90:\u914D\u7F6E\u626B\u63CF slots.tools[] \u4E2D mcpServers.* \u6761\u76EE\u7684 enabled \u542F\u7528\u6570\uFF1B\u672C\u4F1A\u8BDD\u7528\u5230\u6570\u6765\u81EA Claude Code transcript \u4E2D mcp__<server>__<tool> \u8C03\u7528\u4E0E\u914D\u7F6E\u670D\u52A1\u540D\u5339\u914D\uFF08- / _ \u7B49\u4EF7\uFF09\uFF0C\u53BB\u91CD\u540E\u4E3A mcpUsed\uFF0C\u914D\u7F6E\u542F\u7528\u4E0D\u7B49\u4E8E\u4F1A\u8BDD\u4F7F\u7528",
|
|
1853
1900
|
"panel.render.skillsUsed": "\u672C\u4F1A\u8BDD\u5DF2\u7528:{skills}",
|
|
1854
1901
|
"panel.render.skillsUsedSource": "\u6765\u6E90:transcript \u4E2D\u89C2\u5BDF\u5230\u7684 Skill \u5DE5\u5177\u8C03\u7528 / \u6280\u80FD\u547D\u4EE4\u89E6\u53D1\u8BB0\u5F55",
|
|
1855
1902
|
"panel.render.projectMenu": "\u9879\u76EE\u83DC\u5355",
|
|
1856
1903
|
"panel.render.archiveProject": "\u5F52\u6863",
|
|
1857
1904
|
"panel.render.restoreProject": "\u6062\u590D",
|
|
1858
1905
|
"panel.render.archivedProjects": "\u5DF2\u5F52\u6863 {count} \u4E2A",
|
|
1859
|
-
"panel.render.
|
|
1860
|
-
"panel.render.
|
|
1906
|
+
"panel.render.projectArchiveNewActivity": "\u6709\u65B0\u6D3B\u52A8",
|
|
1907
|
+
"panel.render.projectArchiveActivitySource": "\u6765\u6E90:firstScreen.lastActivity.at > user.archivedAt",
|
|
1908
|
+
"panel.render.projectArchiveSource": "\u6765\u6E90:\u672C\u673A task-overlay.json archived / archivedAt;\u5728\u6240\u6709 tab \u90FD\u4E0D\u663E\u793A\uFF0C\u6709\u65B0\u6D3B\u52A8\u4E5F\u9700\u624B\u52A8\u6062\u590D",
|
|
1861
1909
|
"panel.render.moveProjectUp": "\u4E0A\u79FB\u7F6E\u9876\u9879\u76EE",
|
|
1862
1910
|
"panel.render.moveProjectDown": "\u4E0B\u79FB\u7F6E\u9876\u9879\u76EE",
|
|
1863
1911
|
"panel.render.projectPinSource": "\u6765\u6E90:\u672C\u673A task-overlay.json pinned / order",
|
|
@@ -1869,7 +1917,11 @@ var init_render2 = __esm({
|
|
|
1869
1917
|
"panel.render.waitTrace": "{label}:{message}{outcome}",
|
|
1870
1918
|
"panel.render.sessionIdentifier": "session:{id}",
|
|
1871
1919
|
"panel.render.operationOnHost": "\xB7 \u672C\u6B21{verb}\u53D1\u751F\u5728\u8FD9\u53F0\u673A\u5668",
|
|
1872
|
-
"panel.render.protocolFileOperation": "\u5C06{verb}\u534F\u8BAE\u7684\u6587\u4EF6
|
|
1920
|
+
"panel.render.protocolFileOperation": "\u5C06{verb}\u534F\u8BAE\u7684\u6587\u4EF6",
|
|
1921
|
+
"panel.render.protocolImpactLabel": "\u5BF9 harness \u4E0E\u9879\u76EE\u7684\u5F71\u54CD",
|
|
1922
|
+
"panel.render.protocolImpactInstall": "\u53EA\u5728\u8FD9\u4E2A\u6587\u4EF6\u91CC\u52A0\u4E00\u4E2A\u53D7\u7BA1\u5757,\u8BA9 agent \u628A\u8FDB\u5EA6\u5199\u6210\u8BA1\u5212\u6587\u4EF6;\u4E0D\u6539\u5199 harness \u884C\u4E3A,\u4E0D\u6539\u4EFB\u4F55\u9879\u76EE\u4EE3\u7801\u3002",
|
|
1923
|
+
"panel.render.protocolImpactUpdate": "\u53EA\u628A\u8FD9\u4E2A\u6587\u4EF6\u91CC\u7684\u53D7\u7BA1\u5757\u66F4\u65B0\u5230\u65B0\u7248,\u8BA9 agent \u628A\u8FDB\u5EA6\u5199\u6210\u8BA1\u5212\u6587\u4EF6;\u4E0D\u6539\u5199 harness \u884C\u4E3A,\u4E0D\u6539\u4EFB\u4F55\u9879\u76EE\u4EE3\u7801\u3002",
|
|
1924
|
+
"panel.render.protocolImpactUninstall": "\u53EA\u79FB\u9664\u8FD9\u4E2A\u6587\u4EF6\u91CC\u7684\u53D7\u7BA1\u5757,\u5176\u4F59\u5185\u5BB9\u539F\u6837\u4FDD\u7559;\u4E0D\u6539\u5199 harness \u884C\u4E3A,\u4E0D\u6539\u4EFB\u4F55\u9879\u76EE\u4EE3\u7801\u3002",
|
|
1873
1925
|
"panel.render.deleteLineNumber": "\u5220\u9664\u7B2C {line} \u884C",
|
|
1874
1926
|
"panel.render.close": "\u5173\u95ED",
|
|
1875
1927
|
"panel.render.language": "\u8BED\u8A00",
|
|
@@ -1939,7 +1991,7 @@ var init_render2 = __esm({
|
|
|
1939
1991
|
"panel.render.confirmWrite": "\u786E\u8BA4\u5199\u5165",
|
|
1940
1992
|
"panel.render.thePlanContainsNoFileChanges": "plan \u672A\u5305\u542B\u4EFB\u4F55\u6587\u4EF6\u53D8\u66F4",
|
|
1941
1993
|
"panel.render.noOtherReferencesFoundInThe": "\u5F15\u7528\u8BED\u6599\u91CC\u6CA1\u6709\u522B\u5904\u63D0\u5230\u5B83",
|
|
1942
|
-
"panel.render.filesToWriteNoBytesChange": "\u5C06\u5199\u5165\u7684\u6587\u4EF6
|
|
1994
|
+
"panel.render.filesToWriteNoBytesChange": "\u5C06\u5199\u5165\u7684\u6587\u4EF6",
|
|
1943
1995
|
"panel.render.references": "\u5F15\u7528\u547D\u4E2D",
|
|
1944
1996
|
"panel.render.matchesThesePlacesMentionItReported": "\u5904 \u2014 \u8FD9\u4E9B\u5730\u65B9\u63D0\u5230\u4E86\u5B83;\u53EA\u63D0\u9192,\u4E0D\u4FEE\u590D",
|
|
1945
1997
|
"panel.render.backup": "\u5907\u4EFD",
|
|
@@ -2015,7 +2067,7 @@ var init_render2 = __esm({
|
|
|
2015
2067
|
"panel.render.notObserved": "(\u672A\u89C2\u5BDF\u5230)",
|
|
2016
2068
|
"panel.render.endedSessionEndOrNoEventsFor": "\u5DF2\u7ED3\u675F(SessionEnd,\u6216 Stop \u540E 10 \u5206\u949F\u65E0\u4E8B\u4EF6)",
|
|
2017
2069
|
"panel.render.inProgress": "\u8FDB\u884C\u4E2D",
|
|
2018
|
-
"panel.render.waitingForYouAnOpenPermission": "\u7B49\
|
|
2070
|
+
"panel.render.waitingForYouAnOpenPermission": "\u7B49\u5F85:\u6709\u672A\u51B3\u7684\u6743\u9650\u8BF7\u6C42/\u901A\u77E5",
|
|
2019
2071
|
"panel.render.newActivitySinceLastViewed": "\u6709\u65B0\u6D3B\u52A8(\u4E0A\u6B21\u67E5\u770B\u540E)",
|
|
2020
2072
|
"panel.render.newActivity": "\u65B0\u6D3B\u52A8",
|
|
2021
2073
|
"panel.render.sinceWingmanStarted": "Wingman \u542F\u52A8(",
|
|
@@ -2033,7 +2085,7 @@ var init_render2 = __esm({
|
|
|
2033
2085
|
"panel.render.firstInProgressTodoSourceTaskCreate": "\u7B2C\u4E00\u6761\u8FDB\u884C\u4E2D todo(\u6765\u6E90:transcript \u7684 TaskCreate/TaskUpdate \u4E8B\u4EF6)",
|
|
2034
2086
|
"panel.render.latestUserPromptSummaryNoIn": "\u6700\u65B0\u7528\u6237\u63D0\u793A\u6458\u8981(\u672C\u4F1A\u8BDD\u6682\u65E0\u8FDB\u884C\u4E2D todo)",
|
|
2035
2087
|
"panel.render.openEventAt": "\u672A\u51B3 {p0} \u4E8B\u4EF6,\u53D1\u751F\u4E8E {p1}",
|
|
2036
|
-
"panel.render.waitingForYou": "\u7B49\
|
|
2088
|
+
"panel.render.waitingForYou": "\u7B49\u5F85:",
|
|
2037
2089
|
"panel.render.totalTokensThisTurnReportedBy": "\u672C\u8F6E\u603B token(harness \u81EA\u62A5) = {p0}",
|
|
2038
2090
|
"panel.render.contextThisTurnReportedByHarness": "\u672C\u8F6E context(harness \u81EA\u62A5) = {p0}",
|
|
2039
2091
|
"panel.render.cumulativeInputThisTurnDifferenceIn": "\u672C\u8F6E\u7D2F\u8BA1 input(harness \u7D2F\u8BA1\u503C\u5DEE\u5206) = {p0}",
|
|
@@ -2204,7 +2256,7 @@ var init_render2 = __esm({
|
|
|
2204
2256
|
"panel.render.dshHasNoUserLevelInstructionFile": "dsh \u6CA1\u6709\u7528\u6237\u7EA7\u6307\u4EE4\u6587\u4EF6\uFF0C\u8BF7\u6309\u9879\u76EE\u5B89\u88C5\u9879\u76EE\u7EA7\u534F\u8BAE",
|
|
2205
2257
|
"panel.render.replaceLtProjectGtWithThe": "\uFF0C\u8FD0\u884C\u524D\u5C06 <\u9879\u76EE> \u66FF\u6362\u4E3A\u9879\u76EE\u8DEF\u5F84",
|
|
2206
2258
|
"panel.render.copyProjectInstallCommand": "\u590D\u5236\u9879\u76EE\u7EA7\u5B89\u88C5\u547D\u4EE4",
|
|
2207
|
-
"panel.render.backsUpBeforeUpdatingPreservesContent": "\
|
|
2259
|
+
"panel.render.backsUpBeforeUpdatingPreservesContent": "\u8BA1\u5212\u53EA\u4E3A Wingman \u63D0\u4F9B\u8BA1\u5212\u5C55\u793A\u529F\u80FD,\u4E0D\u6539\u5199 harness \u884C\u4E3A\u6216\u4EFB\u4F55\u4EE3\u7801\u3002\u66F4\u65B0\u524D\u5148\u5907\u4EFD,\u4E0B\u4E00\u4E2A\u65B0\u4F1A\u8BDD\u751F\u6548\u3002",
|
|
2208
2260
|
"panel.render.theProtocolBlockHasBeenModified": "\u534F\u8BAE\u5757\u5DF2\u88AB\u4FEE\u6539\uFF1B\u4FDD\u7559\u73B0\u6709\u5185\u5BB9\uFF0C\u8BF7\u5148\u5904\u7406\u4FEE\u6539\u540E\u518D\u91CD\u65B0\u5B89\u88C5\u3002",
|
|
2209
2261
|
"panel.render.afterConfirmationInstallsInTheUser": "\u8BA1\u5212\u53EA\u4E3A Wingman \u63D0\u4F9B\u8BA1\u5212\u5C55\u793A\u529F\u80FD,\u4E0D\u6539\u5199 harness \u884C\u4E3A\u6216\u4EFB\u4F55\u4EE3\u7801\u3002",
|
|
2210
2262
|
"panel.render.reinstall": "\u91CD\u65B0\u5B89\u88C5",
|
|
@@ -2275,7 +2327,6 @@ var init_render2 = __esm({
|
|
|
2275
2327
|
"panel.render.noPlanFile": "\u6CA1\u6709\u8BA1\u5212\u6587\u4EF6",
|
|
2276
2328
|
"panel.render.planUnreadable": "\u8BA1\u5212\u4E0D\u53EF\u8BFB",
|
|
2277
2329
|
"panel.render.cannotDetermineWhetherYouAreNeeded": "\u65E0\u6CD5\u786E\u8BA4\u662F\u5426\u9700\u8981\u4F60",
|
|
2278
|
-
"panel.render.aCurrentPointAndAnOngoing": "\u5C1A\u672A\u540C\u65F6\u89C2\u5BDF\u5230\u8BA1\u5212\u5F53\u524D\u70B9\u4E0E\u672A\u7ED3\u675F\u4F1A\u8BDD",
|
|
2279
2330
|
"panel.render.copyInstallCommandTip": "{p0} \xB7 \u590D\u5236\u5B89\u88C5\u547D\u4EE4",
|
|
2280
2331
|
"panel.render.howToProvideAPlan": "\u5982\u4F55\u63D0\u4F9B\u8BA1\u5212",
|
|
2281
2332
|
"panel.render.createAtTheProjectRoot": "\u5728\u9879\u76EE\u6839\u521B\u5EFA",
|
|
@@ -2286,7 +2337,9 @@ var init_render2 = __esm({
|
|
|
2286
2337
|
"panel.render.pendingTask": "- [ ] \u5F85\u505A\u4EFB\u52A1",
|
|
2287
2338
|
"panel.render.connectFeedbackSignals": "\u8FDE\u63A5\u53CD\u9988\u4FE1\u53F7 \xB7",
|
|
2288
2339
|
"panel.render.notEnoughInformation": "\u4FE1\u606F\u4E0D\u8DB3:",
|
|
2289
|
-
"panel.render.
|
|
2340
|
+
"panel.render.cannotReadPlanFile": "\u8BA1\u5212\u6587\u4EF6\u8BFB\u4E0D\u4E86",
|
|
2341
|
+
"panel.render.cannotSeeRequests": "\u770B\u4E0D\u5230\u8BF7\u6C42",
|
|
2342
|
+
"panel.render.projectEnded": "\u5DF2\u7ED3\u675F",
|
|
2290
2343
|
"panel.render.sourceGETApiProjectsRequestOr": "\u6765\u6E90:GET /api/projects \u8BF7\u6C42\u6216\u8F7D\u8377\u6821\u9A8C\u5931\u8D25",
|
|
2291
2344
|
"panel.render.projectRefreshFailedShowingThePrevious": "\u9879\u76EE\u5237\u65B0\u5931\u8D25\uFF0C\u5F53\u524D\u663E\u793A\u4E0A\u6B21\u8F7D\u8377\uFF1B\u884C\u52A8\u72B6\u6001\u53EF\u80FD\u5DF2\u53D8\u5316",
|
|
2292
2345
|
"panel.render.noProjectGoalProvided": "\u5C1A\u672A\u63D0\u4F9B\u9879\u76EE\u76EE\u6807",
|
|
@@ -2303,6 +2356,11 @@ var init_render2 = __esm({
|
|
|
2303
2356
|
"panel.render.feedbackSignalsAreNotConnectedOr": "\u53CD\u9988\u4FE1\u53F7\u672A\u63A5\u7EBF\u6216\u4E0D\u53EF\u7528\uFF0C\u65E0\u6CD5\u786E\u8BA4\u662F\u5426\u9700\u8981\u4F60",
|
|
2304
2357
|
"panel.render.viewPlanProtocol": "\xB7 \u67E5\u770B\u8BA1\u5212\u534F\u8BAE",
|
|
2305
2358
|
"panel.render.currentBranch": "\u6240\u5728\u5206\u652F",
|
|
2359
|
+
"panel.render.moreBranches": "\u8FD8\u6709 {count} \u6761\u5206\u652F",
|
|
2360
|
+
"panel.render.oneMoreBranch": "\u8FD8\u6709 {count} \u6761\u5206\u652F",
|
|
2361
|
+
"panel.render.branchCurrentPoints": "{count} \u4E2A\u5F53\u524D\u70B9",
|
|
2362
|
+
"panel.render.branchCurrentPoint": "{count} \u4E2A\u5F53\u524D\u70B9",
|
|
2363
|
+
"panel.render.branchCurrentPointsSource": "\u6765\u6E90:currentPoints \u4E2D\u5C5E\u4E8E\u8BE5\u9876\u5C42\u8282\u70B9\u5B50\u6811\u7684\u5F53\u524D\u70B9",
|
|
2306
2364
|
"panel.render.noCurrentBranchProvided": "\u5C1A\u672A\u63D0\u4F9B\u6240\u5728\u5206\u652F",
|
|
2307
2365
|
"panel.render.currentTaskLabel": "\u5F53\u524D\u4EFB\u52A1",
|
|
2308
2366
|
"panel.render.sourceFirstScreenCurrentPointsLength": "\u6765\u6E90:firstScreen.currentPoints.length",
|
|
@@ -2334,7 +2392,7 @@ var init_render2 = __esm({
|
|
|
2334
2392
|
"panel.render.sourceProjectRoot": "\u6765\u6E90:project.root",
|
|
2335
2393
|
"panel.render.sourceRevisionMtimeLastWriter": "\u6765\u6E90:revision / mtime / lastWriter",
|
|
2336
2394
|
"panel.render.all": "\u5168\u90E8",
|
|
2337
|
-
"panel.render.waitingForYouLabel": "\u7B49\
|
|
2395
|
+
"panel.render.waitingForYouLabel": "\u7B49\u5F85",
|
|
2338
2396
|
"panel.render.ended": "\u5DF2\u7ED3\u675F",
|
|
2339
2397
|
"panel.render.status": "\u72B6\u6001",
|
|
2340
2398
|
"panel.render.dataTipSourceGETApiProjects": ' data-tip="\u6765\u6E90:GET /api/projects \u8BF7\u6C42\u4E0E\u8F7D\u8377\u6821\u9A8C"',
|
|
@@ -2382,7 +2440,7 @@ var init_server2 = __esm({
|
|
|
2382
2440
|
"cli.server.openTimeout": "\u5E94\u7528\u6FC0\u6D3B\u8D85\u65F6",
|
|
2383
2441
|
"cli.server.openFailed": "\u5E94\u7528\u6FC0\u6D3B\u5931\u8D25",
|
|
2384
2442
|
"cli.server.fixturesOverlay": "fixtures \u6A21\u5F0F\u53EA\u8BFB:\u4E0D\u5199\u4EFB\u52A1\u5361 overlay",
|
|
2385
|
-
"cli.server.overlayShape": "\u4F1A\u8BDD\u8BF7\u6C42\u9700\u8981\u5408\u6CD5 harness\u3001\u975E\u7A7A sessionId \u4E0E title/pinned/hidden/accepted \u8865\u4E01\uFF1B\u9879\u76EE\u8BF7\u6C42\u9700\u8981\u975E\u7A7A root \u4E0E pinned/order/hidden/archived \u8865\u4E01\uFF0Corder \u4E3A\u975E\u8D1F\u6574\u6570",
|
|
2443
|
+
"cli.server.overlayShape": "\u4F1A\u8BDD\u8BF7\u6C42\u9700\u8981\u5408\u6CD5 harness\u3001\u975E\u7A7A sessionId \u4E0E title/pinned/hidden/accepted/archived \u8865\u4E01\uFF1B\u9879\u76EE\u8BF7\u6C42\u9700\u8981\u975E\u7A7A root \u4E0E pinned/order/hidden/archived \u8865\u4E01\uFF0Corder \u4E3A\u975E\u8D1F\u6574\u6570",
|
|
2386
2444
|
"cli.server.overlayHome": "\u4EFB\u52A1\u5361 overlay \u7F3A\u5C11 homeDir",
|
|
2387
2445
|
"cli.server.licenseRead": "license \u6587\u4EF6\u8D85\u8FC7 64KB \u4E0A\u9650\u6216\u8BFB\u53D6\u5931\u8D25",
|
|
2388
2446
|
"cli.server.panelBuild": "\u9762\u677F\u672A\u6784\u5EFA:\u8BF7\u5148\u8FD0\u884C pnpm --filter @wingman/panel build,\u518D\u5237\u65B0\u672C\u9875\u3002",
|
|
@@ -13688,6 +13746,20 @@ var init_generic_waiting = __esm({
|
|
|
13688
13746
|
}
|
|
13689
13747
|
});
|
|
13690
13748
|
|
|
13749
|
+
// packages/adapter-cc/dist/mcp-tools.js
|
|
13750
|
+
function recognizeMcpTool(name, configuredServers) {
|
|
13751
|
+
const [prefix, server, ...tool] = name.split("__");
|
|
13752
|
+
if (prefix !== "mcp" || !server || tool.length === 0 || ![server, ...tool].every((part) => /^[a-zA-Z][a-zA-Z0-9_-]*$/.test(part))) {
|
|
13753
|
+
return void 0;
|
|
13754
|
+
}
|
|
13755
|
+
return configuredServers.find((configured) => configured.replaceAll("-", "_") === server.replaceAll("-", "_"));
|
|
13756
|
+
}
|
|
13757
|
+
var init_mcp_tools = __esm({
|
|
13758
|
+
"packages/adapter-cc/dist/mcp-tools.js"() {
|
|
13759
|
+
"use strict";
|
|
13760
|
+
}
|
|
13761
|
+
});
|
|
13762
|
+
|
|
13691
13763
|
// packages/adapter-cc/dist/protocol.js
|
|
13692
13764
|
import { existsSync as existsSync10, mkdirSync as mkdirSync6, readdirSync as readdirSync3, readFileSync as readFileSync10, rmdirSync, rmSync as rmSync5, writeFileSync as writeFileSync7 } from "node:fs";
|
|
13693
13765
|
import { homedir as homedir10 } from "node:os";
|
|
@@ -13932,6 +14004,7 @@ __export(dist_exports2, {
|
|
|
13932
14004
|
installProtocolCcUser: () => installProtocolCcUser,
|
|
13933
14005
|
protocolStatusCc: () => protocolStatusCc,
|
|
13934
14006
|
protocolStatusCcUser: () => protocolStatusCcUser,
|
|
14007
|
+
recognizeMcpTool: () => recognizeMcpTool,
|
|
13935
14008
|
uninstallProtocolCc: () => uninstallProtocolCc,
|
|
13936
14009
|
uninstallProtocolCcUser: () => uninstallProtocolCcUser
|
|
13937
14010
|
});
|
|
@@ -13955,6 +14028,7 @@ var init_dist4 = __esm({
|
|
|
13955
14028
|
init_scan();
|
|
13956
14029
|
init_generic_waiting();
|
|
13957
14030
|
init_hooks2();
|
|
14031
|
+
init_mcp_tools();
|
|
13958
14032
|
init_protocol2();
|
|
13959
14033
|
init_scan();
|
|
13960
14034
|
init_protocol_user();
|
|
@@ -16302,6 +16376,39 @@ var init_scan2 = __esm({
|
|
|
16302
16376
|
}
|
|
16303
16377
|
});
|
|
16304
16378
|
|
|
16379
|
+
// packages/adapter-codex/dist/plugin-tools.js
|
|
16380
|
+
function recognizePluginTool(name, namespace, configuredPlugins) {
|
|
16381
|
+
const fullName = name.startsWith("mcp__") ? name : namespace?.startsWith("mcp__") ? `${namespace}__${name}` : void 0;
|
|
16382
|
+
if (!fullName)
|
|
16383
|
+
return void 0;
|
|
16384
|
+
const [prefix, segment, ...rest] = fullName.split("__");
|
|
16385
|
+
if (prefix !== "mcp" || !segment || ![segment, ...rest].every((part) => /^[a-zA-Z][a-zA-Z0-9_-]*$/.test(part))) {
|
|
16386
|
+
return void 0;
|
|
16387
|
+
}
|
|
16388
|
+
const plugins = configuredPlugins.map((configured2) => {
|
|
16389
|
+
const [plugin = ""] = configured2.split("@");
|
|
16390
|
+
return { plugin, normalized: plugin.replaceAll("-", "_") };
|
|
16391
|
+
});
|
|
16392
|
+
if (segment === "codex_apps") {
|
|
16393
|
+
const appTool = rest.join("__").replaceAll("-", "_");
|
|
16394
|
+
return plugins.filter(({ normalized }) => normalized && (appTool === normalized || appTool.startsWith(`${normalized}_`))).sort((a, b) => b.normalized.length - a.normalized.length)[0]?.plugin;
|
|
16395
|
+
}
|
|
16396
|
+
const configured = plugins.find(({ normalized }) => normalized === segment.replaceAll("-", "_"));
|
|
16397
|
+
if (configured)
|
|
16398
|
+
return configured.plugin;
|
|
16399
|
+
const alias = PLUGIN_TOOL_ALIASES.get(segment);
|
|
16400
|
+
if (!alias)
|
|
16401
|
+
return void 0;
|
|
16402
|
+
return plugins.find(({ normalized }) => normalized === alias.replaceAll("-", "_"))?.plugin ?? alias;
|
|
16403
|
+
}
|
|
16404
|
+
var PLUGIN_TOOL_ALIASES;
|
|
16405
|
+
var init_plugin_tools = __esm({
|
|
16406
|
+
"packages/adapter-codex/dist/plugin-tools.js"() {
|
|
16407
|
+
"use strict";
|
|
16408
|
+
PLUGIN_TOOL_ALIASES = /* @__PURE__ */ new Map([["cua_repl", "unified-computer-use"]]);
|
|
16409
|
+
}
|
|
16410
|
+
});
|
|
16411
|
+
|
|
16305
16412
|
// packages/adapter-codex/dist/protocol.js
|
|
16306
16413
|
import { existsSync as existsSync14, mkdirSync as mkdirSync9, readFileSync as readFileSync14, rmSync as rmSync7, writeFileSync as writeFileSync10 } from "node:fs";
|
|
16307
16414
|
import { basename as basename10, dirname as dirname14, join as join21, resolve as resolve9 } from "node:path";
|
|
@@ -16549,6 +16656,7 @@ __export(dist_exports3, {
|
|
|
16549
16656
|
installProtocolCodexUser: () => installProtocolCodexUser,
|
|
16550
16657
|
protocolStatusCodex: () => protocolStatusCodex,
|
|
16551
16658
|
protocolStatusCodexUser: () => protocolStatusCodexUser,
|
|
16659
|
+
recognizePluginTool: () => recognizePluginTool,
|
|
16552
16660
|
resolveNodeExecutable: () => resolveNodeExecutable,
|
|
16553
16661
|
uninstallProtocolCodex: () => uninstallProtocolCodex,
|
|
16554
16662
|
uninstallProtocolCodexUser: () => uninstallProtocolCodexUser
|
|
@@ -16571,6 +16679,7 @@ var init_dist6 = __esm({
|
|
|
16571
16679
|
init_hooks3();
|
|
16572
16680
|
init_scan2();
|
|
16573
16681
|
init_hooks3();
|
|
16682
|
+
init_plugin_tools();
|
|
16574
16683
|
init_protocol3();
|
|
16575
16684
|
init_protocol_user2();
|
|
16576
16685
|
}
|
|
@@ -18913,11 +19022,19 @@ function patchTaskOverlay(homeDir, key, patch, now) {
|
|
|
18913
19022
|
entry.pinned = patch.pinned;
|
|
18914
19023
|
if (patch.hidden !== void 0)
|
|
18915
19024
|
entry.hidden = patch.hidden;
|
|
19025
|
+
if (patch.archived === true) {
|
|
19026
|
+
entry.archived = true;
|
|
19027
|
+
entry.archivedAt = now.toISOString();
|
|
19028
|
+
} else if (patch.archived === false) {
|
|
19029
|
+
delete entry.archived;
|
|
19030
|
+
delete entry.archivedAt;
|
|
19031
|
+
entry.hidden = false;
|
|
19032
|
+
}
|
|
18916
19033
|
if (patch.accepted === true)
|
|
18917
19034
|
entry.accepted = { at: now.toISOString() };
|
|
18918
19035
|
else if (patch.accepted === false)
|
|
18919
19036
|
delete entry.accepted;
|
|
18920
|
-
const empty = entry.title === void 0 && entry.pinned !== true && entry.hidden !== true && entry.accepted === void 0;
|
|
19037
|
+
const empty = entry.title === void 0 && entry.pinned !== true && entry.hidden !== true && entry.archived !== true && entry.accepted === void 0;
|
|
18921
19038
|
const entries = { ...current.entries };
|
|
18922
19039
|
if (empty)
|
|
18923
19040
|
delete entries[key];
|
|
@@ -19028,10 +19145,10 @@ function isTaskOverlayEntry(value, key) {
|
|
|
19028
19145
|
if (key.startsWith("project:")) {
|
|
19029
19146
|
return Object.keys(value).every((field) => ["pinned", "order", "hidden", "archived", "archivedAt", "updatedAt"].includes(field)) && (value.pinned === void 0 || typeof value.pinned === "boolean") && (value.hidden === void 0 || typeof value.hidden === "boolean") && (value.archived === void 0 || typeof value.archived === "boolean") && (value.archived === true ? typeof value.archivedAt === "string" && Number.isFinite(Date.parse(value.archivedAt)) : value.archivedAt === void 0) && (value.order === void 0 || value.pinned === true && typeof value.order === "number" && Number.isSafeInteger(value.order) && value.order >= 0) && typeof value.updatedAt === "string";
|
|
19030
19147
|
}
|
|
19031
|
-
if (Object.keys(value).some((key2) => !["title", "pinned", "hidden", "accepted", "updatedAt"].includes(key2))) {
|
|
19148
|
+
if (Object.keys(value).some((key2) => !["title", "pinned", "hidden", "archived", "archivedAt", "accepted", "updatedAt"].includes(key2))) {
|
|
19032
19149
|
return false;
|
|
19033
19150
|
}
|
|
19034
|
-
return (value.title === void 0 || typeof value.title === "string") && (value.pinned === void 0 || typeof value.pinned === "boolean") && (value.hidden === void 0 || typeof value.hidden === "boolean") && (value.accepted === void 0 || isTaskAcceptance(value.accepted)) && typeof value.updatedAt === "string";
|
|
19151
|
+
return (value.title === void 0 || typeof value.title === "string") && (value.pinned === void 0 || typeof value.pinned === "boolean") && (value.hidden === void 0 || typeof value.hidden === "boolean") && (value.archived === void 0 || typeof value.archived === "boolean") && (value.archived === true ? typeof value.archivedAt === "string" && Number.isFinite(Date.parse(value.archivedAt)) : value.archivedAt === void 0) && (value.accepted === void 0 || isTaskAcceptance(value.accepted)) && typeof value.updatedAt === "string";
|
|
19035
19152
|
}
|
|
19036
19153
|
function isTaskAcceptance(value) {
|
|
19037
19154
|
return isRecord7(value) && Object.keys(value).every((key) => key === "at") && typeof value.at === "string";
|
|
@@ -19066,7 +19183,7 @@ function resolveWingmanVersion({ defined, moduleUrl = import.meta.url, readPacka
|
|
|
19066
19183
|
return void 0;
|
|
19067
19184
|
}
|
|
19068
19185
|
function wingmanVersion() {
|
|
19069
|
-
const defined = false ? void 0 : "0.9.
|
|
19186
|
+
const defined = false ? void 0 : "0.9.2";
|
|
19070
19187
|
return resolveWingmanVersion({
|
|
19071
19188
|
defined,
|
|
19072
19189
|
readPackage: (url) => JSON.parse(readFileSync17(url, "utf8"))
|
|
@@ -19095,6 +19212,8 @@ function acceptanceView(homeDir, overlay, key) {
|
|
|
19095
19212
|
return accepted === void 0 ? { state: "none" } : { state: "accepted", at: accepted.at };
|
|
19096
19213
|
}
|
|
19097
19214
|
function createNarrativeService(options = {}) {
|
|
19215
|
+
let codexPluginsProvider = options.codexPlugins;
|
|
19216
|
+
let ccMcpServersProvider = options.ccMcpServers;
|
|
19098
19217
|
const follow = options.followTranscripts ?? true;
|
|
19099
19218
|
const intervalMs = options.intervalMs ?? 500;
|
|
19100
19219
|
const now = options.now ?? (() => /* @__PURE__ */ new Date());
|
|
@@ -19712,37 +19831,62 @@ function createNarrativeService(options = {}) {
|
|
|
19712
19831
|
session.dirty = true;
|
|
19713
19832
|
notify(harness);
|
|
19714
19833
|
}
|
|
19715
|
-
function deriveCached(harness, session) {
|
|
19716
|
-
|
|
19834
|
+
function deriveCached(harness, session, configuredPlugins, configuredMcpServers) {
|
|
19835
|
+
const pluginKey = JSON.stringify(configuredPlugins);
|
|
19836
|
+
const mcpKey = JSON.stringify(configuredMcpServers);
|
|
19837
|
+
if (!session.dirty && session.cached !== void 0 && session.cachedLocale === getLocale() && session.cachedCodexPlugins === pluginKey && session.cachedCcMcpServers === mcpKey) {
|
|
19717
19838
|
return session.cached;
|
|
19718
19839
|
}
|
|
19719
|
-
session.cached = derive(harness, session, now().toISOString());
|
|
19840
|
+
session.cached = derive(harness, session, now().toISOString(), configuredPlugins, configuredMcpServers);
|
|
19720
19841
|
session.dirty = false;
|
|
19721
19842
|
session.cachedLocale = getLocale();
|
|
19843
|
+
session.cachedCodexPlugins = pluginKey;
|
|
19844
|
+
session.cachedCcMcpServers = mcpKey;
|
|
19722
19845
|
return session.cached;
|
|
19723
19846
|
}
|
|
19724
19847
|
function getOverview(harness) {
|
|
19725
19848
|
const nowIso = now().toISOString();
|
|
19726
19849
|
const sessions = sessionsOf(harness);
|
|
19850
|
+
let configuredPlugins = [];
|
|
19851
|
+
try {
|
|
19852
|
+
if (harness === "codex")
|
|
19853
|
+
configuredPlugins = codexPluginsProvider?.() ?? [];
|
|
19854
|
+
} catch {
|
|
19855
|
+
configuredPlugins = [];
|
|
19856
|
+
}
|
|
19857
|
+
let configuredMcpServers = [];
|
|
19858
|
+
try {
|
|
19859
|
+
if (harness === "cc")
|
|
19860
|
+
configuredMcpServers = ccMcpServersProvider?.() ?? [];
|
|
19861
|
+
} catch {
|
|
19862
|
+
configuredMcpServers = [];
|
|
19863
|
+
}
|
|
19727
19864
|
const overlay = options.homeDir === void 0 ? void 0 : readTaskOverlay(options.homeDir);
|
|
19865
|
+
const overlayEntries = overlay === void 0 || "unavailable" in overlay ? {} : overlay.entries;
|
|
19728
19866
|
let feedback;
|
|
19729
19867
|
try {
|
|
19730
19868
|
feedback = options.feedbackSignals?.(harness);
|
|
19731
19869
|
} catch {
|
|
19732
19870
|
feedback = void 0;
|
|
19733
19871
|
}
|
|
19734
|
-
const infos = [...sessions.values()].map((session) =>
|
|
19735
|
-
|
|
19736
|
-
|
|
19737
|
-
|
|
19738
|
-
|
|
19739
|
-
|
|
19740
|
-
|
|
19741
|
-
|
|
19742
|
-
|
|
19872
|
+
const infos = [...sessions.values()].map((session) => {
|
|
19873
|
+
const user = overlayEntries[`${harness}:${session.id}`];
|
|
19874
|
+
const lastActivity = lastActivityOf(session);
|
|
19875
|
+
return {
|
|
19876
|
+
id: session.id,
|
|
19877
|
+
label: session.projectResolution?.isHome ? t("narrative.homeDirectory") : session.label ?? shortSessionId(session.id),
|
|
19878
|
+
...session.cwd === void 0 ? {} : { cwd: session.cwd },
|
|
19879
|
+
lastActivity,
|
|
19880
|
+
waiting: session.waiting !== null,
|
|
19881
|
+
ended: isEnded(session, nowIso),
|
|
19882
|
+
archived: user?.archived === true,
|
|
19883
|
+
archivedHasNewActivity: user?.archived === true && user.archivedAt !== void 0 && Date.parse(lastActivity) > Date.parse(user.archivedAt),
|
|
19884
|
+
...feedback === void 0 ? {} : { feedback }
|
|
19885
|
+
};
|
|
19886
|
+
}).sort((a, b) => a.lastActivity < b.lastActivity ? 1 : a.lastActivity > b.lastActivity ? -1 : 0);
|
|
19743
19887
|
const states = {};
|
|
19744
19888
|
for (const [id, session] of sessions) {
|
|
19745
|
-
const state = deriveCached(harness, session);
|
|
19889
|
+
const state = deriveCached(harness, session, configuredPlugins, configuredMcpServers);
|
|
19746
19890
|
const verification = state.taskWorkflow?.verification;
|
|
19747
19891
|
states[id] = state.taskWorkflow === void 0 ? state : {
|
|
19748
19892
|
...state,
|
|
@@ -19905,8 +20049,11 @@ function createNarrativeService(options = {}) {
|
|
|
19905
20049
|
user: {
|
|
19906
20050
|
...userEntry?.title === void 0 ? {} : { title: userEntry.title },
|
|
19907
20051
|
pinned: userEntry?.pinned ?? false,
|
|
19908
|
-
hidden: userEntry?.hidden ?? false
|
|
20052
|
+
hidden: userEntry?.hidden ?? false,
|
|
20053
|
+
...userEntry?.archived === void 0 ? {} : { archived: userEntry.archived },
|
|
20054
|
+
...userEntry?.archivedAt === void 0 ? {} : { archivedAt: userEntry.archivedAt }
|
|
19909
20055
|
},
|
|
20056
|
+
archivedHasNewActivity: info?.archivedHasNewActivity ?? false,
|
|
19910
20057
|
...session.cwd === void 0 ? {} : { cwd: session.cwd },
|
|
19911
20058
|
...info?.lastActivity === void 0 ? {} : { lastActivity: info.lastActivity },
|
|
19912
20059
|
waiting: info?.waiting ?? false,
|
|
@@ -19976,19 +20123,14 @@ function createNarrativeService(options = {}) {
|
|
|
19976
20123
|
lookedUp: resolution?.lookedUp ?? [planPath]
|
|
19977
20124
|
};
|
|
19978
20125
|
}
|
|
19979
|
-
|
|
20126
|
+
const projectUser = overlayEntries[`project:${root}`];
|
|
19980
20127
|
const firstScreen = deriveProjectFirstScreen(plan, parsed?.availability === "available" ? parsed.goal : void 0, summary.currentPoints, sessionViews);
|
|
19981
|
-
|
|
19982
|
-
try {
|
|
19983
|
-
const restored = patchProjectOverlay(options.homeDir, root, { archived: false }, now());
|
|
19984
|
-
if (!("unavailable" in restored))
|
|
19985
|
-
projectUser = restored.entry ?? void 0;
|
|
19986
|
-
} catch {
|
|
19987
|
-
}
|
|
19988
|
-
}
|
|
20128
|
+
const archivedHasNewActivity = projectUser?.archived === true && projectUser.archivedAt !== void 0 && firstScreen.lastActivity !== void 0 && Date.parse(firstScreen.lastActivity.at) > Date.parse(projectUser.archivedAt);
|
|
19989
20129
|
projects.push({
|
|
19990
20130
|
firstScreen,
|
|
19991
20131
|
root,
|
|
20132
|
+
...resolution === void 0 ? {} : { isHome: resolution.isHome === true },
|
|
20133
|
+
archivedHasNewActivity,
|
|
19992
20134
|
...projectUser === void 0 ? {} : {
|
|
19993
20135
|
user: {
|
|
19994
20136
|
pinned: projectUser.pinned ?? false,
|
|
@@ -20055,8 +20197,18 @@ function createNarrativeService(options = {}) {
|
|
|
20055
20197
|
for (const harness of HARNESS_IDS)
|
|
20056
20198
|
notify(harness);
|
|
20057
20199
|
}
|
|
20200
|
+
function refreshOverlay(harness) {
|
|
20201
|
+
for (const changed of harness === void 0 ? HARNESS_IDS : [harness])
|
|
20202
|
+
notify(changed);
|
|
20203
|
+
}
|
|
20058
20204
|
loadRememberedProjectRoots();
|
|
20059
20205
|
return {
|
|
20206
|
+
setCodexPluginsProvider(provider) {
|
|
20207
|
+
codexPluginsProvider = provider;
|
|
20208
|
+
},
|
|
20209
|
+
setCcMcpServersProvider(provider) {
|
|
20210
|
+
ccMcpServersProvider = provider;
|
|
20211
|
+
},
|
|
20060
20212
|
handleEvent,
|
|
20061
20213
|
getState,
|
|
20062
20214
|
getOverview,
|
|
@@ -20064,6 +20216,7 @@ function createNarrativeService(options = {}) {
|
|
|
20064
20216
|
seedFixture,
|
|
20065
20217
|
subscribe,
|
|
20066
20218
|
refreshLocale,
|
|
20219
|
+
refreshOverlay,
|
|
20067
20220
|
close
|
|
20068
20221
|
};
|
|
20069
20222
|
}
|
|
@@ -20111,6 +20264,7 @@ function deriveProjectFirstScreen(plan, goal, points, sessions) {
|
|
|
20111
20264
|
...session.feedback.message === void 0 ? {} : { text: session.feedback.message }
|
|
20112
20265
|
});
|
|
20113
20266
|
}
|
|
20267
|
+
const feedbackUnavailable = sessions.length > 0 && sessions.every((session) => session.feedback === void 0 || session.feedback.state === "unavailable");
|
|
20114
20268
|
let action;
|
|
20115
20269
|
if (requests.length > 0)
|
|
20116
20270
|
action = { kind: "decision", items: requests, source: "sessions.feedback(state=needs_user)" };
|
|
@@ -20120,6 +20274,16 @@ function deriveProjectFirstScreen(plan, goal, points, sessions) {
|
|
|
20120
20274
|
items: checkpoints,
|
|
20121
20275
|
source: ".wingman/plan.md \u5F53\u524D\u70B9\u7956\u5148\u8DEF\u5F84 status / verification"
|
|
20122
20276
|
};
|
|
20277
|
+
else if (plan.availability === "available" && currentPoints.length > 0 && sessions.some((session) => !session.ended) && !feedbackUnavailable)
|
|
20278
|
+
action = {
|
|
20279
|
+
kind: "in_progress",
|
|
20280
|
+
source: ".wingman/plan.md currentPoints; sessions.ended=false"
|
|
20281
|
+
};
|
|
20282
|
+
else if (sessions.length > 0 && sessions.every((session) => session.ended))
|
|
20283
|
+
action = {
|
|
20284
|
+
kind: "ended",
|
|
20285
|
+
source: "sessions.length>0; sessions.every(ended=true)"
|
|
20286
|
+
};
|
|
20123
20287
|
else if (plan.availability === "missing")
|
|
20124
20288
|
action = {
|
|
20125
20289
|
kind: "insufficient",
|
|
@@ -20132,21 +20296,16 @@ function deriveProjectFirstScreen(plan, goal, points, sessions) {
|
|
|
20132
20296
|
reason: "plan_unavailable",
|
|
20133
20297
|
source: `plan.availability=unavailable; plan.reason: ${plan.reason}`
|
|
20134
20298
|
};
|
|
20135
|
-
else if (
|
|
20299
|
+
else if (feedbackUnavailable)
|
|
20136
20300
|
action = {
|
|
20137
20301
|
kind: "insufficient",
|
|
20138
20302
|
reason: "feedback_unavailable",
|
|
20139
20303
|
source: "sessions.feedback.state=unavailable / feedback \u672A\u63D0\u4F9B"
|
|
20140
20304
|
};
|
|
20141
|
-
else if (currentPoints.length > 0 && sessions.some((session) => !session.ended))
|
|
20142
|
-
action = {
|
|
20143
|
-
kind: "in_progress",
|
|
20144
|
-
source: ".wingman/plan.md currentPoints; sessions.ended=false"
|
|
20145
|
-
};
|
|
20146
20305
|
else
|
|
20147
20306
|
action = {
|
|
20148
20307
|
kind: "insufficient",
|
|
20149
|
-
reason: "
|
|
20308
|
+
reason: "feedback_unavailable",
|
|
20150
20309
|
source: `currentPoints.length=${currentPoints.length}; sessions(ended=false).length=${sessions.filter((session) => !session.ended).length}`
|
|
20151
20310
|
};
|
|
20152
20311
|
const latest = sessions.filter((session) => session.lastActivity !== void 0 && Number.isFinite(Date.parse(session.lastActivity))).sort((left, right) => Date.parse(right.lastActivity) - Date.parse(left.lastActivity))[0];
|
|
@@ -20291,6 +20450,32 @@ function feedbackView(harness, capability, state) {
|
|
|
20291
20450
|
}
|
|
20292
20451
|
return state ?? { state: "no_open_request", source: `${harness} explicit feedback signals` };
|
|
20293
20452
|
}
|
|
20453
|
+
function observedMcpServers(lines2, configuredServers) {
|
|
20454
|
+
const names = /* @__PURE__ */ new Set();
|
|
20455
|
+
for (const line of lines2) {
|
|
20456
|
+
if (line.kind !== "assistant")
|
|
20457
|
+
continue;
|
|
20458
|
+
for (const block of line.blocks) {
|
|
20459
|
+
if (block.kind !== "tool_use")
|
|
20460
|
+
continue;
|
|
20461
|
+
const server = recognizeMcpTool(block.name, configuredServers);
|
|
20462
|
+
if (server !== void 0)
|
|
20463
|
+
names.add(server);
|
|
20464
|
+
}
|
|
20465
|
+
}
|
|
20466
|
+
return [...names];
|
|
20467
|
+
}
|
|
20468
|
+
function observedPlugins(lines2, configuredPlugins) {
|
|
20469
|
+
const names = /* @__PURE__ */ new Set();
|
|
20470
|
+
for (const line of lines2) {
|
|
20471
|
+
if (line.kind !== "tool_call" || line.name === void 0)
|
|
20472
|
+
continue;
|
|
20473
|
+
const plugin = recognizePluginTool(line.name, line.namespace, configuredPlugins);
|
|
20474
|
+
if (plugin !== void 0)
|
|
20475
|
+
names.add(plugin);
|
|
20476
|
+
}
|
|
20477
|
+
return [...names];
|
|
20478
|
+
}
|
|
20294
20479
|
function observedSkills(lines2) {
|
|
20295
20480
|
const names = /* @__PURE__ */ new Set();
|
|
20296
20481
|
const validName = (value) => typeof value === "string" && /^[a-zA-Z0-9_.:-]+(?:\/[a-zA-Z0-9_.:-]+)*$/.test(value);
|
|
@@ -20326,7 +20511,7 @@ function observedSkills(lines2) {
|
|
|
20326
20511
|
}
|
|
20327
20512
|
return [...names];
|
|
20328
20513
|
}
|
|
20329
|
-
function derive(harness, session, nowIso) {
|
|
20514
|
+
function derive(harness, session, nowIso, configuredPlugins, configuredMcpServers) {
|
|
20330
20515
|
const codexLines = sortedCodexByTimestamp(session.codexLines);
|
|
20331
20516
|
const lines2 = harness === "codex" ? adaptCodexNarrativeLines(codexLines) : sortedByTimestamp(session.lines);
|
|
20332
20517
|
const timeline = deriveTodoTimeline(extractTodoSnapshots(lines2));
|
|
@@ -20470,11 +20655,15 @@ function derive(harness, session, nowIso) {
|
|
|
20470
20655
|
}
|
|
20471
20656
|
};
|
|
20472
20657
|
const skillsUsed = harness === "cc" ? observedSkills(lines2) : [];
|
|
20658
|
+
const mcpUsed = harness === "cc" ? observedMcpServers(lines2, configuredMcpServers) : [];
|
|
20659
|
+
const pluginsUsed = harness === "codex" ? observedPlugins(codexLines, configuredPlugins) : [];
|
|
20473
20660
|
return {
|
|
20474
20661
|
harness,
|
|
20475
20662
|
sessionId: session.id,
|
|
20476
20663
|
transcriptPath: session.transcriptPath ?? null,
|
|
20477
20664
|
...skillsUsed.length === 0 ? {} : { skillsUsed },
|
|
20665
|
+
...mcpUsed.length === 0 ? {} : { mcpUsed },
|
|
20666
|
+
...pluginsUsed.length === 0 ? {} : { pluginsUsed },
|
|
20478
20667
|
...session.cwd === void 0 ? {} : { cwd: session.cwd },
|
|
20479
20668
|
...session.cwd === void 0 ? {} : {
|
|
20480
20669
|
project: {
|
|
@@ -21691,6 +21880,8 @@ var LOCAL_HOST = /^(?:127\.0\.0\.1|localhost)(?::\d+)?$|^\[::1\](?::\d+)?$/i;
|
|
|
21691
21880
|
function createWingmanServer(options) {
|
|
21692
21881
|
const warn = options.warn ?? ((message) => console.error(message));
|
|
21693
21882
|
const runtime = { anatomy: null };
|
|
21883
|
+
options.narrative?.setCodexPluginsProvider(() => runtime.anatomy?.configs.find((config) => config.harness === "codex")?.slots.skills.filter((item) => item.nativeName.startsWith("plugins.")).map((item) => item.nativeName.slice("plugins.".length)) ?? []);
|
|
21884
|
+
options.narrative?.setCcMcpServersProvider(() => runtime.anatomy?.configs.find((config) => config.harness === "cc")?.slots.tools.filter((item) => item.nativeName.startsWith("mcpServers.")).map((item) => item.nativeName.slice("mcpServers.".length)) ?? []);
|
|
21694
21885
|
return createServer({ requireHostHeader: false }, (req, res) => {
|
|
21695
21886
|
handle(req, res, options, warn, runtime).catch((error) => {
|
|
21696
21887
|
warn(t("cli.server.requestFailed", { error: errorMessage3(error) }));
|
|
@@ -21827,6 +22018,8 @@ async function handle(req, res, options, warn, runtime) {
|
|
|
21827
22018
|
});
|
|
21828
22019
|
return;
|
|
21829
22020
|
}
|
|
22021
|
+
if (harness === "codex" || harness === "cc")
|
|
22022
|
+
await cachedAnatomy(options, warn, runtime);
|
|
21830
22023
|
const overview = options.narrative.getOverview(harness);
|
|
21831
22024
|
if (overview.sessions.length > 0) {
|
|
21832
22025
|
const config = (await cachedAnatomy(options, warn, runtime)).find((c) => c.harness === harness);
|
|
@@ -21843,6 +22036,7 @@ async function handle(req, res, options, warn, runtime) {
|
|
|
21843
22036
|
}
|
|
21844
22037
|
if (url.pathname === "/api/anatomy") {
|
|
21845
22038
|
const configs = await scanAll(options.harnesses, warn);
|
|
22039
|
+
runtime.anatomy = { at: Date.now(), configs };
|
|
21846
22040
|
const anatomy = configs.map((config) => {
|
|
21847
22041
|
const scanOptions = options.harnesses.find((entry) => entry.harness === config.harness)?.scanOptions;
|
|
21848
22042
|
const homeDir = scanOptions?.homeDir ?? options.homeDir;
|
|
@@ -22223,6 +22417,7 @@ async function handleTaskOverlay(req, res, options) {
|
|
|
22223
22417
|
sendJson2(res, 409, { error: result5.unavailable });
|
|
22224
22418
|
return;
|
|
22225
22419
|
}
|
|
22420
|
+
options.narrative?.refreshOverlay("root" in body ? void 0 : body.harness);
|
|
22226
22421
|
sendJson2(res, 200, { key, entry: result5.entry });
|
|
22227
22422
|
}
|
|
22228
22423
|
var LICENSE_BODY_LIMIT = 64 * 1024;
|
|
@@ -22315,10 +22510,10 @@ function isTaskOverlayRequest(value) {
|
|
|
22315
22510
|
if (!isRecord9(value.patch))
|
|
22316
22511
|
return false;
|
|
22317
22512
|
const keys = Object.keys(value.patch);
|
|
22318
|
-
if (keys.length === 0 || keys.some((key) => !["title", "pinned", "hidden", "accepted"].includes(key))) {
|
|
22513
|
+
if (keys.length === 0 || keys.some((key) => !["title", "pinned", "hidden", "archived", "accepted"].includes(key))) {
|
|
22319
22514
|
return false;
|
|
22320
22515
|
}
|
|
22321
|
-
return (value.patch.title === void 0 || value.patch.title === null || typeof value.patch.title === "string") && (value.patch.pinned === void 0 || typeof value.patch.pinned === "boolean") && (value.patch.hidden === void 0 || typeof value.patch.hidden === "boolean") && (value.patch.accepted === void 0 || typeof value.patch.accepted === "boolean");
|
|
22516
|
+
return (value.patch.title === void 0 || value.patch.title === null || typeof value.patch.title === "string") && (value.patch.pinned === void 0 || typeof value.patch.pinned === "boolean") && (value.patch.hidden === void 0 || typeof value.patch.hidden === "boolean") && (value.patch.archived === void 0 || typeof value.patch.archived === "boolean") && (value.patch.accepted === void 0 || typeof value.patch.accepted === "boolean");
|
|
22322
22517
|
}
|
|
22323
22518
|
function isProjectOverlayRequest(value) {
|
|
22324
22519
|
if (!isRecord9(value) || typeof value.root !== "string" || value.root.trim() === "")
|