codex-autorunner 1.2.0__py3-none-any.whl → 1.3.0__py3-none-any.whl
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.
- codex_autorunner/bootstrap.py +26 -5
- codex_autorunner/core/about_car.py +12 -12
- codex_autorunner/core/config.py +178 -61
- codex_autorunner/core/context_awareness.py +1 -0
- codex_autorunner/core/filesystem.py +24 -0
- codex_autorunner/core/flows/controller.py +50 -12
- codex_autorunner/core/flows/runtime.py +8 -3
- codex_autorunner/core/hub.py +293 -16
- codex_autorunner/core/lifecycle_events.py +44 -5
- codex_autorunner/core/pma_context.py +188 -1
- codex_autorunner/core/pma_delivery.py +81 -0
- codex_autorunner/core/pma_dispatches.py +224 -0
- codex_autorunner/core/pma_lane_worker.py +122 -0
- codex_autorunner/core/pma_queue.py +167 -18
- codex_autorunner/core/pma_reactive.py +91 -0
- codex_autorunner/core/pma_safety.py +58 -0
- codex_autorunner/core/pma_sink.py +104 -0
- codex_autorunner/core/pma_transcripts.py +183 -0
- codex_autorunner/core/safe_paths.py +117 -0
- codex_autorunner/housekeeping.py +77 -23
- codex_autorunner/integrations/agents/codex_backend.py +18 -12
- codex_autorunner/integrations/agents/wiring.py +2 -0
- codex_autorunner/integrations/app_server/client.py +31 -0
- codex_autorunner/integrations/app_server/supervisor.py +3 -0
- codex_autorunner/integrations/telegram/adapter.py +1 -1
- codex_autorunner/integrations/telegram/config.py +1 -1
- codex_autorunner/integrations/telegram/constants.py +1 -1
- codex_autorunner/integrations/telegram/handlers/commands/execution.py +16 -15
- codex_autorunner/integrations/telegram/handlers/commands/files.py +5 -8
- codex_autorunner/integrations/telegram/handlers/commands/github.py +10 -6
- codex_autorunner/integrations/telegram/handlers/commands/shared.py +9 -8
- codex_autorunner/integrations/telegram/handlers/commands/workspace.py +85 -2
- codex_autorunner/integrations/telegram/handlers/commands_runtime.py +29 -8
- codex_autorunner/integrations/telegram/handlers/messages.py +8 -2
- codex_autorunner/integrations/telegram/helpers.py +30 -2
- codex_autorunner/integrations/telegram/ticket_flow_bridge.py +54 -3
- codex_autorunner/static/archive.js +274 -81
- codex_autorunner/static/archiveApi.js +21 -0
- codex_autorunner/static/constants.js +1 -1
- codex_autorunner/static/docChatCore.js +2 -0
- codex_autorunner/static/hub.js +59 -0
- codex_autorunner/static/index.html +70 -54
- codex_autorunner/static/notificationBell.js +173 -0
- codex_autorunner/static/notifications.js +187 -36
- codex_autorunner/static/pma.js +96 -35
- codex_autorunner/static/styles.css +431 -4
- codex_autorunner/static/terminalManager.js +22 -3
- codex_autorunner/static/utils.js +5 -1
- codex_autorunner/surfaces/cli/cli.py +206 -129
- codex_autorunner/surfaces/cli/template_repos.py +157 -0
- codex_autorunner/surfaces/web/app.py +193 -5
- codex_autorunner/surfaces/web/routes/archive.py +197 -0
- codex_autorunner/surfaces/web/routes/file_chat.py +115 -87
- codex_autorunner/surfaces/web/routes/flows.py +125 -67
- codex_autorunner/surfaces/web/routes/pma.py +638 -57
- codex_autorunner/surfaces/web/schemas.py +11 -0
- codex_autorunner/tickets/agent_pool.py +6 -1
- codex_autorunner/tickets/outbox.py +27 -14
- codex_autorunner/tickets/replies.py +4 -10
- codex_autorunner/tickets/runner.py +1 -0
- codex_autorunner/workspace/paths.py +8 -3
- {codex_autorunner-1.2.0.dist-info → codex_autorunner-1.3.0.dist-info}/METADATA +1 -1
- {codex_autorunner-1.2.0.dist-info → codex_autorunner-1.3.0.dist-info}/RECORD +67 -57
- {codex_autorunner-1.2.0.dist-info → codex_autorunner-1.3.0.dist-info}/WHEEL +0 -0
- {codex_autorunner-1.2.0.dist-info → codex_autorunner-1.3.0.dist-info}/entry_points.txt +0 -0
- {codex_autorunner-1.2.0.dist-info → codex_autorunner-1.3.0.dist-info}/licenses/LICENSE +0 -0
- {codex_autorunner-1.2.0.dist-info → codex_autorunner-1.3.0.dist-info}/top_level.txt +0 -0
|
@@ -1080,6 +1080,19 @@ main {
|
|
|
1080
1080
|
gap: 8px;
|
|
1081
1081
|
}
|
|
1082
1082
|
|
|
1083
|
+
.notifications-modal-links {
|
|
1084
|
+
display: flex;
|
|
1085
|
+
flex-direction: column;
|
|
1086
|
+
gap: 6px;
|
|
1087
|
+
margin-top: 8px;
|
|
1088
|
+
}
|
|
1089
|
+
|
|
1090
|
+
.notifications-modal-links a {
|
|
1091
|
+
color: var(--accent);
|
|
1092
|
+
text-decoration: none;
|
|
1093
|
+
font-size: 12px;
|
|
1094
|
+
}
|
|
1095
|
+
|
|
1083
1096
|
.notifications-open-run {
|
|
1084
1097
|
display: inline-flex;
|
|
1085
1098
|
align-items: center;
|
|
@@ -10971,6 +10984,22 @@ button.filebox-delete:hover {
|
|
|
10971
10984
|
min-height: 0;
|
|
10972
10985
|
}
|
|
10973
10986
|
|
|
10987
|
+
.archive-list-section {
|
|
10988
|
+
display: grid;
|
|
10989
|
+
gap: 8px;
|
|
10990
|
+
}
|
|
10991
|
+
|
|
10992
|
+
.archive-list-header {
|
|
10993
|
+
text-transform: uppercase;
|
|
10994
|
+
letter-spacing: 0.08em;
|
|
10995
|
+
font-size: 10px;
|
|
10996
|
+
padding: 0 4px;
|
|
10997
|
+
}
|
|
10998
|
+
|
|
10999
|
+
.archive-list-empty {
|
|
11000
|
+
padding: 4px 6px;
|
|
11001
|
+
}
|
|
11002
|
+
|
|
10974
11003
|
.archive-snapshot {
|
|
10975
11004
|
text-align: left;
|
|
10976
11005
|
border: 1px solid var(--border);
|
|
@@ -12520,6 +12549,143 @@ button.filebox-delete:hover {
|
|
|
12520
12549
|
overflow: hidden;
|
|
12521
12550
|
}
|
|
12522
12551
|
|
|
12552
|
+
/* PMA Dispatches */
|
|
12553
|
+
.pma-dispatches-section {
|
|
12554
|
+
padding: 10px 12px;
|
|
12555
|
+
display: flex;
|
|
12556
|
+
flex-direction: column;
|
|
12557
|
+
gap: 10px;
|
|
12558
|
+
}
|
|
12559
|
+
|
|
12560
|
+
.pma-dispatches-header {
|
|
12561
|
+
display: flex;
|
|
12562
|
+
align-items: center;
|
|
12563
|
+
gap: 8px;
|
|
12564
|
+
}
|
|
12565
|
+
|
|
12566
|
+
.pma-dispatches-header h2 {
|
|
12567
|
+
margin: 0;
|
|
12568
|
+
font-size: 14px;
|
|
12569
|
+
font-weight: 600;
|
|
12570
|
+
color: var(--text);
|
|
12571
|
+
}
|
|
12572
|
+
|
|
12573
|
+
.pma-dispatches-content {
|
|
12574
|
+
display: grid;
|
|
12575
|
+
grid-template-columns: minmax(200px, 1fr) minmax(280px, 1.4fr);
|
|
12576
|
+
gap: 12px;
|
|
12577
|
+
min-height: 180px;
|
|
12578
|
+
}
|
|
12579
|
+
|
|
12580
|
+
.pma-dispatches-list {
|
|
12581
|
+
display: flex;
|
|
12582
|
+
flex-direction: column;
|
|
12583
|
+
gap: 8px;
|
|
12584
|
+
max-height: 320px;
|
|
12585
|
+
overflow-y: auto;
|
|
12586
|
+
border: 1px solid var(--border);
|
|
12587
|
+
border-radius: var(--radius);
|
|
12588
|
+
background: rgba(8, 10, 16, 0.4);
|
|
12589
|
+
padding: 8px;
|
|
12590
|
+
}
|
|
12591
|
+
|
|
12592
|
+
.pma-dispatch-item {
|
|
12593
|
+
display: flex;
|
|
12594
|
+
flex-direction: column;
|
|
12595
|
+
gap: 4px;
|
|
12596
|
+
padding: 8px;
|
|
12597
|
+
border: 1px solid transparent;
|
|
12598
|
+
border-radius: var(--radius);
|
|
12599
|
+
background: rgba(15, 18, 28, 0.7);
|
|
12600
|
+
cursor: pointer;
|
|
12601
|
+
transition: border-color 0.15s ease, background 0.15s ease;
|
|
12602
|
+
}
|
|
12603
|
+
|
|
12604
|
+
.pma-dispatch-item:hover {
|
|
12605
|
+
border-color: rgba(108, 245, 216, 0.4);
|
|
12606
|
+
}
|
|
12607
|
+
|
|
12608
|
+
.pma-dispatch-item.active {
|
|
12609
|
+
border-color: var(--accent);
|
|
12610
|
+
box-shadow: 0 0 0 1px rgba(108, 245, 216, 0.2);
|
|
12611
|
+
}
|
|
12612
|
+
|
|
12613
|
+
.pma-dispatch-item.resolved {
|
|
12614
|
+
opacity: 0.6;
|
|
12615
|
+
}
|
|
12616
|
+
|
|
12617
|
+
.pma-dispatch-item-title {
|
|
12618
|
+
font-size: 13px;
|
|
12619
|
+
font-weight: 600;
|
|
12620
|
+
color: var(--text);
|
|
12621
|
+
}
|
|
12622
|
+
|
|
12623
|
+
.pma-dispatch-item-meta {
|
|
12624
|
+
display: flex;
|
|
12625
|
+
align-items: center;
|
|
12626
|
+
gap: 6px;
|
|
12627
|
+
font-size: 11px;
|
|
12628
|
+
color: var(--muted);
|
|
12629
|
+
}
|
|
12630
|
+
|
|
12631
|
+
.pma-dispatches-detail {
|
|
12632
|
+
border: 1px solid var(--border);
|
|
12633
|
+
border-radius: var(--radius);
|
|
12634
|
+
background: rgba(8, 10, 16, 0.4);
|
|
12635
|
+
padding: 12px;
|
|
12636
|
+
min-height: 180px;
|
|
12637
|
+
}
|
|
12638
|
+
|
|
12639
|
+
.pma-dispatch-detail-title {
|
|
12640
|
+
margin: 0 0 6px;
|
|
12641
|
+
font-size: 14px;
|
|
12642
|
+
font-weight: 600;
|
|
12643
|
+
color: var(--text);
|
|
12644
|
+
}
|
|
12645
|
+
|
|
12646
|
+
.pma-dispatch-detail-meta {
|
|
12647
|
+
display: flex;
|
|
12648
|
+
align-items: center;
|
|
12649
|
+
gap: 8px;
|
|
12650
|
+
font-size: 11px;
|
|
12651
|
+
color: var(--muted);
|
|
12652
|
+
margin-bottom: 10px;
|
|
12653
|
+
}
|
|
12654
|
+
|
|
12655
|
+
.pma-dispatch-detail-body {
|
|
12656
|
+
font-size: 13px;
|
|
12657
|
+
line-height: 1.5;
|
|
12658
|
+
color: var(--text);
|
|
12659
|
+
margin-bottom: 12px;
|
|
12660
|
+
}
|
|
12661
|
+
|
|
12662
|
+
.pma-dispatch-detail-links {
|
|
12663
|
+
display: flex;
|
|
12664
|
+
flex-direction: column;
|
|
12665
|
+
gap: 6px;
|
|
12666
|
+
margin-bottom: 12px;
|
|
12667
|
+
}
|
|
12668
|
+
|
|
12669
|
+
.pma-dispatch-detail-links a {
|
|
12670
|
+
color: var(--accent);
|
|
12671
|
+
text-decoration: none;
|
|
12672
|
+
font-size: 12px;
|
|
12673
|
+
}
|
|
12674
|
+
|
|
12675
|
+
.pma-dispatch-detail-actions {
|
|
12676
|
+
display: flex;
|
|
12677
|
+
gap: 8px;
|
|
12678
|
+
}
|
|
12679
|
+
|
|
12680
|
+
@media (max-width: 900px) {
|
|
12681
|
+
.pma-dispatches-content {
|
|
12682
|
+
grid-template-columns: 1fr;
|
|
12683
|
+
}
|
|
12684
|
+
.pma-dispatches-list {
|
|
12685
|
+
max-height: 220px;
|
|
12686
|
+
}
|
|
12687
|
+
}
|
|
12688
|
+
|
|
12523
12689
|
.pma-chat-main {
|
|
12524
12690
|
flex: 1 1 0;
|
|
12525
12691
|
display: flex;
|
|
@@ -13478,21 +13644,28 @@ button.filebox-delete:hover {
|
|
|
13478
13644
|
/* PMA Top Bar */
|
|
13479
13645
|
.pma-top-bar {
|
|
13480
13646
|
display: flex;
|
|
13481
|
-
flex-direction:
|
|
13482
|
-
|
|
13483
|
-
|
|
13647
|
+
flex-direction: row;
|
|
13648
|
+
align-items: center;
|
|
13649
|
+
justify-content: space-between;
|
|
13650
|
+
gap: 10px;
|
|
13651
|
+
padding: 6px 10px;
|
|
13484
13652
|
background: var(--bg-surface);
|
|
13485
13653
|
border-bottom: 1px solid var(--border);
|
|
13486
13654
|
flex-shrink: 0;
|
|
13487
13655
|
}
|
|
13488
13656
|
|
|
13657
|
+
.pma-dispatches-section {
|
|
13658
|
+
padding: 10px 12px;
|
|
13659
|
+
border-bottom: 1px solid var(--border);
|
|
13660
|
+
background: var(--bg-surface);
|
|
13661
|
+
}
|
|
13662
|
+
|
|
13489
13663
|
.pma-paused-runs-bar {
|
|
13490
13664
|
display: flex;
|
|
13491
13665
|
flex-direction: row;
|
|
13492
13666
|
align-items: stretch;
|
|
13493
13667
|
gap: 8px;
|
|
13494
13668
|
padding: 6px 8px;
|
|
13495
|
-
border-bottom: 1px solid var(--border);
|
|
13496
13669
|
background: var(--panel);
|
|
13497
13670
|
max-height: none;
|
|
13498
13671
|
}
|
|
@@ -13557,6 +13730,37 @@ button.filebox-delete:hover {
|
|
|
13557
13730
|
background: var(--panel);
|
|
13558
13731
|
}
|
|
13559
13732
|
|
|
13733
|
+
.pma-view-tabs {
|
|
13734
|
+
display: flex;
|
|
13735
|
+
gap: 6px;
|
|
13736
|
+
padding: 8px 10px;
|
|
13737
|
+
border-bottom: 1px solid var(--border);
|
|
13738
|
+
background: var(--panel);
|
|
13739
|
+
}
|
|
13740
|
+
|
|
13741
|
+
.pma-view-tab {
|
|
13742
|
+
padding: 6px 12px;
|
|
13743
|
+
font-size: 11px;
|
|
13744
|
+
font-weight: 600;
|
|
13745
|
+
color: var(--muted);
|
|
13746
|
+
background: transparent;
|
|
13747
|
+
border: 1px solid transparent;
|
|
13748
|
+
border-radius: 999px;
|
|
13749
|
+
cursor: pointer;
|
|
13750
|
+
transition: color 0.15s, background 0.15s, border-color 0.15s;
|
|
13751
|
+
}
|
|
13752
|
+
|
|
13753
|
+
.pma-view-tab:hover {
|
|
13754
|
+
color: var(--text);
|
|
13755
|
+
background: var(--hover-bg);
|
|
13756
|
+
}
|
|
13757
|
+
|
|
13758
|
+
.pma-view-tab.active {
|
|
13759
|
+
color: var(--text);
|
|
13760
|
+
background: var(--primary-bg);
|
|
13761
|
+
border-color: var(--border);
|
|
13762
|
+
}
|
|
13763
|
+
|
|
13560
13764
|
.pma-inbox-list {
|
|
13561
13765
|
flex: 1;
|
|
13562
13766
|
display: flex;
|
|
@@ -13567,6 +13771,219 @@ button.filebox-delete:hover {
|
|
|
13567
13771
|
max-height: none;
|
|
13568
13772
|
}
|
|
13569
13773
|
|
|
13774
|
+
.pma-dispatches-section .pma-paused-runs-bar {
|
|
13775
|
+
flex-direction: column;
|
|
13776
|
+
align-items: stretch;
|
|
13777
|
+
padding: 10px 12px;
|
|
13778
|
+
border: 1px solid var(--border);
|
|
13779
|
+
border-radius: var(--radius);
|
|
13780
|
+
}
|
|
13781
|
+
|
|
13782
|
+
.pma-dispatches-section .pma-inbox-list {
|
|
13783
|
+
flex-direction: column;
|
|
13784
|
+
align-items: stretch;
|
|
13785
|
+
gap: 10px;
|
|
13786
|
+
overflow-y: auto;
|
|
13787
|
+
overflow-x: hidden;
|
|
13788
|
+
}
|
|
13789
|
+
|
|
13790
|
+
.pma-dispatches-section .pma-inbox-item {
|
|
13791
|
+
max-width: none;
|
|
13792
|
+
width: 100%;
|
|
13793
|
+
padding: 10px 12px;
|
|
13794
|
+
border-radius: var(--radius);
|
|
13795
|
+
display: flex;
|
|
13796
|
+
flex-direction: column;
|
|
13797
|
+
align-items: stretch;
|
|
13798
|
+
gap: 6px;
|
|
13799
|
+
}
|
|
13800
|
+
|
|
13801
|
+
.pma-dispatches-section .pma-inbox-item-header {
|
|
13802
|
+
display: flex;
|
|
13803
|
+
align-items: center;
|
|
13804
|
+
gap: 8px;
|
|
13805
|
+
justify-content: space-between;
|
|
13806
|
+
}
|
|
13807
|
+
|
|
13808
|
+
.pma-dispatches-section .pma-inbox-title {
|
|
13809
|
+
display: block;
|
|
13810
|
+
}
|
|
13811
|
+
|
|
13812
|
+
.pma-dispatches-section .pma-inbox-excerpt {
|
|
13813
|
+
display: block;
|
|
13814
|
+
}
|
|
13815
|
+
|
|
13816
|
+
.pma-dispatches-section .pma-inbox-actions {
|
|
13817
|
+
display: flex;
|
|
13818
|
+
gap: 6px;
|
|
13819
|
+
flex-wrap: wrap;
|
|
13820
|
+
}
|
|
13821
|
+
|
|
13822
|
+
.pma-dispatches-section .pma-inbox-item-header .pill {
|
|
13823
|
+
display: inline-flex;
|
|
13824
|
+
}
|
|
13825
|
+
|
|
13826
|
+
.pma-view-toggle {
|
|
13827
|
+
display: inline-flex;
|
|
13828
|
+
align-items: center;
|
|
13829
|
+
gap: 2px;
|
|
13830
|
+
padding: 2px;
|
|
13831
|
+
border: 1px solid var(--border);
|
|
13832
|
+
border-radius: 999px;
|
|
13833
|
+
background: var(--panel);
|
|
13834
|
+
}
|
|
13835
|
+
|
|
13836
|
+
.pma-view-btn {
|
|
13837
|
+
height: 22px;
|
|
13838
|
+
padding: 0 10px;
|
|
13839
|
+
font-size: 10px;
|
|
13840
|
+
font-weight: 600;
|
|
13841
|
+
text-transform: uppercase;
|
|
13842
|
+
letter-spacing: 0.4px;
|
|
13843
|
+
border: none;
|
|
13844
|
+
border-radius: 999px;
|
|
13845
|
+
background: transparent;
|
|
13846
|
+
color: var(--muted);
|
|
13847
|
+
cursor: pointer;
|
|
13848
|
+
transition: color 0.15s ease, background 0.15s ease;
|
|
13849
|
+
}
|
|
13850
|
+
|
|
13851
|
+
.pma-view-btn:hover {
|
|
13852
|
+
color: var(--text);
|
|
13853
|
+
}
|
|
13854
|
+
|
|
13855
|
+
.pma-view-btn.active,
|
|
13856
|
+
.pma-view-btn[aria-selected="true"] {
|
|
13857
|
+
background: rgba(108, 245, 216, 0.16);
|
|
13858
|
+
color: var(--accent);
|
|
13859
|
+
}
|
|
13860
|
+
|
|
13861
|
+
.hub-shell[data-pma-view="chat"] #pma-docs-section {
|
|
13862
|
+
display: none !important;
|
|
13863
|
+
}
|
|
13864
|
+
|
|
13865
|
+
.hub-shell[data-pma-view="memory"] #pma-chat-section {
|
|
13866
|
+
display: none !important;
|
|
13867
|
+
}
|
|
13868
|
+
|
|
13869
|
+
.notification-bell {
|
|
13870
|
+
position: relative;
|
|
13871
|
+
overflow: visible;
|
|
13872
|
+
}
|
|
13873
|
+
|
|
13874
|
+
.notification-bell-icon {
|
|
13875
|
+
width: 18px;
|
|
13876
|
+
height: 18px;
|
|
13877
|
+
stroke: currentColor;
|
|
13878
|
+
stroke-width: 1.6;
|
|
13879
|
+
fill: none;
|
|
13880
|
+
}
|
|
13881
|
+
|
|
13882
|
+
.notification-bell:hover .notification-bell-icon {
|
|
13883
|
+
stroke: var(--accent);
|
|
13884
|
+
}
|
|
13885
|
+
|
|
13886
|
+
.notification-badge {
|
|
13887
|
+
position: absolute;
|
|
13888
|
+
top: 3px;
|
|
13889
|
+
right: 3px;
|
|
13890
|
+
min-width: 16px;
|
|
13891
|
+
height: 16px;
|
|
13892
|
+
padding: 0 4px;
|
|
13893
|
+
border-radius: 999px;
|
|
13894
|
+
background: var(--accent);
|
|
13895
|
+
color: #031311;
|
|
13896
|
+
font-size: 9px;
|
|
13897
|
+
font-weight: 700;
|
|
13898
|
+
display: inline-flex;
|
|
13899
|
+
align-items: center;
|
|
13900
|
+
justify-content: center;
|
|
13901
|
+
box-shadow: 0 0 0 2px var(--bg);
|
|
13902
|
+
}
|
|
13903
|
+
|
|
13904
|
+
.notification-dialog {
|
|
13905
|
+
max-width: 640px;
|
|
13906
|
+
}
|
|
13907
|
+
|
|
13908
|
+
.notification-modal-header {
|
|
13909
|
+
display: flex;
|
|
13910
|
+
align-items: center;
|
|
13911
|
+
justify-content: space-between;
|
|
13912
|
+
gap: 12px;
|
|
13913
|
+
}
|
|
13914
|
+
|
|
13915
|
+
.notification-modal-actions {
|
|
13916
|
+
display: inline-flex;
|
|
13917
|
+
align-items: center;
|
|
13918
|
+
gap: 6px;
|
|
13919
|
+
}
|
|
13920
|
+
|
|
13921
|
+
.notification-list {
|
|
13922
|
+
display: flex;
|
|
13923
|
+
flex-direction: column;
|
|
13924
|
+
gap: 10px;
|
|
13925
|
+
}
|
|
13926
|
+
|
|
13927
|
+
.notification-item {
|
|
13928
|
+
padding: 12px;
|
|
13929
|
+
border: 1px solid var(--border);
|
|
13930
|
+
border-radius: var(--radius);
|
|
13931
|
+
background: var(--panel);
|
|
13932
|
+
display: flex;
|
|
13933
|
+
flex-direction: column;
|
|
13934
|
+
gap: 6px;
|
|
13935
|
+
}
|
|
13936
|
+
|
|
13937
|
+
.notification-item-header {
|
|
13938
|
+
display: flex;
|
|
13939
|
+
align-items: center;
|
|
13940
|
+
justify-content: space-between;
|
|
13941
|
+
gap: 12px;
|
|
13942
|
+
}
|
|
13943
|
+
|
|
13944
|
+
.notification-repo {
|
|
13945
|
+
font-weight: 600;
|
|
13946
|
+
color: var(--accent);
|
|
13947
|
+
}
|
|
13948
|
+
|
|
13949
|
+
.notification-title {
|
|
13950
|
+
font-weight: 600;
|
|
13951
|
+
font-size: 13px;
|
|
13952
|
+
}
|
|
13953
|
+
|
|
13954
|
+
.notification-excerpt {
|
|
13955
|
+
font-size: 12px;
|
|
13956
|
+
color: var(--muted);
|
|
13957
|
+
}
|
|
13958
|
+
|
|
13959
|
+
.notification-actions {
|
|
13960
|
+
display: flex;
|
|
13961
|
+
gap: 6px;
|
|
13962
|
+
flex-wrap: wrap;
|
|
13963
|
+
}
|
|
13964
|
+
|
|
13965
|
+
.notification-actions .notification-action {
|
|
13966
|
+
border: 1px solid var(--border);
|
|
13967
|
+
border-radius: var(--radius);
|
|
13968
|
+
padding: 4px 8px;
|
|
13969
|
+
font-size: 10px;
|
|
13970
|
+
text-transform: uppercase;
|
|
13971
|
+
letter-spacing: 0.3px;
|
|
13972
|
+
color: var(--muted);
|
|
13973
|
+
background: transparent;
|
|
13974
|
+
cursor: pointer;
|
|
13975
|
+
text-decoration: none;
|
|
13976
|
+
}
|
|
13977
|
+
|
|
13978
|
+
.notification-actions .notification-action:hover {
|
|
13979
|
+
color: var(--text);
|
|
13980
|
+
border-color: rgba(108, 245, 216, 0.4);
|
|
13981
|
+
}
|
|
13982
|
+
|
|
13983
|
+
.pma-clear-btn {
|
|
13984
|
+
margin-left: 2px;
|
|
13985
|
+
}
|
|
13986
|
+
|
|
13570
13987
|
.pma-inbox-item {
|
|
13571
13988
|
display: inline-flex;
|
|
13572
13989
|
flex-direction: row;
|
|
@@ -13774,6 +14191,16 @@ button.filebox-delete:hover {
|
|
|
13774
14191
|
align-items: center;
|
|
13775
14192
|
gap: 8px;
|
|
13776
14193
|
padding: 8px 0;
|
|
14194
|
+
flex-wrap: wrap;
|
|
14195
|
+
}
|
|
14196
|
+
|
|
14197
|
+
.pma-docs-history {
|
|
14198
|
+
font-size: 11px;
|
|
14199
|
+
padding: 6px 10px;
|
|
14200
|
+
border-radius: 6px;
|
|
14201
|
+
border: 1px solid var(--border);
|
|
14202
|
+
background: var(--panel);
|
|
14203
|
+
color: var(--text);
|
|
13777
14204
|
}
|
|
13778
14205
|
|
|
13779
14206
|
.pma-docs-actions button:disabled {
|
|
@@ -49,6 +49,17 @@ const CAR_CONTEXT_HINT = wrapInjectedContext(CONSTANTS.PROMPTS.CAR_CONTEXT_HINT)
|
|
|
49
49
|
const VOICE_TRANSCRIPT_DISCLAIMER_TEXT = CONSTANTS.PROMPTS?.VOICE_TRANSCRIPT_DISCLAIMER ||
|
|
50
50
|
"Note: transcribed from user voice. If confusing or possibly inaccurate and you cannot infer the intention please clarify before proceeding.";
|
|
51
51
|
const INJECTED_CONTEXT_TAG_RE = /<injected context>/i;
|
|
52
|
+
const CAR_CONTEXT_COMMAND_RE = [
|
|
53
|
+
/^\/\S/,
|
|
54
|
+
/^\.\/\S/,
|
|
55
|
+
/^git(\s|$)/,
|
|
56
|
+
/^cd(\s|$)/,
|
|
57
|
+
/^ls(\s|$)/,
|
|
58
|
+
/^make(\s|$)/,
|
|
59
|
+
/^pnpm(\s|$)/,
|
|
60
|
+
/^npm(\s|$)/,
|
|
61
|
+
/^python3?(\s|$)/,
|
|
62
|
+
];
|
|
52
63
|
function wrapInjectedContext(text) {
|
|
53
64
|
return `<injected context>\n${text}\n</injected context>`;
|
|
54
65
|
}
|
|
@@ -57,6 +68,13 @@ function wrapInjectedContextIfNeeded(text) {
|
|
|
57
68
|
return text;
|
|
58
69
|
return INJECTED_CONTEXT_TAG_RE.test(text) ? text : wrapInjectedContext(text);
|
|
59
70
|
}
|
|
71
|
+
function looksLikeCommand(text) {
|
|
72
|
+
const trimmed = text.trim();
|
|
73
|
+
if (!trimmed)
|
|
74
|
+
return false;
|
|
75
|
+
const lowered = trimmed.toLowerCase();
|
|
76
|
+
return CAR_CONTEXT_COMMAND_RE.some((pattern) => pattern.test(lowered));
|
|
77
|
+
}
|
|
60
78
|
const LEGACY_SESSION_STORAGE_KEY = "codex_terminal_session_id";
|
|
61
79
|
const SESSION_STORAGE_PREFIX = "codex_terminal_session_id:";
|
|
62
80
|
const SESSION_STORAGE_TS_PREFIX = "codex_terminal_session_ts:";
|
|
@@ -620,12 +638,13 @@ export class TerminalManager {
|
|
|
620
638
|
return null;
|
|
621
639
|
if (manager._hasTextInputHookFired(CAR_CONTEXT_HOOK_ID))
|
|
622
640
|
return null;
|
|
623
|
-
|
|
624
|
-
const hit = CONSTANTS.KEYWORDS.CAR_CONTEXT.some((kw) => lowered.includes(kw));
|
|
625
|
-
if (!hit)
|
|
641
|
+
if (looksLikeCommand(text))
|
|
626
642
|
return null;
|
|
643
|
+
const lowered = text.toLowerCase();
|
|
627
644
|
if (lowered.includes("about_car.md"))
|
|
628
645
|
return null;
|
|
646
|
+
if (lowered.includes(".codex-autorunner"))
|
|
647
|
+
return null;
|
|
629
648
|
if (text.includes(CONSTANTS.PROMPTS.CAR_CONTEXT_HINT) ||
|
|
630
649
|
text.includes(CAR_CONTEXT_HINT)) {
|
|
631
650
|
return null;
|
codex_autorunner/static/utils.js
CHANGED
|
@@ -542,7 +542,7 @@ export function confirmModal(message, options = {}) {
|
|
|
542
542
|
});
|
|
543
543
|
}
|
|
544
544
|
export function inputModal(message, options = {}) {
|
|
545
|
-
const { placeholder = "", defaultValue = "", confirmText = "OK", cancelText = "Cancel" } = options;
|
|
545
|
+
const { placeholder = "", defaultValue = "", confirmText = "OK", cancelText = "Cancel", allowEmpty = false, } = options;
|
|
546
546
|
return new Promise((resolve) => {
|
|
547
547
|
const overlay = document.getElementById("input-modal");
|
|
548
548
|
const messageEl = document.getElementById("input-modal-message");
|
|
@@ -576,6 +576,10 @@ export function inputModal(message, options = {}) {
|
|
|
576
576
|
};
|
|
577
577
|
const onOk = () => {
|
|
578
578
|
const value = inputEl.value.trim();
|
|
579
|
+
if (allowEmpty) {
|
|
580
|
+
finalize(value);
|
|
581
|
+
return;
|
|
582
|
+
}
|
|
579
583
|
finalize(value || null);
|
|
580
584
|
};
|
|
581
585
|
const onCancel = () => {
|