create-walle 0.9.20 → 0.9.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (30) hide show
  1. package/README.md +2 -2
  2. package/package.json +1 -1
  3. package/template/claude-task-manager/db.js +131 -0
  4. package/template/claude-task-manager/docs/microsoft-dev-tunnel-phone-access-design.md +58 -50
  5. package/template/claude-task-manager/docs/phone-access-design.md +23 -7
  6. package/template/claude-task-manager/docs/walle-session-model-preferences.md +119 -0
  7. package/template/claude-task-manager/lib/microsoft-dev-tunnel-setup.js +32 -48
  8. package/template/claude-task-manager/lib/remote-relay-protocol.js +5 -0
  9. package/template/claude-task-manager/lib/walle-external-actions.js +20 -3
  10. package/template/claude-task-manager/public/index.html +25 -0
  11. package/template/claude-task-manager/public/js/setup.js +16 -12
  12. package/template/claude-task-manager/public/js/walle-session.js +31 -3
  13. package/template/claude-task-manager/public/js/walle.js +93 -23
  14. package/template/claude-task-manager/public/m/app.css +417 -21
  15. package/template/claude-task-manager/public/m/app.js +831 -44
  16. package/template/claude-task-manager/public/m/claim.html +1 -1
  17. package/template/claude-task-manager/public/m/index.html +41 -7
  18. package/template/claude-task-manager/public/m/sw.js +1 -1
  19. package/template/claude-task-manager/server.js +377 -30
  20. package/template/claude-task-manager/workers/state-detectors/codex.js +18 -3
  21. package/template/package.json +1 -1
  22. package/template/wall-e/chat.js +32 -2
  23. package/template/wall-e/coding/stream-processor.js +36 -0
  24. package/template/wall-e/coding-orchestrator.js +45 -0
  25. package/template/wall-e/docs/external-action-controller.md +60 -2
  26. package/template/wall-e/external-action-controller.js +23 -1
  27. package/template/wall-e/external-action-gateway.js +163 -0
  28. package/template/wall-e/fly.toml +1 -0
  29. package/template/wall-e/tools/local-tools.js +122 -4
  30. package/template/website/index.html +2 -2
@@ -791,10 +791,10 @@ html[data-theme="light"] .nav-item.active {
791
791
  inset: 0;
792
792
  z-index: 40;
793
793
  display: none;
794
- height: 100vh;
795
- min-height: 100vh;
796
- height: 100dvh;
797
- min-height: 100dvh;
794
+ height: calc(100vh - var(--mobile-keyboard-offset, 0px));
795
+ min-height: calc(100vh - var(--mobile-keyboard-offset, 0px));
796
+ height: calc(100dvh - var(--mobile-keyboard-offset, 0px));
797
+ min-height: calc(100dvh - var(--mobile-keyboard-offset, 0px));
798
798
  padding: env(safe-area-inset-top) 0 0;
799
799
  overflow: hidden;
800
800
  overscroll-behavior: contain;
@@ -995,6 +995,7 @@ html[data-theme="light"] .nav-item.active {
995
995
  flex: 1;
996
996
  min-height: 0;
997
997
  overflow: auto;
998
+ overflow-x: hidden;
998
999
  padding: 12px 12px 32px;
999
1000
  -webkit-overflow-scrolling: touch;
1000
1001
  overscroll-behavior: contain;
@@ -1034,6 +1035,14 @@ html[data-theme="light"] .nav-item.active {
1034
1035
  background: color-mix(in srgb, var(--purple, #bb9af7) 5%, var(--bg-elev));
1035
1036
  }
1036
1037
 
1038
+ .detail-messages .prompt-turn.live-prompt-turn {
1039
+ border-color: color-mix(in srgb, var(--green) 34%, var(--line));
1040
+ border-left-color: var(--green);
1041
+ background:
1042
+ linear-gradient(135deg, color-mix(in srgb, var(--green) 7%, var(--bg-elev)) 0%, var(--bg-elev) 82%),
1043
+ var(--bg-elev);
1044
+ }
1045
+
1037
1046
  .detail-messages .prompt-turn-header {
1038
1047
  display: grid;
1039
1048
  grid-template-columns: auto minmax(0, 1fr);
@@ -1110,6 +1119,30 @@ html[data-theme="light"] .nav-item.active {
1110
1119
  box-shadow: 0 1px 0 rgba(113, 167, 255, 0.08) inset;
1111
1120
  }
1112
1121
 
1122
+ .detail-messages .live-prompt-turn .prompt-turn-prompt.review-msg {
1123
+ border-color: color-mix(in srgb, var(--green) 38%, var(--line));
1124
+ background: color-mix(in srgb, var(--green) 11%, var(--bg-soft));
1125
+ box-shadow: 0 1px 0 color-mix(in srgb, var(--green) 12%, transparent) inset;
1126
+ }
1127
+
1128
+ .detail-messages .prompt-turn-live-title {
1129
+ display: grid;
1130
+ gap: 4px;
1131
+ min-width: 0;
1132
+ padding: 9px 10px;
1133
+ border: 1px solid color-mix(in srgb, var(--green) 34%, var(--line));
1134
+ border-radius: 8px;
1135
+ background: color-mix(in srgb, var(--green) 8%, var(--bg-soft));
1136
+ }
1137
+
1138
+ .detail-messages .prompt-turn-live-title > span:first-child {
1139
+ color: var(--green);
1140
+ font-size: 11px;
1141
+ font-weight: 850;
1142
+ letter-spacing: 0.06em;
1143
+ text-transform: uppercase;
1144
+ }
1145
+
1113
1146
  .detail-messages .prompt-turn-prompt .msg-header {
1114
1147
  margin-bottom: 5px;
1115
1148
  }
@@ -1162,6 +1195,34 @@ html[data-theme="light"] .nav-item.active {
1162
1195
  white-space: nowrap;
1163
1196
  }
1164
1197
 
1198
+ .detail-messages .prompt-turn-action {
1199
+ display: inline-flex;
1200
+ align-items: center;
1201
+ justify-content: center;
1202
+ min-height: 24px;
1203
+ padding: 3px 9px;
1204
+ border: 1px solid color-mix(in srgb, var(--blue) 42%, var(--line));
1205
+ border-radius: 999px;
1206
+ background: color-mix(in srgb, var(--blue) 14%, var(--bg-soft));
1207
+ color: var(--blue);
1208
+ font: inherit;
1209
+ font-size: 10px;
1210
+ font-weight: 800;
1211
+ line-height: 1;
1212
+ white-space: nowrap;
1213
+ }
1214
+
1215
+ .detail-messages .live-prompt-turn .prompt-turn-action {
1216
+ border-color: color-mix(in srgb, var(--green) 45%, var(--line));
1217
+ background: color-mix(in srgb, var(--green) 15%, var(--bg-soft));
1218
+ color: var(--green);
1219
+ }
1220
+
1221
+ .detail-messages .prompt-turn-action:focus-visible {
1222
+ outline: 2px solid currentColor;
1223
+ outline-offset: 2px;
1224
+ }
1225
+
1165
1226
  .detail-messages .prompt-turn-alert.warning {
1166
1227
  color: var(--amber);
1167
1228
  border-color: rgba(229, 181, 103, 0.5);
@@ -1221,6 +1282,7 @@ html[data-theme="light"] .nav-item.active {
1221
1282
  }
1222
1283
 
1223
1284
  .message-row.self {
1285
+ max-width: calc(100% - 28px);
1224
1286
  margin-left: 28px;
1225
1287
  border-color: rgba(113, 167, 255, 0.45);
1226
1288
  background: rgba(113, 167, 255, 0.11);
@@ -1229,6 +1291,7 @@ html[data-theme="light"] .nav-item.active {
1229
1291
  .message-row.assistant,
1230
1292
  .message-row.system,
1231
1293
  .message-row.tool {
1294
+ max-width: calc(100% - 16px);
1232
1295
  margin-right: 16px;
1233
1296
  }
1234
1297
 
@@ -1270,7 +1333,7 @@ html[data-theme="light"] .nav-item.active {
1270
1333
 
1271
1334
  .terminal-tail-panel {
1272
1335
  box-sizing: border-box;
1273
- max-width: 100%;
1336
+ max-width: calc(100% - 18px);
1274
1337
  margin: 12px 18px 12px 0;
1275
1338
  border: 1px solid color-mix(in srgb, var(--green) 34%, var(--line));
1276
1339
  border-radius: 14px 14px 14px 4px;
@@ -1864,6 +1927,10 @@ html[data-theme="light"] .nav-item.active {
1864
1927
  box-shadow: 0 -12px 28px rgba(0, 0, 0, 0.18);
1865
1928
  }
1866
1929
 
1930
+ .composer.has-model-picker {
1931
+ grid-template-columns: minmax(0, 1fr) 58px 52px;
1932
+ }
1933
+
1867
1934
  .composer-field {
1868
1935
  position: relative;
1869
1936
  align-self: start;
@@ -2008,6 +2075,81 @@ html[data-theme="light"] .nav-item.active {
2008
2075
  display: none;
2009
2076
  }
2010
2077
 
2078
+ .prompt-history-strip {
2079
+ display: grid;
2080
+ gap: 10px;
2081
+ padding: 10px;
2082
+ border: 1px solid color-mix(in srgb, var(--blue) 42%, var(--line));
2083
+ border-radius: 16px;
2084
+ background:
2085
+ linear-gradient(135deg, color-mix(in srgb, var(--blue) 16%, transparent), transparent 58%),
2086
+ color-mix(in srgb, var(--bg-elev) 94%, var(--blue));
2087
+ box-shadow:
2088
+ inset 0 1px 0 color-mix(in srgb, var(--fg) 8%, transparent),
2089
+ 0 8px 22px rgba(0, 0, 0, 0.2);
2090
+ }
2091
+
2092
+ .prompt-history-strip[hidden] {
2093
+ display: none;
2094
+ }
2095
+
2096
+ .prompt-history-copy {
2097
+ display: grid;
2098
+ gap: 3px;
2099
+ min-width: 0;
2100
+ }
2101
+
2102
+ .prompt-history-copy strong {
2103
+ color: var(--fg);
2104
+ font-size: 12px;
2105
+ font-weight: 900;
2106
+ letter-spacing: 0.03em;
2107
+ text-transform: uppercase;
2108
+ }
2109
+
2110
+ .prompt-history-copy span {
2111
+ color: var(--fg-dim);
2112
+ font-size: 12px;
2113
+ font-weight: 700;
2114
+ line-height: 1.25;
2115
+ }
2116
+
2117
+ .prompt-history-actions {
2118
+ display: grid;
2119
+ grid-template-columns: 1fr 1fr 0.85fr 44px;
2120
+ gap: 7px;
2121
+ align-items: center;
2122
+ }
2123
+
2124
+ .prompt-history-actions button {
2125
+ min-width: 0;
2126
+ min-height: 40px;
2127
+ padding: 0 8px;
2128
+ border: 1px solid color-mix(in srgb, var(--blue) 34%, var(--line));
2129
+ border-radius: 12px;
2130
+ background: color-mix(in srgb, var(--bg-soft) 86%, var(--blue));
2131
+ color: var(--fg);
2132
+ font-size: 12px;
2133
+ font-weight: 900;
2134
+ }
2135
+
2136
+ .prompt-history-actions button:disabled {
2137
+ opacity: 0.46;
2138
+ }
2139
+
2140
+ #prompt-history-edit {
2141
+ background: var(--blue);
2142
+ color: #08111f;
2143
+ }
2144
+
2145
+ #prompt-history-close {
2146
+ padding: 0;
2147
+ background: transparent;
2148
+ color: var(--fg-dim);
2149
+ font-size: 22px;
2150
+ line-height: 1;
2151
+ }
2152
+
2011
2153
  .mobile-skill-picker {
2012
2154
  position: absolute;
2013
2155
  left: 0;
@@ -2120,33 +2262,142 @@ html[data-theme="light"] .nav-item.active {
2120
2262
  border: 1px solid var(--line-strong);
2121
2263
  }
2122
2264
 
2265
+ .model-picker-btn {
2266
+ align-self: start;
2267
+ display: grid;
2268
+ place-items: center;
2269
+ align-content: center;
2270
+ gap: 1px;
2271
+ width: 58px;
2272
+ min-width: 58px;
2273
+ height: 52px;
2274
+ min-height: 52px;
2275
+ padding: 0 5px;
2276
+ border: 1px solid color-mix(in srgb, var(--blue) 36%, var(--line-strong));
2277
+ border-radius: 14px;
2278
+ background:
2279
+ linear-gradient(180deg, color-mix(in srgb, var(--blue) 12%, transparent), transparent),
2280
+ color-mix(in srgb, var(--bg-elev-2) 92%, transparent);
2281
+ color: var(--fg);
2282
+ box-shadow: inset 0 1px 0 color-mix(in srgb, var(--fg) 9%, transparent);
2283
+ }
2284
+
2285
+ .model-picker-btn[hidden] {
2286
+ display: none;
2287
+ }
2288
+
2289
+ .model-picker-btn:active,
2290
+ .model-picker-btn:focus-visible,
2291
+ .model-picker-btn[aria-expanded="true"] {
2292
+ outline: none;
2293
+ border-color: var(--blue);
2294
+ background:
2295
+ linear-gradient(180deg, color-mix(in srgb, var(--blue) 22%, transparent), transparent),
2296
+ color-mix(in srgb, var(--bg-elev-2) 88%, var(--blue));
2297
+ }
2298
+
2299
+ .model-picker-btn-kicker,
2300
+ .model-picker-btn-label {
2301
+ display: block;
2302
+ max-width: 100%;
2303
+ overflow: hidden;
2304
+ text-overflow: ellipsis;
2305
+ white-space: nowrap;
2306
+ line-height: 1.05;
2307
+ text-align: center;
2308
+ }
2309
+
2310
+ .model-picker-btn-kicker {
2311
+ color: var(--fg-muted);
2312
+ font-size: 9px;
2313
+ font-weight: 900;
2314
+ text-transform: uppercase;
2315
+ letter-spacing: 0;
2316
+ }
2317
+
2318
+ .model-picker-btn-label {
2319
+ color: var(--blue);
2320
+ font-size: 11px;
2321
+ font-weight: 950;
2322
+ }
2323
+
2123
2324
  .send-menu {
2124
- position: absolute;
2125
- right: 12px;
2126
- bottom: calc(100% + 8px);
2325
+ position: fixed;
2326
+ left: max(12px, env(safe-area-inset-left));
2327
+ right: max(12px, env(safe-area-inset-right));
2328
+ bottom: calc(var(--mobile-keyboard-offset, 0px) + env(safe-area-inset-bottom) + 96px);
2127
2329
  z-index: 52;
2128
- min-width: 164px;
2129
- padding: 6px;
2330
+ display: grid;
2331
+ grid-template-columns: repeat(2, minmax(0, 1fr));
2332
+ gap: 8px;
2333
+ min-width: 0;
2334
+ padding: 12px;
2130
2335
  border: 1px solid var(--line-strong);
2131
- border-radius: 8px;
2132
- background: rgba(21, 27, 34, 0.98);
2133
- box-shadow: 0 -16px 36px rgba(0, 0, 0, 0.36);
2336
+ border-radius: 22px;
2337
+ background:
2338
+ linear-gradient(160deg, color-mix(in srgb, var(--blue) 10%, transparent), transparent 44%),
2339
+ color-mix(in srgb, var(--bg-elev) 96%, #000);
2340
+ box-shadow:
2341
+ 0 -20px 50px rgba(0, 0, 0, 0.42),
2342
+ inset 0 1px 0 color-mix(in srgb, var(--fg) 8%, transparent);
2343
+ -webkit-backdrop-filter: blur(18px);
2344
+ backdrop-filter: blur(18px);
2134
2345
  }
2135
2346
 
2136
2347
  .send-menu[hidden] {
2137
2348
  display: none;
2138
2349
  }
2139
2350
 
2351
+ .send-menu::before {
2352
+ content: "";
2353
+ position: absolute;
2354
+ top: 7px;
2355
+ left: 50%;
2356
+ width: 42px;
2357
+ height: 4px;
2358
+ border-radius: 999px;
2359
+ background: color-mix(in srgb, var(--fg-muted) 55%, transparent);
2360
+ transform: translateX(-50%);
2361
+ }
2362
+
2363
+ .send-menu-header {
2364
+ grid-column: 1 / -1;
2365
+ display: grid;
2366
+ gap: 3px;
2367
+ padding: 8px 6px 2px;
2368
+ }
2369
+
2370
+ .send-menu-header strong,
2371
+ .send-menu-header span {
2372
+ display: block;
2373
+ }
2374
+
2375
+ .send-menu-header strong {
2376
+ color: var(--fg);
2377
+ font-size: 13px;
2378
+ font-weight: 900;
2379
+ letter-spacing: 0.02em;
2380
+ }
2381
+
2382
+ .send-menu-header span {
2383
+ color: var(--fg-dim);
2384
+ font-size: 12px;
2385
+ font-weight: 650;
2386
+ line-height: 1.25;
2387
+ }
2388
+
2140
2389
  .send-menu-item {
2141
2390
  width: 100%;
2142
- min-height: 44px;
2391
+ min-height: 50px;
2143
2392
  padding: 0 12px;
2144
- border-radius: 6px;
2145
- background: transparent;
2393
+ border: 1px solid color-mix(in srgb, var(--fg-muted) 18%, var(--line));
2394
+ border-radius: 14px;
2395
+ background: color-mix(in srgb, var(--bg-soft) 86%, transparent);
2146
2396
  color: var(--fg);
2147
- font-size: 14px;
2148
- font-weight: 800;
2149
- text-align: left;
2397
+ font-size: 13px;
2398
+ font-weight: 900;
2399
+ line-height: 1.15;
2400
+ text-align: center;
2150
2401
  }
2151
2402
 
2152
2403
  .send-menu-item.warn {
@@ -2166,12 +2417,12 @@ html[data-theme="light"] .nav-item.active {
2166
2417
  }
2167
2418
 
2168
2419
  .send-menu-item + .send-menu-item {
2169
- margin-top: 3px;
2420
+ margin-top: 0;
2170
2421
  }
2171
2422
 
2172
2423
  .send-menu-item:active,
2173
2424
  .send-menu-item:focus-visible {
2174
- background: rgba(255, 95, 86, 0.14);
2425
+ background: color-mix(in srgb, var(--blue) 16%, var(--bg-soft));
2175
2426
  outline: none;
2176
2427
  }
2177
2428
 
@@ -2796,6 +3047,10 @@ html[data-theme="light"] .nav-item.active {
2796
3047
  background: rgba(0, 0, 0, 0.54);
2797
3048
  }
2798
3049
 
3050
+ #stepup-sheet {
3051
+ z-index: 70;
3052
+ }
3053
+
2799
3054
  .modal-backdrop[hidden] {
2800
3055
  display: none;
2801
3056
  }
@@ -2814,6 +3069,141 @@ html[data-theme="light"] .nav-item.active {
2814
3069
  line-height: 1.45;
2815
3070
  }
2816
3071
 
3072
+ .model-picker-sheet {
3073
+ width: 100%;
3074
+ max-height: min(78vh, 720px);
3075
+ display: grid;
3076
+ grid-template-rows: auto minmax(0, 1fr);
3077
+ padding: 16px 16px calc(16px + env(safe-area-inset-bottom));
3078
+ border-top: 1px solid var(--line);
3079
+ border-radius: 18px 18px 0 0;
3080
+ background:
3081
+ linear-gradient(180deg, color-mix(in srgb, var(--blue) 8%, transparent), transparent 30%),
3082
+ var(--bg-elev);
3083
+ box-shadow: 0 -24px 60px rgba(0, 0, 0, 0.38);
3084
+ }
3085
+
3086
+ .model-picker-head {
3087
+ display: grid;
3088
+ grid-template-columns: minmax(0, 1fr) 44px;
3089
+ gap: 12px;
3090
+ align-items: start;
3091
+ padding-bottom: 12px;
3092
+ }
3093
+
3094
+ .model-picker-head h2,
3095
+ .model-picker-head p {
3096
+ margin: 0;
3097
+ }
3098
+
3099
+ .model-picker-head h2 {
3100
+ color: var(--fg);
3101
+ font-size: 18px;
3102
+ font-weight: 950;
3103
+ }
3104
+
3105
+ .model-picker-head p {
3106
+ margin-top: 4px;
3107
+ color: var(--fg-dim);
3108
+ font-size: 13px;
3109
+ line-height: 1.35;
3110
+ }
3111
+
3112
+ .model-picker-close {
3113
+ width: 44px;
3114
+ height: 44px;
3115
+ padding: 0;
3116
+ border-radius: 14px;
3117
+ background: var(--bg-soft);
3118
+ color: var(--fg);
3119
+ font-size: 22px;
3120
+ }
3121
+
3122
+ .model-picker-list {
3123
+ display: grid;
3124
+ gap: 8px;
3125
+ min-height: 120px;
3126
+ max-height: 100%;
3127
+ overflow-y: auto;
3128
+ padding: 2px 0;
3129
+ -webkit-overflow-scrolling: touch;
3130
+ }
3131
+
3132
+ .model-picker-empty {
3133
+ padding: 18px 4px;
3134
+ color: var(--fg-dim);
3135
+ font-size: 13px;
3136
+ line-height: 1.4;
3137
+ }
3138
+
3139
+ .model-picker-option {
3140
+ width: 100%;
3141
+ display: grid;
3142
+ grid-template-columns: minmax(0, 1fr) auto;
3143
+ gap: 10px;
3144
+ align-items: center;
3145
+ min-height: 60px;
3146
+ padding: 10px 12px;
3147
+ border: 1px solid color-mix(in srgb, var(--fg-muted) 18%, var(--line));
3148
+ border-radius: 14px;
3149
+ background: color-mix(in srgb, var(--bg-soft) 88%, transparent);
3150
+ color: var(--fg);
3151
+ text-align: left;
3152
+ }
3153
+
3154
+ .model-picker-option[aria-selected="true"] {
3155
+ border-color: color-mix(in srgb, var(--blue) 70%, var(--line-strong));
3156
+ background:
3157
+ linear-gradient(90deg, color-mix(in srgb, var(--blue) 18%, transparent), transparent 70%),
3158
+ color-mix(in srgb, var(--bg-soft) 92%, var(--blue));
3159
+ }
3160
+
3161
+ .model-picker-option:active,
3162
+ .model-picker-option:focus-visible {
3163
+ outline: none;
3164
+ border-color: var(--blue);
3165
+ background: color-mix(in srgb, var(--blue) 16%, var(--bg-soft));
3166
+ }
3167
+
3168
+ .model-picker-option-main {
3169
+ display: grid;
3170
+ gap: 3px;
3171
+ min-width: 0;
3172
+ }
3173
+
3174
+ .model-picker-option-title,
3175
+ .model-picker-option-meta {
3176
+ display: block;
3177
+ min-width: 0;
3178
+ overflow: hidden;
3179
+ text-overflow: ellipsis;
3180
+ white-space: nowrap;
3181
+ }
3182
+
3183
+ .model-picker-option-title {
3184
+ color: var(--fg);
3185
+ font-size: 14px;
3186
+ font-weight: 950;
3187
+ }
3188
+
3189
+ .model-picker-option-meta {
3190
+ color: var(--fg-dim);
3191
+ font-size: 12px;
3192
+ font-weight: 750;
3193
+ }
3194
+
3195
+ .model-picker-option-check {
3196
+ display: grid;
3197
+ place-items: center;
3198
+ min-width: 28px;
3199
+ height: 28px;
3200
+ border: 1px solid var(--line-strong);
3201
+ border-radius: 999px;
3202
+ color: var(--blue);
3203
+ font-size: 14px;
3204
+ font-weight: 950;
3205
+ }
3206
+
2817
3207
  .sheet-actions {
2818
3208
  display: grid;
2819
3209
  grid-template-columns: 1fr 1fr;
@@ -2943,4 +3333,10 @@ html[data-theme="light"] .nav-item.active {
2943
3333
  .stepup-sheet {
2944
3334
  width: 520px;
2945
3335
  }
3336
+
3337
+ .model-picker-sheet {
3338
+ width: 520px;
3339
+ border-left: 1px solid var(--line);
3340
+ border-right: 1px solid var(--line);
3341
+ }
2946
3342
  }