dist_agent_lang 1.0.22

Agentic programming with library and CLI support for Off/On-chain network integration
Documentation
// Vibes Job – AI agent + task + generate_text, plus minting vibes and optional crypto rewards.
// Uses: ai::, log, chain (KEYS rewards), cloudadmin (trust / policy).
// Attributes: @trust("hybrid"), @ai, @chain("ethereum"), @cloudadmin.

@trust("hybrid")
@ai
@chain("ethereum")
@cloudadmin
service VibesJob {
    vibes_agent_id: string = "";
    last_task_id: string = "";
    owner: string = "";

    // Minting vibes (in-service balance)
    vibes_balance: map<string, int>;
    total_vibes_minted: int = 0;

    // Optional crypto reward (KEYS mint to recipient)
    reward_contract: string = "";
    reward_minter: string = "";
    reward_amount: string = "1000000000000000000";

    fn initialize(caller: string) -> bool {
        self.owner = caller;
        log::info("vibes", "VibesJob initialized, owner: " + caller);
        return true;
    }

    fn get_vibes_prompt() -> string {
        return "Write one short, kind sentence of encouragement or gratitude to show on a tip jar website. No quotes or attribution.";
    }

    fn run_vibes_job() -> string {
        log::info("vibes", "Starting vibes job: spawn agent, create task, execute, generate.");

        let config = {
            "name": "vibes_agent",
            "type": "ai",
            "role": "good_vibes_writer",
            "capabilities": ["generate_text", "analyze_text"],
            "trust_level": "hybrid"
        };
        let agent_id = ai::spawn_agent(config);
        self.vibes_agent_id = agent_id;
        log::info("vibes", "Spawned agent: " + agent_id);

        let prompt = self.get_vibes_prompt();
        let task_type = "generate_vibes";
        let priority = "high";

        let task_id = ai::create_task(agent_id, task_type, prompt, priority);
        self.last_task_id = task_id;
        log::info("vibes", "Created task: " + task_id);

        let exec_result = ai::execute_task(agent_id, task_id);
        log::info("vibes", "Executed task: " + exec_result);

        let vibes_text = ai::generate_text(prompt);
        log::info("vibes", "Good vibes: " + vibes_text);

        return vibes_text;
    }

    // Set optional KEYS reward (owner only). minter = address allowed to call mint on the token contract.
    fn set_reward_contract(caller: string, contract_address: string, minter_address: string, amount: string) -> bool {
        if (caller != self.owner) {
            log::info("vibes", "[ERROR] Only owner can set reward contract");
            return false;
        }
        self.reward_contract = contract_address;
        self.reward_minter = minter_address;
        self.reward_amount = amount;
        log::info("vibes", "Reward contract set: " + contract_address + ", minter: " + minter_address);
        return true;
    }

    // Get good vibes, mint vibes to caller, and optionally mint KEYS reward to caller.
    fn get_good_vibes(caller: string) -> string {
        let vibes_text = self.run_vibes_job();

        self.vibes_balance[caller] = self.vibes_balance[caller] + 1;
        self.total_vibes_minted = self.total_vibes_minted + 1;
        log::info("vibes", "Minted 1 vibes to " + caller + ", total vibes: " + self.total_vibes_minted);

        if (self.reward_contract != "" && self.reward_minter != "") {
            let mint_result = chain::call(1, self.reward_contract, "mint", {
                "caller": self.reward_minter,
                "to": caller,
                "amount": self.reward_amount
            });
            if (mint_result != "") {
                log::info("vibes", "Crypto reward minted to " + caller);
            } else {
                log::info("vibes", "[ERROR] Reward mint failed for " + caller);
            }
        }

        return vibes_text;
    }

    fn get_vibes_balance(account: string) -> int {
        return self.vibes_balance[account];
    }

    fn get_total_vibes_minted() -> int {
        return self.total_vibes_minted;
    }
}