@proletariat/cli 0.3.89 → 0.3.91
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/dist/commands/agent/auth.js +2 -2
- package/dist/commands/agent/auth.js.map +1 -1
- package/dist/commands/agent/shell.js +3 -3
- package/dist/commands/agent/shell.js.map +1 -1
- package/dist/commands/branch/create.js +2 -2
- package/dist/commands/branch/create.js.map +1 -1
- package/dist/commands/claude/index.js +3 -3
- package/dist/commands/claude/index.js.map +1 -1
- package/dist/commands/claude/open.js +2 -2
- package/dist/commands/claude/open.js.map +1 -1
- package/dist/commands/config/index.js +65 -2
- package/dist/commands/config/index.js.map +1 -1
- package/dist/commands/db/repair.js +4 -4
- package/dist/commands/db/repair.js.map +1 -1
- package/dist/commands/docker/clean.js +2 -2
- package/dist/commands/docker/clean.js.map +1 -1
- package/dist/commands/docker/index.js +2 -2
- package/dist/commands/docker/index.js.map +1 -1
- package/dist/commands/docker/list.js +2 -2
- package/dist/commands/docker/list.js.map +1 -1
- package/dist/commands/docker/logs.js +2 -2
- package/dist/commands/docker/logs.js.map +1 -1
- package/dist/commands/docker/restart.js +2 -2
- package/dist/commands/docker/restart.js.map +1 -1
- package/dist/commands/docker/shell.js +2 -2
- package/dist/commands/docker/shell.js.map +1 -1
- package/dist/commands/docker/start.js +2 -2
- package/dist/commands/docker/start.js.map +1 -1
- package/dist/commands/docker/stop.js +2 -2
- package/dist/commands/docker/stop.js.map +1 -1
- package/dist/commands/docker/sync.js +2 -2
- package/dist/commands/docker/sync.js.map +1 -1
- package/dist/commands/execution/config.js.map +1 -1
- package/dist/commands/execution/list.js +2 -2
- package/dist/commands/execution/list.js.map +1 -1
- package/dist/commands/execution/logs.js +2 -2
- package/dist/commands/execution/logs.js.map +1 -1
- package/dist/commands/execution/stop.js +2 -2
- package/dist/commands/execution/stop.js.map +1 -1
- package/dist/commands/execution/view.js +2 -2
- package/dist/commands/execution/view.js.map +1 -1
- package/dist/commands/linear/connect.js.map +1 -1
- package/dist/commands/mcp-server.js +2 -2
- package/dist/commands/mcp-server.js.map +1 -1
- package/dist/commands/orchestrator/attach.js +2 -2
- package/dist/commands/orchestrator/attach.js.map +1 -1
- package/dist/commands/orchestrator/start.js +3 -3
- package/dist/commands/orchestrator/start.js.map +1 -1
- package/dist/commands/orchestrator/stop.js +2 -2
- package/dist/commands/orchestrator/stop.js.map +1 -1
- package/dist/commands/qa/index.js +3 -3
- package/dist/commands/qa/index.js.map +1 -1
- package/dist/commands/session/attach.js +3 -3
- package/dist/commands/session/attach.js.map +1 -1
- package/dist/commands/session/cleanup.js +2 -2
- package/dist/commands/session/cleanup.js.map +1 -1
- package/dist/commands/session/exec.js +2 -2
- package/dist/commands/session/exec.js.map +1 -1
- package/dist/commands/session/health.js +2 -2
- package/dist/commands/session/health.js.map +1 -1
- package/dist/commands/session/inspect.js +2 -2
- package/dist/commands/session/inspect.js.map +1 -1
- package/dist/commands/session/list.js +2 -2
- package/dist/commands/session/list.js.map +1 -1
- package/dist/commands/session/peek.js +3 -3
- package/dist/commands/session/peek.js.map +1 -1
- package/dist/commands/session/poke.js +2 -2
- package/dist/commands/session/poke.js.map +1 -1
- package/dist/commands/session/prune.js +2 -2
- package/dist/commands/session/prune.js.map +1 -1
- package/dist/commands/session/report.js +2 -2
- package/dist/commands/session/report.js.map +1 -1
- package/dist/commands/session/restart.js +2 -2
- package/dist/commands/session/restart.js.map +1 -1
- package/dist/commands/shortcut/connect.js.map +1 -1
- package/dist/commands/trello/configure.js.map +1 -1
- package/dist/commands/work/complete.js +2 -2
- package/dist/commands/work/complete.js.map +1 -1
- package/dist/commands/work/hooks/add.js +2 -2
- package/dist/commands/work/hooks/add.js.map +1 -1
- package/dist/commands/work/hooks/list.js +2 -2
- package/dist/commands/work/hooks/list.js.map +1 -1
- package/dist/commands/work/hooks/remove.js +2 -2
- package/dist/commands/work/hooks/remove.js.map +1 -1
- package/dist/commands/work/hooks/toggle.js +2 -2
- package/dist/commands/work/hooks/toggle.js.map +1 -1
- package/dist/commands/work/index.js +4 -0
- package/dist/commands/work/index.js.map +1 -1
- package/dist/commands/work/ready.js +2 -2
- package/dist/commands/work/ready.js.map +1 -1
- package/dist/commands/work/ship.d.ts +43 -0
- package/dist/commands/work/ship.js +587 -0
- package/dist/commands/work/ship.js.map +1 -0
- package/dist/commands/work/spawn.js +2 -2
- package/dist/commands/work/spawn.js.map +1 -1
- package/dist/commands/work/start.d.ts +1 -0
- package/dist/commands/work/start.js +36 -3
- package/dist/commands/work/start.js.map +1 -1
- package/dist/commands/work/stop.js +2 -2
- package/dist/commands/work/stop.js.map +1 -1
- package/dist/commands/work/watch.js +2 -2
- package/dist/commands/work/watch.js.map +1 -1
- package/dist/hooks/init.js +11 -15
- package/dist/hooks/init.js.map +1 -1
- package/dist/lib/agents/commands.js +18 -8
- package/dist/lib/agents/commands.js.map +1 -1
- package/dist/lib/agents/index.js +6 -0
- package/dist/lib/agents/index.js.map +1 -1
- package/dist/lib/asana/config.d.ts +8 -8
- package/dist/lib/asana/config.js.map +1 -1
- package/dist/lib/asana/mapper.d.ts +2 -2
- package/dist/lib/asana/mapper.js.map +1 -1
- package/dist/lib/container.d.ts +40 -0
- package/dist/lib/container.js +74 -0
- package/dist/lib/container.js.map +1 -0
- package/dist/lib/database/agents.js +4 -2
- package/dist/lib/database/agents.js.map +1 -1
- package/dist/lib/database/db-safety.d.ts +4 -4
- package/dist/lib/database/db-safety.js +6 -6
- package/dist/lib/database/db-safety.js.map +1 -1
- package/dist/lib/database/driver.d.ts +20 -21
- package/dist/lib/database/driver.js +24 -22
- package/dist/lib/database/driver.js.map +1 -1
- package/dist/lib/database/drizzle.d.ts +9 -9
- package/dist/lib/database/drizzle.js +9 -17
- package/dist/lib/database/drizzle.js.map +1 -1
- package/dist/lib/database/migrations/0001_baseline.js.map +1 -1
- package/dist/lib/database/migrations/0002_work_hooks.js.map +1 -1
- package/dist/lib/database/migrations/0003_actions_redesign.js.map +1 -1
- package/dist/lib/database/migrations/0004_workflow_rules.js.map +1 -1
- package/dist/lib/database/migrations/0005_provider_status_mapping.js.map +1 -1
- package/dist/lib/database/migrations/0006_drop_theme_names_used.js.map +1 -1
- package/dist/lib/database/migrations/0007_add_worktree_columns.js.map +1 -1
- package/dist/lib/database/migrations/0008_add_agent_mount_mode.js.map +1 -1
- package/dist/lib/database/migrations/0009_create_media_items.js.map +1 -1
- package/dist/lib/database/migrations/0010_add_ticket_position.js.map +1 -1
- package/dist/lib/database/migrations/0011_add_review_gate.js.map +1 -1
- package/dist/lib/database/migrations/0012_add_action_network_allowlist.js.map +1 -1
- package/dist/lib/database/migrator.d.ts +3 -3
- package/dist/lib/database/migrator.js.map +1 -1
- package/dist/lib/database/pmo-bootstrap.d.ts +2 -2
- package/dist/lib/database/pmo-bootstrap.js +4 -26
- package/dist/lib/database/pmo-bootstrap.js.map +1 -1
- package/dist/lib/database/repositories.js +1 -1
- package/dist/lib/database/repositories.js.map +1 -1
- package/dist/lib/database/settings-store.d.ts +3 -3
- package/dist/lib/database/settings-store.js +2 -2
- package/dist/lib/database/settings-store.js.map +1 -1
- package/dist/lib/database/sqlite.d.ts +155 -0
- package/dist/lib/database/sqlite.js +358 -0
- package/dist/lib/database/sqlite.js.map +1 -0
- package/dist/lib/database/themes.js +3 -3
- package/dist/lib/database/themes.js.map +1 -1
- package/dist/lib/database/workspace.d.ts +6 -4
- package/dist/lib/database/workspace.js +38 -46
- package/dist/lib/database/workspace.js.map +1 -1
- package/dist/lib/execution/config.d.ts +33 -33
- package/dist/lib/execution/config.js.map +1 -1
- package/dist/lib/execution/context.d.ts +20 -0
- package/dist/lib/execution/context.js +88 -0
- package/dist/lib/execution/context.js.map +1 -1
- package/dist/lib/execution/devcontainer.d.ts +9 -1
- package/dist/lib/execution/devcontainer.js +62 -40
- package/dist/lib/execution/devcontainer.js.map +1 -1
- package/dist/lib/execution/runners/devcontainer.js +11 -0
- package/dist/lib/execution/runners/devcontainer.js.map +1 -1
- package/dist/lib/execution/runners/docker-management.js +6 -1
- package/dist/lib/execution/runners/docker-management.js.map +1 -1
- package/dist/lib/execution/runners/orchestrator.js +6 -3
- package/dist/lib/execution/runners/orchestrator.js.map +1 -1
- package/dist/lib/execution/runners/prompt-builder.js +31 -0
- package/dist/lib/execution/runners/prompt-builder.js.map +1 -1
- package/dist/lib/execution/runners/shared.d.ts +2 -2
- package/dist/lib/execution/runners/shared.js +2 -2
- package/dist/lib/execution/runners/shared.js.map +1 -1
- package/dist/lib/execution/spawner.d.ts +3 -3
- package/dist/lib/execution/spawner.js +11 -0
- package/dist/lib/execution/spawner.js.map +1 -1
- package/dist/lib/execution/storage.d.ts +3 -3
- package/dist/lib/execution/storage.js.map +1 -1
- package/dist/lib/execution/types.d.ts +23 -0
- package/dist/lib/execution/types.js.map +1 -1
- package/dist/lib/external-issues/mapping-store.d.ts +2 -2
- package/dist/lib/external-issues/mapping-store.js.map +1 -1
- package/dist/lib/external-issues/outbound-sync.d.ts +3 -3
- package/dist/lib/external-issues/outbound-sync.js.map +1 -1
- package/dist/lib/init/index.js +6 -8
- package/dist/lib/init/index.js.map +1 -1
- package/dist/lib/jira/config.d.ts +5 -5
- package/dist/lib/jira/config.js.map +1 -1
- package/dist/lib/linear/config.d.ts +8 -8
- package/dist/lib/linear/config.js.map +1 -1
- package/dist/lib/linear/mapper.d.ts +2 -2
- package/dist/lib/linear/mapper.js.map +1 -1
- package/dist/lib/mcp/types.d.ts +2 -2
- package/dist/lib/monday/config.d.ts +9 -9
- package/dist/lib/monday/config.js.map +1 -1
- package/dist/lib/monday/mapper.d.ts +2 -2
- package/dist/lib/monday/mapper.js.map +1 -1
- package/dist/lib/pmo/diet.d.ts +3 -3
- package/dist/lib/pmo/diet.js.map +1 -1
- package/dist/lib/pmo/find-pmo.js +5 -8
- package/dist/lib/pmo/find-pmo.js.map +1 -1
- package/dist/lib/pmo/index.js +9 -7
- package/dist/lib/pmo/index.js.map +1 -1
- package/dist/lib/pmo/storage/base.d.ts +15 -15
- package/dist/lib/pmo/storage/base.js.map +1 -1
- package/dist/lib/pmo/storage/dependencies.js.map +1 -1
- package/dist/lib/pmo/storage/helpers.js.map +1 -1
- package/dist/lib/pmo/storage/index.d.ts +8 -2
- package/dist/lib/pmo/storage/index.js +10 -2
- package/dist/lib/pmo/storage/index.js.map +1 -1
- package/dist/lib/pmo/storage/projects.js.map +1 -1
- package/dist/lib/pmo/storage/roadmaps.js +4 -4
- package/dist/lib/pmo/storage/roadmaps.js.map +1 -1
- package/dist/lib/pmo/storage/specs.js.map +1 -1
- package/dist/lib/pmo/storage/statuses.js +1 -1
- package/dist/lib/pmo/storage/statuses.js.map +1 -1
- package/dist/lib/pmo/storage/tickets.js +1 -1
- package/dist/lib/pmo/storage/tickets.js.map +1 -1
- package/dist/lib/pmo/storage/types.d.ts +2 -2
- package/dist/lib/pmo/storage/views.js.map +1 -1
- package/dist/lib/pmo/sync-manager.js +12 -0
- package/dist/lib/pmo/sync-manager.js.map +1 -1
- package/dist/lib/providers/index.d.ts +2 -0
- package/dist/lib/providers/index.js +2 -0
- package/dist/lib/providers/index.js.map +1 -1
- package/dist/lib/providers/linear-provider.d.ts +2 -2
- package/dist/lib/providers/linear-provider.js.map +1 -1
- package/dist/lib/providers/resolver.d.ts +3 -3
- package/dist/lib/providers/resolver.js.map +1 -1
- package/dist/lib/providers/state-intents.d.ts +44 -0
- package/dist/lib/providers/state-intents.js +101 -0
- package/dist/lib/providers/state-intents.js.map +1 -0
- package/dist/lib/providers/state-resolution.d.ts +137 -0
- package/dist/lib/providers/state-resolution.js +302 -0
- package/dist/lib/providers/state-resolution.js.map +1 -0
- package/dist/lib/providers/status-mapping.d.ts +2 -2
- package/dist/lib/providers/status-mapping.js.map +1 -1
- package/dist/lib/providers/trigger-config.d.ts +4 -4
- package/dist/lib/providers/trigger-config.js.map +1 -1
- package/dist/lib/providers/types.d.ts +2 -1
- package/dist/lib/registry/index.js +4 -11
- package/dist/lib/registry/index.js.map +1 -1
- package/dist/lib/repos/index.js +3 -0
- package/dist/lib/repos/index.js.map +1 -1
- package/dist/lib/shortcut/config.d.ts +8 -8
- package/dist/lib/shortcut/config.js.map +1 -1
- package/dist/lib/trello/config.d.ts +10 -10
- package/dist/lib/trello/config.js.map +1 -1
- package/dist/lib/trello/mapper.d.ts +2 -2
- package/dist/lib/trello/mapper.js.map +1 -1
- package/dist/lib/work-lifecycle/action-chaining.d.ts +3 -3
- package/dist/lib/work-lifecycle/action-chaining.js.map +1 -1
- package/dist/lib/work-lifecycle/hooks/manager.d.ts +3 -3
- package/dist/lib/work-lifecycle/hooks/manager.js.map +1 -1
- package/dist/lib/work-lifecycle/hooks/storage.d.ts +3 -3
- package/dist/lib/work-lifecycle/hooks/storage.js.map +1 -1
- package/dist/lib/work-lifecycle/post-execution.d.ts +2 -2
- package/dist/lib/work-lifecycle/post-execution.js +47 -28
- package/dist/lib/work-lifecycle/post-execution.js.map +1 -1
- package/dist/lib/work-lifecycle/rule-evaluator.d.ts +3 -3
- package/dist/lib/work-lifecycle/rule-evaluator.js.map +1 -1
- package/dist/lib/work-source/config.d.ts +6 -6
- package/dist/lib/work-source/config.js.map +1 -1
- package/dist/lib/work-source/provider-sources.d.ts +12 -12
- package/dist/lib/work-source/provider-sources.js.map +1 -1
- package/dist/lib/workspace-config.d.ts +19 -0
- package/dist/lib/workspace-config.js +32 -0
- package/dist/lib/workspace-config.js.map +1 -1
- package/oclif.manifest.json +776 -661
- package/package.json +3 -4
- package/bin/validate-better-sqlite3.cjs +0 -129
- package/dist/lib/database/native-validation.d.ts +0 -40
- package/dist/lib/database/native-validation.js +0 -123
- package/dist/lib/database/native-validation.js.map +0 -1
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@proletariat/cli",
|
|
3
3
|
"description": "Agent orchestration platform for AI labor - Spin up workers on demand for multi-agent development",
|
|
4
|
-
"version": "0.3.
|
|
4
|
+
"version": "0.3.91",
|
|
5
5
|
"author": "Chris McDermut",
|
|
6
6
|
"mcpName": "io.github.chrismcdermut/proletariat-cli",
|
|
7
7
|
"publishConfig": {
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
"@oclif/plugin-help": "^6",
|
|
21
21
|
"@oclif/plugin-plugins": "^5",
|
|
22
22
|
"@sentry/node": "^10.42.0",
|
|
23
|
-
"
|
|
23
|
+
"sql.js": "^1.12.0",
|
|
24
24
|
"chalk": "^4.1.2",
|
|
25
25
|
"chokidar": "^5.0.0",
|
|
26
26
|
"drizzle-orm": "^0.37.0",
|
|
@@ -38,11 +38,11 @@
|
|
|
38
38
|
"@eslint/compat": "^2.0.0",
|
|
39
39
|
"@oclif/prettier-config": "^0.2.1",
|
|
40
40
|
"@oclif/test": "^4",
|
|
41
|
-
"@types/better-sqlite3": "^7.6.13",
|
|
42
41
|
"@types/chai": "^4",
|
|
43
42
|
"@types/ink-spinner": "^3.0.5",
|
|
44
43
|
"@types/inquirer": "^8.2.6",
|
|
45
44
|
"@types/jest": "^30.0.0",
|
|
45
|
+
"@types/sql.js": "^1.4.10",
|
|
46
46
|
"@types/js-yaml": "^4.0.9",
|
|
47
47
|
"@types/mocha": "^10",
|
|
48
48
|
"@types/node": "^20",
|
|
@@ -112,7 +112,6 @@
|
|
|
112
112
|
"directory": "apps/cli"
|
|
113
113
|
},
|
|
114
114
|
"scripts": {
|
|
115
|
-
"postinstall": "(npm rebuild better-sqlite3 || npm rebuild better-sqlite3 || true) && node ./bin/validate-better-sqlite3.cjs",
|
|
116
115
|
"build": "shx rm -rf dist && tsc -b",
|
|
117
116
|
"rebuild": "pnpm install && pnpm build",
|
|
118
117
|
"clean": "shx rm -rf dist",
|
|
@@ -1,129 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
|
|
3
|
-
const SUPPORTED_NODE_MAJORS = [20, 22, 23, 24]
|
|
4
|
-
|
|
5
|
-
function parseNodeMajor(version) {
|
|
6
|
-
const match = /^v?(\d+)/.exec(version)
|
|
7
|
-
return match ? Number.parseInt(match[1], 10) : null
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
function isBunRuntime() {
|
|
11
|
-
return typeof process.versions.bun === 'string'
|
|
12
|
-
|| typeof globalThis.Bun !== 'undefined'
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
function runtimeInfo() {
|
|
16
|
-
return {
|
|
17
|
-
nodeVersion: process.version,
|
|
18
|
-
nodeMajor: parseNodeMajor(process.version),
|
|
19
|
-
abi: process.versions.modules,
|
|
20
|
-
platform: process.platform,
|
|
21
|
-
arch: process.arch,
|
|
22
|
-
isBun: isBunRuntime(),
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
function isBunNodeGypError(error) {
|
|
27
|
-
if (!(error instanceof Error)) return false
|
|
28
|
-
const msg = error.message.toLowerCase()
|
|
29
|
-
return msg.includes('isexe') || msg.includes('which.js') || msg.includes('node-gyp')
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
function buildMessage(error, context) {
|
|
33
|
-
const info = runtimeInfo()
|
|
34
|
-
const runtimeLabel = info.isBun ? 'bun' : 'node'
|
|
35
|
-
const nodeMajorHint = info.nodeMajor === null || SUPPORTED_NODE_MAJORS.includes(info.nodeMajor)
|
|
36
|
-
? ''
|
|
37
|
-
: `\n- Unsupported Node major for this CLI: ${info.nodeMajor} (supported: ${SUPPORTED_NODE_MAJORS.join(', ')})`
|
|
38
|
-
const reason = error instanceof Error ? error.message : String(error)
|
|
39
|
-
|
|
40
|
-
const lines = [
|
|
41
|
-
'',
|
|
42
|
-
'╔══════════════════════════════════════════════════════════════════╗',
|
|
43
|
-
'║ better-sqlite3 native module validation failed ║',
|
|
44
|
-
'╚══════════════════════════════════════════════════════════════════╝',
|
|
45
|
-
'',
|
|
46
|
-
`Context: ${context}`,
|
|
47
|
-
`Runtime: ${runtimeLabel} ${info.nodeVersion} (ABI ${info.abi}) on ${info.platform}-${info.arch}${nodeMajorHint}`,
|
|
48
|
-
`Error: ${reason}`,
|
|
49
|
-
'',
|
|
50
|
-
'Fix steps:',
|
|
51
|
-
'1. Rebuild native bindings: npm rebuild better-sqlite3',
|
|
52
|
-
'2. If globally installed, reinstall: pnpm install -g @proletariat/cli --force',
|
|
53
|
-
' (or: npm install -g @proletariat/cli --force)',
|
|
54
|
-
'3. Verify architecture: node -p "process.platform + \'-\' + process.arch"',
|
|
55
|
-
'',
|
|
56
|
-
'If the problem persists, ensure you have build tools installed:',
|
|
57
|
-
' macOS: xcode-select --install',
|
|
58
|
-
' Linux: sudo apt-get install build-essential python3',
|
|
59
|
-
]
|
|
60
|
-
|
|
61
|
-
if (info.isBun || isBunNodeGypError(error)) {
|
|
62
|
-
lines.push(
|
|
63
|
-
'',
|
|
64
|
-
'Bun users:',
|
|
65
|
-
' Bun\'s node-gyp compatibility is limited and may fail to compile',
|
|
66
|
-
' better-sqlite3. Recommended alternatives:',
|
|
67
|
-
' - Install with npm instead: npm install -g @proletariat/cli',
|
|
68
|
-
' - Install with Homebrew (macOS): brew install chrismcdermut/proletariat/prlt',
|
|
69
|
-
' - Use Node.js 22 (LTS) for best compatibility',
|
|
70
|
-
)
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
lines.push('')
|
|
74
|
-
return lines.join('\n')
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
function validate(context) {
|
|
78
|
-
try {
|
|
79
|
-
const Database = require('better-sqlite3')
|
|
80
|
-
const db = new Database(':memory:')
|
|
81
|
-
db.pragma('foreign_keys = ON')
|
|
82
|
-
db.close()
|
|
83
|
-
} catch (error) {
|
|
84
|
-
throw new Error(buildMessage(error, context))
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
try {
|
|
89
|
-
validate('postinstall')
|
|
90
|
-
} catch (error) {
|
|
91
|
-
const info = runtimeInfo()
|
|
92
|
-
const message = error instanceof Error ? error.message : String(error)
|
|
93
|
-
|
|
94
|
-
// In CI, the workflow has explicit "Verify better-sqlite3 native binding" steps
|
|
95
|
-
// that run after cache restore / rebuild-with-retry. Don't fail pnpm install here
|
|
96
|
-
// — the flaky native build is handled by the workflow's fallback rebuild step.
|
|
97
|
-
if (process.env.CI) {
|
|
98
|
-
console.warn(message)
|
|
99
|
-
console.warn('\n[warn] better-sqlite3 validation failed during postinstall (CI mode).')
|
|
100
|
-
console.warn('[warn] The workflow will restore the cached binding or rebuild with retry.\n')
|
|
101
|
-
process.exit(0)
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
// Under bun, native module build failures are expected — warn instead of
|
|
105
|
-
// hard-failing so the install can complete. The user will get a clear error
|
|
106
|
-
// at runtime with actionable fix steps.
|
|
107
|
-
if (info.isBun) {
|
|
108
|
-
console.warn(message)
|
|
109
|
-
console.warn('\n[warn] Continuing installation despite validation failure (bun detected).')
|
|
110
|
-
console.warn('[warn] Run prlt with Node.js, or reinstall with npm/Homebrew for full support.\n')
|
|
111
|
-
process.exit(0)
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
// Friendlier message when the failure is likely due to an unsupported Node version
|
|
115
|
-
if (info.nodeMajor !== null && !SUPPORTED_NODE_MAJORS.includes(info.nodeMajor)) {
|
|
116
|
-
console.error(message)
|
|
117
|
-
console.error('')
|
|
118
|
-
console.error(`Node ${info.nodeMajor} is not yet supported — prebuilt better-sqlite3 binaries`)
|
|
119
|
-
console.error(`may not exist for this version. Please switch to Node 22 (LTS):`)
|
|
120
|
-
console.error('')
|
|
121
|
-
console.error(' nvm install 22 # or: nvm use 22')
|
|
122
|
-
console.error(' fnm install 22 # or: fnm use 22')
|
|
123
|
-
console.error('')
|
|
124
|
-
process.exit(1)
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
console.error(message)
|
|
128
|
-
process.exit(1)
|
|
129
|
-
}
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
export interface BetterSqlite3RuntimeInfo {
|
|
2
|
-
nodeVersion: string;
|
|
3
|
-
nodeMajor: number | null;
|
|
4
|
-
abi: string;
|
|
5
|
-
platform: NodeJS.Platform;
|
|
6
|
-
arch: string;
|
|
7
|
-
isBun: boolean;
|
|
8
|
-
}
|
|
9
|
-
export interface BetterSqlite3ValidationOptions {
|
|
10
|
-
context: string;
|
|
11
|
-
loadModule?: () => Promise<{
|
|
12
|
-
default: new (path: string) => BetterSqlite3DatabaseLike;
|
|
13
|
-
}>;
|
|
14
|
-
}
|
|
15
|
-
interface BetterSqlite3DatabaseLike {
|
|
16
|
-
pragma(sql: string): unknown;
|
|
17
|
-
close(): void;
|
|
18
|
-
}
|
|
19
|
-
export declare function getBetterSqlite3RuntimeInfo(): BetterSqlite3RuntimeInfo;
|
|
20
|
-
export declare function buildBetterSqlite3ValidationMessage(cause: unknown, info: BetterSqlite3RuntimeInfo, context: string): string;
|
|
21
|
-
/**
|
|
22
|
-
* Detect whether an error is caused by a missing or incompatible better-sqlite3
|
|
23
|
-
* native binding (.node file) rather than a normal SQLite operational error.
|
|
24
|
-
*
|
|
25
|
-
* Common patterns:
|
|
26
|
-
* - "Could not locate the bindings file" (node-gyp / node-bindings)
|
|
27
|
-
* - "better_sqlite3.node" in the message (missing prebuilt)
|
|
28
|
-
* - "MODULE_NOT_FOUND" code (Node can't resolve the addon)
|
|
29
|
-
* - "was compiled against a different Node.js version" (ABI mismatch)
|
|
30
|
-
* - "A dynamic link library (DLL) initialization routine failed" (Windows ABI issue)
|
|
31
|
-
* - "isexe" / "which.js" (bun node-gyp compatibility issues)
|
|
32
|
-
*/
|
|
33
|
-
export declare function isBetterSqlite3NativeError(error: unknown): boolean;
|
|
34
|
-
/**
|
|
35
|
-
* If the given error is a native binding error, throw a user-friendly error
|
|
36
|
-
* with actionable fix steps. Otherwise re-throw the original error.
|
|
37
|
-
*/
|
|
38
|
-
export declare function throwIfNativeBindingError(error: unknown, context: string): void;
|
|
39
|
-
export declare function validateBetterSqlite3NativeBinding(options: BetterSqlite3ValidationOptions): Promise<void>;
|
|
40
|
-
export {};
|
|
@@ -1,123 +0,0 @@
|
|
|
1
|
-
const SUPPORTED_NODE_MAJORS = [20, 22, 23, 24, 25];
|
|
2
|
-
function parseNodeMajor(version) {
|
|
3
|
-
const match = /^v?(\d+)/.exec(version);
|
|
4
|
-
return match ? Number.parseInt(match[1], 10) : null;
|
|
5
|
-
}
|
|
6
|
-
/**
|
|
7
|
-
* Detect whether the current runtime is Bun rather than Node.js.
|
|
8
|
-
* Bun sets `process.versions.bun` and the `Bun` global.
|
|
9
|
-
*/
|
|
10
|
-
function detectBunRuntime() {
|
|
11
|
-
return typeof process.versions.bun === 'string'
|
|
12
|
-
|| typeof globalThis.Bun !== 'undefined';
|
|
13
|
-
}
|
|
14
|
-
export function getBetterSqlite3RuntimeInfo() {
|
|
15
|
-
return {
|
|
16
|
-
nodeVersion: process.version,
|
|
17
|
-
nodeMajor: parseNodeMajor(process.version),
|
|
18
|
-
abi: process.versions.modules,
|
|
19
|
-
platform: process.platform,
|
|
20
|
-
arch: process.arch,
|
|
21
|
-
isBun: detectBunRuntime(),
|
|
22
|
-
};
|
|
23
|
-
}
|
|
24
|
-
export function buildBetterSqlite3ValidationMessage(cause, info, context) {
|
|
25
|
-
const reason = cause instanceof Error ? cause.message : String(cause);
|
|
26
|
-
const runtimeLabel = info.isBun ? 'bun' : 'node';
|
|
27
|
-
const nodeMajorHint = info.nodeMajor === null || SUPPORTED_NODE_MAJORS.includes(info.nodeMajor)
|
|
28
|
-
? null
|
|
29
|
-
: `- Unsupported Node major for this CLI: ${info.nodeMajor} (supported: ${SUPPORTED_NODE_MAJORS.join(', ')})`;
|
|
30
|
-
const lines = [
|
|
31
|
-
`better-sqlite3 native module failed to load (${context}).`,
|
|
32
|
-
`Runtime: ${runtimeLabel} ${info.nodeVersion} (ABI ${info.abi}) on ${info.platform}-${info.arch}.`,
|
|
33
|
-
`Error: ${reason}`,
|
|
34
|
-
'',
|
|
35
|
-
'Fix steps:',
|
|
36
|
-
'1. Rebuild native bindings: npm rebuild better-sqlite3',
|
|
37
|
-
'2. If globally installed, reinstall: pnpm install -g @proletariat/cli --force',
|
|
38
|
-
' (or: npm install -g @proletariat/cli --force)',
|
|
39
|
-
'3. If running from source, reinstall workspace deps: pnpm install',
|
|
40
|
-
];
|
|
41
|
-
if (nodeMajorHint) {
|
|
42
|
-
lines.splice(2, 0, nodeMajorHint);
|
|
43
|
-
}
|
|
44
|
-
if (info.isBun || isBunNodeGypError(cause)) {
|
|
45
|
-
lines.push('', 'Bun users:', ' Bun\'s node-gyp compatibility is limited and may fail to compile', ' better-sqlite3. Recommended alternatives:', ' - Install with npm instead: npm install -g @proletariat/cli', ' - Install with Homebrew (macOS): brew install chrismcdermut/proletariat/prlt', ' - Use Node.js 22 (LTS) for best compatibility');
|
|
46
|
-
}
|
|
47
|
-
return lines.join('\n');
|
|
48
|
-
}
|
|
49
|
-
/**
|
|
50
|
-
* Detect whether an error looks like a bun-specific node-gyp failure.
|
|
51
|
-
* Bun's node-gyp integration has known issues with the `isexe` module
|
|
52
|
-
* (used by `which`) and other native compilation steps.
|
|
53
|
-
*/
|
|
54
|
-
function isBunNodeGypError(error) {
|
|
55
|
-
if (!(error instanceof Error))
|
|
56
|
-
return false;
|
|
57
|
-
const msg = error.message.toLowerCase();
|
|
58
|
-
return msg.includes('isexe') || msg.includes('which.js') || msg.includes('node-gyp');
|
|
59
|
-
}
|
|
60
|
-
/**
|
|
61
|
-
* Detect whether an error is caused by a missing or incompatible better-sqlite3
|
|
62
|
-
* native binding (.node file) rather than a normal SQLite operational error.
|
|
63
|
-
*
|
|
64
|
-
* Common patterns:
|
|
65
|
-
* - "Could not locate the bindings file" (node-gyp / node-bindings)
|
|
66
|
-
* - "better_sqlite3.node" in the message (missing prebuilt)
|
|
67
|
-
* - "MODULE_NOT_FOUND" code (Node can't resolve the addon)
|
|
68
|
-
* - "was compiled against a different Node.js version" (ABI mismatch)
|
|
69
|
-
* - "A dynamic link library (DLL) initialization routine failed" (Windows ABI issue)
|
|
70
|
-
* - "isexe" / "which.js" (bun node-gyp compatibility issues)
|
|
71
|
-
*/
|
|
72
|
-
export function isBetterSqlite3NativeError(error) {
|
|
73
|
-
if (!(error instanceof Error))
|
|
74
|
-
return false;
|
|
75
|
-
const msg = error.message.toLowerCase();
|
|
76
|
-
const code = error.code;
|
|
77
|
-
if (code === 'MODULE_NOT_FOUND')
|
|
78
|
-
return true;
|
|
79
|
-
if (msg.includes('could not locate the bindings file'))
|
|
80
|
-
return true;
|
|
81
|
-
if (msg.includes('better_sqlite3.node'))
|
|
82
|
-
return true;
|
|
83
|
-
if (msg.includes('was compiled against a different node.js version'))
|
|
84
|
-
return true;
|
|
85
|
-
if (msg.includes('dll initialization routine failed'))
|
|
86
|
-
return true;
|
|
87
|
-
if (msg.includes('cannot open shared object file'))
|
|
88
|
-
return true;
|
|
89
|
-
if (msg.includes('is not a valid win32 application'))
|
|
90
|
-
return true;
|
|
91
|
-
if (msg.includes('node_module_version'))
|
|
92
|
-
return true;
|
|
93
|
-
// Bun-specific: node-gyp fails because bun's `which` shim uses an
|
|
94
|
-
// incompatible `isexe` version that throws at runtime.
|
|
95
|
-
if (msg.includes('isexe') && msg.includes('not a function'))
|
|
96
|
-
return true;
|
|
97
|
-
return false;
|
|
98
|
-
}
|
|
99
|
-
/**
|
|
100
|
-
* If the given error is a native binding error, throw a user-friendly error
|
|
101
|
-
* with actionable fix steps. Otherwise re-throw the original error.
|
|
102
|
-
*/
|
|
103
|
-
export function throwIfNativeBindingError(error, context) {
|
|
104
|
-
if (isBetterSqlite3NativeError(error)) {
|
|
105
|
-
const info = getBetterSqlite3RuntimeInfo();
|
|
106
|
-
throw new Error(buildBetterSqlite3ValidationMessage(error, info, context));
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
export async function validateBetterSqlite3NativeBinding(options) {
|
|
110
|
-
const loadModule = options.loadModule ?? (async () => import('better-sqlite3'));
|
|
111
|
-
const runtime = getBetterSqlite3RuntimeInfo();
|
|
112
|
-
try {
|
|
113
|
-
const mod = await loadModule();
|
|
114
|
-
const Database = mod.default;
|
|
115
|
-
const db = new Database(':memory:');
|
|
116
|
-
db.pragma('foreign_keys = ON');
|
|
117
|
-
db.close();
|
|
118
|
-
}
|
|
119
|
-
catch (error) {
|
|
120
|
-
throw new Error(buildBetterSqlite3ValidationMessage(error, runtime, options.context));
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
//# sourceMappingURL=native-validation.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"native-validation.js","sourceRoot":"","sources":["../../../src/lib/database/native-validation.ts"],"names":[],"mappings":"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"}
|