1use std::collections::{BTreeMap, BTreeSet, HashMap, HashSet};
2use std::ffi::OsStr;
3use std::fs::File;
4use std::path::{Path, PathBuf};
5use std::sync::{Arc, OnceLock};
6use std::time::{Duration, SystemTime, UNIX_EPOCH};
7use std::{fs, process};
8
9use chrono_tz::Tz;
10use regex::Regex;
11use serde::{Deserialize, Serialize};
12use std::str::FromStr;
13use url::Url;
14
15const CONTENT_HASH_FILE: &str = harn_modules::package_execution::CONTENT_HASH_FILE;
16const CACHE_METADATA_FILE: &str = harn_modules::package_execution::CACHE_METADATA_FILE;
17const HARN_CACHE_DIR_ENV: &str = "HARN_CACHE_DIR";
18const HARN_PACKAGE_REGISTRY_ENV: &str = "HARN_PACKAGE_REGISTRY";
19const HARN_PACKAGE_REGISTRY_TOKEN_ENV: &str = "HARN_PACKAGE_REGISTRY_TOKEN";
20const DEFAULT_PACKAGE_REGISTRY_URL: &str = "https://packages.harnlang.com/harn-package-index.toml";
21const CACHE_METADATA_VERSION: u32 = 1;
22const LOCK_FILE_VERSION: u32 = 5;
23const REGISTRY_INDEX_VERSION: u32 = 2;
24const PACKAGE_ARCHIVE_MAX_BYTES: u64 = 64 * 1024 * 1024;
25const PACKAGE_ARCHIVE_MAX_UNPACKED_BYTES: u64 = 64 * 1024 * 1024;
26const MANIFEST: &str = harn_modules::manifest_walk::MANIFEST_FILENAME;
27const LOCK_FILE: &str = "harn.lock";
28const TRIGGER_RETRY_MAX_LIMIT: u32 = 100;
29
30mod credential_environment;
31pub(crate) mod errors;
32mod extensions;
33mod generations;
34mod git_cwd;
35mod input_policy;
36mod lockfile;
37mod manifest;
38mod manifest_search;
39mod maturity;
40mod mutation;
41mod package_ops;
42mod persona_activation;
43mod persona_runtime;
44mod registry;
45mod skills;
46mod validation;
47
48#[allow(unused_imports)]
49pub use errors::{PackageError, PackageResult};
50
51pub(crate) use crate::path_policy::PathEntryKind;
52pub use credential_environment::*;
53pub use extensions::*;
54pub(crate) use generations::*;
55pub(crate) use git_cwd::Cwd;
56pub(crate) use input_policy::should_exclude_package_entry;
57#[cfg(test)]
58pub use lockfile::add_package;
59pub(crate) use lockfile::*;
60pub use lockfile::{
61 add_package_with_registry, ensure_dependencies_materialized, install_packages, lock_packages,
62 remove_package, update_packages, PackageLockExport, PackageLockExports,
63};
64pub use manifest::*;
65pub(crate) use manifest_search::*;
66pub use maturity::{
67 artifacts_check, artifacts_manifest, audit_packages, outdated_packages, ArtifactDriftReport,
68 AuditCode, AuditFinding, AuditReport, AuditSeverity, OutdatedEntry, OutdatedReport,
69 OutdatedStatus,
70};
71pub(crate) use mutation::*;
72pub use package_ops::*;
73pub use persona_activation::*;
74pub(crate) use persona_runtime::*;
75pub(crate) use registry::*;
76pub use registry::{
77 clean_package_cache, list_package_cache, search_package_registry, search_rule_package_registry,
78 show_package_registry_info, verify_package_cache, verify_package_registry,
79};
80pub use skills::*;
81pub(crate) use validation::*;
82
83#[cfg(test)]
84pub(crate) mod test_support;