Commit graph

142 commits

Author SHA1 Message Date
cf73fe5af2 feat(credential-sharing): implement the Credential Sharing OpenSpec (M1-M3)
New @logicsrc/plugin-credential-sharing: a provider-neutral secret-sync engine
with env/.env, Doppler, Railway, and GitHub Secrets adapters behind one
CredentialProvider contract.

- engine: inspect -> diff -> plan -> approve -> sync -> rollback -> audit/export
- dry-run is the default for sync; --approve writes; destructive changes gated
- fingerprint-based diffs (salted SHA-256); raw values never printed or stored in
  plans/runs/audit; rollback pre-image kept in a 0600 .logicsrc vault (gitignored)
- github-secrets is write-only for values (sealed-box via libsodium), so it cannot
  be a sync source or value-restoring rollback target
- CLI: real `logicsrc credentials <providers|inspect|diff|plan|approve|sync|
  rollback|audit|export>` (replaces the prior stub)
- 4 JSON schemas registered in @logicsrc/validators
- flip logicsrc.com/credential-sharing band from coming-soon to available
- 37 tests pass; full env->env lifecycle verified; artifacts schema-validate

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-27 15:24:30 +00:00
6e7f44612a chore(agentswarm): make package publishable to npm
Add files/publishConfig(public)/repository/keywords + prepublishOnly build;
exclude *.test.ts from the tsc build so dist (and the published tarball) ships
only library code. Package size 17 kB, 38/38 tests still green.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-25 17:57:32 +00:00
0e5a13f5fb feat(agentswarm): M5 — x402 billing wrapper for the swarm route
withX402() wraps the Web handler so unpaid calls get a standard HTTP 402
challenge (x402Version + accepts[]) and paid calls fall through to the agent.
Payment verification is injectable (host wires CoinPay/x402); CORS preflight
passes through untouched; custom challenge responses supported. README documents
the optional c0mpute.com GPU backend.

4 new tests; 38/38 pass.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-25 17:48:12 +00:00
fbbb323477 feat(agentswarm): optional c0mpute.com inference backend
createC0mputeModel() turns a connected c0mpute.com account (apiKey + OpenAI-
compatible base URL) into a LangChain chat model, usable as the model for
createDeepAgentRunner or the chatModel for the judge/router — so agent inference
can run on community-shared GPUs. Opt-in; default stays the hosted provider.
agentswarm performs no OAuth: the host's c0mpute connector supplies credentials
(resolveC0mputeConnector / c0mputeConnectorFromEnv normalize them). DeepAgent
runner now accepts a model instance, not just a provider string.

7 new tests (defaults, env mapping, not-connected + missing-peer errors); 34/34 pass.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-25 17:47:00 +00:00
dd7fe0b5c4 feat(agentswarm): M4 — per-agent budget ledger + withBudget guard
BudgetLedger interface + InMemoryBudgetLedger reference impl (reserve/settle/
release with refund of unused holds; mirrors the b1dz budget+ledger concept).
withBudget() wraps any SwarmRunner: reserves up front (throws SwarmError 402 when
out of funds, before running), settles actual cost on success, releases on error.
AgentIdentity DID aligns with @logicsrc/agentstack.

8 new tests; 27/27 pass.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-25 17:45:19 +00:00
925894359f feat(agentswarm): M2 — peer-coordination swarm (router + handoffs)
createSwarm() composes named agents into one SwarmRunner: a router picks the
first agent; any agent hands control to a named peer via `HANDOFF: <name>`,
bounded by maxHandoffs. createLLMRouter() is a cheap-model router. Composes
with the rubric loop and HTTP handler since a swarm is itself a SwarmRunner.

6 new tests (routing, handoff, maxHandoffs cap, unknown-peer/unknown-route
fallbacks, empty-agents guard); 19/19 pass.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-25 17:44:12 +00:00
018a583a00 feat(agentswarm): M1+M3 — embeddable swarm runtime wrapping deepagents
@logicsrc/agentswarm: a self-hosted, framework-agnostic multi-agent runtime
that each app mounts on its own route (e.g. tronbrowser.dev/swarm).

M1 — core:
- createSwarmHandler(): Web (Request)=>Response handler, CORS + validation
- SwarmRunner: injectable engine interface
- createDeepAgentRunner(): deepagents (createDeepAgent) adapter; deepagents +
  @langchain/langgraph are optional peers loaded via dynamic import so the core
  builds/tests with zero heavy deps
- SwarmError + onRequest gate: seam for x402 metering / auth (402/403)

M3 — rubric self-check (deepagents RubricMiddleware is Python-only, so ported
at the runner layer):
- createRubricRunner(): grades output via an injectable judge and revises until
  it passes or maxIterations; passes through untouched when no rubric
- createLLMJudge(): cheap-model grader (lazy langchain initChatModel)

13/13 vitest pass; tsc clean; examples/server.mjs demo verified.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-25 17:41:49 +00:00
e6929af1db Add Profullstack feedback widget
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-24 23:04:41 +00:00
ffe37a01ce Merge feat/ans-sdk: @logicsrc/ans spec + M1 (resolver + offline verifier) 2026-06-24 15:30:20 +00:00
29975b2df7 feat(ans): implement @logicsrc/ans M1 — resolver + offline verifier
M1 of the ANS SDK (docs/ans-sdk.md):

- name: parse/format ans://v<semver>.<agent>.<domain>
- cbor: minimal RFC 8949 codec for the COSE_Sign1 subset
- verify/merkle: RFC 6962 leaf/node hashing, tree build, inclusion-proof
  generation + verification
- verify/es256 + cose: COSE_Sign1 build/parse, Sig_structure, ES256 (WebCrypto)
- verify/rootkeys: kid -> verifier key (JWKS entries; sumdb-note is M2)
- verify: verifyReceipt() + verifyResolution() (signature + inclusion proof +
  name binding), pure and offline
- client: AnsClient resolve/rootKeys/register/status over injectable fetch,
  with a DnsApplier hook for verify-dns

Tests (24) cover name parsing, CBOR round-trips/vectors, RFC 6962 proofs, a full
ES256+Merkle receipt round-trip with positive/negative cases, and the client
against mocked fetch. Wired into the root build script.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-24 14:48:24 +00:00
0ae24719e3 docs(ans): spec the @logicsrc/ans TypeScript SDK
Design doc for the LogicSRC TS SDK for the Agent Name Service (ANS): resolver +
offline transparency-log verifier + registration client + coinpay-DID bridge.
Covers scope, package layout, full API surface, the ans-verify algorithm,
milestones (M1 verifier -> M2 register -> M3 DID bridge), and risks.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-24 14:41:00 +00:00
RissRIce
2f07f74126
fix(agentstack): reject malformed CoinPay DIDs (#83) 2026-06-22 05:24:46 -07:00
RissRIce
895bb9989e
fix(agentstack): require agent DIDs for registration (#85) 2026-06-22 05:24:33 -07:00
phucnguyen1707
41ab662afa
Reject unknown task assignees (#80) 2026-06-16 03:19:08 -07:00
phucnguyen1707
e38688f16e
Enforce AgentStack status jumps (#81) 2026-06-16 03:18:54 -07:00
82e1389b8d
docs(agentstack): add PRD (#78)
Product requirements for @logicsrc/agentstack: summary, goals/non-goals,
users, current v0.1.0 state, functional/non-functional requirements,
roadmap (M1–M6), success metrics, and open questions. Grounded in the
existing in-memory coordinator and the agentstack OpenSpec capability.

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-15 08:37:33 -07:00
phucnguyen1707
59013cf0af
Sanitize rendered web content (#77) 2026-06-15 01:34:44 -07:00
phucnguyen1707
cb192906bd
Handle malformed CommandBoard paths (#76) 2026-06-15 01:25:09 -07:00
phucnguyen1707
ae371b91d0
Handle non-finite policy risk scores (#75) 2026-06-15 01:23:47 -07:00
8a86d14ffd
Merge pull request #74 from profullstack/fix/agentmail-lockfile
Fix CI: add plugin-agentmail to package-lock.json
2026-06-14 10:00:41 -07:00
61ed94b000 Add @logicsrc/plugin-agentmail to package-lock.json
The agentmail workspace was added to package.json but the lockfile was not
regenerated, so CI's `npm ci` failed (EUSAGE: missing from lock file). Regenerate.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-14 17:00:21 +00:00
cb05a64438
Merge pull request #73 from profullstack/feat/agentmail-plugin
Add AgentMail plugin (paid-member mailbox client for humans + agents)
2026-06-14 09:56:49 -07:00
e304eac761 Add AgentMail plugin: paid-member mailbox client for humans + agents
@logicsrc/plugin-agentmail provides read/search/compose/send/flag/delete
over an injected MailTransport, gated to Founding Lifetime (paid) members.
Returns plain JSON-serializable domain objects so the same API serves a
human TUI, the CLI, MCP, and bots.

- domain.ts: transport-agnostic types + pure helpers (parse/format address,
  normalizeDraft, isValidEmail, snippet)
- ports.ts: MailTransport seam
- service.ts: AgentMailService (inbox/list/read/search/send/reply/flag/delete)
- access.ts: paid-member gate (assertPaid) + capability constants
- transports/memory.ts: complete in-memory backend (tests/dev/reference)
- transports/mailu.ts: self-hosted Mailu seam (mail.profullstack.com IMAP +
  smtp.profullstack.com submission) with injected IMAP/SMTP drivers
- index.ts: PluginDefinition (manifest, routes, capabilities, tuiPanels)
- registered in the root build; 20 vitest tests pass

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-14 15:37:17 +00:00
bf046ae280 Add AgentGit M1: agent-native git layer over a Forgejo backend
AgentGit is a thin, DID-gated source-collaboration layer over a backend
forge (default Forgejo at git.profullstack.com, BBS-members-only) — not a
new git host. M1 implements the contract and engines:

- forge/adapter.ts: ForgeAdapter interface (only forge-specific surface)
- forge/forgejo.ts: ForgejoAdapter over Forgejo/Gitea REST v1 (injectable
  fetch, typed errors), incl. ensureUser for member provisioning
- access.ts: gateAccess DID membership gate (owner/role/visibility)
- merge-policy.ts: evaluateMergePolicy pure engine (reviews, reputation
  floor, checks, escrow, merge method, agent-merge toggle)
- service.ts: AgentGitService ties gate + policy to the adapter; refuses
  policy-failing merges; provisionMember hook for AgentBBS
- schemas: logicsrc-repo + logicsrc-pull-request, registered in
  @logicsrc/validators with fixtures
- docs/agentgit.md spec; plugin wired into root build (default/disabled)

27 vitest tests pass; full monorepo build green.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-14 15:15:06 +00:00
phucnguyen1707
14fe9d608f
Require CoinPay userinfo identity (#21) 2026-06-13 23:01:15 -07:00
RissRIce
63ccad6d2a
fix: handle invalid static path encoding (#36)
Co-authored-by: RissRIce <rissrice2105-agent@users.noreply.github.com>
2026-06-13 23:00:59 -07:00
Autowebassat-blip
3ceddaa911
Parse JSON extension case-insensitively (#29)
Co-authored-by: Codex Microtask Operator <codex-microtask@example.com>
2026-06-13 22:59:39 -07:00
Autowebassat-blip
d9cf41e5a3
Handle malformed static paths (#31)
Co-authored-by: Codex Microtask Operator <codex-microtask@example.com>
2026-06-13 22:59:10 -07:00
Autowebassat-blip
774d461db6
Block IPv4-compatible IPv6 feed URLs (#32)
Co-authored-by: Codex Microtask Operator <codex-microtask@example.com>
2026-06-13 22:58:57 -07:00
Autowebassat-blip
307095d5e9
Fallback invalid CommandBoard web ports (#37)
Co-authored-by: Codex Microtask Operator <codex-microtask@example.com>
2026-06-13 22:58:10 -07:00
Autowebassat-blip
ad3926a006
Handle empty arcade game lists (#38)
Co-authored-by: Codex Microtask Operator <codex-microtask@example.com>
2026-06-13 22:57:56 -07:00
Autowebassat-blip
3afda8c147
Fallback invalid CommandBoard API ports (#39)
Co-authored-by: Codex Microtask Operator <codex-microtask@example.com>
2026-06-13 22:57:43 -07:00
Autowebassat-blip
e89c10cc80
Reject malformed CoinPay webhook signatures (#41)
* Reject malformed CoinPay webhook signatures

* Fix webhook signature type guard

---------

Co-authored-by: Codex Microtask Operator <codex-microtask@example.com>
2026-06-13 22:56:12 -07:00
Autowebassat-blip
055cc09d14
Fallback invalid CoinPay checkout amounts (#42)
Co-authored-by: Codex Microtask Operator <codex-microtask@example.com>
2026-06-13 22:55:53 -07:00
Autowebassat-blip
ffefd364ce
Ignore malformed feed probe candidates (#43)
Co-authored-by: Codex Microtask Operator <codex-microtask@example.com>
2026-06-13 22:55:39 -07:00
lazyGPT07
fbf4d76372
fix(cli): validate positive numeric options (#49) 2026-06-13 22:55:18 -07:00
RissRIce
aa3fdba277
Detect podcast RSS item enclosures (#50) 2026-06-13 22:55:06 -07:00
lazyGPT07
be530ab687
fix(feeds): enforce freshness window (#52) 2026-06-13 22:54:53 -07:00
6D0N9
90fffb124e
fix(agentstack): assignTask refuses tasks in a terminal status (#47) 2026-06-13 22:54:08 -07:00
lazyGPT07
a4cc229120
fix(cli): block config prototype pollution (#54) 2026-06-13 22:52:20 -07:00
FuturMix
f8040e9736
fix(auth): remove hardcoded fallback session secret (fixes #59) (#60) 2026-06-13 22:51:24 -07:00
FuturMix
9d2c485071
fix(commandboard): add body size limit and handle JSON parse errors (fixes #61) (#62) 2026-06-13 22:51:09 -07:00
FuturMix
5cfece3b84
fix(auth): use base64url encoding in session signature verification (fixes #64) (#67) 2026-06-13 22:44:53 -07:00
FuturMix
df040f4ff0
fix(proxy): validate host against allowlist to prevent open redirect (fixes #65) (#68) 2026-06-13 22:44:26 -07:00
FuturMix
13e921c7af
fix(supabase): enable RLS on communication account tables (fixes #69) (#70) 2026-06-13 22:44:13 -07:00
lazyGPT07
7d6a033b41
Enforce trusted-agent policy conditions (#72) 2026-06-13 22:44:00 -07:00
phucnguyen1707
8f4691584c
Handle bad feed path encoding (#9) 2026-06-11 21:07:24 -07:00
6D0N9
3d4345b665
fix(validators): isSchemaKind no longer accepts inherited prototype keys (#14)
'value in schemas' walks the prototype chain, so inherited keys like
"toString" passed assertSchemaKind and then crashed ajv.compile with a
misleading 'schema must be object or boolean' error (e.g. via the CLI).
Use Object.hasOwn for an own-property check.

Adds unit tests rejecting prototype keys and asserting every real
schema kind still passes.

Fixes #13
2026-06-11 21:06:18 -07:00
Autowebassat-blip
73e2464b30
Block IPv6 unspecified feed URLs (#15) 2026-06-11 21:06:03 -07:00
Autowebassat-blip
9942ef8dc6
Ignore invalid feed discovery limits (#16) 2026-06-11 21:04:55 -07:00