deepdebug-local-agent 1.12.0 → 1.13.0

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.
Files changed (47) hide show
  1. package/CHANGELOG.md +2 -0
  2. package/docs/la-chat.md +35 -0
  3. package/package.json +1 -1
  4. package/src/dlp/rules.js +2 -2
  5. package/src/la-protocol-v2/chat/config.js +60 -0
  6. package/src/la-protocol-v2/chat/cursors.js +57 -0
  7. package/src/la-protocol-v2/chat/dlp.js +92 -0
  8. package/src/la-protocol-v2/chat/index.js +28 -0
  9. package/src/la-protocol-v2/chat/store.js +337 -0
  10. package/src/la-protocol-v2/chat/stream-source.js +23 -0
  11. package/src/la-protocol-v2/content-handlers/chat-session.js +41 -0
  12. package/src/la-protocol-v2/content-handlers/handler.js +10 -2
  13. package/src/la-protocol-v2/content-handlers/install.js +2 -2
  14. package/src/la-protocol-v2/content-handlers/job-stream.js +62 -0
  15. package/src/la-protocol-v2/contract/CONTRACT_SOURCE.json +13 -8
  16. package/src/la-protocol-v2/contract/README.md +42 -0
  17. package/src/la-protocol-v2/contract/chat.session.body.schema.json +47 -0
  18. package/src/la-protocol-v2/contract/index.json +1 -1
  19. package/src/la-protocol-v2/contract/job.assign.schema.json +3 -2
  20. package/src/la-protocol-v2/contract/job.stream.body.schema.json +49 -0
  21. package/src/la-protocol-v2/jobs/agent2/api-client.js +78 -51
  22. package/src/la-protocol-v2/jobs/agent2/config.js +1 -0
  23. package/src/la-protocol-v2/jobs/agent2/runner.js +92 -11
  24. package/src/la-protocol-v2/jobs/agent2/supervisor.js +2 -0
  25. package/src/la-protocol-v2/jobs/git-exec.js +5 -4
  26. package/src/la-protocol-v2/jobs/manager.js +4 -2
  27. package/src/la-protocol-v2/jobs/workspace-materializer.js +35 -12
  28. package/src/la-protocol-v2/runtime.js +32 -3
  29. package/src/workspace-manager.js +3 -2
  30. package/test/contract/la-protocol-v2/vectors/chat.session.body.vectors.json +10379 -0
  31. package/test/contract/la-protocol-v2/vectors/content.request.vectors.json +245 -0
  32. package/test/contract/la-protocol-v2/vectors/hello.vectors.json +112 -0
  33. package/test/contract/la-protocol-v2/vectors/job.assign.vectors.json +568 -3
  34. package/test/contract/la-protocol-v2/vectors/job.stream.body.vectors.json +4572 -0
  35. package/test/contract/la-protocol-v2/vectors/register.vectors.json +106 -0
  36. package/test/contract/la-protocol-v2/vectors/traces/valid-chat-job-and-stream.json +311 -0
  37. package/test/la-protocol-v2/chat-dlp-json.test.js +169 -0
  38. package/test/la-protocol-v2/chat-la.test.js +490 -0
  39. package/test/la-protocol-v2/chat-real-e2e.test.js +69 -0
  40. package/test/la-protocol-v2/chat-store.test.js +301 -0
  41. package/test/la-protocol-v2/contract-v21.test.js +2 -2
  42. package/test/la-protocol-v2/contract.test.js +6 -6
  43. package/test/la-protocol-v2/helpers/agent2-rig.js +2 -2
  44. package/test/la-protocol-v2/helpers/fake-agent2-cli.js +1 -0
  45. package/test/la-protocol-v2/helpers/fake-agent2.js +80 -5
  46. package/test/la-protocol-v2/traces.test.js +3 -3
  47. package/test/la-protocol-v2/workspace-materializer-hostile.test.js +105 -0
@@ -535,6 +535,251 @@
535
535
  }
536
536
  }
537
537
  }
538
+ },
539
+ {
540
+ "name": "job-stream-first-request",
541
+ "why": "2.3: first long-poll, ref = job UUID",
542
+ "expect": {
543
+ "valid": true
544
+ },
545
+ "message": {
546
+ "schemaVersion": 2,
547
+ "type": "content.request",
548
+ "msgId": "00000000-0000-4000-8000-000000000001",
549
+ "seq": 1,
550
+ "tenantId": "3f2b8c1e-5a4d-4e7b-9c21-0a1b2c3d4e5f",
551
+ "workspaceId": "ws-1",
552
+ "ts": "2026-10-29T10:00:00Z",
553
+ "paramsRaw": "{\"kind\":\"job.stream\",\"ref\":\"c3d4e5f6-a7b8-4c9d-8e0f-2a3b4c5d6e7f\",\"actor\":{\"userId\":\"usr-42\",\"role\":\"member\"}}",
554
+ "sig": {
555
+ "keyId": "vh-cp-2026-10",
556
+ "timestamp": "1793268000",
557
+ "nonce": "Zm9vYmFyYmF6cXV4MTIzNDU2",
558
+ "tenantId": "3f2b8c1e-5a4d-4e7b-9c21-0a1b2c3d4e5f",
559
+ "workspaceId": "ws-1",
560
+ "signature": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=="
561
+ },
562
+ "requestId": "d4e5f6a7-b8c9-4d0e-9f1a-3b4c5d6e7f80",
563
+ "payload": {
564
+ "kind": "job.stream",
565
+ "ref": "c3d4e5f6-a7b8-4c9d-8e0f-2a3b4c5d6e7f",
566
+ "actor": {
567
+ "userId": "usr-42",
568
+ "role": "member"
569
+ }
570
+ }
571
+ }
572
+ },
573
+ {
574
+ "name": "job-stream-next-ref",
575
+ "why": "2.3: next long-poll, ref = the opaque 43-char nextRef the LA minted",
576
+ "expect": {
577
+ "valid": true
578
+ },
579
+ "message": {
580
+ "schemaVersion": 2,
581
+ "type": "content.request",
582
+ "msgId": "00000000-0000-4000-8000-000000000001",
583
+ "seq": 1,
584
+ "tenantId": "3f2b8c1e-5a4d-4e7b-9c21-0a1b2c3d4e5f",
585
+ "workspaceId": "ws-1",
586
+ "ts": "2026-10-29T10:00:00Z",
587
+ "paramsRaw": "{\"kind\":\"job.stream\",\"ref\":\"AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE\",\"actor\":{\"userId\":\"usr-42\",\"role\":\"member\"}}",
588
+ "sig": {
589
+ "keyId": "vh-cp-2026-10",
590
+ "timestamp": "1793268000",
591
+ "nonce": "Zm9vYmFyYmF6cXV4MTIzNDU2",
592
+ "tenantId": "3f2b8c1e-5a4d-4e7b-9c21-0a1b2c3d4e5f",
593
+ "workspaceId": "ws-1",
594
+ "signature": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=="
595
+ },
596
+ "requestId": "d4e5f6a7-b8c9-4d0e-9f1a-3b4c5d6e7f80",
597
+ "payload": {
598
+ "kind": "job.stream",
599
+ "ref": "AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE",
600
+ "actor": {
601
+ "userId": "usr-42",
602
+ "role": "member"
603
+ }
604
+ }
605
+ }
606
+ },
607
+ {
608
+ "name": "chat-session-conversation-uuid",
609
+ "why": "2.3: reopen a chat, ref = conversation UUID",
610
+ "expect": {
611
+ "valid": true
612
+ },
613
+ "message": {
614
+ "schemaVersion": 2,
615
+ "type": "content.request",
616
+ "msgId": "00000000-0000-4000-8000-000000000001",
617
+ "seq": 1,
618
+ "tenantId": "3f2b8c1e-5a4d-4e7b-9c21-0a1b2c3d4e5f",
619
+ "workspaceId": "ws-1",
620
+ "ts": "2026-10-29T10:00:00Z",
621
+ "paramsRaw": "{\"kind\":\"chat.session\",\"ref\":\"c3d4e5f6-a7b8-4c9d-8e0f-2a3b4c5d6e7f\",\"actor\":{\"userId\":\"usr-42\",\"role\":\"member\"}}",
622
+ "sig": {
623
+ "keyId": "vh-cp-2026-10",
624
+ "timestamp": "1793268000",
625
+ "nonce": "Zm9vYmFyYmF6cXV4MTIzNDU2",
626
+ "tenantId": "3f2b8c1e-5a4d-4e7b-9c21-0a1b2c3d4e5f",
627
+ "workspaceId": "ws-1",
628
+ "signature": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=="
629
+ },
630
+ "requestId": "d4e5f6a7-b8c9-4d0e-9f1a-3b4c5d6e7f80",
631
+ "payload": {
632
+ "kind": "chat.session",
633
+ "ref": "c3d4e5f6-a7b8-4c9d-8e0f-2a3b4c5d6e7f",
634
+ "actor": {
635
+ "userId": "usr-42",
636
+ "role": "member"
637
+ }
638
+ }
639
+ }
640
+ },
641
+ {
642
+ "name": "job-stream-kind-upper-case",
643
+ "why": "kind is case sensitive",
644
+ "expect": {
645
+ "valid": false,
646
+ "code": "schema_violation",
647
+ "keyword": "enum"
648
+ },
649
+ "message": {
650
+ "schemaVersion": 2,
651
+ "type": "content.request",
652
+ "msgId": "00000000-0000-4000-8000-000000000001",
653
+ "seq": 1,
654
+ "tenantId": "3f2b8c1e-5a4d-4e7b-9c21-0a1b2c3d4e5f",
655
+ "workspaceId": "ws-1",
656
+ "ts": "2026-10-29T10:00:00Z",
657
+ "paramsRaw": "{\"kind\":\"Job.Stream\",\"ref\":\"c3d4e5f6-a7b8-4c9d-8e0f-2a3b4c5d6e7f\",\"actor\":{\"userId\":\"usr-42\",\"role\":\"member\"}}",
658
+ "sig": {
659
+ "keyId": "vh-cp-2026-10",
660
+ "timestamp": "1793268000",
661
+ "nonce": "Zm9vYmFyYmF6cXV4MTIzNDU2",
662
+ "tenantId": "3f2b8c1e-5a4d-4e7b-9c21-0a1b2c3d4e5f",
663
+ "workspaceId": "ws-1",
664
+ "signature": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=="
665
+ },
666
+ "requestId": "d4e5f6a7-b8c9-4d0e-9f1a-3b4c5d6e7f80",
667
+ "payload": {
668
+ "kind": "Job.Stream",
669
+ "ref": "c3d4e5f6-a7b8-4c9d-8e0f-2a3b4c5d6e7f",
670
+ "actor": {
671
+ "userId": "usr-42",
672
+ "role": "member"
673
+ }
674
+ }
675
+ }
676
+ },
677
+ {
678
+ "name": "job-stream-kind-underscore",
679
+ "why": "spelling is job.stream",
680
+ "expect": {
681
+ "valid": false,
682
+ "code": "schema_violation",
683
+ "keyword": "enum"
684
+ },
685
+ "message": {
686
+ "schemaVersion": 2,
687
+ "type": "content.request",
688
+ "msgId": "00000000-0000-4000-8000-000000000001",
689
+ "seq": 1,
690
+ "tenantId": "3f2b8c1e-5a4d-4e7b-9c21-0a1b2c3d4e5f",
691
+ "workspaceId": "ws-1",
692
+ "ts": "2026-10-29T10:00:00Z",
693
+ "paramsRaw": "{\"kind\":\"job_stream\",\"ref\":\"c3d4e5f6-a7b8-4c9d-8e0f-2a3b4c5d6e7f\",\"actor\":{\"userId\":\"usr-42\",\"role\":\"member\"}}",
694
+ "sig": {
695
+ "keyId": "vh-cp-2026-10",
696
+ "timestamp": "1793268000",
697
+ "nonce": "Zm9vYmFyYmF6cXV4MTIzNDU2",
698
+ "tenantId": "3f2b8c1e-5a4d-4e7b-9c21-0a1b2c3d4e5f",
699
+ "workspaceId": "ws-1",
700
+ "signature": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=="
701
+ },
702
+ "requestId": "d4e5f6a7-b8c9-4d0e-9f1a-3b4c5d6e7f80",
703
+ "payload": {
704
+ "kind": "job_stream",
705
+ "ref": "c3d4e5f6-a7b8-4c9d-8e0f-2a3b4c5d6e7f",
706
+ "actor": {
707
+ "userId": "usr-42",
708
+ "role": "member"
709
+ }
710
+ }
711
+ }
712
+ },
713
+ {
714
+ "name": "chat-session-kind-hyphen",
715
+ "why": "spelling is chat.session",
716
+ "expect": {
717
+ "valid": false,
718
+ "code": "schema_violation",
719
+ "keyword": "enum"
720
+ },
721
+ "message": {
722
+ "schemaVersion": 2,
723
+ "type": "content.request",
724
+ "msgId": "00000000-0000-4000-8000-000000000001",
725
+ "seq": 1,
726
+ "tenantId": "3f2b8c1e-5a4d-4e7b-9c21-0a1b2c3d4e5f",
727
+ "workspaceId": "ws-1",
728
+ "ts": "2026-10-29T10:00:00Z",
729
+ "paramsRaw": "{\"kind\":\"chat-session\",\"ref\":\"c3d4e5f6-a7b8-4c9d-8e0f-2a3b4c5d6e7f\",\"actor\":{\"userId\":\"usr-42\",\"role\":\"member\"}}",
730
+ "sig": {
731
+ "keyId": "vh-cp-2026-10",
732
+ "timestamp": "1793268000",
733
+ "nonce": "Zm9vYmFyYmF6cXV4MTIzNDU2",
734
+ "tenantId": "3f2b8c1e-5a4d-4e7b-9c21-0a1b2c3d4e5f",
735
+ "workspaceId": "ws-1",
736
+ "signature": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=="
737
+ },
738
+ "requestId": "d4e5f6a7-b8c9-4d0e-9f1a-3b4c5d6e7f80",
739
+ "payload": {
740
+ "kind": "chat-session",
741
+ "ref": "c3d4e5f6-a7b8-4c9d-8e0f-2a3b4c5d6e7f",
742
+ "actor": {
743
+ "userId": "usr-42",
744
+ "role": "member"
745
+ }
746
+ }
747
+ }
748
+ },
749
+ {
750
+ "name": "job-stream-without-ref",
751
+ "why": "ref is required",
752
+ "expect": {
753
+ "valid": false,
754
+ "code": "schema_violation",
755
+ "keyword": "required"
756
+ },
757
+ "message": {
758
+ "schemaVersion": 2,
759
+ "type": "content.request",
760
+ "msgId": "00000000-0000-4000-8000-000000000001",
761
+ "seq": 1,
762
+ "tenantId": "3f2b8c1e-5a4d-4e7b-9c21-0a1b2c3d4e5f",
763
+ "workspaceId": "ws-1",
764
+ "ts": "2026-10-29T10:00:00Z",
765
+ "paramsRaw": "{\"kind\":\"job.stream\",\"actor\":{\"userId\":\"usr-42\",\"role\":\"member\"}}",
766
+ "sig": {
767
+ "keyId": "vh-cp-2026-10",
768
+ "timestamp": "1793268000",
769
+ "nonce": "Zm9vYmFyYmF6cXV4MTIzNDU2",
770
+ "tenantId": "3f2b8c1e-5a4d-4e7b-9c21-0a1b2c3d4e5f",
771
+ "workspaceId": "ws-1",
772
+ "signature": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=="
773
+ },
774
+ "requestId": "d4e5f6a7-b8c9-4d0e-9f1a-3b4c5d6e7f80",
775
+ "payload": {
776
+ "kind": "job.stream",
777
+ "actor": {
778
+ "userId": "usr-42",
779
+ "role": "member"
780
+ }
781
+ }
782
+ }
538
783
  }
539
784
  ]
540
785
  }
@@ -480,6 +480,118 @@
480
480
  "clockEpochMs": 1793268000000
481
481
  }
482
482
  }
483
+ },
484
+ {
485
+ "name": "capabilities-job-chat-and-inline-16k",
486
+ "why": "2.3: job.chat and job.inline.16k are capability names like the others (no enum); both imply job.assign, enforced by the CP routing, not by the schema",
487
+ "expect": {
488
+ "valid": true
489
+ },
490
+ "message": {
491
+ "schemaVersion": 2,
492
+ "type": "hello",
493
+ "msgId": "00000000-0000-4000-8000-000000000001",
494
+ "seq": 0,
495
+ "tenantId": "3f2b8c1e-5a4d-4e7b-9c21-0a1b2c3d4e5f",
496
+ "workspaceId": "ws-1",
497
+ "ts": "2026-10-29T10:00:00Z",
498
+ "agentId": "a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d",
499
+ "payload": {
500
+ "laVersion": "2.4.0",
501
+ "capabilities": [
502
+ "content.request",
503
+ "job.assign",
504
+ "job.chat",
505
+ "job.inline.16k",
506
+ "job.options"
507
+ ],
508
+ "signatureMode": "enforce",
509
+ "graphify": {
510
+ "state": "ready",
511
+ "nodes": 12840,
512
+ "edges": 40211,
513
+ "commit": "9fceb02d",
514
+ "ageSeconds": 300
515
+ },
516
+ "diskFreeBytes": 52428800000,
517
+ "queueDepth": 0,
518
+ "clockEpochMs": 1793268000000
519
+ }
520
+ }
521
+ },
522
+ {
523
+ "name": "capability-job-chat-upper-case",
524
+ "expect": {
525
+ "valid": false,
526
+ "code": "schema_violation",
527
+ "keyword": "pattern"
528
+ },
529
+ "message": {
530
+ "schemaVersion": 2,
531
+ "type": "hello",
532
+ "msgId": "00000000-0000-4000-8000-000000000001",
533
+ "seq": 0,
534
+ "tenantId": "3f2b8c1e-5a4d-4e7b-9c21-0a1b2c3d4e5f",
535
+ "workspaceId": "ws-1",
536
+ "ts": "2026-10-29T10:00:00Z",
537
+ "agentId": "a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d",
538
+ "payload": {
539
+ "laVersion": "2.4.0",
540
+ "capabilities": [
541
+ "content.request",
542
+ "job.assign",
543
+ "Job.Chat"
544
+ ],
545
+ "signatureMode": "enforce",
546
+ "graphify": {
547
+ "state": "ready",
548
+ "nodes": 12840,
549
+ "edges": 40211,
550
+ "commit": "9fceb02d",
551
+ "ageSeconds": 300
552
+ },
553
+ "diskFreeBytes": 52428800000,
554
+ "queueDepth": 0,
555
+ "clockEpochMs": 1793268000000
556
+ }
557
+ }
558
+ },
559
+ {
560
+ "name": "capability-job-inline-16k-with-space",
561
+ "expect": {
562
+ "valid": false,
563
+ "code": "schema_violation",
564
+ "keyword": "pattern"
565
+ },
566
+ "message": {
567
+ "schemaVersion": 2,
568
+ "type": "hello",
569
+ "msgId": "00000000-0000-4000-8000-000000000001",
570
+ "seq": 0,
571
+ "tenantId": "3f2b8c1e-5a4d-4e7b-9c21-0a1b2c3d4e5f",
572
+ "workspaceId": "ws-1",
573
+ "ts": "2026-10-29T10:00:00Z",
574
+ "agentId": "a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d",
575
+ "payload": {
576
+ "laVersion": "2.4.0",
577
+ "capabilities": [
578
+ "content.request",
579
+ "job.assign",
580
+ "job.inline 16k"
581
+ ],
582
+ "signatureMode": "enforce",
583
+ "graphify": {
584
+ "state": "ready",
585
+ "nodes": 12840,
586
+ "edges": 40211,
587
+ "commit": "9fceb02d",
588
+ "ageSeconds": 300
589
+ },
590
+ "diskFreeBytes": 52428800000,
591
+ "queueDepth": 0,
592
+ "clockEpochMs": 1793268000000
593
+ }
594
+ }
483
595
  }
484
596
  ]
485
597
  }