@oneie/sdk 0.14.10 → 0.14.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"receivers.d.ts","sourceRoot":"","sources":["../src/receivers.ts"],"names":[],"mappings":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmyGc,CAAC;AAErC,sDAAsD;AACtD,MAAM,MAAM,YAAY,GAAG,MAAM,OAAO,SAAS,CAAC;AAElD,+CAA+C;AAC/C,MAAM,MAAM,KAAK,CAAC,CAAC,SAAS,YAAY,IACtC,CAAC,OAAO,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,QAAQ,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AAEzF,iDAAiD;AACjD,MAAM,MAAM,KAAK,CAAC,CAAC,SAAS,YAAY,IACtC,CAAC,OAAO,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,QAAQ,CAAC,CAAC,CAAC,UAAU,EAAE,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AAE1F;;;;;GAKG;AACH,eAAO,MAAM,OAAO;IAClB,iFAAiF;;IAEjF,wDAAwD;;IAExD,iEAAiE;;IAEjE,mDAAmD;;IAEnD,8DAA8D;;IAE9D,wFAAwF;;CAEvC,CAAC;AAEpD,8BAA8B;AAC9B,MAAM,MAAM,UAAU,GAAG,MAAM,OAAO,OAAO,CAAC"}
1
+ {"version":3,"file":"receivers.d.ts","sourceRoot":"","sources":["../src/receivers.ts"],"names":[],"mappings":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAikHc,CAAC;AAErC,sDAAsD;AACtD,MAAM,MAAM,YAAY,GAAG,MAAM,OAAO,SAAS,CAAC;AAElD,+CAA+C;AAC/C,MAAM,MAAM,KAAK,CAAC,CAAC,SAAS,YAAY,IACtC,CAAC,OAAO,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,QAAQ,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AAEzF,iDAAiD;AACjD,MAAM,MAAM,KAAK,CAAC,CAAC,SAAS,YAAY,IACtC,CAAC,OAAO,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,QAAQ,CAAC,CAAC,CAAC,UAAU,EAAE,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AAE1F;;;;;GAKG;AACH,eAAO,MAAM,OAAO;IAClB,iFAAiF;;IAEjF,wDAAwD;;IAExD,iEAAiE;;IAEjE,mDAAmD;;IAEnD,8DAA8D;;IAE9D,wFAAwF;;CAEvC,CAAC;AAEpD,8BAA8B;AAC9B,MAAM,MAAM,UAAU,GAAG,MAAM,OAAO,OAAO,CAAC"}
package/dist/receivers.js CHANGED
@@ -734,24 +734,49 @@ export const RECEIVERS = {
734
734
  }),
735
735
  "world:route": receiver({
736
736
  receiver: "world:route",
737
- summary: "Route a tagged signal to THE handler via the ladder: learned tag-node path (follow_route) → staked subscribers (reputation-ranked) → CEO standing workflow; marks the delivery path so the next route is smarter. reply:true also invokes the resolved actor and returns its answer inline",
737
+ summary: "Route a tagged signal to THE handler via the ladder: learned tag-node path (follow_route) → staked subscribers (reputation-ranked) → CEO standing workflow; marks the delivery path so the next route is smarter. reply:true also invokes the resolved actor and returns its answer inline. decide:true instead answers the deterministic verdict { receiver, rung, reason } (reason: highway|classified|ceo) from the learned lane — a pure read, zero side effects, zero tokens; TypeQL twin: route_verdict (migration 0043)",
738
738
  request: z.object({
739
739
  tags: z.array(z.string()),
740
+ decide: z.boolean().optional(), // true → verdict-only: no delivery, no mark, no CEO trigger
740
741
  deliver: z.boolean().optional(),
741
742
  reply: z.boolean().optional(),
742
743
  board: z.literal("marketplace").optional(),
743
744
  slug: z.string().optional(),
744
745
  workspace: z.string().optional(),
745
- }).catchall(z.unknown()), // extra keys = the message payload (e.g. content) — carried through to the resolved actor, never stripped
746
+ }).catchall(z.unknown()), // extra keys = the message payload (e.g. content, text) — carried through to the resolved actor, never stripped
746
747
  response: z.object({
747
748
  ok: z.boolean(),
748
749
  routed: z.enum(["learned", "staked", "explore", "ceo"]).optional(),
749
750
  actor: z.string().optional(),
751
+ // decide:true verdict fields — receiver null ⇔ reason 'ceo'; rung 1:1 with reason (highway→1 classified→2 ceo→3)
752
+ receiver: z.string().nullable().optional(),
753
+ rung: z.number().optional(),
754
+ reason: z.enum(["highway", "classified", "ceo"]).optional(),
750
755
  tags: z.array(z.string()).optional(),
751
756
  reply: z.object({ ok: z.boolean(), text: z.string().optional(), error: z.string().optional() }).optional(),
752
757
  }),
753
758
  effect: "ask",
754
759
  }),
760
+ "world:suggest-workflow": receiver({
761
+ receiver: "world:suggest-workflow",
762
+ summary: "Rank staked workflows by tag match + earned track record (claw_paths), read-only — no delivery, no run, no auto-trigger. Requires >=3 successful runs before a workflow is surfaced; caps at 3 suggestions",
763
+ request: z.object({
764
+ tags: z.array(z.string()),
765
+ workspace: z.string().optional(),
766
+ slug: z.string().optional(),
767
+ }).catchall(z.unknown()),
768
+ response: z.object({
769
+ ok: z.boolean(),
770
+ suggestions: z.array(z.object({
771
+ workflowId: z.string(),
772
+ name: z.string(),
773
+ weight: z.number(),
774
+ tags: z.array(z.string()),
775
+ })).optional(),
776
+ error: z.string().optional(),
777
+ }),
778
+ effect: "ask", idempotent: true,
779
+ }),
755
780
  "tasks:announce": receiver({
756
781
  receiver: "tasks:announce",
757
782
  summary: "Announce a task into the world by its tags — the first caller of world:announce",
@@ -768,7 +793,17 @@ export const RECEIVERS = {
768
793
  "tasks:mine": receiver({
769
794
  receiver: "tasks:mine",
770
795
  summary: "My work queue: the open tasks whose words match what I subscribed to, ranked by learned weight (context-strength), not static priority",
771
- request: z.object({ limit: z.number().optional() }),
796
+ // `workspace` is not decoration — /api/ask reads a SERVICE caller's nominated slug off
797
+ // validation.payload.slug|workspace, and zod .object() STRIPS unknown keys. Omitting the
798
+ // field here meant a service call could never name a workspace: ctx.ownerSlug stayed
799
+ // empty and the resolver answered "forbidden: authentication required" no matter which
800
+ // key was presented. A session-authenticated browser call was unaffected (locals.slug
801
+ // supplies the workspace), which is why this only ever failed for the harness.
802
+ request: z.object({
803
+ limit: z.number().optional(),
804
+ workspace: z.string().optional(),
805
+ slug: z.string().optional(),
806
+ }),
772
807
  response: z.object({
773
808
  ok: z.boolean(),
774
809
  tasks: z.array(z.object({
@@ -788,7 +823,14 @@ export const RECEIVERS = {
788
823
  "tasks:everywhere": receiver({
789
824
  receiver: "tasks:everywhere",
790
825
  summary: "Every workspace I belong to, one queue: open+picked tasks visible by assignment/follow/ownership, with claimable + mine + offeredByMe flags; closed:true returns the logbook (done/verified, newest first)",
791
- request: z.object({ limit: z.number().optional(), closed: z.boolean().optional() }),
826
+ // See tasks:mine — a service caller nominates its workspace here, and zod strips any
827
+ // field the schema does not declare.
828
+ request: z.object({
829
+ limit: z.number().optional(),
830
+ closed: z.boolean().optional(),
831
+ workspace: z.string().optional(),
832
+ slug: z.string().optional(),
833
+ }),
792
834
  response: z.object({
793
835
  ok: z.boolean(),
794
836
  tasks: z.array(z.object({
@@ -810,6 +852,105 @@ export const RECEIVERS = {
810
852
  }),
811
853
  effect: "ask", idempotent: true,
812
854
  }),
855
+ "factory:elaborate": receiver({
856
+ receiver: "factory:elaborate",
857
+ summary: "Create one rung of the derivation ladder (objective | deliverable | task) and hang it under its parent with containment — the ELABORATE move. The rung id is derived from slug + ordinal, so a retry dedupes instead of duplicating",
858
+ request: z.object({
859
+ type: z.enum(["objective", "deliverable", "task"]),
860
+ // The promise/plan slug the rung belongs to, and its ordinal within that slug.
861
+ // Both required: together they derive the rung id (Interface Contract #1,
862
+ // text/factory-todo.md) and the `rung:<type>:<slug>:<ordinal>` idempotency tag.
863
+ slug: z.string(),
864
+ ordinal: z.number(),
865
+ name: z.string(),
866
+ // The rung above — its containment container. Must live in the same resolved
867
+ // workspace; a parent the caller cannot see is refused, never silently skipped.
868
+ parent: z.string().optional(),
869
+ // The machine-observable accept: check for this rung (factory-plan.md §7.3).
870
+ exitCondition: z.string().optional(),
871
+ notes: z.string().optional(),
872
+ tags: z.array(z.string()).optional(),
873
+ // Same authorization contract as tasks:create's workspace — honored only for an
874
+ // authorized caller, otherwise it falls back to the caller's own slug.
875
+ workspace: z.string().optional(),
876
+ }),
877
+ response: z.object({
878
+ ok: z.boolean(),
879
+ tid: z.string().optional(),
880
+ type: z.string().optional(),
881
+ parent: z.string().nullable().optional(),
882
+ tags: z.array(z.string()).optional(),
883
+ deduped: z.boolean().optional(),
884
+ error: z.string().optional(),
885
+ }),
886
+ effect: "ask", idempotent: true,
887
+ }),
888
+ "factory:attempt": receiver({
889
+ receiver: "factory:attempt",
890
+ summary: "Open an attempt contained by its task, or close it with the production edge to what it produced plus the rubric. A do-cycle IS an attempt (factory-plan.md §3.1) — do:cycle-close arms as a caller of the close phase, never as a second writer",
891
+ request: z.object({
892
+ phase: z.enum(["open", "close"]),
893
+ // open
894
+ task: z.string().optional(),
895
+ ordinal: z.number().optional(),
896
+ // Which actor ran it — provenance (path attempt → actor), never authority.
897
+ actorId: z.string().optional(),
898
+ tags: z.array(z.string()).optional(),
899
+ // close
900
+ attempt: z.string().optional(),
901
+ status: z.enum(["done", "verified", "failed", "dissolved"]).optional(),
902
+ produced: z.string().optional(),
903
+ // Scores land on the ATTEMPT — the graph is the authority; a composite on the
904
+ // plan thing is a cached projection over the attempts it contains (§3.2).
905
+ rubric: z.object({
906
+ composite: z.number().optional(),
907
+ security: z.number().optional(),
908
+ stability: z.number().optional(),
909
+ simplicity: z.number().optional(),
910
+ speed: z.number().optional(),
911
+ }).optional(),
912
+ workspace: z.string().optional(),
913
+ }),
914
+ response: z.object({
915
+ ok: z.boolean(),
916
+ tid: z.string().optional(),
917
+ task: z.string().optional(),
918
+ phase: z.string().optional(),
919
+ status: z.string().optional(),
920
+ produced: z.string().nullable().optional(),
921
+ rubric: z.array(z.string()).optional(),
922
+ deduped: z.boolean().optional(),
923
+ error: z.string().optional(),
924
+ }),
925
+ effect: "ask", idempotent: true,
926
+ }),
927
+ "do:halt": receiver({
928
+ receiver: "do:halt",
929
+ summary: "Stop a factory run, or release the stop. Sets a halt latch on the plan thing that `factory:attempt` phase \"open\" refuses against, so no new attempt can be claimed; with `attempt`, also closes that in-flight attempt as dissolved. It does NOT kill an OS process — a cycle already executing stops at its next substrate write",
930
+ request: z.object({
931
+ // The plan slug the operator sees ("factory"). The plan tid is resolved server-side;
932
+ // a tid from the body would be an addressable another tenant could guess.
933
+ slug: z.string(),
934
+ // Lift the latch instead of setting it. A stop with no release bricks the only
935
+ // write path the ladder has.
936
+ release: z.boolean().optional(),
937
+ // Optionally dissolve one in-flight attempt in the same act.
938
+ attempt: z.string().optional(),
939
+ // Same authorization contract as factory:elaborate's workspace — honored only for
940
+ // an authorized caller, otherwise it resolves back to the caller's own slug.
941
+ workspace: z.string().optional(),
942
+ }),
943
+ response: z.object({
944
+ ok: z.boolean(),
945
+ tid: z.string().optional(),
946
+ slug: z.string().optional(),
947
+ halted: z.boolean().optional(),
948
+ attempt: z.string().nullable().optional(),
949
+ deduped: z.boolean().optional(),
950
+ error: z.string().optional(),
951
+ }),
952
+ effect: "ask", idempotent: true,
953
+ }),
813
954
  "tasks:create": receiver({
814
955
  receiver: "tasks:create",
815
956
  summary: "Write one open task to the substrate and announce it by its tags in the same act — the quick-add entry point",
@@ -831,11 +972,21 @@ export const RECEIVERS = {
831
972
  }),
832
973
  "tasks:claim": receiver({
833
974
  receiver: "tasks:claim",
834
- summary: "Take a task off the queue: blocker-gate → status picked → tag the claimant @<slug>. The claimant is the attested caller, never a body field",
975
+ summary: "Take a task off the queue: blocker-gate → status picked → tag the claimant @<slug>. Address it by tid, or by the /do slug the task was created under. The claimant is the attested caller, never a body field",
976
+ // Addressable two ways, and BOTH must be optional here. The resolver has always
977
+ // supported slug (resolveTaskBySlug) because create returns a random task:<traceId>
978
+ // that no caller can derive — but this schema required `tid`, so every slug-addressed
979
+ // claim (do-signal.sh --task-claim, do-fleet.sh's lease) was rejected at validation
980
+ // before the resolver ran. The contract, not the resolver, was the dead wire.
835
981
  request: z.object({
836
- tid: z.string(),
982
+ tid: z.string().optional(),
983
+ // The kebab /do slug the task carries as a `slug:` tag.
984
+ slug: z.string().optional(),
837
985
  // Viewed workspace — same authorization contract as tasks:create's workspace.
838
986
  workspace: z.string().optional(),
987
+ }).refine((v) => !!v.tid || !!v.slug, {
988
+ message: "address the task by tid or slug",
989
+ path: ["tid"],
839
990
  }),
840
991
  response: z.object({
841
992
  ok: z.boolean().optional(),
@@ -883,8 +1034,12 @@ export const RECEIVERS = {
883
1034
  "tasks:link": receiver({
884
1035
  receiver: "tasks:link",
885
1036
  summary: "Close the handoff: record that a claimed task was built via /do <slug> — append a provenance line to the task's notes (the id back-ref + doc stems) and move it to done. Auth: attested caller only",
1037
+ // The slug IS the handle here — the resolver requires it and resolves the origin tid
1038
+ // from the `slug:` tag, treating an explicit tid as an optional override for direct
1039
+ // callers. Requiring tid (as this did) rejected every /do close, which knows the plan
1040
+ // slug and never the generated task:<traceId>.
886
1041
  request: z.object({
887
- tid: z.string(),
1042
+ tid: z.string().optional(),
888
1043
  // The kebab /do slug the task was built into (the docs backfilled under text/<slug>*).
889
1044
  slug: z.string(),
890
1045
  // Doc stems the /do run produced (e.g. ["usage-billing", "usage-billing-plan"]).
@@ -979,6 +1134,8 @@ export const RECEIVERS = {
979
1134
  price: z.number().nonnegative(),
980
1135
  currency: z.string().default("credits"),
981
1136
  deadline: z.string().datetime(),
1137
+ pid: z.string().optional(),
1138
+ ppid: z.string().optional(),
982
1139
  }),
983
1140
  response: z.union([
984
1141
  z.object({ ok: z.literal(true), deal: z.object({ id: z.string(), stage: z.string(), version: z.number() }) }),
@@ -1077,6 +1234,20 @@ export const RECEIVERS = {
1077
1234
  ]),
1078
1235
  effect: "ask", auth: "required", reversible: false, idempotent: false,
1079
1236
  }),
1237
+ "market:offers": receiver({
1238
+ receiver: "market:offers",
1239
+ summary: "List the caller's own deals (as buyer or seller), optionally filtered by stage",
1240
+ request: z.object({ stage: z.string().optional() }),
1241
+ response: z.union([
1242
+ z.object({ ok: z.literal(true), deals: z.array(z.object({
1243
+ id: z.string(), buyer: z.string(), seller: z.string(), skill: z.string(),
1244
+ price: z.number(), currency: z.string(), stage: z.string(), version: z.number(),
1245
+ pid: z.string().optional(), ppid: z.string().optional(),
1246
+ })) }),
1247
+ z.object({ ok: z.literal(false), error: z.string() }),
1248
+ ]),
1249
+ effect: "ask", auth: "required", cost: "free", idempotent: true,
1250
+ }),
1080
1251
  // ── market (TRADE) ──
1081
1252
  "market:hire": receiver({
1082
1253
  receiver: "market:hire",
@@ -1911,6 +2082,76 @@ export const RECEIVERS = {
1911
2082
  response: z.object({ ok: z.boolean(), slug: z.string().optional(), title: z.string().optional(), url: z.string().optional(), status: z.string().optional(), error: z.string().optional() }),
1912
2083
  effect: "ask", cost: "free", reversible: true, idempotent: true, auth: "member",
1913
2084
  }),
2085
+ 'pages:publish-pack': receiver({
2086
+ receiver: "pages:publish-pack",
2087
+ summary: "Publish all (or a listed subset of) a workspace's draft pack pages in one call — the go-live step. Reuses pages:publish's exact UPDATE, looped once, gated once.",
2088
+ request: z.object({ slug: z.string(), pages: z.array(z.union([z.string(), z.object({ slug: z.string() })])).optional() }),
2089
+ response: z.object({ ok: z.boolean(), published: z.number().optional(), error: z.string().optional() }),
2090
+ effect: "ask", cost: "free", reversible: true, idempotent: true, auth: "member",
2091
+ }),
2092
+ "pages:fill-pack": receiver({
2093
+ receiver: "pages:fill-pack",
2094
+ summary: "Fill a pack's instantiated pages with real business facts — one call, still drafts. Never fabricates a testimonial; pricing derives from one rate, not typed per page.",
2095
+ request: z.object({
2096
+ slug: z.string(),
2097
+ pages: z.array(z.object({ pageSlug: z.string(), slug: z.string() })),
2098
+ facts: z.object({
2099
+ identity: z.object({
2100
+ company: z.string(),
2101
+ ownerName: z.string(),
2102
+ phone: z.string(),
2103
+ foundedYear: z.number(),
2104
+ city: z.string(),
2105
+ state: z.string(),
2106
+ metro: z.string(),
2107
+ streetAddress: z.string(),
2108
+ }),
2109
+ licensing: z.object({
2110
+ usdot: z.string().optional(),
2111
+ mc: z.string().optional(),
2112
+ stateLicenseNumber: z.string(),
2113
+ regulatorOverride: z.string().optional(),
2114
+ }),
2115
+ reputation: z.object({ starRating: z.number(), reviewCount: z.number(), movesCompleted: z.number() }),
2116
+ serviceArea: z.object({ neighborhoods: z.array(z.string()).min(1) }),
2117
+ pricing: z.object({
2118
+ hourlyRatePerMover: z.number(),
2119
+ truckFee: z.number(),
2120
+ tiers: z.record(z.string(), z.object({ low: z.number(), high: z.number() })).optional(),
2121
+ }),
2122
+ story: z.object({ originSentence: z.string().optional() }).optional(),
2123
+ testimonials: z.array(z.object({ quote: z.string(), reviewerName: z.string(), moveType: z.string() })).optional(),
2124
+ source: z.object({ url: z.string().optional() }).optional(),
2125
+ }),
2126
+ }),
2127
+ response: z.object({ ok: z.boolean(), filled: z.number().optional(), error: z.string().optional() }),
2128
+ effect: "ask", cost: "free", reversible: true, idempotent: false, auth: "member",
2129
+ }),
2130
+ "pages:fill-pack-extract": receiver({
2131
+ receiver: "pages:fill-pack-extract",
2132
+ summary: "Best-effort business facts from an operator's own URL or a free-text description — fetch-then-confirm, never fetch-then-apply. Returns candidate facts for a form to pre-fill; nothing here writes a page.",
2133
+ request: z.object({ slug: z.string(), url: z.string().optional(), text: z.string().optional() }),
2134
+ response: z.object({ ok: z.boolean(), facts: z.record(z.string(), z.unknown()).optional(), error: z.string().optional() }),
2135
+ effect: "ask", cost: "variable", reversible: true, idempotent: true, auth: "member",
2136
+ }),
2137
+ "movers:build": receiver({
2138
+ receiver: "movers:build",
2139
+ summary: "The one intake orchestrator — takes a URL or a free-text description, extracts MoverBusinessFacts, clones the movers-factory template, and starts the run. The single op every door (web form, chat) shares; composes pages:fill-pack-extract + workflow:create + workflow:run, adds no new build primitive.",
2140
+ request: z.object({ slug: z.string(), url: z.string().optional(), describe: z.string().optional() }),
2141
+ response: z.object({ ok: z.boolean(), runId: z.string().optional(), facts: z.record(z.string(), z.unknown()).optional(), error: z.string().optional() }),
2142
+ effect: "ask", cost: "variable", reversible: false, idempotent: false, auth: "member",
2143
+ examples: [{ slug: "summit-movers", describe: "We're Summit Movers, family-run in Austin since 2015, licensed CAL-T, $65/hr per mover." }],
2144
+ surfaces: { chat: true },
2145
+ }),
2146
+ "movers:funnel-provision": receiver({
2147
+ receiver: "movers:funnel-provision",
2148
+ summary: "Open, sponsored no-account provision — takes a company name plus a URL or description, provisions a capped child workspace under moverchat, and starts movers:build. Rate-limited per visitor + a global daily ceiling; refuses past any wall rather than draining moverchat's operating credits. The single writer behind both the homepage door and this chat tool.",
2149
+ request: z.object({ name: z.string(), url: z.string().optional(), describe: z.string().optional(), phone: z.string().optional(), email: z.string().optional(), visitorHash: z.string() }),
2150
+ response: z.object({ ok: z.boolean(), previewToken: z.string().optional(), slug: z.string().optional(), error: z.string().optional() }),
2151
+ effect: "ask", cost: "variable", reversible: false, idempotent: false, auth: "public",
2152
+ examples: [{ name: "Summit Movers", url: "https://summitmovers.example.com", visitorHash: "chat:web:conv-123" }],
2153
+ surfaces: { chat: true },
2154
+ }),
1914
2155
  "pages:versions": receiver({
1915
2156
  receiver: "pages:versions",
1916
2157
  summary: "List a page's saved version snapshots, newest first",
@@ -1925,6 +2166,13 @@ export const RECEIVERS = {
1925
2166
  response: z.object({ ok: z.boolean(), slug: z.string().optional(), title: z.string().optional(), url: z.string().optional(), status: z.string().optional(), restoredTs: z.number().optional(), error: z.string().optional() }),
1926
2167
  effect: "ask", cost: "free", reversible: false, idempotent: false, auth: "member",
1927
2168
  }),
2169
+ "mover:agent-context": receiver({
2170
+ receiver: "mover:agent-context",
2171
+ summary: "The fact→agent bridge — render MoverBusinessFacts into ground-truth prose and write it to the workspace's company_context, so the mounted chat agent answers as the operator's real business. Never invents a service/review/policy; same facts as pages:fill-pack, one intake, two artifacts.",
2172
+ request: z.object({ slug: z.string(), facts: z.record(z.string(), z.unknown()) }),
2173
+ response: z.object({ ok: z.boolean(), chars: z.number().optional(), error: z.string().optional() }),
2174
+ effect: "ask", cost: "free", reversible: true, idempotent: true, auth: "member",
2175
+ }),
1928
2176
  "settings:write": receiver({
1929
2177
  receiver: "settings:write",
1930
2178
  summary: "Write a workspace setting value (caller or authorized descendant)",
@@ -2088,7 +2336,7 @@ export const RECEIVERS = {
2088
2336
  slug: z.string(), // provider workspace
2089
2337
  service: z.string().optional(), // service_id; omitted → the workspace's first active
2090
2338
  date: z.string().optional(), // 'YYYY-MM-DD'; omitted → next N open days
2091
- days: z.number().int().min(1).max(14).optional(), // window size when date omitted
2339
+ days: z.number().int().min(1).max(62).optional(), // window size when date omitted (month calendar needs ~2 months)
2092
2340
  }),
2093
2341
  response: z.object({
2094
2342
  service: z.object({
@@ -2387,13 +2635,31 @@ export const RECEIVERS = {
2387
2635
  response: z.object({
2388
2636
  ok: z.boolean(),
2389
2637
  stepCount: z.number().optional(),
2638
+ warnings: z.array(z.string()).optional(), // §9 advisories (never block); grammar: code | code:stepId
2390
2639
  idMap: z.record(z.string(), z.string()).optional(), // tempId → persisted id
2391
- error: z.string().optional(), // 'cycle_detected' | 'conflict' | 'invalid_diff'
2640
+ error: z.string().optional(), // 'cycle_detected' | 'conflict' | 'invalid_diff' | 'multiple_triggers' | 'edge_unknown_step' | 'invalid_config' | 'bad_expr' | 'unsupported_field'
2392
2641
  }),
2393
2642
  effect: "ask", cost: "free", reversible: true, idempotent: false, simulatable: true,
2394
2643
  auth: "manage_workflows",
2395
2644
  examples: [{ workflowId: "wf_abc", diff: { add: [{ tempId: "s1", kind: "trigger", name: "On signup", config: "{}" }] }, simulate: true }],
2396
2645
  }),
2646
+ "workflow:validate": receiver({
2647
+ receiver: "workflow:validate",
2648
+ summary: "Run the §9 gate on a WorkflowDiff without persisting — kinds/config shapes, exactly-one-trigger, edges reference real steps, chain cycles; advisories ride back as warnings (grammar: code | code:stepId, never block). Every save door calls this.",
2649
+ request: z.object({
2650
+ workflowId: z.string(),
2651
+ diff: WorkflowDiffSchema,
2652
+ }),
2653
+ response: z.object({
2654
+ ok: z.boolean(),
2655
+ stepCount: z.number().optional(),
2656
+ warnings: z.array(z.string()).optional(),
2657
+ error: z.string().optional(), // 'multiple_triggers'|'edge_unknown_step'|'invalid_config'|'bad_expr'|'cycle_detected'|'invalid_diff'|'unsupported_field'
2658
+ }),
2659
+ effect: "ask", cost: "free", reversible: true, idempotent: true, simulatable: true,
2660
+ auth: "manage_workflows",
2661
+ examples: [{ workflowId: "wf_abc", diff: { add: [{ tempId: "s1", kind: "trigger", name: "On signup", config: "{}" }] } }],
2662
+ }),
2397
2663
  "workflow:run": receiver({
2398
2664
  receiver: "workflow:run",
2399
2665
  summary: "Start a run — spawns the WorkflowRun DO, executes each step, marks path strength on traversed edges",
@@ -2497,6 +2763,19 @@ export const RECEIVERS = {
2497
2763
  effect: "signal", cost: "free", idempotent: true, simulatable: false, auth: "manage_workflows",
2498
2764
  examples: [{ runId: "run_1", stepId: "s2", stepName: "Approve contract" }],
2499
2765
  }),
2766
+ "workflow:settled-notify": receiver({
2767
+ receiver: "workflow:settled-notify",
2768
+ summary: "Tell a run's started_by that it finished when there is no chat conversation to carry the outcome (manual/canvas/scheduled runs). settle() fires this group-less terminal only; a plain status line, never approval markup. Sibling of workflow:resumed-notify.",
2769
+ request: z.object({
2770
+ runId: z.string(),
2771
+ group: z.string(), // started_by — the workspace to notify
2772
+ status: z.string().optional(), // 'done' | 'failed'
2773
+ workflowName: z.string().optional(),
2774
+ }),
2775
+ response: z.object({ ok: z.boolean(), group: z.string().optional(), error: z.string().optional() }),
2776
+ effect: "signal", cost: "free", idempotent: true, simulatable: false, auth: "manage_workflows",
2777
+ examples: [{ runId: "run_1", group: "acme", status: "done" }],
2778
+ }),
2500
2779
  "workflow:stop": receiver({
2501
2780
  receiver: "workflow:stop",
2502
2781
  summary: "Park a live run at its current step (status → paused); preserves the resume cursor so human:resolve or a re-run continues it",