snice 7.0.3 → 7.1.0
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/.agents/skills/snice/SKILL.md +4 -0
- package/.agents/skills/snice/references/core-kitchen-sink.ts +39 -1
- package/README.md +59 -14
- package/adapters/react/SniceProvider.js +2 -2
- package/adapters/react/SniceRouter.js +2 -2
- package/adapters/react/matchRoute.js +2 -2
- package/adapters/react/useRequestHandler.js +2 -2
- package/bin/analyzer-contracts.js +6 -1
- package/bin/postinstall.js +59 -0
- package/bin/project-analyzer.js +466 -5
- package/bin/snice.js +3 -0
- package/dist/app-context.d.ts +11 -0
- package/dist/cdn/accordion/snice-accordion.js +2 -2
- package/dist/cdn/action-bar/snice-action-bar.js +2 -2
- package/dist/cdn/activity-feed/snice-activity-feed.js +2 -2
- package/dist/cdn/alert/snice-alert.js +2 -2
- package/dist/cdn/app-tiles/snice-app-tiles.js +2 -2
- package/dist/cdn/approval-flow/snice-approval-flow.js +2 -2
- package/dist/cdn/audio-recorder/snice-audio-recorder.js +2 -2
- package/dist/cdn/availability/snice-availability.js +2 -2
- package/dist/cdn/avatar/snice-avatar.js +2 -2
- package/dist/cdn/avatar-group/snice-avatar-group.js +2 -2
- package/dist/cdn/badge/snice-badge.js +2 -2
- package/dist/cdn/banner/snice-banner.js +2 -2
- package/dist/cdn/binpack/snice-binpack.js +2 -2
- package/dist/cdn/book/snice-book.js +2 -2
- package/dist/cdn/booking/snice-booking.js +2 -2
- package/dist/cdn/breadcrumbs/snice-breadcrumbs.js +2 -2
- package/dist/cdn/button/snice-button.js +2 -2
- package/dist/cdn/calendar/snice-calendar.js +2 -2
- package/dist/cdn/camera/snice-camera.js +2 -2
- package/dist/cdn/camera-annotate/snice-camera-annotate.js +2 -2
- package/dist/cdn/candlestick/snice-candlestick.js +2 -2
- package/dist/cdn/card/snice-card.js +2 -2
- package/dist/cdn/carousel/snice-carousel.js +2 -2
- package/dist/cdn/cart/snice-cart.js +2 -2
- package/dist/cdn/chart/snice-chart.js +2 -2
- package/dist/cdn/chat/snice-chat.js +2 -2
- package/dist/cdn/checkbox/snice-checkbox.js +2 -2
- package/dist/cdn/chip/snice-chip.js +2 -2
- package/dist/cdn/code-block/snice-code-block.js +2 -2
- package/dist/cdn/color-display/snice-color-display.js +2 -2
- package/dist/cdn/color-picker/snice-color-picker.js +2 -2
- package/dist/cdn/command-palette/snice-command-palette.js +2 -2
- package/dist/cdn/comments/snice-comments.js +2 -2
- package/dist/cdn/countdown/snice-countdown.js +2 -2
- package/dist/cdn/cropper/snice-cropper.js +2 -2
- package/dist/cdn/data-card/snice-data-card.js +2 -2
- package/dist/cdn/date-picker/snice-date-picker.js +2 -2
- package/dist/cdn/date-range-picker/snice-date-range-picker.js +2 -2
- package/dist/cdn/date-time-picker/snice-date-time-picker.js +2 -2
- package/dist/cdn/diff/snice-diff.js +2 -2
- package/dist/cdn/divider/snice-divider.js +2 -2
- package/dist/cdn/doc/snice-doc.js +2 -2
- package/dist/cdn/draw/snice-draw.js +2 -2
- package/dist/cdn/drawer/snice-drawer.js +2 -2
- package/dist/cdn/empty-state/snice-empty-state.js +2 -2
- package/dist/cdn/estimate/snice-estimate.js +2 -2
- package/dist/cdn/file-gallery/snice-file-gallery.js +2 -2
- package/dist/cdn/file-upload/snice-file-upload.js +2 -2
- package/dist/cdn/flip-card/snice-flip-card.js +2 -2
- package/dist/cdn/flow/snice-flow.js +2 -2
- package/dist/cdn/form-layout/snice-form-layout.js +2 -2
- package/dist/cdn/funnel/snice-funnel.js +2 -2
- package/dist/cdn/gantt/snice-gantt.js +2 -2
- package/dist/cdn/gauge/snice-gauge.js +2 -2
- package/dist/cdn/grid/snice-grid.js +2 -2
- package/dist/cdn/heatmap/snice-heatmap.js +2 -2
- package/dist/cdn/image/snice-image.js +2 -2
- package/dist/cdn/input/snice-input.js +2 -2
- package/dist/cdn/invoice/snice-invoice.js +2 -2
- package/dist/cdn/kanban/snice-kanban.js +2 -2
- package/dist/cdn/key-value/snice-key-value.js +2 -2
- package/dist/cdn/kpi/snice-kpi.js +2 -2
- package/dist/cdn/layout/README.md +17 -2
- package/dist/cdn/layout/snice-layout.js +1656 -11
- package/dist/cdn/layout/snice-layout.js.map +1 -1
- package/dist/cdn/layout/snice-layout.min.js +379 -2
- package/dist/cdn/layout/snice-layout.min.js.map +1 -1
- package/dist/cdn/leaderboard/snice-leaderboard.js +2 -2
- package/dist/cdn/link/snice-link.js +2 -2
- package/dist/cdn/link-preview/snice-link-preview.js +2 -2
- package/dist/cdn/list/snice-list.js +2 -2
- package/dist/cdn/location/snice-location.js +2 -2
- package/dist/cdn/login/snice-login.js +2 -2
- package/dist/cdn/map/snice-map.js +2 -2
- package/dist/cdn/markdown/snice-markdown.js +2 -2
- package/dist/cdn/masonry/snice-masonry.js +2 -2
- package/dist/cdn/menu/snice-menu.js +2 -2
- package/dist/cdn/message-strip/snice-message-strip.js +2 -2
- package/dist/cdn/modal/snice-modal.js +2 -2
- package/dist/cdn/music-player/snice-music-player.js +2 -2
- package/dist/cdn/nav/snice-nav.js +2 -2
- package/dist/cdn/network-graph/snice-network-graph.js +2 -2
- package/dist/cdn/notification-center/snice-notification-center.js +2 -2
- package/dist/cdn/order-tracker/snice-order-tracker.js +2 -2
- package/dist/cdn/org-chart/snice-org-chart.js +2 -2
- package/dist/cdn/pagination/snice-pagination.js +2 -2
- package/dist/cdn/paint/snice-paint.js +2 -2
- package/dist/cdn/pdf-viewer/snice-pdf-viewer.js +2 -2
- package/dist/cdn/permission-matrix/snice-permission-matrix.js +2 -2
- package/dist/cdn/podcast-player/snice-podcast-player.js +2 -2
- package/dist/cdn/popover/snice-popover.js +2 -2
- package/dist/cdn/pricing-table/snice-pricing-table.js +2 -2
- package/dist/cdn/product-card/snice-product-card.js +2 -2
- package/dist/cdn/progress/snice-progress.js +2 -2
- package/dist/cdn/progress-ring/snice-progress-ring.js +2 -2
- package/dist/cdn/qr-code/snice-qr-code.js +2 -2
- package/dist/cdn/qr-reader/snice-qr-reader.js +2 -2
- package/dist/cdn/radio/snice-radio.js +2 -2
- package/dist/cdn/range-slider/snice-range-slider.js +2 -2
- package/dist/cdn/rating/snice-rating.js +2 -2
- package/dist/cdn/receipt/snice-receipt.js +2 -2
- package/dist/cdn/recipe/snice-recipe.js +2 -2
- package/dist/cdn/runtime/README.md +2 -2
- package/dist/cdn/runtime/snice-runtime.esm.js +3732 -3343
- package/dist/cdn/runtime/snice-runtime.esm.js.map +1 -1
- package/dist/cdn/runtime/snice-runtime.esm.min.js +1 -1
- package/dist/cdn/runtime/snice-runtime.esm.min.js.map +1 -1
- package/dist/cdn/runtime/snice-runtime.js +3727 -3335
- package/dist/cdn/runtime/snice-runtime.js.map +1 -1
- package/dist/cdn/runtime/snice-runtime.min.js +1 -1
- package/dist/cdn/runtime/snice-runtime.min.js.map +1 -1
- package/dist/cdn/sankey/snice-sankey.js +2 -2
- package/dist/cdn/segmented-control/snice-segmented-control.js +2 -2
- package/dist/cdn/select/snice-select.js +2 -2
- package/dist/cdn/skeleton/snice-skeleton.js +2 -2
- package/dist/cdn/slider/snice-slider.js +2 -2
- package/dist/cdn/sortable/snice-sortable.js +2 -2
- package/dist/cdn/sparkline/snice-sparkline.js +2 -2
- package/dist/cdn/spinner/snice-spinner.js +2 -2
- package/dist/cdn/split-button/snice-split-button.js +2 -2
- package/dist/cdn/split-pane/snice-split-pane.js +2 -2
- package/dist/cdn/spotlight/snice-spotlight.js +2 -2
- package/dist/cdn/stat-group/snice-stat-group.js +2 -2
- package/dist/cdn/step-input/snice-step-input.js +2 -2
- package/dist/cdn/stepper/snice-stepper.js +2 -2
- package/dist/cdn/switch/snice-switch.js +2 -2
- package/dist/cdn/table/README.md +6 -2
- package/dist/cdn/table/snice-table.esm.js +347 -54
- package/dist/cdn/table/snice-table.esm.js.map +1 -1
- package/dist/cdn/table/snice-table.esm.min.js +105 -44
- package/dist/cdn/table/snice-table.esm.min.js.map +1 -1
- package/dist/cdn/table/snice-table.js +348 -57
- package/dist/cdn/table/snice-table.js.map +1 -1
- package/dist/cdn/table/snice-table.min.js +153 -92
- package/dist/cdn/table/snice-table.min.js.map +1 -1
- package/dist/cdn/tabs/snice-tabs.js +2 -2
- package/dist/cdn/tag/snice-tag.js +2 -2
- package/dist/cdn/tag-input/snice-tag-input.js +2 -2
- package/dist/cdn/terminal/snice-terminal.js +2 -2
- package/dist/cdn/testimonial/snice-testimonial.js +2 -2
- package/dist/cdn/textarea/snice-textarea.js +2 -2
- package/dist/cdn/time-picker/snice-time-picker.js +2 -2
- package/dist/cdn/time-range-picker/snice-time-range-picker.js +2 -2
- package/dist/cdn/timeline/snice-timeline.js +2 -2
- package/dist/cdn/timer/snice-timer.js +2 -2
- package/dist/cdn/toast/snice-toast.js +2 -2
- package/dist/cdn/tooltip/snice-tooltip.js +2 -2
- package/dist/cdn/tree/snice-tree.js +2 -2
- package/dist/cdn/treemap/snice-treemap.js +2 -2
- package/dist/cdn/user-card/snice-user-card.js +2 -2
- package/dist/cdn/video-player/snice-video-player.js +2 -2
- package/dist/cdn/virtual-scroller/snice-virtual-scroller.js +2 -2
- package/dist/cdn/waterfall/snice-waterfall.js +2 -2
- package/dist/cdn/weather/snice-weather.js +2 -2
- package/dist/cdn/work-order/snice-work-order.js +2 -2
- package/dist/context-provider.d.ts +16 -0
- package/dist/daemon-target.d.ts +10 -0
- package/dist/daemon.d.ts +10 -0
- package/dist/index.cjs +3721 -3329
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +3 -0
- package/dist/index.esm.js +3719 -3330
- package/dist/index.esm.js.map +1 -1
- package/dist/index.iife.js +3721 -3329
- package/dist/index.iife.js.map +1 -1
- package/dist/keyboard-filter.d.ts +25 -0
- package/dist/on.d.ts +1 -1
- package/dist/parts.d.ts +0 -17
- package/dist/react/SniceProvider.js +2 -2
- package/dist/react/SniceRouter.js +2 -2
- package/dist/react/index.js +2 -2
- package/dist/react/matchRoute.js +2 -2
- package/dist/react/useRequestHandler.js +2 -2
- package/dist/request-response.d.ts +9 -1
- package/dist/symbols.cjs +11 -2
- package/dist/symbols.cjs.map +1 -1
- package/dist/symbols.d.ts +3 -0
- package/dist/symbols.esm.js +9 -3
- package/dist/symbols.esm.js.map +1 -1
- package/dist/testing.d.ts +1 -1
- package/dist/transitions.cjs +2 -2
- package/dist/transitions.esm.js +2 -2
- package/dist/types/app-context.d.ts +9 -58
- package/dist/types/daemon.d.ts +8 -0
- package/dist/types/dispatch-options.d.ts +2 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/types/on-options.d.ts +5 -0
- package/dist/types/request-options.d.ts +2 -0
- package/dist/types/respond-options.d.ts +2 -0
- package/docs/ai/DEVELOPMENT.md +15 -1
- package/docs/ai/README.md +5 -1
- package/docs/ai/api.md +13 -4
- package/docs/ai/architecture.md +50 -1
- package/docs/ai/cli.md +9 -0
- package/docs/ai/daemons.md +80 -0
- package/docs/ai/decorators.md +6 -4
- package/docs/ai/events.md +6 -0
- package/docs/ai/patterns.md +45 -1
- package/docs/ai/request-response.md +26 -9
- package/docs/ai/routing.md +16 -1
- package/docs/cli.md +7 -0
- package/docs/daemons.md +200 -0
- package/docs/events.md +19 -2
- package/docs/request-response.md +20 -13
- package/docs/routing.md +25 -1
- package/package.json +6 -4
|
@@ -8,6 +8,10 @@ description: Build, modify, debug, or review applications and components that us
|
|
|
8
8
|
Use the documentation shipped with the exact installed Snice version. Do not
|
|
9
9
|
reconstruct Snice APIs from Lit or generic web-component conventions.
|
|
10
10
|
|
|
11
|
+
If a consuming project does not yet contain `.agents/skills/snice/SKILL.md`,
|
|
12
|
+
run `npx snice init-ai` from that project root before writing Snice code. This
|
|
13
|
+
installs version-matched guidance plus `AGENTS.md` and `CLAUDE.md` pointers.
|
|
14
|
+
|
|
11
15
|
## Locate the reference
|
|
12
16
|
|
|
13
17
|
Use the first directory that exists:
|
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
*/
|
|
10
10
|
import {
|
|
11
11
|
ContextAwareFetcher,
|
|
12
|
+
type Response,
|
|
12
13
|
SniceElement,
|
|
13
14
|
adopted,
|
|
14
15
|
classMap,
|
|
@@ -19,6 +20,7 @@ import {
|
|
|
19
20
|
controller,
|
|
20
21
|
createRequestHandler,
|
|
21
22
|
css,
|
|
23
|
+
daemon,
|
|
22
24
|
debounce,
|
|
23
25
|
dispatch,
|
|
24
26
|
dispose,
|
|
@@ -81,6 +83,23 @@ interface KitchenContext extends AppContext {
|
|
|
81
83
|
token: string;
|
|
82
84
|
}
|
|
83
85
|
|
|
86
|
+
@daemon
|
|
87
|
+
class KitchenDaemon {
|
|
88
|
+
status = 'ready';
|
|
89
|
+
|
|
90
|
+
@respond('daemon-status')
|
|
91
|
+
currentStatus() {
|
|
92
|
+
return this.status;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
@dispatch('daemon-status-changed')
|
|
96
|
+
statusChanged() {
|
|
97
|
+
return this.status;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
const kitchenDaemon = new KitchenDaemon();
|
|
102
|
+
|
|
84
103
|
const fetcher = new ContextAwareFetcher();
|
|
85
104
|
fetcher.use('request', function (request, next) {
|
|
86
105
|
const { token } = this.application as KitchenContext;
|
|
@@ -96,7 +115,11 @@ export const { page, navigate, initialize } = Router({
|
|
|
96
115
|
target: '#app',
|
|
97
116
|
type: 'hash',
|
|
98
117
|
layout: 'kitchen-shell',
|
|
99
|
-
context: {
|
|
118
|
+
context: {
|
|
119
|
+
user: null,
|
|
120
|
+
token: '',
|
|
121
|
+
daemons: { kitchen: kitchenDaemon }
|
|
122
|
+
} satisfies KitchenContext,
|
|
100
123
|
fetcher
|
|
101
124
|
});
|
|
102
125
|
|
|
@@ -220,6 +243,21 @@ class KitchenView extends SniceElement {
|
|
|
220
243
|
return user as User;
|
|
221
244
|
}
|
|
222
245
|
|
|
246
|
+
@request('daemon-status', { daemon: 'kitchen' })
|
|
247
|
+
async *loadDaemonStatus(): Response<string> {
|
|
248
|
+
return await (yield {});
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
async normalizedDaemonStatus() {
|
|
252
|
+
const status: string = await this.loadDaemonStatus();
|
|
253
|
+
return status.toUpperCase();
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
@on('daemon-status-changed', { daemon: 'kitchen' })
|
|
257
|
+
daemonStatusChanged(event: CustomEvent<string>) {
|
|
258
|
+
this.status.text = event.detail;
|
|
259
|
+
}
|
|
260
|
+
|
|
223
261
|
@observe('resize', '.panel')
|
|
224
262
|
resized(_entries: ResizeObserverEntry[]) {}
|
|
225
263
|
|
package/README.md
CHANGED
|
@@ -62,7 +62,7 @@ class RealTimeUserLoader { ... }
|
|
|
62
62
|
@on('click', 'button') fn(e: Event) { ... }
|
|
63
63
|
@dispatch('value-changed') fn(val: string) => Event Detail
|
|
64
64
|
@context() fn(ctx: Context) { ... }
|
|
65
|
-
@request('user') fn():
|
|
65
|
+
@request('user') async *fn(): Response<User> { return yield {}; }
|
|
66
66
|
@respond('user') fn(req) => Response;
|
|
67
67
|
```
|
|
68
68
|
|
|
@@ -510,8 +510,8 @@ This pattern is useful when:
|
|
|
510
510
|
|
|
511
511
|
```typescript
|
|
512
512
|
// Controller responds to requests
|
|
513
|
-
@
|
|
514
|
-
class AppController
|
|
513
|
+
@controller('app-controller')
|
|
514
|
+
class AppController {
|
|
515
515
|
private currentUser = { name: 'Alice', role: 'admin' };
|
|
516
516
|
|
|
517
517
|
@respond('user')
|
|
@@ -523,32 +523,75 @@ class AppController extends HTMLElement {
|
|
|
523
523
|
// Element makes requests
|
|
524
524
|
@element('user-badge')
|
|
525
525
|
class UserBadge extends HTMLElement {
|
|
526
|
+
@state() private user: User | null = null;
|
|
527
|
+
|
|
526
528
|
@request('user')
|
|
527
|
-
getUser
|
|
529
|
+
async *getUser(): Response<User> {
|
|
530
|
+
return yield {};
|
|
531
|
+
}
|
|
528
532
|
|
|
529
533
|
@ready()
|
|
530
|
-
init() {
|
|
531
|
-
const user = this.getUser();
|
|
534
|
+
async init() {
|
|
535
|
+
const user = await this.getUser();
|
|
536
|
+
this.user = user;
|
|
532
537
|
console.log('Current user:', user);
|
|
533
538
|
}
|
|
534
539
|
|
|
535
540
|
@render()
|
|
536
541
|
renderContent() {
|
|
537
|
-
|
|
538
|
-
return html`<div>Welcome, ${user.name}!</div>`;
|
|
542
|
+
return html`<div>Welcome, ${this.user?.name ?? 'Guest'}!</div>`;
|
|
539
543
|
}
|
|
540
544
|
}
|
|
541
|
-
```
|
|
542
545
|
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
<app-controller>
|
|
546
|
-
<user-badge></user-badge>
|
|
547
|
-
</app-controller>
|
|
546
|
+
// A parent template attaches the responder by class.
|
|
547
|
+
html`<user-badge controller=${AppController}></user-badge>`;
|
|
548
548
|
```
|
|
549
549
|
|
|
550
550
|
See [Request/Response documentation](./docs/request-response.md) for details.
|
|
551
551
|
|
|
552
|
+
### Daemons
|
|
553
|
+
|
|
554
|
+
Daemons are explicitly constructed, app-owned objects with state and a lifecycle.
|
|
555
|
+
They support both request/response and event communication without requiring an
|
|
556
|
+
element or a global singleton:
|
|
557
|
+
|
|
558
|
+
```typescript
|
|
559
|
+
@daemon
|
|
560
|
+
class SessionDaemon {
|
|
561
|
+
@respond('get-session')
|
|
562
|
+
getSession() { return this.session; }
|
|
563
|
+
|
|
564
|
+
@dispatch('session-changed')
|
|
565
|
+
changed() { return this.session; }
|
|
566
|
+
}
|
|
567
|
+
|
|
568
|
+
const session = new SessionDaemon();
|
|
569
|
+
const release = provideContext(appRoot, { daemons: { session } });
|
|
570
|
+
|
|
571
|
+
// Elements/controllers use the context address, not SessionDaemon.
|
|
572
|
+
@request('get-session', { daemon: 'session' })
|
|
573
|
+
async *loadSession(): Response<Session | null> {
|
|
574
|
+
return yield {};
|
|
575
|
+
}
|
|
576
|
+
```
|
|
577
|
+
|
|
578
|
+
Router provides its `context` through the same mechanism. There is no implicit
|
|
579
|
+
construction or global registry, and multiple instances remain independent. See
|
|
580
|
+
[Daemons](./docs/daemons.md) for lifecycle, testing, and both communication models.
|
|
581
|
+
|
|
582
|
+
### Project Organization
|
|
583
|
+
|
|
584
|
+
Keep application roles easy to find: pages in `src/pages/`, reusable visual
|
|
585
|
+
elements in `src/components/`, attached behavior in `src/controllers/`, and
|
|
586
|
+
app-owned services in `src/daemons/`. `src/router.ts` constructs and exports the
|
|
587
|
+
router pieces; `src/main.ts` imports page modules and calls `initialize()`.
|
|
588
|
+
|
|
589
|
+
Pages orchestrate a route. When several storage/server/timer operations collect
|
|
590
|
+
inside one page, or substantial non-visual logic is repeated across pages, move
|
|
591
|
+
that behavior into a controller. `snice check` reports folder and extraction
|
|
592
|
+
guidance as non-blocking suggestions while treating broken Router construction
|
|
593
|
+
as an error.
|
|
594
|
+
|
|
552
595
|
## Template Syntax
|
|
553
596
|
|
|
554
597
|
### Auto-Rendering with Differential Updates
|
|
@@ -939,6 +982,7 @@ See [DEVELOPMENT.md](./DEVELOPMENT.md) for build system details
|
|
|
939
982
|
- [Declarative Rendering](./docs/rendering.md) - Bindings, control flow, reactivity, render roots, and async values
|
|
940
983
|
- [Binding Channels](./docs/bindings.md) - Detailed DOM destinations, value/removal rules, events, spreads, sentinels, and forms
|
|
941
984
|
- [Controllers API](./docs/controllers.md) - Data fetching, business logic, and controller patterns
|
|
985
|
+
- [Daemons](./docs/daemons.md) - Explicit app-context state/lifecycle objects with request/response and event communication
|
|
942
986
|
- [Routing API](./docs/routing.md) - Router setup, pages, route params, and navigation
|
|
943
987
|
- [Guards and Layouts](./docs/guards-and-layouts.md) - Protecting routes, page wrappers, and transitions
|
|
944
988
|
- [Placards API](./docs/placards.md) - Rich page metadata for dynamic navigation and discovery
|
|
@@ -952,6 +996,7 @@ See [DEVELOPMENT.md](./DEVELOPMENT.md) for build system details
|
|
|
952
996
|
|
|
953
997
|
### Developer Documentation
|
|
954
998
|
- [DEVELOPMENT.md](./DEVELOPMENT.md) - Build system, testing, and contributing to Snice
|
|
999
|
+
- [Dumb-agent gauntlet](./.ai/gauntlet.md) - Maintainer-only local model loop for hardening `snice check`
|
|
955
1000
|
|
|
956
1001
|
## License
|
|
957
1002
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* snice v7.0.
|
|
3
|
-
* A decorator-driven web component library with
|
|
2
|
+
* snice v7.0.3
|
|
3
|
+
* A decorator-driven web component library with routing, controllers, daemons, and 130+ UI components. For better coding-agent results, run npx snice init-ai.
|
|
4
4
|
* (c) 2024
|
|
5
5
|
* Released under the MIT License.
|
|
6
6
|
*
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* snice v7.0.
|
|
3
|
-
* A decorator-driven web component library with
|
|
2
|
+
* snice v7.0.3
|
|
3
|
+
* A decorator-driven web component library with routing, controllers, daemons, and 130+ UI components. For better coding-agent results, run npx snice init-ai.
|
|
4
4
|
* (c) 2024
|
|
5
5
|
* Released under the MIT License.
|
|
6
6
|
*
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* snice v7.0.
|
|
3
|
-
* A decorator-driven web component library with
|
|
2
|
+
* snice v7.0.3
|
|
3
|
+
* A decorator-driven web component library with routing, controllers, daemons, and 130+ UI components. For better coding-agent results, run npx snice init-ai.
|
|
4
4
|
* (c) 2024
|
|
5
5
|
* Released under the MIT License.
|
|
6
6
|
*
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* snice v7.0.
|
|
3
|
-
* A decorator-driven web component library with
|
|
2
|
+
* snice v7.0.3
|
|
3
|
+
* A decorator-driven web component library with routing, controllers, daemons, and 130+ UI components. For better coding-agent results, run npx snice init-ai.
|
|
4
4
|
* (c) 2024
|
|
5
5
|
* Released under the MIT License.
|
|
6
6
|
*
|
|
@@ -18,7 +18,7 @@ export const ANALYZER_CONTRACTS = {
|
|
|
18
18
|
"componentFamilies": 134,
|
|
19
19
|
"componentModules": 188,
|
|
20
20
|
"reactWrappers": 193,
|
|
21
|
-
"rootExports":
|
|
21
|
+
"rootExports": 115
|
|
22
22
|
},
|
|
23
23
|
"rootExports": [
|
|
24
24
|
"AdoptedOptions",
|
|
@@ -29,6 +29,7 @@ export const ANALYZER_CONTRACTS = {
|
|
|
29
29
|
"ContextOptions",
|
|
30
30
|
"ControllerClass",
|
|
31
31
|
"CreateRequestHandlerOptions",
|
|
32
|
+
"DaemonMap",
|
|
32
33
|
"DispatchOptions",
|
|
33
34
|
"Duration",
|
|
34
35
|
"ElementOptions",
|
|
@@ -57,6 +58,7 @@ export const ANALYZER_CONTRACTS = {
|
|
|
57
58
|
"RequestRoute",
|
|
58
59
|
"RequestRouteMap",
|
|
59
60
|
"RespondOptions",
|
|
61
|
+
"Response",
|
|
60
62
|
"ResponseMiddleware",
|
|
61
63
|
"RouteParams",
|
|
62
64
|
"Router",
|
|
@@ -83,6 +85,7 @@ export const ANALYZER_CONTRACTS = {
|
|
|
83
85
|
"controller",
|
|
84
86
|
"createRequestHandler",
|
|
85
87
|
"css",
|
|
88
|
+
"daemon",
|
|
86
89
|
"debounce",
|
|
87
90
|
"detachController",
|
|
88
91
|
"dispatch",
|
|
@@ -91,6 +94,7 @@ export const ANALYZER_CONTRACTS = {
|
|
|
91
94
|
"escapeAttr",
|
|
92
95
|
"escapeHtml",
|
|
93
96
|
"getBodyScrollLockCount",
|
|
97
|
+
"getContext",
|
|
94
98
|
"getController",
|
|
95
99
|
"getSymbol",
|
|
96
100
|
"html",
|
|
@@ -107,6 +111,7 @@ export const ANALYZER_CONTRACTS = {
|
|
|
107
111
|
"once",
|
|
108
112
|
"parseDuration",
|
|
109
113
|
"property",
|
|
114
|
+
"provideContext",
|
|
110
115
|
"query",
|
|
111
116
|
"queryAll",
|
|
112
117
|
"ready",
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
import { closeSync, openSync, writeSync } from 'node:fs';
|
|
4
|
+
|
|
5
|
+
export const AI_INIT_MESSAGE = [
|
|
6
|
+
'',
|
|
7
|
+
'Snice installed. Add version-matched AI guidance to this project:',
|
|
8
|
+
' npx snice init-ai',
|
|
9
|
+
''
|
|
10
|
+
].join('\n');
|
|
11
|
+
|
|
12
|
+
function isSilent(env) {
|
|
13
|
+
return String(env.npm_config_loglevel ?? '').toLowerCase() === 'silent';
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* npm 7+ captures dependency lifecycle output by default. Prefer stdout when
|
|
18
|
+
* it is already visible, otherwise write directly to an interactive terminal.
|
|
19
|
+
* Every terminal operation is best-effort so installation can never fail just
|
|
20
|
+
* because the recommendation could not be displayed.
|
|
21
|
+
*/
|
|
22
|
+
export function showAiInitMessage({
|
|
23
|
+
env = process.env,
|
|
24
|
+
platform = process.platform,
|
|
25
|
+
stdout = process.stdout,
|
|
26
|
+
open = openSync,
|
|
27
|
+
write = writeSync,
|
|
28
|
+
close = closeSync
|
|
29
|
+
} = {}) {
|
|
30
|
+
if (isSilent(env)) return false;
|
|
31
|
+
|
|
32
|
+
if (stdout.isTTY) {
|
|
33
|
+
stdout.write(AI_INIT_MESSAGE);
|
|
34
|
+
return true;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
if (!env.CI) {
|
|
38
|
+
let terminal;
|
|
39
|
+
try {
|
|
40
|
+
terminal = open(platform === 'win32' ? '\\\\.\\CONOUT$' : '/dev/tty', 'w');
|
|
41
|
+
write(terminal, AI_INIT_MESSAGE);
|
|
42
|
+
close(terminal);
|
|
43
|
+
return true;
|
|
44
|
+
} catch {
|
|
45
|
+
if (terminal !== undefined) {
|
|
46
|
+
try { close(terminal); } catch {}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
try {
|
|
52
|
+
stdout.write(AI_INIT_MESSAGE);
|
|
53
|
+
return true;
|
|
54
|
+
} catch {
|
|
55
|
+
return false;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
showAiInitMessage();
|