mirror of
https://github.com/Start9Labs/start-os.git
synced 2026-03-26 10:21:52 +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
40 lines
1.1 KiB
TypeScript
40 lines
1.1 KiB
TypeScript
import { Backups } from './Backups'
|
|
import * as T from '../../../base/lib/types'
|
|
import { _ } from '../util'
|
|
import { InitScript } from '../../../base/lib/inits'
|
|
|
|
export type SetupBackupsParams<M extends T.SDKManifest> =
|
|
| M['volumes'][number][]
|
|
| ((_: { effects: T.Effects }) => Promise<Backups<M>>)
|
|
|
|
type SetupBackupsRes = {
|
|
createBackup: T.ExpectedExports.createBackup
|
|
restoreInit: InitScript
|
|
}
|
|
|
|
export function setupBackups<M extends T.SDKManifest>(
|
|
options: SetupBackupsParams<M>,
|
|
) {
|
|
let backupsFactory: (_: { effects: T.Effects }) => Promise<Backups<M>>
|
|
if (options instanceof Function) {
|
|
backupsFactory = options
|
|
} else {
|
|
backupsFactory = async () => Backups.ofVolumes(...options)
|
|
}
|
|
const answer: SetupBackupsRes = {
|
|
get createBackup() {
|
|
return (async (options) => {
|
|
return (await backupsFactory(options)).createBackup(options.effects)
|
|
}) as T.ExpectedExports.createBackup
|
|
},
|
|
get restoreInit(): InitScript {
|
|
return {
|
|
init: async (effects, kind) => {
|
|
return (await backupsFactory({ effects })).init(effects, kind)
|
|
},
|
|
}
|
|
},
|
|
}
|
|
return answer
|
|
}
|