mirror of
https://github.com/Start9Labs/start-os.git
synced 2026-03-26 02:11:53 +00:00
* add documentation for ai agents * docs: consolidate CLAUDE.md and CONTRIBUTING.md, add style guidelines - Refactor CLAUDE.md to reference CONTRIBUTING.md for build/test/format info - Expand CONTRIBUTING.md with comprehensive build targets, env vars, and testing - Add code style guidelines section with conventional commits - Standardize SDK prettier config to use single quotes (matching web) - Add project-level Claude Code settings to disable co-author attribution * style(sdk): apply prettier with single quotes Run prettier across sdk/base and sdk/package to apply the standardized quote style (single quotes matching web). * docs: add USER.md for per-developer TODO filtering - Add agents/USER.md to .gitignore (contains user identifier) - Document session startup flow in CLAUDE.md: - Create USER.md if missing, prompting for identifier - Filter TODOs by @username tags - Offer relevant TODOs on session start * docs: add i18n documentation task to agent TODOs * docs: document i18n ID patterns in core/ Add agents/i18n-patterns.md covering rust-i18n setup, translation file format, t!() macro usage, key naming conventions, and locale selection. Remove completed TODO item and add reference in CLAUDE.md. * chore: clarify that all builds work on any OS with Docker
60 lines
1.7 KiB
TypeScript
60 lines
1.7 KiB
TypeScript
import * as T from '../types'
|
|
import { once } from '../util'
|
|
|
|
export type RequiredDependenciesOf<Manifest extends T.SDKManifest> = {
|
|
[K in keyof Manifest['dependencies']]: Exclude<
|
|
Manifest['dependencies'][K],
|
|
undefined
|
|
>['optional'] extends false
|
|
? K
|
|
: never
|
|
}[keyof Manifest['dependencies']]
|
|
export type OptionalDependenciesOf<Manifest extends T.SDKManifest> = Exclude<
|
|
keyof Manifest['dependencies'],
|
|
RequiredDependenciesOf<Manifest>
|
|
>
|
|
|
|
type DependencyRequirement =
|
|
| {
|
|
kind: 'running'
|
|
healthChecks: Array<T.HealthCheckId>
|
|
versionRange: string
|
|
}
|
|
| {
|
|
kind: 'exists'
|
|
versionRange: string
|
|
}
|
|
type Matches<T, U> = T extends U ? (U extends T ? null : never) : never
|
|
const _checkType: Matches<
|
|
DependencyRequirement & { id: T.PackageId },
|
|
T.DependencyRequirement
|
|
> = null
|
|
|
|
export type CurrentDependenciesResult<Manifest extends T.SDKManifest> = {
|
|
[K in RequiredDependenciesOf<Manifest>]: DependencyRequirement
|
|
} & {
|
|
[K in OptionalDependenciesOf<Manifest>]?: DependencyRequirement
|
|
}
|
|
|
|
export function setupDependencies<Manifest extends T.SDKManifest>(
|
|
fn: (options: {
|
|
effects: T.Effects
|
|
}) => Promise<CurrentDependenciesResult<Manifest>>,
|
|
): (effects: T.Effects) => Promise<null> {
|
|
return async (effects: T.Effects) => {
|
|
const dependencyType = await fn({ effects })
|
|
return await effects.setDependencies({
|
|
dependencies: Object.entries(dependencyType)
|
|
.map(([k, v]) => [k, v as DependencyRequirement] as const)
|
|
.map(
|
|
([id, { versionRange, ...x }]) =>
|
|
({
|
|
id,
|
|
...x,
|
|
versionRange: versionRange.toString(),
|
|
}) as T.DependencyRequirement,
|
|
),
|
|
})
|
|
}
|
|
}
|