feat: add build system, stubs, and npm packaging — openclaude is now runnable

- package.json with all 70+ dependencies
- Bun build script with feature flag shims, native module stubs, otel externals
- Stubs for ~15 missing source files (snapshot gaps)
- tsconfig.json for TypeScript
- bin/openclaude entry point
- Builds to single 19MB dist/cli.mjs
- Verified: --version and --help work

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
did:key:z6MkqDnb7Siv3Cwj7pGJq4T5EsUisECqR8KpnDLwcaZq5TPr
2026-04-01 02:36:07 +08:00
parent fd108243eb
commit 3e652cafdf
30 changed files with 1988 additions and 2 deletions

View File

@@ -0,0 +1,10 @@
// Stub — AssistantSessionChooser not included in source snapshot
import React from 'react'
export function AssistantSessionChooser(_props: {
sessions: unknown[]
onSelect: (id: string) => void
onCancel: () => void
}) {
return null
}

View File

@@ -0,0 +1,2 @@
// Stub
export default null

View File

@@ -0,0 +1,2 @@
// Stub
export default null

View File

@@ -0,0 +1,2 @@
// Stub — assistant command not included in source snapshot
export default null

View File

@@ -0,0 +1,3 @@
// Stub
import React from 'react'
export function SnapshotUpdateDialog(_props: unknown) { return null }

View File

@@ -0,0 +1,2 @@
// Stub — generated types not included in source snapshot
export type {}

View File

@@ -0,0 +1,2 @@
// Stub — SDK runtime types not included in source snapshot
export type {}

View File

@@ -0,0 +1,2 @@
// Stub — SDK tool types not included in source snapshot
export type {}

2
src/ink/devtools.ts Normal file
View File

@@ -0,0 +1,2 @@
// Stub — devtools not included in source snapshot
export default {}

9
src/ink/global.d.ts vendored Normal file
View File

@@ -0,0 +1,9 @@
// Stub — global types for Ink renderer
declare namespace JSX {
interface IntrinsicElements {
'ink-box': Record<string, unknown>
'ink-text': Record<string, unknown>
'ink-root': Record<string, unknown>
'ink-virtual-text': Record<string, unknown>
}
}

View File

@@ -0,0 +1,12 @@
// Stub — cachedMicrocompact not included in source snapshot (feature-gated)
export function isCachedMicrocompactEnabled(): boolean {
return false
}
export function isModelSupportedForCacheEditing(_model: string): boolean {
return false
}
export function getCachedMCConfig() {
return null
}

View File

@@ -0,0 +1,4 @@
// Stub — snipCompact not included in source snapshot
export function snipCompact() {
return null
}

View File

@@ -0,0 +1,7 @@
// Stub — contextCollapse not included in source snapshot (feature-gated)
export function isContextCollapseEnabled(): boolean {
return false
}
export function getContextCollapseState() {
return null
}

View File

@@ -0,0 +1,3 @@
// Stub
export default null
export const REPLTool = null

View File

@@ -0,0 +1,3 @@
// Stub
export default null
export const SuggestBackgroundPRTool = null

View File

@@ -0,0 +1,2 @@
// Stub — TungstenTool not included in source snapshot (internal tool)
export const TungstenLiveMonitor = null

View File

@@ -0,0 +1,2 @@
// Stub
export const TungstenTool = null

View File

@@ -0,0 +1,3 @@
// Stub
export default null
export const VerifyPlanExecutionTool = null

View File

@@ -0,0 +1,2 @@
// Stub — WorkflowTool not included in source snapshot
export const WORKFLOW_TOOL_NAME = 'WorkflowTool'

View File

@@ -0,0 +1,18 @@
// Stub — original type not included in source snapshot
export interface ConnectorTextBlock {
type: 'connector_text'
text: string
}
export interface ConnectorTextDelta {
type: 'connector_text_delta'
text: string
}
export function isConnectorTextBlock(block: unknown): block is ConnectorTextBlock {
return (
typeof block === 'object' &&
block !== null &&
(block as Record<string, unknown>).type === 'connector_text'
)
}

View File

@@ -0,0 +1,13 @@
// Stub — types not included in source snapshot
export const OUTPUTS_SUBDIR = 'tool-results'
export interface PersistedFile {
path: string
content: string
size: number
}
export type TurnStartTime = number
export const DEFAULT_UPLOAD_CONCURRENCY = 5
export const FILE_COUNT_LIMIT = 100

View File

@@ -0,0 +1,3 @@
// Stub
export function isProtectedNamespace(_ns: string): boolean { return false }
export const PROTECTED_NAMESPACES: string[] = []

View File

@@ -0,0 +1 @@
This is a planning prompt stub.