Archive & Cluster
Archive
Requires fs permission for source/destination directories.
Pack
- AssemblyScript
- Go
- Rust
import { archivePack } from "@luminarys/sdk-as";
const result = archivePack(
"/data/project", // source directory
"/data/project.tar.gz", // output path
"tar.gz", // format: "tar.gz" or "zip"
".git,node_modules", // exclude
);
// result.files_count, result.format
result, err := sdk.ArchivePack(
"/data/project",
"/data/project.tar.gz",
"tar.gz",
".git,node_modules",
)
fmt.Printf("Packed %d files\n", result.FilesCount)
let result = archive_pack(
"/data/project",
"/data/project.tar.gz",
"tar.gz",
".git,node_modules",
)?;
println!("Packed {} files", result.files_count);
Parameters:
| Field | Type | Default | Description |
|---|---|---|---|
source | string | required | Source directory |
output | string | required | Output archive path |
format | string | "tar.gz" | Archive format: "tar.gz" or "zip" |
exclude | string | "" | Comma-separated exclude patterns |
ArchivePackResult:
| Field | Type | Description |
|---|---|---|
files_count | int | Number of files packed |
format | string | Format used |
Unpack
- AssemblyScript
- Go
- Rust
import { archiveUnpack } from "@luminarys/sdk-as";
const count = archiveUnpack(
"/data/project.tar.gz",
"/data/extracted",
);
result, err := sdk.ArchiveUnpack(
"/data/project.tar.gz",
"/data/extracted",
"", "", 0,
)
fmt.Printf("Extracted %d files\n", result.FilesCount)
let count = archive_unpack(
"/data/project.tar.gz",
"/data/extracted",
"", "", 0,
)?;
Parameters:
| Field | Type | Default | Description |
|---|---|---|---|
archive | string | required | Archive file path |
dest | string | required | Destination directory |
format | string | "" | Format (auto-detect by extension if empty) |
exclude | string | "" | Comma-separated exclude patterns |
strip | int | 0 | Strip N leading path components (like tar --strip-components) |
List contents
- AssemblyScript
- Go
- Rust
import { archiveList } from "@luminarys/sdk-as";
const entries = archiveList("/data/project.tar.gz");
for (let i = 0; i < entries.length; i++) {
// entries[i].name, entries[i].size, entries[i].is_dir
}
entries, err := sdk.ArchiveList("/data/project.tar.gz", "", "")
for _, e := range entries {
fmt.Printf("%s (%d bytes, dir=%v)\n", e.Name, e.Size, e.IsDir)
}
let entries = archive_list("/data/project.tar.gz", "", "")?;
for e in &entries {
println!("{} ({} bytes, dir={})", e.name, e.size, e.is_dir);
}
ArchiveEntry:
| Field | Type | Description |
|---|---|---|
name | string | File or directory path within the archive |
size | int | File size in bytes (0 for directories) |
is_dir | bool | True if the entry is a directory |
Exclude patterns
Comma-separated, shell-like globs. Supports *, **, ?, [abc], {a,b}:
exclude: ".git,node_modules" — skip directories by name
exclude: "*.log,*.tmp" — skip files by extension
exclude: "**/*.test.go" — skip test files at any depth
exclude: "{*.log,*.tmp}" — brace expansion
exclude: "src/**" — skip entire subdirectory
exclude: ".git,node_modules,*.log" — combined
Directory names match the entire subtree via prefix matching. Commas inside {braces} are not treated as separators. Patterns with .. are rejected for security.
Cluster
Node list
- AssemblyScript
- Go
- Rust
import { clusterNodeList } from "@luminarys/sdk-as";
const result = clusterNodeList();
// result.current_node — this node's ID
for (let i = 0; i < result.nodes.length; i++) {
const n = result.nodes[i];
// n.node_id, n.role, n.skills[]
}
result, err := sdk.ClusterNodeList()
fmt.Printf("Current node: %s\n", result.CurrentNode)
for _, n := range result.Nodes {
fmt.Printf(" %s (%s) skills=%v\n", n.NodeID, n.Role, n.Skills)
}
let (current_node, nodes) = cluster_node_list()?;
println!("Current node: {current_node}");
for n in &nodes {
println!(" {} ({}) skills={:?}", n.node_id, n.role, n.skills);
}
ClusterNodeListResult:
| Field | Type | Description |
|---|---|---|
current_node | string | This node's ID |
nodes | ClusterNodeInfo[] | All known nodes |
ClusterNodeInfo:
| Field | Type | Description |
|---|---|---|
node_id | string | Node identifier |
role | string | Node role |
skills | string[] | Skills registered on this node |
File transfer between nodes
Requires file_transfer permission in the manifest.
- AssemblyScript
- Go
- Rust
import { fileTransferSend, fileTransferRecv } from "@luminarys/sdk-as";
// Send to a remote node
fileTransferSend("master", "/data/shared/result.tar.gz", "/data/result/result.tar.gz");
// Receive from a remote node
fileTransferRecv("slave-1", "/data/shared/data.csv", "/data/local/data.csv");
// Send to a remote node
err := sdk.FileTransferSend("master", "/data/shared/result.tar.gz", "/data/result/result.tar.gz")
// Receive from a remote node
err := sdk.FileTransferRecv("slave-1", "/data/shared/data.csv", "/data/local/data.csv")
// Send to a remote node
file_transfer_send("master", "/data/shared/result.tar.gz", "/data/result/result.tar.gz")?;
// Receive from a remote node
file_transfer_recv("slave-1", "/data/shared/data.csv", "/data/local/data.csv")?;
Permissions
permissions:
file_transfer:
enabled: true
allowed_nodes: ["master"]
local_dirs: ["/data/shared:ro"]
Example: pack and deliver
- AssemblyScript
- Go
- Rust
import { archivePack } from "@luminarys/sdk-as";
import { fileTransferSend } from "@luminarys/sdk-as";
// 1. Pack the project
archivePack("/data/shared/project", "/data/shared/project.tar.gz", "tar.gz", "", ".git,.venv");
// 2. Send to master node
fileTransferSend("master", "/data/shared/project.tar.gz", "/data/result/project.tar.gz");
// 1. Pack the project
sdk.ArchivePack("/data/shared/project", "/data/shared/project.tar.gz", "tar.gz", "", ".git,.venv")
// 2. Send to master node
sdk.FileTransferSend("master", "/data/shared/project.tar.gz", "/data/result/project.tar.gz")
// 1. Pack the project
archive_pack("/data/shared/project", "/data/shared/project.tar.gz", "tar.gz", "", ".git,.venv")?;
// 2. Send to master node
file_transfer_send("master", "/data/shared/project.tar.gz", "/data/result/project.tar.gz")?;