PSF: Foundry Progress Sync. 57 high-fidelity blueprints established. Open Fleet routing (Kimi/Qwen) active. GTD updated.

This commit is contained in:
2026-04-07 10:34:16 -04:00
parent 77c0dac025
commit 3b3381a1ac
377 changed files with 34308 additions and 588 deletions

View File

@@ -0,0 +1,23 @@
const { chromium } = require('playwright-extra');
const stealth = require('puppeteer-extra-plugin-stealth')();
chromium.use(stealth);
async function loginGemini() {
console.log("Opening browser for manual Google login...");
console.log("Please log in, pass any captchas, wait for the Gemini chat interface to load, and then close the browser window.");
const browser = await chromium.launchPersistentContext('/home/user/.local/share/org-agent/browser-profile', {
headless: false,
args: ['--disable-blink-features=AutomationControlled']
});
const page = await browser.newPage();
await page.goto('https://gemini.google.com/app');
// The script keeps running until the user manually closes the window
}
loginGemini().catch(err => {
console.error(err);
process.exit(1);
});

View File

@@ -1,30 +1,44 @@
const { chromium } = require('playwright');
const { chromium } = require('playwright-extra');
const stealth = require('puppeteer-extra-plugin-stealth')();
chromium.use(stealth);
async function askGemini(prompt, cookies) {
const browser = await chromium.launch({ headless: true });
const context = await browser.newContext();
const context = await browser.newContext({
userAgent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36'
});
// Set session cookies
await context.addCookies(cookies.map(c => ({
name: c.name,
value: c.value,
domain: '.google.com',
path: '/'
url: 'https://gemini.google.com'
})));
const page = await context.newPage();
await page.goto('https://gemini.google.com/app');
try {
await page.goto('https://gemini.google.com/app', { waitUntil: 'networkidle', timeout: 60000 });
// Wait for chat box and type prompt
await page.fill('div[role="textbox"]', prompt);
await page.keyboard.press('Enter');
const inputSelector = 'div[role="textbox"], textarea[aria-label="Prompt"]';
try {
await page.waitForSelector(inputSelector, { timeout: 15000 });
} catch (e) {
const bodyText = await page.innerText('body');
console.error(`VISIBLE TEXT ON PAGE: ${bodyText.substring(0, 500)}`);
throw new Error(`Selector not found. Current URL: ${page.url()}`);
}
await page.fill(inputSelector, prompt);
await page.keyboard.press('Enter');
// Wait for response to generate
await page.waitForSelector('message-content:last-child', { state: 'visible' });
const response = await page.textContent('message-content:last-child');
await browser.close();
console.log(response);
await page.waitForSelector('.model-response-text, message-content', { state: 'visible', timeout: 60000 });
const response = await page.innerText('.model-response-text:last-child, message-content:last-child');
process.stdout.write(response);
} catch (err) {
console.error(`ERROR: ${err.message}`);
process.exit(1);
} finally {
await browser.close();
}
}
const args = process.argv.slice(2);
@@ -32,6 +46,5 @@ const prompt = args[0];
const cookies = JSON.parse(args[1]);
askGemini(prompt, cookies).catch(err => {
console.error(err);
process.exit(1);
});

View File

@@ -1,8 +1,10 @@
(in-package :org-agent)
(defun ask-gemini-web (prompt)
"Calls the Playwright bridge to interact with Gemini Web UI."
(let* ((cookie-str (uiop:getenv "GEMINI_COOKIES"))
(script-path (namestring (merge-pathnames "src/gemini-web.js" (asdf:system-source-directory :org-skill-web-research)))))
(unless cookie-str (return-from ask-gemini-web "(:type :LOG :payload (:text \"Gemini Cookies missing\"))"))
(uiop:run-program (list "node" script-path prompt cookie-str) :output :string)))
"Calls the Playwright stealth bridge to interact with Gemini Web UI via a persistent profile."
(let* ((script-path (namestring (merge-pathnames "src/gemini-web.js" (asdf:system-source-directory :org-skill-web-research)))))
(multiple-value-bind (output error-output exit-code)
(uiop:run-program (list "node" script-path prompt) :output :string :error-output :string :ignore-error-status t)
(if (= exit-code 0)
output
(format nil "(:type :LOG :payload (:text \"Node Error (~a): ~a\"))" exit-code error-output)))))