@stacksjs/defaults 0.75.121 → 0.75.123
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/ai/skills/stacks-chat/SKILL.md +19 -0
- package/ai/skills/stacks-cli/SKILL.md +12 -3
- package/ai/skills/stacks-lint/SKILL.md +32 -165
- package/ai/skills/stacks-native/CATALOG.md +10 -10
- package/ai/skills/stacks-realtime/SKILL.md +18 -0
- package/ide/vscode/package.json +1 -1
- package/package.json +2 -2
- package/resources/plugins/preloader.ts +16 -8
|
@@ -504,3 +504,22 @@ Receipts acknowledge only messages through the id actually displayed.
|
|
|
504
504
|
For the UI, STX ships `ChatInbox`, `ChatMessage`, and `ChatUnreadBadge` in
|
|
505
505
|
`@stacksjs/components`. Browser stores import `createChat` from
|
|
506
506
|
`@stacksjs/components/chat` and inject their authenticated HTTP transport.
|
|
507
|
+
|
|
508
|
+
### Native broadcasting
|
|
509
|
+
|
|
510
|
+
`createMessenger` emits `messaging.sent` after a new persisted message and
|
|
511
|
+
`messaging.read` when acknowledged messages first become read. Retried sends and
|
|
512
|
+
unchanged receipts emit nothing. Set `broadcast: false` to disable. Initialize
|
|
513
|
+
Stacks realtime before delivery, using `createServer` for WebSockets or
|
|
514
|
+
`createBroadcastHub` for authenticated HTTP streams.
|
|
515
|
+
|
|
516
|
+
`messagingChannel(participantType, userId)` selects that person's private inbox.
|
|
517
|
+
Authorize subscription using the authenticated person's server-owned ID. Events
|
|
518
|
+
carry only `conversation_id`; always re-read message text through current
|
|
519
|
+
relationship and tenant policy. This prevents a revoked relationship's old socket
|
|
520
|
+
from receiving private message contents.
|
|
521
|
+
|
|
522
|
+
The native STX controller accepts `broadcastEndpoint`. `chat.observe(active)`
|
|
523
|
+
shares one stream across inboxes, launchers and unread badges, returns a cleanup,
|
|
524
|
+
and reconciles after reconnect. Only an active visible inbox acknowledges reads.
|
|
525
|
+
It clears account/tenant state and reconnects when the scope changes.
|
|
@@ -107,7 +107,7 @@ export default defineCommands({
|
|
|
107
107
|
// app/Listeners/Console.ts
|
|
108
108
|
export default function(cli: CLI) {
|
|
109
109
|
cli.on('custom:command', () => {
|
|
110
|
-
|
|
110
|
+
log.info('Custom command executed!')
|
|
111
111
|
})
|
|
112
112
|
|
|
113
113
|
cli.on('my:*', () => {
|
|
@@ -120,14 +120,23 @@ export default function(cli: CLI) {
|
|
|
120
120
|
}
|
|
121
121
|
```
|
|
122
122
|
|
|
123
|
+
## Plain command output
|
|
124
|
+
|
|
125
|
+
Import `print` and `printError` from `@stacksjs/cli/output` for command results,
|
|
126
|
+
test tallies and diagnostics that must be visible even when logging is filtered.
|
|
127
|
+
They write synchronously to stdout and stderr, preserve Node formatting and
|
|
128
|
+
inspection, append a newline, and complete before an immediate `process.exit()`.
|
|
129
|
+
The narrow import needs no application configuration. Use `log` for application
|
|
130
|
+
logging with levels, context and transports.
|
|
131
|
+
|
|
123
132
|
## Output Formatting
|
|
124
133
|
|
|
125
134
|
Via `@stacksjs/utils` color functions (available in CLI context):
|
|
126
135
|
```typescript
|
|
127
136
|
import { bold, green, red, yellow, dim, underline } from '@stacksjs/utils'
|
|
128
137
|
|
|
129
|
-
|
|
130
|
-
|
|
138
|
+
print(green('✓ Success'))
|
|
139
|
+
printError(red('✗ Error'))
|
|
131
140
|
console.log(yellow('⚠ Warning'))
|
|
132
141
|
console.log(bold('Important'))
|
|
133
142
|
console.log(dim('Subtle info'))
|
|
@@ -1,184 +1,51 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: stacks-lint
|
|
3
|
-
description: Use when linting or formatting
|
|
3
|
+
description: Use when linting or formatting a Stacks project. Always use Pickier through buddy or its native CLI, never ESLint directly.
|
|
4
4
|
license: MIT
|
|
5
5
|
compatibility: Bun >= 1.3.0, TypeScript
|
|
6
|
-
allowed-tools: Read Edit Write Bash Grep Glob
|
|
7
6
|
---
|
|
8
7
|
|
|
9
8
|
# Stacks Linting
|
|
10
9
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
3. For unused variable warnings: prefer `// eslint-disable-next-line` comments over prefixing with `_`
|
|
15
|
-
|
|
16
|
-
## Key Paths
|
|
17
|
-
- Lint package: `storage/framework/core/lint/` (package: `@stacksjs/lint`)
|
|
18
|
-
- Configuration: `config/code-style.ts` (auto-loaded via pickier's bunfig alias `code-style`; pickier handles both linting and formatting)
|
|
19
|
-
- Lint command source: `storage/framework/core/buddy/src/commands/lint.ts`
|
|
20
|
-
|
|
21
|
-
## Package Details
|
|
22
|
-
- Package name: `@stacksjs/lint`
|
|
23
|
-
- Version: tracks framework version (currently 0.70.23)
|
|
24
|
-
- The lint package is a thin wrapper -- the actual linting is done by pickier
|
|
25
|
-
- `storage/framework/core/lint/build.ts` is a no-op (nothing to build)
|
|
26
|
-
- Dev dependencies: `better-dx`, `@stacksjs/gitlint`, `bun-git-hooks`
|
|
10
|
+
Use `./buddy lint`, `./buddy lint:fix` and `./buddy format`. The code-style
|
|
11
|
+
commands call Pickier's SDK directly. Pickier is the linter and formatter;
|
|
12
|
+
it does not wrap ESLint. ESLint-style disable comments are compatibility syntax.
|
|
27
13
|
|
|
28
14
|
## Commands
|
|
29
15
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
buddy lint
|
|
36
|
-
|
|
37
|
-
# Auto-fix (runs: bunx --bun pickier run --mode lint --config ./pickier.config.ts --fix)
|
|
38
|
-
buddy lint --fix
|
|
39
|
-
buddy lint:fix
|
|
40
|
-
|
|
41
|
-
# Format (runs: bunx --bun pickier run --mode format --config ./pickier.config.ts --write)
|
|
42
|
-
buddy format
|
|
43
|
-
buddy format --write # same as above (write is default)
|
|
44
|
-
|
|
45
|
-
# Check formatting without changes
|
|
46
|
-
buddy format --check # runs: pickier run --mode format --config ./pickier.config.ts --check
|
|
47
|
-
buddy format:check
|
|
48
|
-
```
|
|
49
|
-
|
|
50
|
-
### Direct pickier usage
|
|
51
|
-
```bash
|
|
52
|
-
# Lint entire project
|
|
53
|
-
bunx --bun pickier .
|
|
54
|
-
|
|
55
|
-
# Auto-fix
|
|
56
|
-
bunx --bun pickier . --fix
|
|
57
|
-
|
|
58
|
-
# Via npm scripts
|
|
59
|
-
bun run lint
|
|
60
|
-
bun run lint:fix
|
|
61
|
-
bun run format
|
|
62
|
-
bun run format:check
|
|
63
|
-
```
|
|
64
|
-
|
|
65
|
-
## config/code-style.ts (PickierOptions)
|
|
66
|
-
|
|
67
|
-
The actual configuration used by the project. This is the source of truth for all lint settings:
|
|
68
|
-
|
|
69
|
-
```typescript
|
|
70
|
-
import type { PickierOptions } from 'pickier'
|
|
71
|
-
|
|
72
|
-
const config: PickierOptions = {
|
|
73
|
-
format: {
|
|
74
|
-
extensions: ['ts', 'js', 'stx', 'json', 'yaml', 'md'],
|
|
75
|
-
indent: 2,
|
|
76
|
-
quotes: 'single',
|
|
77
|
-
semi: false,
|
|
78
|
-
},
|
|
79
|
-
|
|
80
|
-
rules: {
|
|
81
|
-
// TypeScript rules
|
|
82
|
-
noDebugger: 'off',
|
|
83
|
-
noConsole: 'off',
|
|
84
|
-
},
|
|
85
|
-
|
|
86
|
-
pluginRules: {
|
|
87
|
-
// Regexp rules disabled (false positives on route definitions)
|
|
88
|
-
'regexp/no-unused-capturing-group': 'off',
|
|
89
|
-
'regexp/no-super-linear-backtracking': 'off',
|
|
90
|
-
'regexp/optimal-quantifier-concatenation': 'off',
|
|
91
|
-
// Style rules disabled (conflict with common patterns or generated code)
|
|
92
|
-
'style/brace-style': 'off',
|
|
93
|
-
'style/max-statements-per-line': 'off',
|
|
94
|
-
'style/quotes': 'off',
|
|
95
|
-
'indent': 'off',
|
|
96
|
-
'quotes': 'off',
|
|
97
|
-
// TypeScript rules
|
|
98
|
-
'ts/no-top-level-await': 'off',
|
|
99
|
-
// Console is intentional
|
|
100
|
-
'no-console': 'off',
|
|
101
|
-
// Markdown rules
|
|
102
|
-
'markdown/heading-increment': 'off',
|
|
103
|
-
'markdown/no-empty-links': 'off',
|
|
104
|
-
},
|
|
105
|
-
|
|
106
|
-
ignores: [
|
|
107
|
-
'**/fixtures/**',
|
|
108
|
-
'**/coverage/**',
|
|
109
|
-
'**/temp/**',
|
|
110
|
-
],
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
export default config
|
|
114
|
-
```
|
|
115
|
-
|
|
116
|
-
## Format Settings (enforced)
|
|
117
|
-
- **Indent**: 2 spaces
|
|
118
|
-
- **Quotes**: single quotes
|
|
119
|
-
- **Semicolons**: none (no semicolons)
|
|
120
|
-
- **Extensions**: ts, js, stx, json, yaml, md
|
|
121
|
-
|
|
122
|
-
## Handling Unused Variables
|
|
123
|
-
|
|
124
|
-
When pickier/eslint reports unused variables, use eslint-disable comments -- do NOT prefix with underscore:
|
|
125
|
-
|
|
126
|
-
```typescript
|
|
127
|
-
// CORRECT: Use eslint-disable comment
|
|
128
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
129
|
-
const unusedVar = someFunction()
|
|
16
|
+
- `./buddy lint`: report errors and warnings; errors fail the command.
|
|
17
|
+
- `./buddy lint --max-warnings 0`: require zero errors and warnings.
|
|
18
|
+
- `./buddy lint:fix --max-warnings 0`: fix supported findings and enforce the warning budget.
|
|
19
|
+
- `./buddy format`: write formatting; `./buddy format --check` checks without writing.
|
|
20
|
+
- `./buddy lint --stx`: run the separate stx conformance checks from `config/lint.ts`.
|
|
130
21
|
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
res.send('ok')
|
|
135
|
-
}
|
|
22
|
+
For direct CLI use, run `bunx --bun pickier .`, adding `--fix` for supported
|
|
23
|
+
fixes. Re-run without `--fix` to confirm remaining findings. Only apply fixes
|
|
24
|
+
that preserve the source behavior; investigate false positives at Pickier's source.
|
|
136
25
|
|
|
137
|
-
|
|
138
|
-
const _unusedVar = someFunction() // DON'T DO THIS
|
|
139
|
-
```
|
|
26
|
+
## Configuration and discovery
|
|
140
27
|
|
|
141
|
-
|
|
28
|
+
Pickier discovers its own configuration (`pickier.config.ts`, `.config/pickier.ts`,
|
|
29
|
+
and other supported names). `config/code-style.ts` is the framework's policy;
|
|
30
|
+
applications may supply their own Pickier config. An explicit CLI `--config`
|
|
31
|
+
selects that file. Keep the command and CI on the same policy.
|
|
142
32
|
|
|
143
|
-
|
|
33
|
+
Buddy discovers tracked files plus untracked files allowed by `.gitignore`.
|
|
34
|
+
Its extension and path predicate lives in `@stacksjs/actions/lint/files`;
|
|
35
|
+
code-style discovery currently includes ts, js, json, md, yaml and yml.
|
|
36
|
+
Use Pickier directly to include stx and shell sources. Generated framework
|
|
37
|
+
assets belong to the upstream framework's checks, not application edits.
|
|
144
38
|
|
|
145
|
-
|
|
146
|
-
// lint.ts internals
|
|
147
|
-
buddy
|
|
148
|
-
.command('lint', 'Automagically lints your project codebase')
|
|
149
|
-
.option('-f, --fix', 'Automagically fixes all lint errors', { default: false })
|
|
150
|
-
.action(async (options: LintOptions) => {
|
|
151
|
-
if (options.fix)
|
|
152
|
-
await runCommand('bunx --bun pickier run --mode lint --config ./pickier.config.ts --fix', { cwd: path.projectPath() })
|
|
153
|
-
else
|
|
154
|
-
await runCommand('bunx --bun pickier run --mode lint --config ./pickier.config.ts', { cwd: path.projectPath() })
|
|
155
|
-
})
|
|
156
|
-
```
|
|
39
|
+
## Conventions
|
|
157
40
|
|
|
158
|
-
|
|
41
|
+
Use two spaces, single quotes and no optional semicolons. Use Crosswind classes
|
|
42
|
+
and stx signals/directives in templates. Fix real findings in source, rather than
|
|
43
|
+
turning off rules to obtain a clean report. For intentional unused variables,
|
|
44
|
+
prefer a targeted `// eslint-disable-next-line` over an underscore prefix.
|
|
159
45
|
|
|
160
|
-
|
|
161
|
-
buddy
|
|
162
|
-
.command('format', 'Format your project codebase')
|
|
163
|
-
.option('-w, --write', 'Write changes to files', { default: false })
|
|
164
|
-
.option('-c, --check', 'Check formatting without making changes', { default: false })
|
|
165
|
-
.action(async (options) => {
|
|
166
|
-
if (options.check)
|
|
167
|
-
await runCommand('bunx --bun pickier run --mode format --config ./pickier.config.ts --check', { cwd: path.projectPath() })
|
|
168
|
-
else
|
|
169
|
-
await runCommand('bunx --bun pickier run --mode format --config ./pickier.config.ts --write', { cwd: path.projectPath() })
|
|
170
|
-
})
|
|
171
|
-
```
|
|
46
|
+
## Source
|
|
172
47
|
|
|
173
|
-
|
|
174
|
-
-
|
|
175
|
-
-
|
|
176
|
-
-
|
|
177
|
-
- The project intentionally allows `console.*` calls (`noConsole: 'off'`, `'no-console': 'off'`)
|
|
178
|
-
- The project intentionally allows `debugger` statements (`noDebugger: 'off'`)
|
|
179
|
-
- Top-level await is allowed (`'ts/no-top-level-await': 'off'`)
|
|
180
|
-
- Brace style and max-statements-per-line rules are disabled to avoid conflicts with generated code
|
|
181
|
-
- Run `bunx --bun pickier . --fix` after code generation to clean up
|
|
182
|
-
- `buddy lint` exits through the `lint:*` wildcard handler if an invalid sub-command is used
|
|
183
|
-
- `buddy format` defaults to `--write` mode (writes changes) unless `--check` is specified
|
|
184
|
-
- The lint package (`@stacksjs/lint`) itself has no source files to build -- it is a configuration-only package
|
|
48
|
+
- Actions: `storage/framework/core/actions/src/lint/lint.ts`
|
|
49
|
+
- CLI: `storage/framework/core/buddy/src/commands/lint.ts`
|
|
50
|
+
- Discovery: `storage/framework/core/actions/src/lint/files.ts`
|
|
51
|
+
- Formatter/linter: the first-party Pickier repository
|
|
@@ -11,7 +11,7 @@ Browser runtime bindings are documented separately in `stacks-auto-imports`.
|
|
|
11
11
|
| Package | Task guidance | Source entry | Retained tests |
|
|
12
12
|
|---|---|---|---|
|
|
13
13
|
| `@stacksjs/action-runner` | [`stacks-actions`](../stacks-actions/SKILL.md) | [entrypoint](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/action-runner/src/index.ts) | 1 |
|
|
14
|
-
| `@stacksjs/actions` | [`stacks-actions`](../stacks-actions/SKILL.md) | [entrypoint](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/actions/src/index.ts) |
|
|
14
|
+
| `@stacksjs/actions` | [`stacks-actions`](../stacks-actions/SKILL.md) | [entrypoint](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/actions/src/index.ts) | 65 |
|
|
15
15
|
| `@stacksjs/ai` | [`stacks-ai`](../stacks-ai/SKILL.md) | [entrypoint](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/ai/src/index.ts) | 15 |
|
|
16
16
|
| `@stacksjs/alias` | [`stacks-alias`](../stacks-alias/SKILL.md) | [entrypoint](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/alias/src/index.ts) | 1 |
|
|
17
17
|
| `@stacksjs/analytics` | [`stacks-analytics`](../stacks-analytics/SKILL.md) | [entrypoint](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/analytics/src/index.ts) | 6 |
|
|
@@ -27,7 +27,7 @@ Browser runtime bindings are documented separately in `stacks-auto-imports`.
|
|
|
27
27
|
| `@stacksjs/calendar-api` | [`stacks-calendar`](../stacks-calendar/SKILL.md) | [entrypoint](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/calendar-api/src/index.ts) | 2 |
|
|
28
28
|
| `@stacksjs/charts` | [`stacks-charts`](../stacks-charts/SKILL.md) | [entrypoint](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/charts/src/index.ts) | 3 |
|
|
29
29
|
| `@stacksjs/chat` | [`stacks-chat`](../stacks-chat/SKILL.md) | [entrypoint](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/chat/src/index.ts) | 5 |
|
|
30
|
-
| `@stacksjs/cli` | [`stacks-cli`](../stacks-cli/SKILL.md) | [entrypoint](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/cli/src/index.ts) |
|
|
30
|
+
| `@stacksjs/cli` | [`stacks-cli`](../stacks-cli/SKILL.md) | [entrypoint](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/cli/src/index.ts) | 10 |
|
|
31
31
|
| `@stacksjs/cloud` | [`stacks-cloud`](../stacks-cloud/SKILL.md) | [entrypoint](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/cloud/src/index.ts) | 10 |
|
|
32
32
|
| `@stacksjs/cms` | [`stacks-cms`](../stacks-cms/SKILL.md) | [entrypoint](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/cms/src/index.ts) | 5 |
|
|
33
33
|
| `@stacksjs/collections` | [`stacks-collections`](../stacks-collections/SKILL.md) | [entrypoint](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/collections/src/index.ts) | 2 |
|
|
@@ -72,7 +72,7 @@ Browser runtime bindings are documented separately in `stacks-auto-imports`.
|
|
|
72
72
|
| `@stacksjs/push` | [`stacks-push`](../stacks-push/SKILL.md) | [entrypoint](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/push/src/index.ts) | 5 |
|
|
73
73
|
| `@stacksjs/query-builder` | [`stacks-query-builder`](../stacks-query-builder/SKILL.md) | [entrypoint](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/query-builder/src/index.ts) | 6 |
|
|
74
74
|
| `@stacksjs/queue` | [`stacks-queue`](../stacks-queue/SKILL.md) | [entrypoint](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/queue/src/index.ts) | 48 |
|
|
75
|
-
| `@stacksjs/realtime` | [`stacks-realtime`](../stacks-realtime/SKILL.md) | [entrypoint](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/realtime/src/index.ts) |
|
|
75
|
+
| `@stacksjs/realtime` | [`stacks-realtime`](../stacks-realtime/SKILL.md) | [entrypoint](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/realtime/src/index.ts) | 11 |
|
|
76
76
|
| `@stacksjs/registry` | [`stacks-registry`](../stacks-registry/SKILL.md) | [entrypoint](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/registry/src/index.ts) | 1 |
|
|
77
77
|
| `@stacksjs/repl` | [`stacks-repl`](../stacks-repl/SKILL.md) | [entrypoint](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/repl/src/index.ts) | 2 |
|
|
78
78
|
| `@stacksjs/router` | [`stacks-router`](../stacks-router/SKILL.md) | [entrypoint](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/router/src/index.ts) | 86 |
|
|
@@ -119,7 +119,7 @@ Declared runtime exports: `BlogAdminError`, `DEFAULT_STX_LINT_CONFIG`, `blogSlug
|
|
|
119
119
|
|
|
120
120
|
Local source modules: [src/action.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/actions/src/action.ts), [src/add.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/actions/src/add.ts), [src/blog-admin.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/actions/src/blog-admin.ts), [src/commit.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/actions/src/commit.ts), [src/dev/index.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/actions/src/dev/index.ts), [src/discover-packages.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/actions/src/discover-packages.ts), [src/generate/index.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/actions/src/generate/index.ts), [src/helpers/index.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/actions/src/helpers/index.ts), [src/library/index.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/actions/src/library/index.ts), [src/lint/lint.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/actions/src/lint/lint.ts), [src/lint/stx-gate.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/actions/src/lint/stx-gate.ts), [src/make-command.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/actions/src/make-command.ts), [src/make-job.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/actions/src/make-job.ts), [src/make-policy.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/actions/src/make-policy.ts), [src/make-resource.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/actions/src/make-resource.ts), [src/make.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/actions/src/make.ts), [src/scaffold-crud.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/actions/src/scaffold-crud.ts), [src/setup/index.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/actions/src/setup/index.ts), [src/stacks.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/actions/src/stacks.ts), [src/upgrade/package-project.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/actions/src/upgrade/package-project.ts), [src/upgrade/route-actions.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/actions/src/upgrade/route-actions.ts).
|
|
121
121
|
|
|
122
|
-
Evidence directory: [
|
|
122
|
+
Evidence directory: [65 retained tests](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/actions/tests). These files are evidence pointers, not a claim that all tests were run for this catalog.
|
|
123
123
|
|
|
124
124
|
### @stacksjs/ai
|
|
125
125
|
|
|
@@ -259,7 +259,7 @@ Evidence directory: [3 retained tests](https://github.com/stacksjs/stacks/blob/m
|
|
|
259
259
|
|
|
260
260
|
Guidance: [`stacks-chat`](../stacks-chat/SKILL.md). Source: [storage/framework/core/chat/src/index.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/chat/src/index.ts).
|
|
261
261
|
|
|
262
|
-
Declared runtime exports: `MessagingError`, `configureDiscord`, `configureSlack`, `configureTeams`, `createMessenger`, `discord`, `inbox`, `send`, `sendToDiscord`, `sendToSlack`, `sendToTeams`, `slack`, `teams`.
|
|
262
|
+
Declared runtime exports: `MessagingError`, `configureDiscord`, `configureSlack`, `configureTeams`, `createMessenger`, `discord`, `inbox`, `messagingChannel`, `send`, `sendToDiscord`, `sendToSlack`, `sendToTeams`, `slack`, `teams`.
|
|
263
263
|
|
|
264
264
|
Local source modules: [src/drivers/discord.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/chat/src/drivers/discord.ts), [src/drivers/slack.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/chat/src/drivers/slack.ts), [src/drivers/teams.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/chat/src/drivers/teams.ts), [src/inbox/index.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/chat/src/inbox/index.ts).
|
|
265
265
|
|
|
@@ -271,9 +271,9 @@ Guidance: [`stacks-cli`](../stacks-cli/SKILL.md). Source: [storage/framework/cor
|
|
|
271
271
|
|
|
272
272
|
Read the entrypoint and package export map for re-exported or type-only surfaces.
|
|
273
273
|
|
|
274
|
-
Local source modules: [src/actions/index.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/cli/src/actions/index.ts), [src/cli.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/cli/src/cli.ts), [src/commands.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/cli/src/commands.ts), [src/exec.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/cli/src/exec.ts), [src/helpers.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/cli/src/helpers.ts), [src/parse.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/cli/src/parse.ts), [src/prompts.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/cli/src/prompts.ts), [src/run.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/cli/src/run.ts), [src/signals.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/cli/src/signals.ts), [src/spinner.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/cli/src/spinner.ts), [src/terminal.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/cli/src/terminal.ts), [src/utils.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/cli/src/utils.ts).
|
|
274
|
+
Local source modules: [src/actions/index.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/cli/src/actions/index.ts), [src/cli.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/cli/src/cli.ts), [src/commands.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/cli/src/commands.ts), [src/exec.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/cli/src/exec.ts), [src/helpers.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/cli/src/helpers.ts), [src/output.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/cli/src/output.ts), [src/parse.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/cli/src/parse.ts), [src/prompts.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/cli/src/prompts.ts), [src/run.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/cli/src/run.ts), [src/signals.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/cli/src/signals.ts), [src/spinner.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/cli/src/spinner.ts), [src/terminal.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/cli/src/terminal.ts), [src/utils.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/cli/src/utils.ts).
|
|
275
275
|
|
|
276
|
-
Evidence directory: [
|
|
276
|
+
Evidence directory: [10 retained tests](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/cli/tests). These files are evidence pointers, not a claim that all tests were run for this catalog.
|
|
277
277
|
|
|
278
278
|
### @stacksjs/cloud
|
|
279
279
|
|
|
@@ -691,11 +691,11 @@ Evidence directory: [48 retained tests](https://github.com/stacksjs/stacks/blob/
|
|
|
691
691
|
|
|
692
692
|
Guidance: [`stacks-realtime`](../stacks-realtime/SKILL.md). Source: [storage/framework/core/realtime/src/index.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/realtime/src/index.ts).
|
|
693
693
|
|
|
694
|
-
Declared runtime exports: `LegacyBroadcast`, `StacksChannel`, `channel`, `createChannel`, `createServer`, `debugSnapshot`, `dispatchBroadcast`, `emit`, `emitToUser`, `emitToUsers`, `getReplayBuffer`, `getServer`, `getWsAuthenticator`, `pruneExpired`, `recordBroadcast`, `replaySince`, `runBroadcast`, `setReplayBuffer`, `setServer`, `setWsAuthenticator`, `stopServer`, `storeWebSocketEvent`.
|
|
694
|
+
Declared runtime exports: `LegacyBroadcast`, `StacksChannel`, `channel`, `createBroadcastHub`, `createBroadcastResponse`, `createChannel`, `createServer`, `debugSnapshot`, `dispatchBroadcast`, `emit`, `emitToUser`, `emitToUsers`, `getReplayBuffer`, `getServer`, `getWsAuthenticator`, `pruneExpired`, `recordBroadcast`, `replaySince`, `runBroadcast`, `setReplayBuffer`, `setServer`, `setWsAuthenticator`, `stopServer`, `storeWebSocketEvent`.
|
|
695
695
|
|
|
696
|
-
Local source modules: [src/broadcast.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/realtime/src/broadcast.ts), [src/channel.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/realtime/src/channel.ts), [src/emit.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/realtime/src/emit.ts), [src/replay-buffer.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/realtime/src/replay-buffer.ts), [src/server-instance.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/realtime/src/server-instance.ts), [src/ws.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/realtime/src/ws.ts).
|
|
696
|
+
Local source modules: [src/broadcast.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/realtime/src/broadcast.ts), [src/channel.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/realtime/src/channel.ts), [src/emit.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/realtime/src/emit.ts), [src/replay-buffer.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/realtime/src/replay-buffer.ts), [src/server-instance.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/realtime/src/server-instance.ts), [src/stream.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/realtime/src/stream.ts), [src/ws.ts](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/realtime/src/ws.ts).
|
|
697
697
|
|
|
698
|
-
Evidence directory: [
|
|
698
|
+
Evidence directory: [11 retained tests](https://github.com/stacksjs/stacks/blob/main/storage/framework/core/realtime/tests). These files are evidence pointers, not a claim that all tests were run for this catalog.
|
|
699
699
|
|
|
700
700
|
### @stacksjs/registry
|
|
701
701
|
|
|
@@ -375,3 +375,21 @@ private/presence channel authorization are separate checks. Replay is in-memory
|
|
|
375
375
|
and per process, not durable recovery or a cluster-wide sequence.
|
|
376
376
|
Retained tests: `core/realtime/tests/ws-auth.test.ts`,
|
|
377
377
|
`websocket-options.test.ts`, and replay/exclusion tests in that directory.
|
|
378
|
+
|
|
379
|
+
## Authenticated HTTP broadcast transport
|
|
380
|
+
|
|
381
|
+
`createBroadcastHub()` initializes the same ts-broadcasting engine without opening
|
|
382
|
+
an extra WebSocket listener. It reuses an existing server. This is an explicit
|
|
383
|
+
single-process HTTP transport; it does not initialize Redis or a cluster.
|
|
384
|
+
`emit()`, model broadcasts and private chat invalidations all reach its hooks.
|
|
385
|
+
|
|
386
|
+
`createBroadcastResponse({ channels, authorize, signal })` returns an SSE Response.
|
|
387
|
+
Select channel names on the server. Authorization is mandatory and runs before
|
|
388
|
+
subscription, before each event, and at every heartbeat. Pass the request's abort
|
|
389
|
+
signal. Cancellation, failed authorization and slow consumers remove the hook.
|
|
390
|
+
Streams bound both queued events and pending authorization work (64 by default).
|
|
391
|
+
|
|
392
|
+
STX's `useBroadcastStream({ request, endpoint, onMessage, onConnected })` makes
|
|
393
|
+
fresh authenticated requests using the application's injected transport, reconnects
|
|
394
|
+
with backoff, and cancels on `close()`. Re-read durable state in `onConnected`;
|
|
395
|
+
this stream does not promise durable replay. Credentials stay in HTTP headers.
|
package/ide/vscode/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"publisher": "Stacks",
|
|
3
3
|
"name": "vscode-stacks",
|
|
4
4
|
"displayName": "Stacks",
|
|
5
|
-
"version": "0.75.
|
|
5
|
+
"version": "0.75.123",
|
|
6
6
|
"description": "Stacks, built into VS Code: stx templates, pickier linting and formatting, encrypted env files, the dev server preview and every buddy command. No other extensions required.",
|
|
7
7
|
"license": "MIT",
|
|
8
8
|
"funding": "https://github.com/sponsors/chrisbbreuer",
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "@stacksjs/defaults",
|
|
3
3
|
"type": "module",
|
|
4
4
|
"sideEffects": false,
|
|
5
|
-
"version": "0.75.
|
|
5
|
+
"version": "0.75.123",
|
|
6
6
|
"repository": {
|
|
7
7
|
"type": "git",
|
|
8
8
|
"url": "git+https://github.com/stacksjs/stacks.git",
|
|
@@ -55,7 +55,7 @@
|
|
|
55
55
|
"dependencies": {
|
|
56
56
|
"@iconify-json/f7": "^1.2.2",
|
|
57
57
|
"@iconify-json/hugeicons": "^1.2.35",
|
|
58
|
-
"@stacksjs/mobile": "^0.75.
|
|
58
|
+
"@stacksjs/mobile": "^0.75.123",
|
|
59
59
|
"@stacksjs/sanitizer": "^0.2.422",
|
|
60
60
|
"@xterm/addon-fit": "^0.11.0",
|
|
61
61
|
"@xterm/xterm": "^6.0.0",
|
|
@@ -308,7 +308,8 @@ export async function loadAutoImports() {
|
|
|
308
308
|
Reflect.set(globalThis, name, value)
|
|
309
309
|
}
|
|
310
310
|
}
|
|
311
|
-
}
|
|
311
|
+
}
|
|
312
|
+
catch {
|
|
312
313
|
// Package might not exist or not be built yet
|
|
313
314
|
}
|
|
314
315
|
}
|
|
@@ -328,7 +329,8 @@ export async function loadAutoImports() {
|
|
|
328
329
|
Reflect.set(globalThis, name, value)
|
|
329
330
|
}
|
|
330
331
|
}
|
|
331
|
-
}
|
|
332
|
+
}
|
|
333
|
+
catch {
|
|
332
334
|
// Some files may have client-side dependencies, skip them
|
|
333
335
|
}
|
|
334
336
|
}
|
|
@@ -361,11 +363,13 @@ export async function loadAutoImports() {
|
|
|
361
363
|
Reflect.set(globalThis, modelName, module.default)
|
|
362
364
|
loadedModels.add(modelName)
|
|
363
365
|
}
|
|
364
|
-
}
|
|
366
|
+
}
|
|
367
|
+
catch {
|
|
365
368
|
// Model may have unresolved dependencies during bootstrap
|
|
366
369
|
}
|
|
367
370
|
}
|
|
368
|
-
}
|
|
371
|
+
}
|
|
372
|
+
catch {
|
|
369
373
|
// Directory may not exist
|
|
370
374
|
}
|
|
371
375
|
}
|
|
@@ -392,11 +396,13 @@ export async function loadAutoImports() {
|
|
|
392
396
|
Reflect.set(globalThis, jobName, module.default)
|
|
393
397
|
loadedJobs.add(jobName)
|
|
394
398
|
}
|
|
395
|
-
}
|
|
399
|
+
}
|
|
400
|
+
catch {
|
|
396
401
|
// Job may have unresolved dependencies during bootstrap
|
|
397
402
|
}
|
|
398
403
|
}
|
|
399
|
-
}
|
|
404
|
+
}
|
|
405
|
+
catch {
|
|
400
406
|
// Directory may not exist
|
|
401
407
|
}
|
|
402
408
|
|
|
@@ -427,11 +433,13 @@ export async function loadAutoImports() {
|
|
|
427
433
|
Reflect.set(globalThis, controllerName, module.default)
|
|
428
434
|
loadedControllers.add(controllerName)
|
|
429
435
|
}
|
|
430
|
-
}
|
|
436
|
+
}
|
|
437
|
+
catch {
|
|
431
438
|
// Controller may have unresolved dependencies during bootstrap
|
|
432
439
|
}
|
|
433
440
|
}
|
|
434
|
-
}
|
|
441
|
+
}
|
|
442
|
+
catch {
|
|
435
443
|
// Directory may not exist
|
|
436
444
|
}
|
|
437
445
|
}
|