=== CURRENT REPOSITORY IDENTITY === Branch: main HEAD: ad99844402cf3d27c85cee5223c03cabc79aebca Working-tree entries: 60 NOTE: Existing modified and untracked files remain untouched. === AGENT-RELATED SYSTEMD UNITS === --- shire-agent-hub.service --- ExecStart={ path=/usr/bin/python3 ; argv[]=/usr/bin/python3 /home/shire3d/ARMOR/agents/runtime/agent_hub.py ; ignore_errors=no ; start_time=[n/a] ; stop_time=[n/a] ; pid=0 ; code=(null) ; status=0/0 } WorkingDirectory=/home/shire3d/ARMOR User=ray Group=ray ActiveState=active SubState=running FragmentPath=/etc/systemd/system/shire-agent-hub.service [Unit definition] # /etc/systemd/system/shire-agent-hub.service [Unit] Description=SHiRE Specialist Agent Hub After=network-online.target ollama.service Wants=network-online.target [Service] Type=simple User=ray Group=ray WorkingDirectory=/home/shire3d/ARMOR Environment=SHIRE_ROOT=/home/shire3d/ARMOR Environment=SHIRE_VAULT=/SHiREVault Environment=SHIRE_AGENT_HUB_HOST=127.0.0.1 Environment=SHIRE_AGENT_HUB_PORT=8770 ExecStart=/usr/bin/python3 /home/shire3d/ARMOR/agents/runtime/agent_hub.py Restart=on-failure RestartSec=3 NoNewPrivileges=true PrivateTmp=true [Install] WantedBy=multi-user.target --- shire-agent-hub-tailnet.service --- ExecStart={ path=/usr/lib/systemd/systemd-socket-proxyd ; argv[]=/usr/lib/systemd/systemd-socket-proxyd 127.0.0.1:8770 ; ignore_errors=no ; start_time=[n/a] ; stop_time=[n/a] ; pid=0 ; code=(null) ; status=0/0 } WorkingDirectory= User= Group= ActiveState=active SubState=running FragmentPath=/etc/systemd/system/shire-agent-hub-tailnet.service [Unit definition] # /etc/systemd/system/shire-agent-hub-tailnet.service [Unit] Description=Private Tailnet proxy for SHiRE Agent Hub Requires=shire-agent-hub.service After=shire-agent-hub.service [Service] Type=notify ExecStart=/usr/lib/systemd/systemd-socket-proxyd 127.0.0.1:8770 NoNewPrivileges=true PrivateTmp=true ProtectSystem=strict ProtectHome=true --- shire-marketing-boss.service --- ExecStart={ path=/usr/bin/node ; argv[]=/usr/bin/node /home/shire3d/ARMOR/agents/apps/marketing-boss/server.js ; ignore_errors=no ; start_time=[n/a] ; stop_time=[n/a] ; pid=0 ; code=(null) ; status=0/0 } WorkingDirectory=/home/shire3d/ARMOR/agents/apps/marketing-boss User=ray Group=ray ActiveState=active SubState=running FragmentPath=/etc/systemd/system/shire-marketing-boss.service [Unit definition] # /etc/systemd/system/shire-marketing-boss.service [Unit] Description=SHiRE Marketing Boss Drafting Workspace After=network-online.target Wants=network-online.target [Service] Type=simple User=ray Group=ray WorkingDirectory=/home/shire3d/ARMOR/agents/apps/marketing-boss Environment=PORT=4173 Environment=MARKETING_BOSS_STATE_FILE=/SHiREVault/SHIRE3D/MarketingBoss/state/marketing-boss-state.json Environment=MARKETING_BOSS_OUTPUT_DIR=/SHiREVault/SHIRE3D/MarketingBoss/campaigns EnvironmentFile=-/home/shire3d/ARMOR/config/agents/marketing-boss.env ExecStart=/usr/bin/node /home/shire3d/ARMOR/agents/apps/marketing-boss/server.js Restart=on-failure RestartSec=3 NoNewPrivileges=true PrivateTmp=true [Install] WantedBy=multi-user.target # /etc/systemd/system/shire-marketing-boss.service.d/20-secure-oauth.conf [Service] UMask=0077 Environment=PUBLIC_BASE_URL=http://127.0.0.1:4173 Environment=OAUTH_TOKEN_FILE=/SHiREVault/SHIRE3D/MarketingBoss/state/social-oauth-tokens.enc.json Environment=FACEBOOK_APP_ID= Environment=FACEBOOK_APP_SECRET= Environment=INSTAGRAM_APP_ID= Environment=INSTAGRAM_APP_SECRET= Environment=LINKEDIN_CLIENT_ID= Environment=LINKEDIN_CLIENT_SECRET= Environment=TIKTOK_CLIENT_KEY= Environment=TIKTOK_CLIENT_SECRET= Environment=GOOGLE_CLIENT_ID= Environment=GOOGLE_CLIENT_SECRET= LoadCredential=FACEBOOK_APP_ID:/etc/shire/marketing-boss-credentials/FACEBOOK_APP_ID LoadCredential=FACEBOOK_APP_SECRET:/etc/shire/marketing-boss-credentials/FACEBOOK_APP_SECRET LoadCredential=INSTAGRAM_APP_ID:/etc/shire/marketing-boss-credentials/INSTAGRAM_APP_ID LoadCredential=INSTAGRAM_APP_SECRET:/etc/shire/marketing-boss-credentials/INSTAGRAM_APP_SECRET LoadCredential=LINKEDIN_CLIENT_ID:/etc/shire/marketing-boss-credentials/LINKEDIN_CLIENT_ID LoadCredential=LINKEDIN_CLIENT_SECRET:/etc/shire/marketing-boss-credentials/LINKEDIN_CLIENT_SECRET LoadCredential=TIKTOK_CLIENT_KEY:/etc/shire/marketing-boss-credentials/TIKTOK_CLIENT_KEY LoadCredential=TIKTOK_CLIENT_SECRET:/etc/shire/marketing-boss-credentials/TIKTOK_CLIENT_SECRET LoadCredential=GOOGLE_CLIENT_ID:/etc/shire/marketing-boss-credentials/GOOGLE_CLIENT_ID LoadCredential=GOOGLE_CLIENT_SECRET:/etc/shire/marketing-boss-credentials/GOOGLE_CLIENT_SECRET LoadCredential=OAUTH_TOKEN_KEY:/etc/shire/marketing-boss-credentials/OAUTH_TOKEN_KEY # /etc/systemd/system/shire-marketing-boss.service.d/30-ipv4-preference.conf [Service] Environment="NODE_OPTIONS=--dns-result-order=ipv4first" # /etc/systemd/system/shire-marketing-boss.service.d/30-public-oauth-callback.conf [Service] Environment=PUBLIC_BASE_URL=https://marketing-auth.shire3d.com Environment=FACEBOOK_REDIRECT_URI=https://marketing-auth.shire3d.com/api/oauth/callback/facebook Environment=INSTAGRAM_REDIRECT_URI=https://marketing-auth.shire3d.com/api/oauth/callback/instagram Environment=TIKTOK_REDIRECT_URI=https://marketing-auth.shire3d.com/api/oauth/callback/tiktok Environment=GOOGLE_REDIRECT_URI=https://marketing-auth.shire3d.com/api/oauth/callback/youtube_shorts Environment=LINKEDIN_REDIRECT_URI=https://marketing-auth.shire3d.com/api/oauth/callback/linkedin # /etc/systemd/system/shire-marketing-boss.service.d/40-local-oauth-token.conf [Service] Environment="OAUTH_TOKEN_FILE=/var/lib/shire/marketing-boss/private/social-oauth-tokens.enc.json" UMask=0077 --- shire-marketing-boss-worker.service --- ExecStart={ path=/usr/bin/node ; argv[]=/usr/bin/node /home/shire3d/ARMOR/agents/apps/marketing-boss/marketing-boss-worker.js ; ignore_errors=no ; start_time=[Thu 2026-07-30 09:10:48 AWST] ; stop_time=[Thu 2026-07-30 09:10:49 AWST] ; pid=3602207 ; code=exited ; status=0 } WorkingDirectory=/home/shire3d/ARMOR/agents/apps/marketing-boss User=ray Group=ray ActiveState=inactive SubState=dead FragmentPath=/etc/systemd/system/shire-marketing-boss-worker.service [Unit definition] # /etc/systemd/system/shire-marketing-boss-worker.service [Unit] Description=SHiRE Marketing Boss Catalogue and Draft Campaign Run After=shire-marketing-boss.service network-online.target Requires=shire-marketing-boss.service [Service] Type=oneshot User=ray Group=ray WorkingDirectory=/home/shire3d/ARMOR/agents/apps/marketing-boss Environment=PORT=4173 Environment=MARKETING_BOSS_STATE_FILE=/SHiREVault/SHIRE3D/MarketingBoss/state/marketing-boss-state.json Environment=MARKETING_BOSS_OUTPUT_DIR=/SHiREVault/SHIRE3D/MarketingBoss/campaigns ExecStart=/usr/bin/node /home/shire3d/ARMOR/agents/apps/marketing-boss/marketing-boss-worker.js NoNewPrivileges=true PrivateTmp=true # /etc/systemd/system/shire-marketing-boss-worker.service.d/30-ipv4-preference.conf [Service] Environment="NODE_OPTIONS=--dns-result-order=ipv4first" --- shire-marketing-boss-tailnet.service --- ExecStart={ path=/usr/lib/systemd/systemd-socket-proxyd ; argv[]=/usr/lib/systemd/systemd-socket-proxyd 127.0.0.1:4173 ; ignore_errors=no ; start_time=[n/a] ; stop_time=[n/a] ; pid=0 ; code=(null) ; status=0/0 } WorkingDirectory= User= Group= ActiveState=active SubState=running FragmentPath=/etc/systemd/system/shire-marketing-boss-tailnet.service [Unit definition] # /etc/systemd/system/shire-marketing-boss-tailnet.service [Unit] Description=Private Tailnet proxy for SHiRE Marketing Boss Requires=shire-marketing-boss.service After=shire-marketing-boss.service [Service] Type=notify ExecStart=/usr/lib/systemd/systemd-socket-proxyd 127.0.0.1:4173 NoNewPrivileges=true PrivateTmp=true ProtectSystem=strict ProtectHome=true --- shire-marketing-boss.timer --- ActiveState=active SubState=waiting FragmentPath=/etc/systemd/system/shire-marketing-boss.timer [Unit definition] # /etc/systemd/system/shire-marketing-boss.timer [Unit] Description=Refresh SHiRE Marketing Boss public catalogue every six hours [Timer] OnBootSec=2min OnUnitActiveSec=6h Persistent=true Unit=shire-marketing-boss-worker.service [Install] WantedBy=timers.target === AGENT DIRECTORY STRUCTURE === find: warning: you have specified the global option -mindepth after the argument -path, but global options are not positional, i.e., -mindepth affects tests specified before it as well as those specified after it. Please specify global options before other arguments. find: warning: you have specified the global option -maxdepth after the argument -path, but global options are not positional, i.e., -maxdepth affects tests specified before it as well as those specified after it. Please specify global options before other arguments. /home/shire3d/ARMOR/agents/apps /home/shire3d/ARMOR/agents/apps/covercanvas /home/shire3d/ARMOR/agents/apps/covercanvas/base44 /home/shire3d/ARMOR/agents/apps/covercanvas/base44/entities /home/shire3d/ARMOR/agents/apps/covercanvas/base44/functions /home/shire3d/ARMOR/agents/apps/covercanvas/src /home/shire3d/ARMOR/agents/apps/covercanvas/src/api /home/shire3d/ARMOR/agents/apps/covercanvas/src/components /home/shire3d/ARMOR/agents/apps/covercanvas/src/hooks /home/shire3d/ARMOR/agents/apps/covercanvas/src/lib /home/shire3d/ARMOR/agents/apps/covercanvas/src/pages /home/shire3d/ARMOR/agents/apps/covercanvas/src/utils /home/shire3d/ARMOR/agents/apps/flexiforge /home/shire3d/ARMOR/agents/apps/flexiforge/backend /home/shire3d/ARMOR/agents/apps/flexiforge/backend/flexiforge /home/shire3d/ARMOR/agents/apps/flexiforge/data /home/shire3d/ARMOR/agents/apps/flexiforge/data/exports /home/shire3d/ARMOR/agents/apps/flexiforge/data/models /home/shire3d/ARMOR/agents/apps/flexiforge/data/shire_jobs /home/shire3d/ARMOR/agents/apps/flexiforge/examples /home/shire3d/ARMOR/agents/apps/flexiforge/examples/FlexiForge_Test_Output_Package /home/shire3d/ARMOR/agents/apps/flexiforge/frontend /home/shire3d/ARMOR/agents/apps/flexiforge/frontend/src /home/shire3d/ARMOR/agents/apps/flexiforge/integration /home/shire3d/ARMOR/agents/apps/flexiforge/.pytest_cache /home/shire3d/ARMOR/agents/apps/flexiforge/.pytest_cache/v /home/shire3d/ARMOR/agents/apps/flexiforge/tests /home/shire3d/ARMOR/agents/apps/limbforge /home/shire3d/ARMOR/agents/apps/limbforge/base44 /home/shire3d/ARMOR/agents/apps/limbforge/base44/entities /home/shire3d/ARMOR/agents/apps/limbforge/base44/functions /home/shire3d/ARMOR/agents/apps/limbforge/scripts /home/shire3d/ARMOR/agents/apps/limbforge/src /home/shire3d/ARMOR/agents/apps/limbforge/src/adapters /home/shire3d/ARMOR/agents/apps/limbforge/src/api /home/shire3d/ARMOR/agents/apps/limbforge/src/components /home/shire3d/ARMOR/agents/apps/limbforge/src/config /home/shire3d/ARMOR/agents/apps/limbforge/src/hooks /home/shire3d/ARMOR/agents/apps/limbforge/src/lib /home/shire3d/ARMOR/agents/apps/limbforge/src/modes /home/shire3d/ARMOR/agents/apps/limbforge/src/pages /home/shire3d/ARMOR/agents/apps/limbforge/src/services /home/shire3d/ARMOR/agents/apps/limbforge/src/utils /home/shire3d/ARMOR/agents/apps/marketing-boss /home/shire3d/ARMOR/agents/apps/marketing-boss/icons /home/shire3d/ARMOR/agents/apps/marketing-boss/production-pipeline /home/shire3d/ARMOR/agents/apps/marketing-boss/production-pipeline/lib /home/shire3d/ARMOR/agents/apps/marketing-boss/production-pipeline/public /home/shire3d/ARMOR/agents/apps/marketing-boss/production-pipeline/tests /home/shire3d/ARMOR/agents/apps/marketing-boss/tests /home/shire3d/ARMOR/agents/apps/scanforge /home/shire3d/ARMOR/agents/apps/scanforge/base44 /home/shire3d/ARMOR/agents/apps/scanforge/base44/entities /home/shire3d/ARMOR/agents/apps/scanforge/contracts /home/shire3d/ARMOR/agents/apps/scanforge/docs /home/shire3d/ARMOR/agents/apps/scanforge/public /home/shire3d/ARMOR/agents/apps/scanforge/src /home/shire3d/ARMOR/agents/apps/scanforge/src/api /home/shire3d/ARMOR/agents/apps/scanforge/src/components /home/shire3d/ARMOR/agents/apps/scanforge/src/context /home/shire3d/ARMOR/agents/apps/scanforge/src/hooks /home/shire3d/ARMOR/agents/apps/scanforge/src/lib /home/shire3d/ARMOR/agents/apps/scanforge/src/pages /home/shire3d/ARMOR/agents/apps/scanforge/src/services /home/shire3d/ARMOR/agents/apps/scanforge/src/shire /home/shire3d/ARMOR/agents/apps/scanforge/src/utils /home/shire3d/ARMOR/agents/apps/store-doctor-foundation /home/shire3d/ARMOR/agents/apps/store-doctor-foundation/base44 /home/shire3d/ARMOR/agents/apps/store-doctor-foundation/base44/entities /home/shire3d/ARMOR/agents/apps/store-doctor-foundation/base44/functions /home/shire3d/ARMOR/agents/apps/store-doctor-foundation/deploy /home/shire3d/ARMOR/agents/apps/store-doctor-foundation/docs /home/shire3d/ARMOR/agents/apps/store-doctor-foundation/scripts /home/shire3d/ARMOR/agents/apps/store-doctor-foundation/server /home/shire3d/ARMOR/agents/apps/store-doctor-foundation/src /home/shire3d/ARMOR/agents/apps/store-doctor-foundation/src/api /home/shire3d/ARMOR/agents/apps/store-doctor-foundation/src/components /home/shire3d/ARMOR/agents/apps/store-doctor-foundation/src/hooks /home/shire3d/ARMOR/agents/apps/store-doctor-foundation/src/lib /home/shire3d/ARMOR/agents/apps/store-doctor-foundation/src/pages /home/shire3d/ARMOR/agents/apps/store-doctor-foundation/src/utils /home/shire3d/ARMOR/agents/definitions /home/shire3d/ARMOR/agents/definitions/covercanvas /home/shire3d/ARMOR/agents/definitions/flexiforge /home/shire3d/ARMOR/agents/definitions/limbforge /home/shire3d/ARMOR/agents/definitions/marketing-boss /home/shire3d/ARMOR/agents/definitions/scanforge /home/shire3d/ARMOR/agents/definitions/store-doctor /home/shire3d/ARMOR/agents/runtime === AGENT APPLICATION FILE MAP === find: warning: you have specified the global option -maxdepth after the argument -path, but global options are not positional, i.e., -maxdepth affects tests specified before it as well as those specified after it. Please specify global options before other arguments. /home/shire3d/ARMOR/agents/apps/covercanvas/package.json /home/shire3d/ARMOR/agents/apps/covercanvas/package-lock.json /home/shire3d/ARMOR/agents/apps/covercanvas/vite.config.js /home/shire3d/ARMOR/agents/apps/flexiforge/backend/app.py /home/shire3d/ARMOR/agents/apps/flexiforge/frontend/package.json /home/shire3d/ARMOR/agents/apps/flexiforge/frontend/package-lock.json /home/shire3d/ARMOR/agents/apps/flexiforge/frontend/vite.config.js /home/shire3d/ARMOR/agents/apps/flexiforge/integration/shire_tool_manifest.json /home/shire3d/ARMOR/agents/apps/limbforge/package.json /home/shire3d/ARMOR/agents/apps/limbforge/package-lock.json /home/shire3d/ARMOR/agents/apps/limbforge/vite.config.js /home/shire3d/ARMOR/agents/apps/marketing-boss/package.json /home/shire3d/ARMOR/agents/apps/marketing-boss/production-pipeline/package.json /home/shire3d/ARMOR/agents/apps/marketing-boss/production-pipeline/server.js /home/shire3d/ARMOR/agents/apps/marketing-boss/server.js /home/shire3d/ARMOR/agents/apps/scanforge/package.json /home/shire3d/ARMOR/agents/apps/scanforge/package-lock.json /home/shire3d/ARMOR/agents/apps/scanforge/public/manifest.json /home/shire3d/ARMOR/agents/apps/scanforge/public/shire-agent-manifest.json /home/shire3d/ARMOR/agents/apps/scanforge/vite.config.js /home/shire3d/ARMOR/agents/apps/store-doctor-foundation/deploy/shire3d-manager.service /home/shire3d/ARMOR/agents/apps/store-doctor-foundation/package.json /home/shire3d/ARMOR/agents/apps/store-doctor-foundation/package-lock.json /home/shire3d/ARMOR/agents/apps/store-doctor-foundation/vite.config.js /home/shire3d/ARMOR/agents/definitions/covercanvas/agent.manifest.json /home/shire3d/ARMOR/agents/definitions/flexiforge/agent.manifest.json /home/shire3d/ARMOR/agents/definitions/limbforge/agent.manifest.json /home/shire3d/ARMOR/agents/definitions/marketing-boss/agent.manifest.json /home/shire3d/ARMOR/agents/definitions/scanforge/agent.manifest.json /home/shire3d/ARMOR/agents/definitions/store-doctor/agent.manifest.json === PACKAGE SUMMARIES === --- /home/shire3d/ARMOR/agents/apps/covercanvas/package.json --- name: base44-app version: 0.0.0 type: module private: True scripts: ['build', 'dev', 'lint', 'lint:fix', 'preview', 'typecheck'] dependencies: ['@base44/sdk', '@base44/vite-plugin', '@hello-pangea/dnd', '@hookform/resolvers', '@radix-ui/react-accordion', '@radix-ui/react-alert-dialog', '@radix-ui/react-aspect-ratio', '@radix-ui/react-avatar', '@radix-ui/react-checkbox', '@radix-ui/react-collapsible', '@radix-ui/react-context-menu', '@radix-ui/react-dialog', '@radix-ui/react-dropdown-menu', '@radix-ui/react-hover-card', '@radix-ui/react-label', '@radix-ui/react-menubar', '@radix-ui/react-navigation-menu', '@radix-ui/react-popover', '@radix-ui/react-progress', '@radix-ui/react-radio-group', '@radix-ui/react-scroll-area', '@radix-ui/react-select', '@radix-ui/react-separator', '@radix-ui/react-slider', '@radix-ui/react-slot', '@radix-ui/react-switch', '@radix-ui/react-tabs', '@radix-ui/react-toast', '@radix-ui/react-toggle', '@radix-ui/react-toggle-group', '@radix-ui/react-tooltip', '@react-three/drei', '@react-three/fiber', '@stripe/react-stripe-js', '@stripe/stripe-js', '@tanstack/react-query', 'canvas-confetti', 'class-variance-authority', 'clsx', 'cmdk', 'date-fns', 'embla-carousel-react', 'framer-motion', 'html2canvas', 'input-otp', 'jspdf', 'lodash', 'lucide-react', 'moment', 'next-themes', 'react', 'react-day-picker', 'react-dom', 'react-hook-form', 'react-hot-toast', 'react-leaflet', 'react-markdown', 'react-quill', 'react-resizable-panels', 'react-router-dom', 'recharts', 'sonner', 'tailwind-merge', 'tailwindcss-animate', 'three', 'vaul', 'zod'] devDependencies: ['@eslint/js', '@types/node', '@types/react', '@types/react-dom', '@vitejs/plugin-react', 'autoprefixer', 'baseline-browser-mapping', 'eslint', 'eslint-plugin-react', 'eslint-plugin-react-hooks', 'eslint-plugin-react-refresh', 'eslint-plugin-unused-imports', 'globals', 'postcss', 'tailwindcss', 'typescript', 'vite'] engines: None --- /home/shire3d/ARMOR/agents/apps/flexiforge/frontend/package.json --- name: flexiforge-frontend version: 0.2.0 type: module private: True scripts: ['build', 'dev', 'preview'] dependencies: ['three'] devDependencies: ['vite'] engines: None --- /home/shire3d/ARMOR/agents/apps/limbforge/package.json --- name: base44-app version: 0.0.0 type: module private: True scripts: ['build', 'dev', 'lint', 'lint:fix', 'preview', 'typecheck', 'viewport-safety'] dependencies: ['@babylonjs/core', '@base44/sdk', '@base44/vite-plugin', '@hello-pangea/dnd', '@hookform/resolvers', '@radix-ui/react-accordion', '@radix-ui/react-alert-dialog', '@radix-ui/react-aspect-ratio', '@radix-ui/react-avatar', '@radix-ui/react-checkbox', '@radix-ui/react-collapsible', '@radix-ui/react-context-menu', '@radix-ui/react-dialog', '@radix-ui/react-dropdown-menu', '@radix-ui/react-hover-card', '@radix-ui/react-label', '@radix-ui/react-menubar', '@radix-ui/react-navigation-menu', '@radix-ui/react-popover', '@radix-ui/react-progress', '@radix-ui/react-radio-group', '@radix-ui/react-scroll-area', '@radix-ui/react-select', '@radix-ui/react-separator', '@radix-ui/react-slider', '@radix-ui/react-slot', '@radix-ui/react-switch', '@radix-ui/react-tabs', '@radix-ui/react-toast', '@radix-ui/react-toggle', '@radix-ui/react-toggle-group', '@radix-ui/react-tooltip', '@react-three/drei', '@react-three/fiber', '@stripe/react-stripe-js', '@stripe/stripe-js', '@tanstack/react-query', 'canvas-confetti', 'class-variance-authority', 'clsx', 'cmdk', 'date-fns', 'embla-carousel-react', 'framer-motion', 'html2canvas', 'input-otp', 'jspdf', 'lodash', 'lucide-react', 'moment', 'next-themes', 'react', 'react-day-picker', 'react-dom', 'react-hook-form', 'react-hot-toast', 'react-leaflet', 'react-markdown', 'react-quill', 'react-resizable-panels', 'react-router-dom', 'recharts', 'sonner', 'tailwind-merge', 'tailwindcss-animate', 'three', 'vaul', 'zod'] devDependencies: ['@eslint/js', '@types/node', '@types/react', '@types/react-dom', '@vitejs/plugin-react', 'autoprefixer', 'baseline-browser-mapping', 'eslint', 'eslint-plugin-react', 'eslint-plugin-react-hooks', 'eslint-plugin-react-refresh', 'eslint-plugin-unused-imports', 'globals', 'postcss', 'tailwindcss', 'typescript', 'vite'] engines: None --- /home/shire3d/ARMOR/agents/apps/marketing-boss/package.json --- name: shire-marketing-forge-easy version: 1.3.0 type: None private: True scripts: ['start', 'test'] dependencies: [] devDependencies: [] engines: {'node': '>=18'} --- /home/shire3d/ARMOR/agents/apps/marketing-boss/production-pipeline/package.json --- name: shire-marketing-instagram-production-pipeline version: 0.5.2 type: None private: True scripts: ['audit', 'build', 'sync', 'test', 'verify'] dependencies: [] devDependencies: [] engines: {'node': '>=20'} --- /home/shire3d/ARMOR/agents/apps/scanforge/package.json --- name: shire-scanforge version: 0.1.0 type: module private: True scripts: ['build', 'build:shire', 'build:standalone', 'dev', 'lint', 'lint:fix', 'preview', 'preview:shire', 'preview:standalone', 'typecheck'] dependencies: ['@base44/sdk', '@base44/vite-plugin', '@hello-pangea/dnd', '@hookform/resolvers', '@radix-ui/react-accordion', '@radix-ui/react-alert-dialog', '@radix-ui/react-aspect-ratio', '@radix-ui/react-avatar', '@radix-ui/react-checkbox', '@radix-ui/react-collapsible', '@radix-ui/react-context-menu', '@radix-ui/react-dialog', '@radix-ui/react-dropdown-menu', '@radix-ui/react-hover-card', '@radix-ui/react-label', '@radix-ui/react-menubar', '@radix-ui/react-navigation-menu', '@radix-ui/react-popover', '@radix-ui/react-progress', '@radix-ui/react-radio-group', '@radix-ui/react-scroll-area', '@radix-ui/react-select', '@radix-ui/react-separator', '@radix-ui/react-slider', '@radix-ui/react-slot', '@radix-ui/react-switch', '@radix-ui/react-tabs', '@radix-ui/react-toast', '@radix-ui/react-toggle', '@radix-ui/react-toggle-group', '@radix-ui/react-tooltip', '@stripe/react-stripe-js', '@stripe/stripe-js', '@tanstack/react-query', 'canvas-confetti', 'class-variance-authority', 'clsx', 'cmdk', 'date-fns', 'embla-carousel-react', 'framer-motion', 'html2canvas', 'input-otp', 'jspdf', 'lodash', 'lucide-react', 'moment', 'next-themes', 'react', 'react-day-picker', 'react-dom', 'react-hook-form', 'react-hot-toast', 'react-leaflet', 'react-markdown', 'react-quill', 'react-resizable-panels', 'react-router-dom', 'recharts', 'sonner', 'tailwind-merge', 'tailwindcss-animate', 'three', 'vaul', 'zod'] devDependencies: ['@eslint/js', '@types/node', '@types/react', '@types/react-dom', '@vitejs/plugin-react', 'autoprefixer', 'baseline-browser-mapping', 'eslint', 'eslint-plugin-react', 'eslint-plugin-react-hooks', 'eslint-plugin-react-refresh', 'eslint-plugin-unused-imports', 'globals', 'postcss', 'tailwindcss', 'typescript', 'vite'] engines: None --- /home/shire3d/ARMOR/agents/apps/store-doctor-foundation/package.json --- name: shire3d-manager-standalone version: 0.0.0 type: module private: True scripts: ['build', 'check', 'dev', 'dev:server', 'dev:web', 'lint', 'lint:fix', 'preview', 'start', 'typecheck'] dependencies: ['@hello-pangea/dnd', '@hookform/resolvers', '@radix-ui/react-accordion', '@radix-ui/react-alert-dialog', '@radix-ui/react-aspect-ratio', '@radix-ui/react-avatar', '@radix-ui/react-checkbox', '@radix-ui/react-collapsible', '@radix-ui/react-context-menu', '@radix-ui/react-dialog', '@radix-ui/react-dropdown-menu', '@radix-ui/react-hover-card', '@radix-ui/react-label', '@radix-ui/react-menubar', '@radix-ui/react-navigation-menu', '@radix-ui/react-popover', '@radix-ui/react-progress', '@radix-ui/react-radio-group', '@radix-ui/react-scroll-area', '@radix-ui/react-select', '@radix-ui/react-separator', '@radix-ui/react-slider', '@radix-ui/react-slot', '@radix-ui/react-switch', '@radix-ui/react-tabs', '@radix-ui/react-toast', '@radix-ui/react-toggle', '@radix-ui/react-toggle-group', '@radix-ui/react-tooltip', '@stripe/react-stripe-js', '@stripe/stripe-js', '@tanstack/react-query', 'canvas-confetti', 'class-variance-authority', 'clsx', 'cmdk', 'date-fns', 'embla-carousel-react', 'framer-motion', 'html2canvas', 'input-otp', 'jspdf', 'lodash', 'lucide-react', 'moment', 'next-themes', 'react', 'react-day-picker', 'react-dom', 'react-hook-form', 'react-hot-toast', 'react-leaflet', 'react-markdown', 'react-quill', 'react-resizable-panels', 'react-router-dom', 'recharts', 'sonner', 'tailwind-merge', 'tailwindcss-animate', 'three', 'vaul', 'zod'] devDependencies: ['@eslint/js', '@types/node', '@types/react', '@types/react-dom', '@vitejs/plugin-react', 'autoprefixer', 'baseline-browser-mapping', 'eslint', 'eslint-plugin-react', 'eslint-plugin-react-hooks', 'eslint-plugin-react-refresh', 'eslint-plugin-unused-imports', 'globals', 'postcss', 'tailwindcss', 'typescript', 'vite'] engines: None === AGENT CONFIGURATION MAP === --- /home/shire3d/ARMOR/config/agents --- /home/shire3d/ARMOR/config/agents/modules-registry.json top-level keys: ['modules', 'schemaVersion'] /home/shire3d/ARMOR/config/agents/registry.json top-level keys: ['agentHubUrl', 'agents', 'generatedFor', 'orchestrator', 'privateNetworkAccess', 'schemaVersion'] --- /home/shire3d/ARMOR/data/agents --- /home/shire3d/ARMOR/data/agents/install-state.json top-level keys: ['activeAgents', 'backupDir', 'installedAt', 'marketingFirstRunExitCode', 'modules', 'ossiguard', 'serviceUser', 'stagedAgents', 'version'] safe identity: {'version': '0.1.0'} === AGENT HUB AND REGISTRY REFERENCES === /home/shire3d/ARMOR/agents/apps/scanforge/docs/base44-to-shire-agent.patch /home/shire3d/ARMOR/agents/apps/scanforge/src/shire/registerScanForgeAgent.js /home/shire3d/ARMOR/agents/runtime/agent_hub.py === PORT AND ROUTE REFERENCES === /home/shire3d/ARMOR/agents/runtime/agent_hub.py:26:OLLAMA_URL = os.environ.get("OLLAMA_URL", "http://127.0.0.1:11434").rstrip("/") /home/shire3d/ARMOR/agents/runtime/agent_hub.py:27:MARKETING_URL = os.environ.get("MARKETING_BOSS_URL", "http://127.0.0.1:4173").rstrip("/") /home/shire3d/ARMOR/agents/runtime/agent_hub.py:28:HOST = os.environ.get("SHIRE_AGENT_HUB_HOST", "127.0.0.1") /home/shire3d/ARMOR/agents/runtime/agent_hub.py:29:PORT = int(os.environ.get("SHIRE_AGENT_HUB_PORT", "8770")) /home/shire3d/ARMOR/agents/runtime/agent_hub.py:103: status, payload = http_json(f"{OLLAMA_URL}/api/tags", timeout=2.0) /home/shire3d/ARMOR/agents/runtime/agent_hub.py:182: code, value = http_json(f"{MARKETING_URL}/api/health", timeout=2.0) /home/shire3d/ARMOR/agents/runtime/agent_hub.py:220: f"{OLLAMA_URL}/api/chat", /home/shire3d/ARMOR/agents/runtime/agent_hub.py:257: cards.append(f'''

{name}

{'ACTIVE' if enabled else 'STAGED'}

{desc}

{status}
{open_button}Status JSON
''') /home/shire3d/ARMOR/agents/runtime/agent_hub.py:304: if path == "/api/v1/agents": /home/shire3d/ARMOR/agents/runtime/agent_hub.py:306: match = re.fullmatch(r"/api/v1/agents/([a-z0-9-]+)(?:/status)?", path) /home/shire3d/ARMOR/agents/runtime/agent_hub.py:316: match = re.fullmatch(r"/api/v1/agents/([a-z0-9-]+)/(chat|tasks)", path) /home/shire3d/ARMOR/agents/definitions/marketing-boss/agent.manifest.json:7: "localUrl": "http://127.0.0.1:4173", /home/shire3d/ARMOR/agents/apps/scanforge/src/shire/registerScanForgeAgent.js:6: statusEndpoint: '/api/v1/agents/scanforge/status', /home/shire3d/ARMOR/agents/apps/scanforge/src/shire/registerScanForgeAgent.js:7: capabilitiesEndpoint: '/api/v1/agents/scanforge/capabilities', /home/shire3d/ARMOR/agents/apps/scanforge/src/services/projectRepository.js:15: const { base44 } = await import('@/api/base44Client'); /home/shire3d/ARMOR/agents/apps/scanforge/src/services/projectRepository.js:44: const { base44 } = await import('@/api/base44Client'); /home/shire3d/ARMOR/agents/apps/scanforge/src/pages/ResetPassword.jsx:3:import { base44 } from "@/api/base44Client"; /home/shire3d/ARMOR/agents/apps/scanforge/src/pages/Login.jsx:3:import { base44 } from "@/api/base44Client"; /home/shire3d/ARMOR/agents/apps/scanforge/src/pages/ForgotPassword.jsx:3:import { base44 } from "@/api/base44Client"; /home/shire3d/ARMOR/agents/apps/scanforge/src/pages/Register.jsx:3:import { base44 } from "@/api/base44Client"; /home/shire3d/ARMOR/agents/apps/scanforge/src/lib/appConfig.js:10: shireModuleContextUrl: import.meta.env.VITE_SHIRE_MODULE_CONTEXT_URL || '/api/v1/modules/scanforge/context', /home/shire3d/ARMOR/agents/apps/scanforge/src/lib/agentTypes.js:27: 'GET /api/v1/agents/scanforge', /home/shire3d/ARMOR/agents/apps/scanforge/src/lib/agentTypes.js:28: 'GET /api/v1/agents/scanforge/status', /home/shire3d/ARMOR/agents/apps/scanforge/src/lib/agentTypes.js:29: 'GET /api/v1/agents/scanforge/capabilities', /home/shire3d/ARMOR/agents/apps/scanforge/src/lib/agentTypes.js:30: 'POST /api/v1/agents/scanforge/start', /home/shire3d/ARMOR/agents/apps/scanforge/src/lib/agentTypes.js:31: 'POST /api/v1/agents/scanforge/stop', /home/shire3d/ARMOR/agents/apps/scanforge/src/lib/agentTypes.js:32: 'POST /api/v1/agents/scanforge/restart', /home/shire3d/ARMOR/agents/apps/scanforge/src/lib/agentTypes.js:33: 'GET /api/v1/agents/scanforge/projects', /home/shire3d/ARMOR/agents/apps/scanforge/src/lib/agentTypes.js:34: 'GET /api/v1/agents/scanforge/jobs', /home/shire3d/ARMOR/agents/apps/scanforge/src/lib/agentTypes.js:35: 'POST /api/v1/agents/scanforge/actions', /home/shire3d/ARMOR/agents/apps/scanforge/src/lib/ShireScanBridgeClient.js:28: health() { return this.request('/api/v1/health'); } /home/shire3d/ARMOR/agents/apps/scanforge/src/lib/ShireScanBridgeClient.js:29: device() { return this.request('/api/v1/device'); } /home/shire3d/ARMOR/agents/apps/scanforge/src/lib/ShireScanBridgeClient.js:30: capabilities() { return this.request('/api/v1/capabilities'); } /home/shire3d/ARMOR/agents/apps/scanforge/src/lib/ShireScanBridgeClient.js:31: pair(code) { return this.post('/api/v1/pair', { code }); } /home/shire3d/ARMOR/agents/apps/scanforge/src/lib/ShireScanBridgeClient.js:33: startCalibration(body) { return this.post('/api/v1/calibration/start', body); } /home/shire3d/ARMOR/agents/apps/scanforge/src/lib/ShireScanBridgeClient.js:34: calibration(id) { return this.request(`/api/v1/calibration/${id}`); } /home/shire3d/ARMOR/agents/apps/scanforge/src/lib/ShireScanBridgeClient.js:35: createProject(body) { return this.post('/api/v1/projects', body); } /home/shire3d/ARMOR/agents/apps/scanforge/src/lib/ShireScanBridgeClient.js:36: getProject(id) { return this.request(`/api/v1/projects/${id}`); } /home/shire3d/ARMOR/agents/apps/scanforge/src/lib/ShireScanBridgeClient.js:37: capture(id, action, body) { return this.post(`/api/v1/projects/${id}/capture/${action}`, body); } /home/shire3d/ARMOR/agents/apps/scanforge/src/lib/ShireScanBridgeClient.js:38: captureStatus(id) { return this.request(`/api/v1/projects/${id}/capture/status`); } /home/shire3d/ARMOR/agents/apps/scanforge/src/lib/ShireScanBridgeClient.js:39: process(id, body) { return this.post(`/api/v1/projects/${id}/process`, body); } /home/shire3d/ARMOR/agents/apps/scanforge/src/lib/ShireScanBridgeClient.js:40: processStatus(id) { return this.request(`/api/v1/projects/${id}/process/status`); } /home/shire3d/ARMOR/agents/apps/scanforge/src/lib/ShireScanBridgeClient.js:41: meshAction(id, body) { return this.post(`/api/v1/projects/${id}/mesh/actions`, body); } /home/shire3d/ARMOR/agents/apps/scanforge/src/lib/ShireScanBridgeClient.js:42: meshVersions(id) { return this.request(`/api/v1/projects/${id}/mesh/versions`); } /home/shire3d/ARMOR/agents/apps/scanforge/src/lib/ShireScanBridgeClient.js:43: addMeasurement(id, body) { return this.post(`/api/v1/projects/${id}/measurements`, body); } /home/shire3d/ARMOR/agents/apps/scanforge/src/lib/ShireScanBridgeClient.js:44: printCheck(id, body) { return this.post(`/api/v1/projects/${id}/print-check`, body); } /home/shire3d/ARMOR/agents/apps/scanforge/src/lib/ShireScanBridgeClient.js:45: createExport(id, body) { return this.post(`/api/v1/projects/${id}/exports`, body); } /home/shire3d/ARMOR/agents/apps/scanforge/src/lib/ShireScanBridgeClient.js:46: getExport(id, exportId) { return this.request(`/api/v1/projects/${id}/exports/${exportId}`); } /home/shire3d/ARMOR/agents/apps/scanforge/src/lib/AuthContext.jsx:2:import { base44 } from '@/api/base44Client'; /home/shire3d/ARMOR/agents/apps/scanforge/src/lib/AuthContext.jsx:29: baseURL: `/api/apps/public`, /home/shire3d/ARMOR/agents/apps/scanforge/src/lib/ShireScanForgeAgentClient.js:25: getMetadata() { return this.request('/api/v1/agents/scanforge'); } /home/shire3d/ARMOR/agents/apps/scanforge/src/lib/ShireScanForgeAgentClient.js:26: getStatus() { return this.request('/api/v1/agents/scanforge/status'); } /home/shire3d/ARMOR/agents/apps/scanforge/src/lib/ShireScanForgeAgentClient.js:27: getCapabilities() { return this.request('/api/v1/agents/scanforge/capabilities'); } /home/shire3d/ARMOR/agents/apps/scanforge/src/lib/ShireScanForgeAgentClient.js:28: start() { return this.request('/api/v1/agents/scanforge/start', { method: 'POST' }); } /home/shire3d/ARMOR/agents/apps/scanforge/src/lib/ShireScanForgeAgentClient.js:29: stop() { return this.request('/api/v1/agents/scanforge/stop', { method: 'POST' }); } /home/shire3d/ARMOR/agents/apps/scanforge/src/lib/ShireScanForgeAgentClient.js:30: restart() { return this.request('/api/v1/agents/scanforge/restart', { method: 'POST' }); } /home/shire3d/ARMOR/agents/apps/scanforge/src/lib/ShireScanForgeAgentClient.js:31: listProjects() { return this.request('/api/v1/agents/scanforge/projects'); } /home/shire3d/ARMOR/agents/apps/scanforge/src/lib/ShireScanForgeAgentClient.js:32: listJobs() { return this.request('/api/v1/agents/scanforge/jobs'); } /home/shire3d/ARMOR/agents/apps/scanforge/src/lib/ShireScanForgeAgentClient.js:36: return this.request('/api/v1/agents/scanforge/actions', { method: 'POST', body: JSON.stringify(action) }); /home/shire3d/ARMOR/agents/apps/scanforge/src/lib/shireIntegrations.js:21: const result = await scanBridgeClient.request('/api/v1/storage/shirevault/verify', { method: 'POST', body: JSON.stringify({ path: SHIREVAULT_BACKUP_PATH }) }); /home/shire3d/ARMOR/agents/apps/scanforge/src/lib/httpPaths.js:10: if (cleanBase.endsWith('/api') && cleanPath.startsWith('/api/')) { /home/shire3d/ARMOR/agents/apps/scanforge/public/shire-agent-manifest.json:17: "transport": ["same-origin-https", "authenticated-websocket", "tailscale-private-network"], /home/shire3d/ARMOR/agents/apps/scanforge/.env.shire:5:VITE_SHIRE_MODULE_CONTEXT_URL=/api/v1/modules/scanforge/context /home/shire3d/ARMOR/agents/apps/scanforge/AGENTS.md:23:- `src/api/base44Client.js`: frontend Base44 SDK client. /home/shire3d/ARMOR/agents/apps/scanforge/docs/FILE_INVENTORY.txt:46:src/api/base44Client.js /home/shire3d/ARMOR/agents/apps/scanforge/docs/SHIRE_INTEGRATION_HANDOVER.md:36:4. Same-origin fetch fallback at `/api/v1/modules/scanforge/context` /home/shire3d/ARMOR/agents/apps/scanforge/docs/SHIRE_INTEGRATION_HANDOVER.md:57:- `GET /api/v1/agents/scanforge` /home/shire3d/ARMOR/agents/apps/scanforge/docs/SHIRE_INTEGRATION_HANDOVER.md:58:- `GET /api/v1/agents/scanforge/status` /home/shire3d/ARMOR/agents/apps/scanforge/docs/SHIRE_INTEGRATION_HANDOVER.md:59:- `GET /api/v1/agents/scanforge/capabilities` /home/shire3d/ARMOR/agents/apps/scanforge/docs/SHIRE_INTEGRATION_HANDOVER.md:60:- `POST /api/v1/agents/scanforge/start` /home/shire3d/ARMOR/agents/apps/scanforge/docs/SHIRE_INTEGRATION_HANDOVER.md:61:- `POST /api/v1/agents/scanforge/stop` /home/shire3d/ARMOR/agents/apps/scanforge/docs/SHIRE_INTEGRATION_HANDOVER.md:62:- `POST /api/v1/agents/scanforge/restart` /home/shire3d/ARMOR/agents/apps/scanforge/docs/SHIRE_INTEGRATION_HANDOVER.md:63:- `GET /api/v1/agents/scanforge/projects` /home/shire3d/ARMOR/agents/apps/scanforge/docs/SHIRE_INTEGRATION_HANDOVER.md:64:- `GET /api/v1/agents/scanforge/jobs` /home/shire3d/ARMOR/agents/apps/scanforge/docs/SHIRE_INTEGRATION_HANDOVER.md:65:- `POST /api/v1/agents/scanforge/actions` /home/shire3d/ARMOR/agents/apps/scanforge/docs/ORIGINAL_EXPORT_AUDIT.md:18:1. The default SHiRE API path could resolve as `/api/api/v1/...`. /home/shire3d/ARMOR/agents/apps/scanforge/docs/base44-to-shire-agent.patch:9:+VITE_SHIRE_MODULE_CONTEXT_URL=/api/v1/modules/scanforge/context /home/shire3d/ARMOR/agents/apps/scanforge/docs/base44-to-shire-agent.patch:201:+1. The default SHiRE API path could resolve as `/api/api/v1/...`. /home/shire3d/ARMOR/agents/apps/scanforge/docs/base44-to-shire-agent.patch:274:+4. Same-origin fetch fallback at `/api/v1/modules/scanforge/context` /home/shire3d/ARMOR/agents/apps/scanforge/docs/base44-to-shire-agent.patch:295:+- `GET /api/v1/agents/scanforge` /home/shire3d/ARMOR/agents/apps/scanforge/docs/base44-to-shire-agent.patch:296:+- `GET /api/v1/agents/scanforge/status` /home/shire3d/ARMOR/agents/apps/scanforge/docs/base44-to-shire-agent.patch:297:+- `GET /api/v1/agents/scanforge/capabilities` /home/shire3d/ARMOR/agents/apps/scanforge/docs/base44-to-shire-agent.patch:298:+- `POST /api/v1/agents/scanforge/start` /home/shire3d/ARMOR/agents/apps/scanforge/docs/base44-to-shire-agent.patch:299:+- `POST /api/v1/agents/scanforge/stop` /home/shire3d/ARMOR/agents/apps/scanforge/docs/base44-to-shire-agent.patch:300:+- `POST /api/v1/agents/scanforge/restart` /home/shire3d/ARMOR/agents/apps/scanforge/docs/base44-to-shire-agent.patch:301:+- `GET /api/v1/agents/scanforge/projects` /home/shire3d/ARMOR/agents/apps/scanforge/docs/base44-to-shire-agent.patch:302:+- `GET /api/v1/agents/scanforge/jobs` /home/shire3d/ARMOR/agents/apps/scanforge/docs/base44-to-shire-agent.patch:303:+- `POST /api/v1/agents/scanforge/actions` /home/shire3d/ARMOR/agents/apps/scanforge/docs/base44-to-shire-agent.patch:410:++VITE_SHIRE_MODULE_CONTEXT_URL=/api/v1/modules/scanforge/context /home/shire3d/ARMOR/agents/apps/scanforge/docs/base44-to-shire-agent.patch:602:++1. The default SHiRE API path could resolve as `/api/api/v1/...`. /home/shire3d/ARMOR/agents/apps/scanforge/docs/base44-to-shire-agent.patch:675:++4. Same-origin fetch fallback at `/api/v1/modules/scanforge/context` /home/shire3d/ARMOR/agents/apps/scanforge/docs/base44-to-shire-agent.patch:696:++- `GET /api/v1/agents/scanforge` /home/shire3d/ARMOR/agents/apps/scanforge/docs/base44-to-shire-agent.patch:697:++- `GET /api/v1/agents/scanforge/status` /home/shire3d/ARMOR/agents/apps/scanforge/docs/base44-to-shire-agent.patch:698:++- `GET /api/v1/agents/scanforge/capabilities` /home/shire3d/ARMOR/agents/apps/scanforge/docs/base44-to-shire-agent.patch:699:++- `POST /api/v1/agents/scanforge/start` /home/shire3d/ARMOR/agents/apps/scanforge/docs/base44-to-shire-agent.patch:700:++- `POST /api/v1/agents/scanforge/stop` /home/shire3d/ARMOR/agents/apps/scanforge/docs/base44-to-shire-agent.patch:701:++- `POST /api/v1/agents/scanforge/restart` /home/shire3d/ARMOR/agents/apps/scanforge/docs/base44-to-shire-agent.patch:702:++- `GET /api/v1/agents/scanforge/projects` /home/shire3d/ARMOR/agents/apps/scanforge/docs/base44-to-shire-agent.patch:703:++- `GET /api/v1/agents/scanforge/jobs` /home/shire3d/ARMOR/agents/apps/scanforge/docs/base44-to-shire-agent.patch:704:++- `POST /api/v1/agents/scanforge/actions` /home/shire3d/ARMOR/agents/apps/scanforge/docs/base44-to-shire-agent.patch:913:+ "transport": ["same-origin-https", "authenticated-websocket", "tailscale-private-network"], /home/shire3d/ARMOR/agents/apps/scanforge/docs/base44-to-shire-agent.patch:1168:-import { base44 } from '@/api/base44Client'; /home/shire3d/ARMOR/agents/apps/scanforge/docs/base44-to-shire-agent.patch:1598:- const res = await fetch(`${appConfig.shireApiBaseUrl || '/api'}/api/v1/agents/scanforge`, { headers: { Accept: 'application/json' } }); /home/shire3d/ARMOR/agents/apps/scanforge/docs/base44-to-shire-agent.patch:1674:-import { base44 } from '@/api/base44Client'; /home/shire3d/ARMOR/agents/apps/scanforge/docs/base44-to-shire-agent.patch:1803: health() { return this.request('/api/v1/health'); } /home/shire3d/ARMOR/agents/apps/scanforge/docs/base44-to-shire-agent.patch:1804: device() { return this.request('/api/v1/device'); } /home/shire3d/ARMOR/agents/apps/scanforge/docs/base44-to-shire-agent.patch:1805: capabilities() { return this.request('/api/v1/capabilities'); } /home/shire3d/ARMOR/agents/apps/scanforge/docs/base44-to-shire-agent.patch:1807: printCheck(id, body) { return this.post(`/api/v1/projects/${id}/print-check`, body); } /home/shire3d/ARMOR/agents/apps/scanforge/docs/base44-to-shire-agent.patch:1808: createExport(id, body) { return this.post(`/api/v1/projects/${id}/exports`, body); } /home/shire3d/ARMOR/agents/apps/scanforge/docs/base44-to-shire-agent.patch:1809: getExport(id, exportId) { return this.request(`/api/v1/projects/${id}/exports/${exportId}`); } /home/shire3d/ARMOR/agents/apps/scanforge/docs/base44-to-shire-agent.patch:1862:- getMetadata() { return this._request('/api/v1/agents/scanforge'); } /home/shire3d/ARMOR/agents/apps/scanforge/docs/base44-to-shire-agent.patch:1863:- getStatus() { return this._request('/api/v1/agents/scanforge/status'); } /home/shire3d/ARMOR/agents/apps/scanforge/docs/base44-to-shire-agent.patch:1864:- getCapabilities() { return this._request('/api/v1/agents/scanforge/capabilities'); } /home/shire3d/ARMOR/agents/apps/scanforge/docs/base44-to-shire-agent.patch:1865:- start() { return this._request('/api/v1/agents/scanforge/start', { method: 'POST' }); } /home/shire3d/ARMOR/agents/apps/scanforge/docs/base44-to-shire-agent.patch:1866:- stop() { return this._request('/api/v1/agents/scanforge/stop', { method: 'POST' }); } /home/shire3d/ARMOR/agents/apps/scanforge/docs/base44-to-shire-agent.patch:1867:- restart() { return this._request('/api/v1/agents/scanforge/restart', { method: 'POST' }); } /home/shire3d/ARMOR/agents/apps/scanforge/docs/base44-to-shire-agent.patch:1868:- listProjects() { return this._request('/api/v1/agents/scanforge/projects'); } /home/shire3d/ARMOR/agents/apps/scanforge/docs/base44-to-shire-agent.patch:1869:- listJobs() { return this._request('/api/v1/agents/scanforge/jobs'); } /home/shire3d/ARMOR/agents/apps/scanforge/docs/base44-to-shire-agent.patch:1870:+ getMetadata() { return this.request('/api/v1/agents/scanforge'); } /home/shire3d/ARMOR/agents/apps/scanforge/docs/base44-to-shire-agent.patch:1871:+ getStatus() { return this.request('/api/v1/agents/scanforge/status'); } /home/shire3d/ARMOR/agents/apps/scanforge/docs/base44-to-shire-agent.patch:1872:+ getCapabilities() { return this.request('/api/v1/agents/scanforge/capabilities'); } /home/shire3d/ARMOR/agents/apps/scanforge/docs/base44-to-shire-agent.patch:1873:+ start() { return this.request('/api/v1/agents/scanforge/start', { method: 'POST' }); } /home/shire3d/ARMOR/agents/apps/scanforge/docs/base44-to-shire-agent.patch:1874:+ stop() { return this.request('/api/v1/agents/scanforge/stop', { method: 'POST' }); } /home/shire3d/ARMOR/agents/apps/scanforge/docs/base44-to-shire-agent.patch:1875:+ restart() { return this.request('/api/v1/agents/scanforge/restart', { method: 'POST' }); } /home/shire3d/ARMOR/agents/apps/scanforge/docs/base44-to-shire-agent.patch:1876:+ listProjects() { return this.request('/api/v1/agents/scanforge/projects'); } /home/shire3d/ARMOR/agents/apps/scanforge/docs/base44-to-shire-agent.patch:1877:+ listJobs() { return this.request('/api/v1/agents/scanforge/jobs'); } /home/shire3d/ARMOR/agents/apps/scanforge/docs/base44-to-shire-agent.patch:1881:- return this._request('/api/v1/agents/scanforge/actions', { method: 'POST', body: JSON.stringify(action) }); /home/shire3d/ARMOR/agents/apps/scanforge/docs/base44-to-shire-agent.patch:1883:+ return this.request('/api/v1/agents/scanforge/actions', { method: 'POST', body: JSON.stringify(action) }); /home/shire3d/ARMOR/agents/apps/scanforge/docs/base44-to-shire-agent.patch:1921:+ shireModuleContextUrl: import.meta.env.VITE_SHIRE_MODULE_CONTEXT_URL || '/api/v1/modules/scanforge/context', /home/shire3d/ARMOR/agents/apps/scanforge/docs/base44-to-shire-agent.patch:1959:+ if (cleanBase.endsWith('/api') && cleanPath.startsWith('/api/')) { /home/shire3d/ARMOR/agents/apps/scanforge/docs/base44-to-shire-agent.patch:2220:-import React, { useState } from 'react'; import { useNavigate } from 'react-router-dom'; import { base44 } from '@/api/base44Client'; /home/shire3d/ARMOR/agents/apps/scanforge/docs/base44-to-shire-agent.patch:2298:-import React from 'react'; import { useQuery } from '@tanstack/react-query'; import { base44 } from '@/api/base44Client'; import { FolderOpen } from 'lucide-react'; /home/shire3d/ARMOR/agents/apps/scanforge/docs/base44-to-shire-agent.patch:2355:+ const { base44 } = await import('@/api/base44Client'); /home/shire3d/ARMOR/agents/apps/scanforge/docs/base44-to-shire-agent.patch:2384:+ const { base44 } = await import('@/api/base44Client'); /home/shire3d/ARMOR/agents/apps/scanforge/docs/base44-to-shire-agent.patch:2408:+ statusEndpoint: '/api/v1/agents/scanforge/status', /home/shire3d/ARMOR/agents/apps/scanforge/docs/base44-to-shire-agent.patch:2409:+ capabilitiesEndpoint: '/api/v1/agents/scanforge/capabilities', /home/shire3d/ARMOR/agents/apps/scanforge/docs/SOURCE_SHA256SUMS.txt:46:35647ef13677f2b23399843531e82cb49521bcd6cd09f00e23888b0d7973cf2e ./src/api/base44Client.js /home/shire3d/ARMOR/agents/apps/limbforge/src/services/measurementGeometryService.js:1:import { base44 } from '@/api/base44Client'; /home/shire3d/ARMOR/agents/apps/limbforge/src/pages/DesignYourCover.jsx:3:import { base44 } from '@/api/base44Client'; /home/shire3d/ARMOR/agents/apps/limbforge/src/pages/ResetPassword.jsx:3:import { base44 } from "@/api/base44Client"; /home/shire3d/ARMOR/agents/apps/limbforge/src/pages/OssiguardWizard.jsx:10:import { base44 } from '@/api/base44Client'; /home/shire3d/ARMOR/agents/apps/limbforge/src/pages/Workshop3D.jsx:4:import { base44 } from '@/api/base44Client'; /home/shire3d/ARMOR/agents/apps/limbforge/src/pages/Login.jsx:3:import { base44 } from "@/api/base44Client"; /home/shire3d/ARMOR/agents/apps/limbforge/src/pages/InvitationAccept.jsx:5:import { base44 } from '@/api/base44Client'; /home/shire3d/ARMOR/agents/apps/limbforge/src/pages/ForgotPassword.jsx:3:import { base44 } from "@/api/base44Client"; /home/shire3d/ARMOR/agents/apps/limbforge/src/pages/ViewportV2Test.jsx:8:import { base44 } from '@/api/base44Client'; /home/shire3d/ARMOR/agents/apps/limbforge/src/pages/Register.jsx:3:import { base44 } from "@/api/base44Client"; /home/shire3d/ARMOR/agents/apps/limbforge/src/lib/PageNotFound.jsx:2:import { base44 } from '@/api/base44Client'; /home/shire3d/ARMOR/agents/apps/limbforge/src/lib/AuthContext.jsx:2:import { base44 } from '@/api/base44Client'; /home/shire3d/ARMOR/agents/apps/limbforge/src/lib/AuthContext.jsx:29: baseURL: `/api/apps/public`, /home/shire3d/ARMOR/agents/apps/limbforge/src/components/workshop3d/ContextInspectorV2.jsx:3:import { base44 } from '@/api/base44Client'; /home/shire3d/ARMOR/agents/apps/limbforge/src/adapters/Base44DatabaseAdapter.js:1:import { base44 } from '@/api/base44Client'; /home/shire3d/ARMOR/agents/apps/limbforge/src/adapters/Base44FileStorageAdapter.js:1:import { base44 } from '@/api/base44Client'; /home/shire3d/ARMOR/agents/apps/limbforge/src/adapters/Base44AuthAdapter.js:1:import { base44 } from '@/api/base44Client'; /home/shire3d/ARMOR/agents/apps/limbforge/AGENTS.md:23:- `src/api/base44Client.js`: frontend Base44 SDK client. /home/shire3d/ARMOR/agents/apps/flexiforge/backend/app.py:59:@app.get("/api/health") /home/shire3d/ARMOR/agents/apps/flexiforge/backend/app.py:71:@app.post("/api/upload") /home/shire3d/ARMOR/agents/apps/flexiforge/backend/app.py:98: "model_url": f"/api/models/{model_id}", /home/shire3d/ARMOR/agents/apps/flexiforge/backend/app.py:104:@app.get("/api/models/{model_id}") /home/shire3d/ARMOR/agents/apps/flexiforge/backend/app.py:109:@app.post("/api/analyse-joint") /home/shire3d/ARMOR/agents/apps/flexiforge/backend/app.py:127:@app.post("/api/forge") /home/shire3d/ARMOR/agents/apps/flexiforge/backend/app.py:160: result["download_url"] = f"/api/download/{result['package_id']}" /home/shire3d/ARMOR/agents/apps/flexiforge/backend/app.py:161: result["preview_url"] = f"/api/export-file/{result['package_id']}/{result['files']['assembled']}" /home/shire3d/ARMOR/agents/apps/flexiforge/backend/app.py:165:@app.get("/api/download/{package_id}") /home/shire3d/ARMOR/agents/apps/flexiforge/backend/app.py:173:@app.get("/api/export-file/{package_id}/{filename}") /home/shire3d/ARMOR/agents/apps/flexiforge/backend/app.py:184:@app.get("/api/suggest-joints/{model_id}") /home/shire3d/ARMOR/agents/apps/flexiforge/backend/app.py:190:@app.post("/api/shire/jobs") /home/shire3d/ARMOR/agents/apps/flexiforge/backend/app.py:205:@app.get("/api/shire/jobs/{job_id}") /home/shire3d/ARMOR/agents/apps/flexiforge/backend/app.py:213:@app.post("/api/shire/jobs/{job_id}/select") /home/shire3d/ARMOR/agents/apps/flexiforge/backend/app.py:221:@app.post("/api/shire/jobs/{job_id}/request-design-approval") /home/shire3d/ARMOR/agents/apps/flexiforge/backend/app.py:229:@app.post("/api/shire/jobs/{job_id}/approve-design") /home/shire3d/ARMOR/agents/apps/flexiforge/backend/app.py:237:@app.post("/api/shire/jobs/{job_id}/forge") /home/shire3d/ARMOR/agents/apps/flexiforge/backend/app.py:245:@app.get("/api/shire/jobs/{job_id}/preview") /home/shire3d/ARMOR/agents/apps/flexiforge/backend/app.py:262:@app.post("/api/shire/jobs/{job_id}/validate") /home/shire3d/ARMOR/agents/apps/flexiforge/backend/app.py:270:@app.post("/api/shire/jobs/{job_id}/request-export-approval") /home/shire3d/ARMOR/agents/apps/flexiforge/backend/app.py:278:@app.post("/api/shire/jobs/{job_id}/approve-export") /home/shire3d/ARMOR/agents/apps/flexiforge/backend/app.py:286:@app.post("/api/shire/jobs/{job_id}/export") /home/shire3d/ARMOR/agents/apps/flexiforge/frontend/src/main.js:133: const form=new FormData(); form.append('file',file); const data=await api('/api/upload',{method:'POST',body:form}); resetShireJob(); state.modelId=data.model_id; state.modelName=data.original_name; /home/shire3d/ARMOR/agents/apps/flexiforge/frontend/src/main.js:167:async function analyseJoint(){ if(!state.marker)return; try{ const data=await api('/api/analyse-joint',{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({model_id:state.modelId,joint:jointPayload()})}); state.candidates=data.candidates; if(state.selectedType==='auto')state.selectedType=data.candidates[0].type; renderCandidates(); if(data.warning)toast(data.warning,true); }catch(e){toast(e.message,true);} } /home/shire3d/ARMOR/agents/apps/flexiforge/frontend/src/main.js:172: try{state.shireJob=await api(`/api/shire/jobs/${state.shireJob.job_id}/select`,{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({suggestion_id:state.shireJob.selected_joint.suggestion_id,requested_type:c.type})});state.designToken=null;state.exportToken=null;document.querySelector('#designToken').textContent='No design token';document.querySelector('#exportToken').textContent='No export token';document.querySelector('#shireGateMessage').textContent=`Mechanism changed to ${c.name}. A fresh design approval is required.`;updateShireControls();} /home/shire3d/ARMOR/agents/apps/flexiforge/frontend/src/main.js:177:async function forge(){ if(!state.marker)return; busy(true); try{ const payload={model_id:state.modelId,joint:jointPayload(),output_name:document.querySelector('#outputName').value||'flexiforge_output',layout_gap_mm:10}; const result=await api('/api/forge',{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify(payload)}); document.querySelector('#downloadSection').style.display='block';document.querySelector('#downloadSummary').textContent=`${result.report.joint_type.replace('_',' ')} · ${result.report.clearance_mm} mm clearance · includes print layout and engineering report.`;document.querySelector('#downloadLink').href=result.download_url; toast('Fidget package forged successfully.'); /home/shire3d/ARMOR/agents/apps/flexiforge/frontend/src/main.js:224: state.shireJob=await api('/api/shire/jobs',{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify(payload)}); /home/shire3d/ARMOR/agents/apps/flexiforge/frontend/src/main.js:233: state.shireJob=await api(`/api/shire/jobs/${state.shireJob.job_id}/select`,{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({suggestion_id:s.suggestion_id,requested_type:'auto'})}); /home/shire3d/ARMOR/agents/apps/flexiforge/frontend/src/main.js:243: try{const data=await api(`/api/shire/jobs/${state.shireJob.job_id}/request-design-approval`,{method:'POST'});state.designToken=data.approval_token;document.querySelector('#designToken').textContent=data.approval_token;document.querySelector('#shireGateMessage').textContent='Review the selected location and mechanism. Approving binds this exact design hash.';updateShireControls();} /home/shire3d/ARMOR/agents/apps/flexiforge/frontend/src/main.js:247: try{state.shireJob=await api(`/api/shire/jobs/${state.shireJob.job_id}/approve-design`,{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({token:state.designToken})});document.querySelector('#shireGateMessage').textContent='Design approved. SHiRE may now ask FlexiForge to generate geometry locally.';updateShireControls();toast('Design approval recorded.');} /home/shire3d/ARMOR/agents/apps/flexiforge/frontend/src/main.js:252: try{state.shireJob=await api(`/api/shire/jobs/${state.shireJob.job_id}/forge`,{method:'POST'});document.querySelector('#shireGateMessage').textContent='Geometry generated locally. Validation is required before export approval.';updateShireControls();toast('Approved design forged locally.'); /home/shire3d/ARMOR/agents/apps/flexiforge/frontend/src/main.js:253: const preview=await fetch(`/api/shire/jobs/${state.shireJob.job_id}/preview`); if(preview.ok)showForgedPreview(await preview.arrayBuffer()); /home/shire3d/ARMOR/agents/apps/flexiforge/frontend/src/main.js:258: try{state.shireJob=await api(`/api/shire/jobs/${state.shireJob.job_id}/validate`,{method:'POST'});const result=state.shireJob.validation;document.querySelector('#shireGateMessage').textContent=`Validation: ${result.status}. ${result.warnings.length?result.warnings.join(' '):'No automatic geometry warnings.'}`;updateShireControls();toast(`Validation complete: ${result.status}`);} /home/shire3d/ARMOR/agents/apps/flexiforge/frontend/src/main.js:262: try{const data=await api(`/api/shire/jobs/${state.shireJob.job_id}/request-export-approval`,{method:'POST'});state.exportToken=data.approval_token;state.shireJob=await api(`/api/shire/jobs/${state.shireJob.job_id}`);document.querySelector('#exportToken').textContent=data.approval_token;document.querySelector('#shireGateMessage').textContent='Review validation results. This approval authorises only the current verified package.';updateShireControls();} /home/shire3d/ARMOR/agents/apps/flexiforge/frontend/src/main.js:266: try{state.shireJob=await api(`/api/shire/jobs/${state.shireJob.job_id}/approve-export`,{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({token:state.exportToken})});document.querySelector('#shireGateMessage').textContent='Export approved. FlexiForge will still verify the SHiREVault network mount before copying anything.';updateShireControls();toast('Export approval recorded.');} /home/shire3d/ARMOR/agents/apps/flexiforge/frontend/src/main.js:271: try{state.shireJob=await api(`/api/shire/jobs/${state.shireJob.job_id}/export`,{method:'POST'});document.querySelector('#shireGateMessage').textContent='Export complete and verified on SHiREVault.';document.querySelector('#vaultResult').textContent=state.shireJob.export.destination;updateShireControls();toast('Verified SHiREVault export complete.');} /home/shire3d/ARMOR/agents/apps/flexiforge/frontend/src/main.js:278:fetch('/api/health').catch(()=>{document.querySelector('#serverStatus').textContent='Geometry engine unavailable';document.querySelector('.status-dot').style.background='var(--danger)';}); /home/shire3d/ARMOR/agents/apps/flexiforge/frontend/package-lock.json:19: "resolved": "https://packages.applied-caas-gateway1.internal.api.openai.org/artifactory/api/npm/npm-public/@esbuild/aix-ppc64/-/aix-ppc64-0.28.1.tgz", /home/shire3d/ARMOR/agents/apps/flexiforge/frontend/package-lock.json:36: "resolved": "https://packages.applied-caas-gateway1.internal.api.openai.org/artifactory/api/npm/npm-public/@esbuild/android-arm/-/android-arm-0.28.1.tgz", /home/shire3d/ARMOR/agents/apps/flexiforge/frontend/package-lock.json:53: "resolved": "https://packages.applied-caas-gateway1.internal.api.openai.org/artifactory/api/npm/npm-public/@esbuild/android-arm64/-/android-arm64-0.28.1.tgz", /home/shire3d/ARMOR/agents/apps/flexiforge/frontend/package-lock.json:70: "resolved": "https://packages.applied-caas-gateway1.internal.api.openai.org/artifactory/api/npm/npm-public/@esbuild/android-x64/-/android-x64-0.28.1.tgz", /home/shire3d/ARMOR/agents/apps/flexiforge/frontend/package-lock.json:87: "resolved": "https://packages.applied-caas-gateway1.internal.api.openai.org/artifactory/api/npm/npm-public/@esbuild/darwin-arm64/-/darwin-arm64-0.28.1.tgz", /home/shire3d/ARMOR/agents/apps/flexiforge/frontend/package-lock.json:104: "resolved": "https://packages.applied-caas-gateway1.internal.api.openai.org/artifactory/api/npm/npm-public/@esbuild/darwin-x64/-/darwin-x64-0.28.1.tgz", /home/shire3d/ARMOR/agents/apps/flexiforge/frontend/package-lock.json:121: "resolved": "https://packages.applied-caas-gateway1.internal.api.openai.org/artifactory/api/npm/npm-public/@esbuild/freebsd-arm64/-/freebsd-arm64-0.28.1.tgz", /home/shire3d/ARMOR/agents/apps/flexiforge/frontend/package-lock.json:138: "resolved": "https://packages.applied-caas-gateway1.internal.api.openai.org/artifactory/api/npm/npm-public/@esbuild/freebsd-x64/-/freebsd-x64-0.28.1.tgz", /home/shire3d/ARMOR/agents/apps/flexiforge/frontend/package-lock.json:155: "resolved": "https://packages.applied-caas-gateway1.internal.api.openai.org/artifactory/api/npm/npm-public/@esbuild/linux-arm/-/linux-arm-0.28.1.tgz", /home/shire3d/ARMOR/agents/apps/flexiforge/frontend/package-lock.json:172: "resolved": "https://packages.applied-caas-gateway1.internal.api.openai.org/artifactory/api/npm/npm-public/@esbuild/linux-arm64/-/linux-arm64-0.28.1.tgz", /home/shire3d/ARMOR/agents/apps/flexiforge/frontend/package-lock.json:189: "resolved": "https://packages.applied-caas-gateway1.internal.api.openai.org/artifactory/api/npm/npm-public/@esbuild/linux-ia32/-/linux-ia32-0.28.1.tgz", /home/shire3d/ARMOR/agents/apps/flexiforge/frontend/package-lock.json:206: "resolved": "https://packages.applied-caas-gateway1.internal.api.openai.org/artifactory/api/npm/npm-public/@esbuild/linux-loong64/-/linux-loong64-0.28.1.tgz", /home/shire3d/ARMOR/agents/apps/flexiforge/frontend/package-lock.json:223: "resolved": "https://packages.applied-caas-gateway1.internal.api.openai.org/artifactory/api/npm/npm-public/@esbuild/linux-mips64el/-/linux-mips64el-0.28.1.tgz", /home/shire3d/ARMOR/agents/apps/flexiforge/frontend/package-lock.json:240: "resolved": "https://packages.applied-caas-gateway1.internal.api.openai.org/artifactory/api/npm/npm-public/@esbuild/linux-ppc64/-/linux-ppc64-0.28.1.tgz", /home/shire3d/ARMOR/agents/apps/flexiforge/frontend/package-lock.json:257: "resolved": "https://packages.applied-caas-gateway1.internal.api.openai.org/artifactory/api/npm/npm-public/@esbuild/linux-riscv64/-/linux-riscv64-0.28.1.tgz", /home/shire3d/ARMOR/agents/apps/flexiforge/frontend/package-lock.json:274: "resolved": "https://packages.applied-caas-gateway1.internal.api.openai.org/artifactory/api/npm/npm-public/@esbuild/linux-s390x/-/linux-s390x-0.28.1.tgz", /home/shire3d/ARMOR/agents/apps/flexiforge/frontend/package-lock.json:291: "resolved": "https://packages.applied-caas-gateway1.internal.api.openai.org/artifactory/api/npm/npm-public/@esbuild/linux-x64/-/linux-x64-0.28.1.tgz", /home/shire3d/ARMOR/agents/apps/flexiforge/frontend/package-lock.json:307: "resolved": "https://packages.applied-caas-gateway1.internal.api.openai.org/artifactory/api/npm/npm-public/@esbuild/netbsd-arm64/-/netbsd-arm64-0.28.1.tgz", /home/shire3d/ARMOR/agents/apps/flexiforge/frontend/package-lock.json:324: "resolved": "https://packages.applied-caas-gateway1.internal.api.openai.org/artifactory/api/npm/npm-public/@esbuild/netbsd-x64/-/netbsd-x64-0.28.1.tgz", /home/shire3d/ARMOR/agents/apps/flexiforge/frontend/package-lock.json:341: "resolved": "https://packages.applied-caas-gateway1.internal.api.openai.org/artifactory/api/npm/npm-public/@esbuild/openbsd-arm64/-/openbsd-arm64-0.28.1.tgz", /home/shire3d/ARMOR/agents/apps/flexiforge/frontend/package-lock.json:358: "resolved": "https://packages.applied-caas-gateway1.internal.api.openai.org/artifactory/api/npm/npm-public/@esbuild/openbsd-x64/-/openbsd-x64-0.28.1.tgz", /home/shire3d/ARMOR/agents/apps/flexiforge/frontend/package-lock.json:375: "resolved": "https://packages.applied-caas-gateway1.internal.api.openai.org/artifactory/api/npm/npm-public/@esbuild/openharmony-arm64/-/openharmony-arm64-0.28.1.tgz", /home/shire3d/ARMOR/agents/apps/flexiforge/frontend/package-lock.json:392: "resolved": "https://packages.applied-caas-gateway1.internal.api.openai.org/artifactory/api/npm/npm-public/@esbuild/sunos-x64/-/sunos-x64-0.28.1.tgz", /home/shire3d/ARMOR/agents/apps/flexiforge/frontend/package-lock.json:409: "resolved": "https://packages.applied-caas-gateway1.internal.api.openai.org/artifactory/api/npm/npm-public/@esbuild/win32-arm64/-/win32-arm64-0.28.1.tgz", /home/shire3d/ARMOR/agents/apps/flexiforge/frontend/package-lock.json:426: "resolved": "https://packages.applied-caas-gateway1.internal.api.openai.org/artifactory/api/npm/npm-public/@esbuild/win32-ia32/-/win32-ia32-0.28.1.tgz", /home/shire3d/ARMOR/agents/apps/flexiforge/frontend/package-lock.json:443: "resolved": "https://packages.applied-caas-gateway1.internal.api.openai.org/artifactory/api/npm/npm-public/@esbuild/win32-x64/-/win32-x64-0.28.1.tgz", /home/shire3d/ARMOR/agents/apps/flexiforge/frontend/package-lock.json:460: "resolved": "https://packages.applied-caas-gateway1.internal.api.openai.org/artifactory/api/npm/npm-public/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.62.2.tgz", /home/shire3d/ARMOR/agents/apps/flexiforge/frontend/package-lock.json:474: "resolved": "https://packages.applied-caas-gateway1.internal.api.openai.org/artifactory/api/npm/npm-public/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.62.2.tgz", /home/shire3d/ARMOR/agents/apps/flexiforge/frontend/package-lock.json:488: "resolved": "https://packages.applied-caas-gateway1.internal.api.openai.org/artifactory/api/npm/npm-public/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.62.2.tgz", /home/shire3d/ARMOR/agents/apps/flexiforge/frontend/package-lock.json:502: "resolved": "https://packages.applied-caas-gateway1.internal.api.openai.org/artifactory/api/npm/npm-public/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.62.2.tgz", /home/shire3d/ARMOR/agents/apps/flexiforge/frontend/package-lock.json:516: "resolved": "https://packages.applied-caas-gateway1.internal.api.openai.org/artifactory/api/npm/npm-public/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.62.2.tgz", /home/shire3d/ARMOR/agents/apps/flexiforge/frontend/package-lock.json:530: "resolved": "https://packages.applied-caas-gateway1.internal.api.openai.org/artifactory/api/npm/npm-public/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.62.2.tgz", /home/shire3d/ARMOR/agents/apps/flexiforge/frontend/package-lock.json:544: "resolved": "https://packages.applied-caas-gateway1.internal.api.openai.org/artifactory/api/npm/npm-public/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.62.2.tgz", /home/shire3d/ARMOR/agents/apps/flexiforge/frontend/package-lock.json:558: "resolved": "https://packages.applied-caas-gateway1.internal.api.openai.org/artifactory/api/npm/npm-public/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.62.2.tgz", /home/shire3d/ARMOR/agents/apps/flexiforge/frontend/package-lock.json:572: "resolved": "https://packages.applied-caas-gateway1.internal.api.openai.org/artifactory/api/npm/npm-public/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.62.2.tgz", /home/shire3d/ARMOR/agents/apps/flexiforge/frontend/package-lock.json:586: "resolved": "https://packages.applied-caas-gateway1.internal.api.openai.org/artifactory/api/npm/npm-public/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.62.2.tgz", /home/shire3d/ARMOR/agents/apps/flexiforge/frontend/package-lock.json:600: "resolved": "https://packages.applied-caas-gateway1.internal.api.openai.org/artifactory/api/npm/npm-public/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.62.2.tgz", /home/shire3d/ARMOR/agents/apps/flexiforge/frontend/package-lock.json:614: "resolved": "https://packages.applied-caas-gateway1.internal.api.openai.org/artifactory/api/npm/npm-public/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.62.2.tgz", /home/shire3d/ARMOR/agents/apps/flexiforge/frontend/package-lock.json:628: "resolved": "https://packages.applied-caas-gateway1.internal.api.openai.org/artifactory/api/npm/npm-public/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.62.2.tgz", /home/shire3d/ARMOR/agents/apps/flexiforge/frontend/package-lock.json:642: "resolved": "https://packages.applied-caas-gateway1.internal.api.openai.org/artifactory/api/npm/npm-public/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.62.2.tgz", /home/shire3d/ARMOR/agents/apps/flexiforge/frontend/package-lock.json:656: "resolved": "https://packages.applied-caas-gateway1.internal.api.openai.org/artifactory/api/npm/npm-public/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.62.2.tgz", /home/shire3d/ARMOR/agents/apps/flexiforge/frontend/package-lock.json:670: "resolved": "https://packages.applied-caas-gateway1.internal.api.openai.org/artifactory/api/npm/npm-public/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.62.2.tgz", /home/shire3d/ARMOR/agents/apps/flexiforge/frontend/package-lock.json:684: "resolved": "https://packages.applied-caas-gateway1.internal.api.openai.org/artifactory/api/npm/npm-public/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.62.2.tgz", /home/shire3d/ARMOR/agents/apps/flexiforge/frontend/package-lock.json:698: "resolved": "https://packages.applied-caas-gateway1.internal.api.openai.org/artifactory/api/npm/npm-public/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.62.2.tgz", /home/shire3d/ARMOR/agents/apps/flexiforge/frontend/package-lock.json:712: "resolved": "https://packages.applied-caas-gateway1.internal.api.openai.org/artifactory/api/npm/npm-public/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.62.2.tgz", /home/shire3d/ARMOR/agents/apps/flexiforge/frontend/package-lock.json:725: "resolved": "https://packages.applied-caas-gateway1.internal.api.openai.org/artifactory/api/npm/npm-public/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.62.2.tgz", /home/shire3d/ARMOR/agents/apps/flexiforge/frontend/package-lock.json:739: "resolved": "https://packages.applied-caas-gateway1.internal.api.openai.org/artifactory/api/npm/npm-public/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.62.2.tgz", /home/shire3d/ARMOR/agents/apps/flexiforge/frontend/package-lock.json:753: "resolved": "https://packages.applied-caas-gateway1.internal.api.openai.org/artifactory/api/npm/npm-public/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.62.2.tgz", /home/shire3d/ARMOR/agents/apps/flexiforge/frontend/package-lock.json:767: "resolved": "https://packages.applied-caas-gateway1.internal.api.openai.org/artifactory/api/npm/npm-public/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.62.2.tgz", /home/shire3d/ARMOR/agents/apps/flexiforge/frontend/package-lock.json:781: "resolved": "https://packages.applied-caas-gateway1.internal.api.openai.org/artifactory/api/npm/npm-public/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.62.2.tgz", /home/shire3d/ARMOR/agents/apps/flexiforge/frontend/package-lock.json:795: "resolved": "https://packages.applied-caas-gateway1.internal.api.openai.org/artifactory/api/npm/npm-public/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.62.2.tgz", /home/shire3d/ARMOR/agents/apps/flexiforge/frontend/package-lock.json:809: "resolved": "https://packages.applied-caas-gateway1.internal.api.openai.org/artifactory/api/npm/npm-public/@types/estree/-/estree-1.0.9.tgz", /home/shire3d/ARMOR/agents/apps/flexiforge/frontend/package-lock.json:816: "resolved": "https://packages.applied-caas-gateway1.internal.api.openai.org/artifactory/api/npm/npm-public/esbuild/-/esbuild-0.28.1.tgz", /home/shire3d/ARMOR/agents/apps/flexiforge/frontend/package-lock.json:858: "resolved": "https://packages.applied-caas-gateway1.internal.api.openai.org/artifactory/api/npm/npm-public/fdir/-/fdir-6.5.0.tgz", /home/shire3d/ARMOR/agents/apps/flexiforge/frontend/package-lock.json:876: "resolved": "https://packages.applied-caas-gateway1.internal.api.openai.org/artifactory/api/npm/npm-public/fsevents/-/fsevents-2.3.3.tgz", /home/shire3d/ARMOR/agents/apps/flexiforge/frontend/package-lock.json:891: "resolved": "https://packages.applied-caas-gateway1.internal.api.openai.org/artifactory/api/npm/npm-public/nanoid/-/nanoid-3.3.16.tgz", /home/shire3d/ARMOR/agents/apps/flexiforge/frontend/package-lock.json:910: "resolved": "https://packages.applied-caas-gateway1.internal.api.openai.org/artifactory/api/npm/npm-public/picocolors/-/picocolors-1.1.1.tgz", /home/shire3d/ARMOR/agents/apps/flexiforge/frontend/package-lock.json:917: "resolved": "https://packages.applied-caas-gateway1.internal.api.openai.org/artifactory/api/npm/npm-public/picomatch/-/picomatch-4.0.5.tgz", /home/shire3d/ARMOR/agents/apps/flexiforge/frontend/package-lock.json:929: "resolved": "https://packages.applied-caas-gateway1.internal.api.openai.org/artifactory/api/npm/npm-public/postcss/-/postcss-8.5.20.tgz", /home/shire3d/ARMOR/agents/apps/flexiforge/frontend/package-lock.json:958: "resolved": "https://packages.applied-caas-gateway1.internal.api.openai.org/artifactory/api/npm/npm-public/rollup/-/rollup-4.62.2.tgz", /home/shire3d/ARMOR/agents/apps/flexiforge/frontend/package-lock.json:1003: "resolved": "https://packages.applied-caas-gateway1.internal.api.openai.org/artifactory/api/npm/npm-public/source-map-js/-/source-map-js-1.2.1.tgz", /home/shire3d/ARMOR/agents/apps/flexiforge/frontend/package-lock.json:1013: "resolved": "https://packages.applied-caas-gateway1.internal.api.openai.org/artifactory/api/npm/npm-public/three/-/three-0.185.1.tgz", /home/shire3d/ARMOR/agents/apps/flexiforge/frontend/package-lock.json:1019: "resolved": "https://packages.applied-caas-gateway1.internal.api.openai.org/artifactory/api/npm/npm-public/tinyglobby/-/tinyglobby-0.2.17.tgz", /home/shire3d/ARMOR/agents/apps/flexiforge/frontend/package-lock.json:1036: "resolved": "https://packages.applied-caas-gateway1.internal.api.openai.org/artifactory/api/npm/npm-public/vite/-/vite-7.3.6.tgz", /home/shire3d/ARMOR/agents/apps/flexiforge/ENGINEERING_HANDOVER.md:22:- Local-only service at `127.0.0.1:8876` to avoid the SHiRE Brain service on `127.0.0.1:8765`. /home/shire3d/ARMOR/agents/apps/flexiforge/README.md:40:The interface opens at `http://127.0.0.1:8876`. /home/shire3d/ARMOR/agents/apps/flexiforge/integration/SHIRE_TOOL_CONTRACT.md:11:- Host: `127.0.0.1` /home/shire3d/ARMOR/agents/apps/flexiforge/integration/SHIRE_TOOL_CONTRACT.md:13:- Health: `GET /api/health` /home/shire3d/ARMOR/agents/apps/flexiforge/integration/SHIRE_TOOL_CONTRACT.md:14:- Create guided job: `POST /api/shire/jobs` /home/shire3d/ARMOR/agents/apps/flexiforge/integration/flexiforge-shire.service.candidate:9:Environment=FLEXIFORGE_HOST=127.0.0.1 /home/shire3d/ARMOR/agents/apps/flexiforge/integration/shire_tool_manifest.json:7: "base_url": "http://127.0.0.1:8876", /home/shire3d/ARMOR/agents/apps/flexiforge/integration/shire_tool_manifest.json:8: "health": "/api/health", /home/shire3d/ARMOR/agents/apps/flexiforge/run_flexiforge.py:14:HOST = os.environ.get("FLEXIFORGE_HOST", "127.0.0.1") /home/shire3d/ARMOR/agents/apps/flexiforge/tests/test_api_shire.py:24: uploaded = client.post("/api/upload", files={"file": ("test.stl", stl, "model/stl")}) /home/shire3d/ARMOR/agents/apps/flexiforge/tests/test_api_shire.py:28: created = client.post("/api/shire/jobs", json={ /home/shire3d/ARMOR/agents/apps/flexiforge/tests/test_api_shire.py:39: f"/api/shire/jobs/{job['job_id']}/select", /home/shire3d/ARMOR/agents/apps/flexiforge/tests/test_api_shire.py:44: token = client.post(f"/api/shire/jobs/{job['job_id']}/request-design-approval").json()["approval_token"] /home/shire3d/ARMOR/agents/apps/flexiforge/tests/test_api_shire.py:45: assert client.post(f"/api/shire/jobs/{job['job_id']}/approve-design", json={"token": token}).status_code == 200 /home/shire3d/ARMOR/agents/apps/flexiforge/tests/test_api_shire.py:46: assert client.post(f"/api/shire/jobs/{job['job_id']}/forge").status_code == 200 /home/shire3d/ARMOR/agents/apps/flexiforge/tests/test_api_shire.py:47: validated = client.post(f"/api/shire/jobs/{job['job_id']}/validate") /home/shire3d/ARMOR/agents/apps/flexiforge/tests/test_api_shire.py:52: blocked = client.post(f"/api/shire/jobs/{job['job_id']}/export") /home/shire3d/ARMOR/agents/apps/marketing-boss/server.js:11:const HOST = process.env.HOST || '127.0.0.1'; /home/shire3d/ARMOR/agents/apps/marketing-boss/server.js:12:const PORT = Number(process.env.PORT || 4173); /home/shire3d/ARMOR/agents/apps/marketing-boss/server.js:164: redirectUri: process.env.FACEBOOK_REDIRECT_URI || `${base}/api/oauth/callback/facebook`, /home/shire3d/ARMOR/agents/apps/marketing-boss/server.js:174: redirectUri: process.env.INSTAGRAM_REDIRECT_URI || `${base}/api/oauth/callback/instagram`, /home/shire3d/ARMOR/agents/apps/marketing-boss/server.js:185: redirectUri: process.env.LINKEDIN_REDIRECT_URI || `${base}/api/oauth/callback/linkedin`, /home/shire3d/ARMOR/agents/apps/marketing-boss/server.js:194: redirectUri: process.env.TIKTOK_REDIRECT_URI || `${base}/api/oauth/callback/tiktok`, /home/shire3d/ARMOR/agents/apps/marketing-boss/server.js:203: redirectUri: process.env.GOOGLE_REDIRECT_URI || `${base}/api/oauth/callback/youtube_shorts`, /home/shire3d/ARMOR/agents/apps/marketing-boss/server.js:673: if (url.pathname === '/api/health') { /home/shire3d/ARMOR/agents/apps/marketing-boss/server.js:680: if (url.pathname === '/api/agent-state') { /home/shire3d/ARMOR/agents/apps/marketing-boss/server.js:696: if (url.pathname === '/api/oauth/status') { /home/shire3d/ARMOR/agents/apps/marketing-boss/server.js:701: if (url.pathname === '/api/oauth/diagnostics') { /home/shire3d/ARMOR/agents/apps/marketing-boss/server.js:844: if (url.pathname === '/api/sync-products') { /home/shire3d/ARMOR/agents/apps/marketing-boss/OPEN-ME-FIRST.txt:17:The new start file detects and stops an older Forge server still using port 4173. This prevents the old one-product screen from opening again. The service worker also checks the network first so an old cached interface does not win. /home/shire3d/ARMOR/agents/apps/marketing-boss/CHANGELOG.md:19:- Added launcher version detection so an old Forge process on port 4173 cannot silently reopen the earlier one-product interface. /home/shire3d/ARMOR/agents/apps/marketing-boss/SOCIAL-ACCOUNT-SETUP.md:7:- Start the Forge at `http://127.0.0.1:4173`. /home/shire3d/ARMOR/agents/apps/marketing-boss/SOCIAL-ACCOUNT-SETUP.md:10:- Register callback addresses exactly, including `http`, `127.0.0.1`, port `4173` and the full path. /home/shire3d/ARMOR/agents/apps/marketing-boss/SOCIAL-ACCOUNT-SETUP.md:17:| Facebook | `http://127.0.0.1:4173/api/oauth/callback/facebook` | /home/shire3d/ARMOR/agents/apps/marketing-boss/SOCIAL-ACCOUNT-SETUP.md:18:| Instagram | `http://127.0.0.1:4173/api/oauth/callback/instagram` | /home/shire3d/ARMOR/agents/apps/marketing-boss/SOCIAL-ACCOUNT-SETUP.md:19:| LinkedIn | `http://127.0.0.1:4173/api/oauth/callback/linkedin` | /home/shire3d/ARMOR/agents/apps/marketing-boss/SOCIAL-ACCOUNT-SETUP.md:20:| TikTok | `http://127.0.0.1:4173/api/oauth/callback/tiktok` | /home/shire3d/ARMOR/agents/apps/marketing-boss/SOCIAL-ACCOUNT-SETUP.md:21:| YouTube Shorts | `http://127.0.0.1:4173/api/oauth/callback/youtube_shorts` | /home/shire3d/ARMOR/agents/apps/marketing-boss/production-pipeline/server.js:15: if(req.method==='GET'&&u.pathname==='/api/status'){const cat=readJson(P.CATALOG,{products:[],sources:[]});const acct=await accountCheck();return json(res,200,{ok:true,version:'0.5.2',mode:process.env.LIVE_PUBLISHING_ENABLED==='1'?'live-capable':'private-dry-run',global_pause:process.env.GLOBAL_PUBLISHING_PAUSE!=='0',api_version:API_VERSION,catalogue_products:cat.products.length,catalogue_quality:cat.quality||null,catalogue_sources:cat.sources,account:acct,token_lifecycle:safeLifecycleStatus(),public_media_configured:/^https:\/\//.test(process.env.PUBLIC_MEDIA_BASE_URL||''),token_file_write_access:false});} /home/shire3d/ARMOR/agents/apps/marketing-boss/production-pipeline/server.js:16: if(req.method==='GET'&&u.pathname==='/api/catalog')return json(res,200,readJson(P.CATALOG,{products:[],sources:[]})); /home/shire3d/ARMOR/agents/apps/marketing-boss/production-pipeline/server.js:17: if(req.method==='POST'&&u.pathname==='/api/catalog/sync')return json(res,200,await syncCatalogue()); /home/shire3d/ARMOR/agents/apps/marketing-boss/production-pipeline/server.js:18: if(req.method==='GET'&&u.pathname==='/api/campaigns')return json(res,200,{campaigns:listCampaigns()}); /home/shire3d/ARMOR/agents/apps/marketing-boss/production-pipeline/server.js:19: if(req.method==='POST'&&u.pathname==='/api/campaigns/build'){const b=await body(req);return json(res,201,await buildCampaign({productId:b.product_id,postType:b.post_type,publishTime:b.publish_time}));} /home/shire3d/ARMOR/agents/apps/marketing-boss/production-pipeline/server.js:23: if(req.method==='POST'&&u.pathname==='/api/audit'){const f=path.join(P.AUDIT,`${Date.now()}-safe-audit.json`);return json(res,200,runAudit(f));} /home/shire3d/ARMOR/agents/apps/marketing-boss/production-pipeline/server.js:27:const host=process.env.MARKETING_PIPELINE_HOST||'127.0.0.1';const port=Number(process.env.MARKETING_PIPELINE_PORT||4174);server.listen(port,host,()=>console.log(`SHiRE Marketing Pipeline 0.5.2 listening on http://${host}:${port} — dry-run default`)); /home/shire3d/ARMOR/agents/apps/marketing-boss/production-pipeline/public/index.html:1:SHiRE Marketing Boss — Production Pipeline
SHiREMARKETING BOSS

INSTAGRAM PRODUCTION PIPELINE

Private review, exact approval, controlled publishing.

Loading verified state…

Readiness

Current catalogue

Frozen campaigns

/home/shire3d/ARMOR/agents/apps/marketing-boss/production-pipeline/public/app.js:5:async function load(){const s=await api('/api/status');const life=s.token_lifecycle||{};$('#statusline').textContent=`${s.mode} • ${s.catalogue_products} products • ${s.account.ok?'@'+s.account.username:(life.status==='reauthorization_required'?'Instagram reconnect required':'Instagram session blocked')}`;$('#readiness').innerHTML=[card('Instagram account',s.account.ok?`@${s.account.username}`:s.account.reason,s.account.ok),card('Token lifecycle',lifecycleText(life),life.status==='healthy'||life.status==='healthy_waiting_refresh_age'),card('Content publish scope',s.account.permission_recorded?'Recorded':'Not yet confirmed',s.account.permission_recorded),card('Public media relay',s.public_media_configured?'Configured':'Required before live posting',s.public_media_configured),card('Global pause',s.global_pause?'ON — safe':'OFF',s.global_pause),card('Mode',s.mode,s.mode!=='live-capable')].join('');const c=await api('/api/catalog');$('#catalogue').innerHTML=(c.products||[]).slice(0,25).map(p=>`
${esc(p.title)}
${esc(p.source_store)} • ${p.price!=null?esc((p.currency==='AUD'?'AU$':p.currency+' ')+p.price.toFixed(2)):'Price unavailable'} • ${esc(p.availability)}
Open listing
`).join('')||'

No products yet. Sync the catalogue.

';const campaigns=(await api('/api/campaigns')).campaigns;$('#campaigns').innerHTML=campaigns.map(x=>`
${esc(x.product.title)}
${esc(x.post_type)}${esc(x.status)}${esc(x.account.username||'account unverified')}
`).join('')||'

No frozen campaigns yet.

';document.querySelectorAll('[data-review]').forEach(b=>b.onclick=()=>review(b.dataset.review));} /home/shire3d/ARMOR/agents/apps/marketing-boss/production-pipeline/public/app.js:6:async function review(id){const {campaign:c,verification_errors}=await api('/api/campaigns/'+encodeURIComponent(id));const media=c.assets.map(a=>a.file.endsWith('.mp4')?``:``).join('');$('#reviewbody').innerHTML=`

FROZEN CAMPAIGN REVIEW

${esc(c.product.title)}

${card('Exact account',c.account.username?'@'+c.account.username:c.account.verification_reason,!!c.account.username)}${card('Post type',c.post_type,true)}${card('Publish time',c.publish_time||'Manual after approval',true)}${card('Media validation',verification_errors.length?verification_errors.join('; '):'PASS',!verification_errors.length)}

Full caption and hashtags

${esc(c.full_caption)}

Every media asset

${media}

Approved campaign hash

${esc(c.frozen_hash)}

Publishing remains blocked while dry-run/live gates are active.

`;$('#review').showModal();$('#approveBtn').onclick=async()=>{try{await api(`/api/campaigns/${encodeURIComponent(id)}/approve`,{method:'POST',body:JSON.stringify({confirmation:$('#approvalPhrase').value})});alert('Exact frozen campaign approved.');await load();}catch(e){alert(e.message)}};$('#publishBtn').onclick=async()=>{try{const r=await api(`/api/campaigns/${encodeURIComponent(id)}/publish`,{method:'POST',body:'{}'});alert(`Published: ${r.post_id}`);await load();}catch(e){alert(`Publishing blocked: ${e.message}`)}};} /home/shire3d/ARMOR/agents/apps/marketing-boss/production-pipeline/public/app.js:7:async function sync(){try{$('#sync').disabled=true;await api('/api/catalog/sync',{method:'POST',body:'{}'});await load();}catch(e){alert(e.message)}finally{$('#sync').disabled=false}} /home/shire3d/ARMOR/agents/apps/marketing-boss/production-pipeline/public/app.js:8:async function build(t){try{await api('/api/campaigns/build',{method:'POST',body:JSON.stringify({post_type:t})});await load();}catch(e){alert(e.message)}} /home/shire3d/ARMOR/agents/apps/marketing-boss/production-pipeline/lib/copy.js:17: const endpoints=(process.env.SHIRE_BRAIN_ENDPOINTS||'http://127.0.0.1:8765/v1/chat/completions,http://127.0.0.1:8765/api/chat').split(','); /home/shire3d/ARMOR/agents/apps/marketing-boss/production-pipeline/lib/catalog.js:10: {id:'shire3d-main',store:'Shire 3D',url:'https://shire3d.com/',endpoints:['https://shire3d.com/marketing-products.json','https://shire3d.com/products-feed.json','https://shire3d.com/api/marketing-products.json','https://shire3d.com/products.json?limit=250','https://shire3d.com/collections/all/products.json?limit=250','https://shire3d.com/pages/shop','https://shire3d.com/']}, /home/shire3d/ARMOR/agents/apps/marketing-boss/production-pipeline/lib/catalog.js:172: const hosts=[process.env.MARKETING_PIPELINE_HOST,'127.0.0.1'].filter(Boolean);const attempts=[],items=[]; /home/shire3d/ARMOR/agents/apps/marketing-boss/production-pipeline/lib/catalog.js:173: const routes=[{path:'/api/catalog',method:'GET'},{path:'/api/catalog/sync',method:'POST'},{path:'/catalog-cache.json',method:'GET'}]; /home/shire3d/ARMOR/agents/apps/marketing-boss/production-pipeline/lib/catalog.js:174: for(const host of [...new Set(hosts)])for(const route of routes){const url=`http://${host}:4173${route.path}`;try{const r=await fetchText(url,{method:route.method,headers:route.method==='POST'?{'Content-Type':'application/json'}:{},body:route.method==='POST'?'{}':undefined,timeout:20000});attempts.push({url,method:route.method,http_status:r.status});if(r.status<200||r.status>=300)continue;let doc;try{doc=JSON.parse(r.text);}catch{continue;}const found=collectProductLike(doc);for(const raw of found){const source=sourceForRaw(raw);items.push(normalise(raw,source,raw.url||raw.product_url||raw.productUrl||'https://shire3d.com/'));}if(items.length)break;}catch(e){attempts.push({url,method:route.method,error:String(e.message).slice(0,200)});}if(items.length)break;} /home/shire3d/ARMOR/agents/apps/marketing-boss/production-pipeline/tests/run-tests.js:57: await new Promise(resolve=>mock.listen(0,'127.0.0.1',resolve));const port=mock.address().port; /home/shire3d/ARMOR/agents/apps/marketing-boss/production-pipeline/tests/run-tests.js:58: process.env.INSTAGRAM_GRAPH_BASE=`http://127.0.0.1:${port}/v25.0`; /home/shire3d/ARMOR/agents/apps/marketing-boss/production-pipeline/tests/run-tests.js:59: process.env.INSTAGRAM_EXCHANGE_URL=`http://127.0.0.1:${port}/access_token`; /home/shire3d/ARMOR/agents/apps/marketing-boss/production-pipeline/tests/run-tests.js:60: process.env.INSTAGRAM_REFRESH_URL=`http://127.0.0.1:${port}/refresh_access_token`; /home/shire3d/ARMOR/agents/apps/marketing-boss/README.md:75:The start script checks the server version. If an older Forge is still listening on `127.0.0.1:4173`, it stops that process and starts v1.3.0. This fixes the common case where a new ZIP was extracted but the browser continued showing the old one-product interface. /home/shire3d/ARMOR/agents/apps/marketing-boss/README.md:126:`server.js` binds to `127.0.0.1` only, not the LAN or public internet. /home/shire3d/ARMOR/agents/apps/marketing-boss/stop-windows.bat:2:powershell -NoProfile -ExecutionPolicy Bypass -Command "$p=4173; try { Get-NetTCPConnection -LocalPort $p -State Listen -ErrorAction Stop | ForEach-Object { Stop-Process -Id $_.OwningProcess -Force -ErrorAction SilentlyContinue } } catch { if (Test-Path '.shire-forge.pid') { $id=(Get-Content '.shire-forge.pid' -Raw).Trim(); if ($id -match '^\d+$') { Stop-Process -Id ([int]$id) -Force -ErrorAction SilentlyContinue } } }; Remove-Item '.shire-forge.pid' -Force -ErrorAction SilentlyContinue" /home/shire3d/ARMOR/agents/apps/marketing-boss/PRIVACY-BOUNDARY.md:15:The Accounts screen may redirect Ray to the official authorization endpoints for Facebook, Instagram, LinkedIn, TikTok and Google/YouTube. The callback returns only to the local Forge server on `127.0.0.1:4173`. /home/shire3d/ARMOR/agents/apps/marketing-boss/PRIVACY-BOUNDARY.md:40:`server.js` binds to `127.0.0.1` only. It does not expose the Forge to the LAN or internet. OAuth callbacks are received only on the local machine. /home/shire3d/ARMOR/agents/apps/marketing-boss/app.js:59: await fetch('/api/agent-state', { /home/shire3d/ARMOR/agents/apps/marketing-boss/app.js:69: const response = await fetch('/api/agent-state', { cache: 'no-store' }); /home/shire3d/ARMOR/agents/apps/marketing-boss/app.js:441: `
Redirect URI to register:
${escapeHtml(setup.redirectUri || `http://127.0.0.1:4173/api/oauth/callback/${platform}`)}
/home/shire3d/ARMOR/agents/apps/marketing-boss/app.js:746: const response = await fetch('/api/oauth/status', { cache: 'no-store' }); /home/shire3d/ARMOR/agents/apps/marketing-boss/app.js:763: const response = await fetch(`/api/oauth/disconnect/${encodeURIComponent(platform)}`, { method: 'POST' }); /home/shire3d/ARMOR/agents/apps/marketing-boss/app.js:800: const response = await fetch('/api/sync-products', { /home/shire3d/ARMOR/agents/apps/marketing-boss/app.js:826: const response = await fetch('/api/health', { cache: 'no-store' }); /home/shire3d/ARMOR/agents/apps/marketing-boss/app.js:868: else if (action === 'connect-platform') { const item = oauthStatus(target.dataset.platform); if (!item.configured) socialSetupModal(target.dataset.platform); else window.location.href = `/api/oauth/start/${encodeURIComponent(target.dataset.platform)}`; } /home/shire3d/ARMOR/agents/apps/marketing-boss/start-windows.ps1:5:$Port = 4173 /home/shire3d/ARMOR/agents/apps/marketing-boss/start-windows.ps1:6:$HealthUrl = "http://127.0.0.1:$Port/api/health" /home/shire3d/ARMOR/agents/apps/marketing-boss/start-windows.ps1:7:$AppUrl = "http://127.0.0.1:$Port/?version=$ExpectedVersion#home" /home/shire3d/ARMOR/agents/apps/marketing-boss/VERIFICATION.md:10:- Local server `/api/health` reports version `1.3.0` and boundary `SHIRE3D_ONLY` — PASS /home/shire3d/ARMOR/agents/apps/marketing-boss/VERIFICATION.md:67:- Windows launcher checks `/api/health` for the exact expected version — PASS by source inspection /home/shire3d/ARMOR/agents/apps/marketing-boss/start-linux.sh:5:PORT="4173" /home/shire3d/ARMOR/agents/apps/marketing-boss/start-linux.sh:6:HEALTH="http://127.0.0.1:${PORT}/api/health" /home/shire3d/ARMOR/agents/apps/marketing-boss/start-linux.sh:41:xdg-open "http://127.0.0.1:${PORT}/?version=${EXPECTED_VERSION}#home" >/dev/null 2>&1 || sensible-browser "http://127.0.0.1:${PORT}/?version=${EXPECTED_VERSION}#home" /home/shire3d/ARMOR/agents/apps/marketing-boss/callback-gate.js:6:const HOST = process.env.CALLBACK_GATE_HOST || '127.0.0.1'; /home/shire3d/ARMOR/agents/apps/marketing-boss/callback-gate.js:7:const PORT = Number(process.env.CALLBACK_GATE_PORT || 4174); /home/shire3d/ARMOR/agents/apps/marketing-boss/callback-gate.js:8:const UPSTREAM_HOST = process.env.CALLBACK_UPSTREAM_HOST || '127.0.0.1'; /home/shire3d/ARMOR/agents/apps/marketing-boss/callback-gate.js:9:const UPSTREAM_PORT = Number(process.env.CALLBACK_UPSTREAM_PORT || 4173); /home/shire3d/ARMOR/agents/apps/marketing-boss/callback-gate.js:11:const DASHBOARD_BASE_URL = String(process.env.DASHBOARD_BASE_URL || 'http://127.0.0.1:4173').replace(/\/+$/, ''); /home/shire3d/ARMOR/agents/apps/marketing-boss/callback-gate.js:68: if ((parsed.hostname === '127.0.0.1' || parsed.hostname === 'localhost') && Number(parsed.port || 80) === UPSTREAM_PORT) { /home/shire3d/ARMOR/agents/apps/marketing-boss/callback-gate.js:96: if (host && !['127.0.0.1', 'localhost', publicHost].includes(host)) { /home/shire3d/ARMOR/agents/apps/marketing-boss/callback-gate.js:105: host: `127.0.0.1:${upstreamPort}` /home/shire3d/ARMOR/agents/apps/marketing-boss/tests/separate-meta.test.js:9: 'https://marketing-auth.shire3d.com/api/oauth/callback/facebook'; /home/shire3d/ARMOR/agents/apps/marketing-boss/tests/separate-meta.test.js:11: 'https://marketing-auth.shire3d.com/api/oauth/callback/instagram'; /home/shire3d/ARMOR/agents/apps/marketing-boss/tests/separate-meta.test.js:26: 'https://marketing-auth.shire3d.com/api/oauth/callback/instagram' /home/shire3d/ARMOR/agents/apps/marketing-boss/tests/oauth.test.js:54: 'http://127.0.0.1:4173/api/oauth/callback/facebook' /home/shire3d/ARMOR/agents/apps/marketing-boss/tests/oauth.test.js:59: 'http://127.0.0.1:4173/api/oauth/callback/instagram' /home/shire3d/ARMOR/agents/apps/marketing-boss/tests/callback-gate.test.js:10: server.listen(0, '127.0.0.1', () => resolve(server.address().port)); /home/shire3d/ARMOR/agents/apps/marketing-boss/tests/callback-gate.test.js:18:function rawRequest({ port, path, method = 'GET', host = '127.0.0.1' }) { /home/shire3d/ARMOR/agents/apps/marketing-boss/tests/callback-gate.test.js:20: const req = http.request({ hostname: '127.0.0.1', port, path, method, headers: { Host: host } }, (res) => { /home/shire3d/ARMOR/agents/apps/marketing-boss/tests/callback-gate.test.js:33: rewriteLocation('/?oauth=connected#accounts', 'http://100.64.0.1:4173'), /home/shire3d/ARMOR/agents/apps/marketing-boss/tests/callback-gate.test.js:34: 'http://100.64.0.1:4173/?oauth=connected#accounts' /home/shire3d/ARMOR/agents/apps/marketing-boss/tests/callback-gate.test.js:38: if (req.url.startsWith('/api/oauth/callback/facebook')) { /home/shire3d/ARMOR/agents/apps/marketing-boss/tests/callback-gate.test.js:47: upstreamHost: '127.0.0.1', /home/shire3d/ARMOR/agents/apps/marketing-boss/tests/callback-gate.test.js:50: dashboardBaseUrl: 'http://100.64.0.1:4173' /home/shire3d/ARMOR/agents/apps/marketing-boss/tests/callback-gate.test.js:61: const post = await rawRequest({ port: gatePort, path: '/api/oauth/callback/facebook', method: 'POST' }); /home/shire3d/ARMOR/agents/apps/marketing-boss/tests/callback-gate.test.js:66: path: '/api/oauth/callback/facebook?code=secret-code&state=state-value', /home/shire3d/ARMOR/agents/apps/marketing-boss/tests/callback-gate.test.js:72: 'http://100.64.0.1:4173/?oauth=connected&platform=facebook#accounts' /home/shire3d/ARMOR/agents/apps/marketing-boss/tests/callback-gate.test.js:77: path: '/api/oauth/callback/facebook', /home/shire3d/ARMOR/agents/apps/marketing-boss/marketing-boss-worker.js:8:const PORT = Number(process.env.PORT || 4173); /home/shire3d/ARMOR/agents/apps/marketing-boss/marketing-boss-worker.js:9:const HOST = '127.0.0.1'; /home/shire3d/ARMOR/agents/apps/marketing-boss/marketing-boss-worker.js:65: const syncPayload = FIXTURE ? readJson(FIXTURE, null) : await requestJson('POST', '/api/sync-products', { sourceIds: ['shire3d_com', 'shire3d_com_au'], force: false }); /home/shire3d/ARMOR/agents/apps/marketing-boss/marketing-boss-worker.js:97: await requestJson('POST', '/api/agent-state', { state }); /home/shire3d/ARMOR/agents/apps/store-doctor-foundation/src/pages/ResetPassword.jsx:3:import { shire } from "@/api/shireClient"; /home/shire3d/ARMOR/agents/apps/store-doctor-foundation/src/pages/Orders.jsx:2:import { shire } from '@/api/shireClient'; /home/shire3d/ARMOR/agents/apps/store-doctor-foundation/src/pages/Dashboard.jsx:2:import { shire } from '@/api/shireClient'; /home/shire3d/ARMOR/agents/apps/store-doctor-foundation/src/pages/Login.jsx:2:import { shire } from '@/api/shireClient'; /home/shire3d/ARMOR/agents/apps/store-doctor-foundation/src/pages/Settings.jsx:2:import { shire } from '@/api/shireClient'; /home/shire3d/ARMOR/agents/apps/store-doctor-foundation/src/pages/Shipping.jsx:5:import { shire } from '@/api/shireClient'; /home/shire3d/ARMOR/agents/apps/store-doctor-foundation/src/pages/EtsyCallback.jsx:3:import { shire } from '@/api/shireClient'; /home/shire3d/ARMOR/agents/apps/store-doctor-foundation/src/pages/Assistant.jsx:3:import { shire } from '@/api/shireClient'; /home/shire3d/ARMOR/agents/apps/store-doctor-foundation/src/pages/ForgotPassword.jsx:3:import { shire } from "@/api/shireClient"; /home/shire3d/ARMOR/agents/apps/store-doctor-foundation/src/pages/CreateProduct.jsx:3:import { shire } from '@/api/shireClient'; /home/shire3d/ARMOR/agents/apps/store-doctor-foundation/src/pages/Products.jsx:2:import { shire } from '@/api/shireClient'; /home/shire3d/ARMOR/agents/apps/store-doctor-foundation/src/pages/Register.jsx:3:import { shire } from "@/api/shireClient"; /home/shire3d/ARMOR/agents/apps/store-doctor-foundation/src/pages/Marketplaces.jsx:2:import { shire } from '@/api/shireClient'; /home/shire3d/ARMOR/agents/apps/store-doctor-foundation/src/lib/PageNotFound.jsx:2:import { shire } from '@/api/shireClient'; /home/shire3d/ARMOR/agents/apps/store-doctor-foundation/src/components/calculator/PushToProductModal.jsx:3:import { shire } from '@/api/shireClient'; /home/shire3d/ARMOR/agents/apps/store-doctor-foundation/src/components/calculator/UpdateProductModal.jsx:3:import { shire } from '@/api/shireClient'; /home/shire3d/ARMOR/agents/apps/store-doctor-foundation/src/components/calculator/CreateProductWizard.jsx:3:import { shire } from '@/api/shireClient'; /home/shire3d/ARMOR/agents/apps/store-doctor-foundation/src/components/marketplaces/AddUrlModal.jsx:3:import { shire } from '@/api/shireClient'; /home/shire3d/ARMOR/agents/apps/store-doctor-foundation/src/components/products/ProductSidePanel.jsx:3:import { shire } from '@/api/shireClient'; /home/shire3d/ARMOR/agents/apps/store-doctor-foundation/src/components/products/BulkPriceModal.jsx:3:import { shire } from '@/api/shireClient'; /home/shire3d/ARMOR/agents/apps/store-doctor-foundation/src/components/shipping/ShippingRatesPanel.jsx:2:import { shire } from '@/api/shireClient'; /home/shire3d/ARMOR/agents/apps/store-doctor-foundation/src/components/shipping/ParcelDetailsPanel.jsx:2:import { shire } from '@/api/shireClient'; /home/shire3d/ARMOR/agents/apps/store-doctor-foundation/src/components/orders/OrderModal.jsx:3:import { shire } from '@/api/shireClient'; /home/shire3d/ARMOR/agents/apps/store-doctor-foundation/src/components/orders/BulkActionBar.jsx:4:import { shire } from '@/api/shireClient'; /home/shire3d/ARMOR/agents/apps/store-doctor-foundation/src/components/etsy/PushToEtsyButton.jsx:2:import { shire } from '@/api/shireClient'; /home/shire3d/ARMOR/agents/apps/store-doctor-foundation/src/components/etsy/EtsyConnectButton.jsx:2:import { shire } from '@/api/shireClient'; /home/shire3d/ARMOR/agents/apps/store-doctor-foundation/src/components/create-product/Step4Review.jsx:3:import { shire } from '@/api/shireClient'; /home/shire3d/ARMOR/agents/apps/store-doctor-foundation/src/components/create-product/Step2Marketing.jsx:2:import { shire } from '@/api/shireClient'; /home/shire3d/ARMOR/agents/apps/store-doctor-foundation/src/components/create-product/ImageUploader.jsx:2:import { shire } from '@/api/shireClient'; /home/shire3d/ARMOR/agents/apps/store-doctor-foundation/vite.config.js:9: host: '127.0.0.1', /home/shire3d/ARMOR/agents/apps/store-doctor-foundation/vite.config.js:11: '/api': 'http://127.0.0.1:4173', /home/shire3d/ARMOR/agents/apps/store-doctor-foundation/vite.config.js:12: '/uploads': 'http://127.0.0.1:4173', /home/shire3d/ARMOR/agents/apps/store-doctor-foundation/.env.example:3:SHIRE_HOST=127.0.0.1 /home/shire3d/ARMOR/agents/apps/store-doctor-foundation/.env.example:4:SHIRE_PORT=4173 /home/shire3d/ARMOR/agents/apps/store-doctor-foundation/.env.example:8:OLLAMA_URL=http://127.0.0.1:11434 === EMAIL CAPABILITY AUDIT === sendmail: missing mail: missing mailx: missing msmtp: missing mutt: missing No recognised email-provider package dependencies found. === EXISTING LISTENING PORT OWNERS === LISTEN 0 511 127.0.0.1:4173 0.0.0.0:* users:(("node",pid=2055934,fd=24)) LISTEN 0 511 100.116.93.90:4174 0.0.0.0:* users:(("node",pid=2130038,fd=24)) LISTEN 0 4096 100.116.93.90:4173 0.0.0.0:* LISTEN 0 5 127.0.0.1:8765 0.0.0.0:* users:(("python",pid=2040983,fd=3)) LISTEN 0 5 127.0.0.1:8790 0.0.0.0:* users:(("python3",pid=3413011,fd=3)) LISTEN 0 5 127.0.0.1:8770 0.0.0.0:* users:(("python3",pid=1622788,fd=3)) LISTEN 0 4096 100.116.93.90:8770 0.0.0.0:* === STAGE 2 EVIDENCE === dc712489950f3649d46855219a77fbe5d01a1df5868c671770ef95aa379f67e0 /SHiREVault/Backup/OSBackups/TRENDSCOUT-NATIVE-0002-ARCHITECTURE-20260730T013514Z/trendscout-architecture-audit.txt PASS: TrendScout Stage 2 architecture audit completed. No repository files, services, timers, ports or settings were changed. Evidence: /SHiREVault/Backup/OSBackups/TRENDSCOUT-NATIVE-0002-ARCHITECTURE-20260730T013514Z