robisie 0.1.0 → 0.1.1

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 (87) hide show
  1. package/CHANGELOG.md +69 -0
  2. package/README.md +76 -12
  3. package/dist/active-recovery.d.ts +58 -0
  4. package/dist/active-recovery.js +143 -0
  5. package/dist/agents.d.ts +34 -0
  6. package/dist/agents.js +77 -16
  7. package/dist/attempt-identity.d.ts +21 -0
  8. package/dist/attempt-identity.js +39 -0
  9. package/dist/ci-failure-result.d.ts +23 -0
  10. package/dist/ci-failure-result.js +90 -0
  11. package/dist/claude-headless.d.ts +7 -0
  12. package/dist/claude-headless.js +28 -0
  13. package/dist/cli.d.ts +17 -0
  14. package/dist/cli.js +55 -15
  15. package/dist/commands.d.ts +18 -0
  16. package/dist/commands.js +190 -85
  17. package/dist/constants.d.ts +32 -0
  18. package/dist/constants.js +3 -3
  19. package/dist/context.d.ts +24 -0
  20. package/dist/context.js +22 -6
  21. package/dist/dependency-readiness.d.ts +13 -0
  22. package/dist/dependency-readiness.js +80 -0
  23. package/dist/dispatch-scope.d.ts +18 -0
  24. package/dist/dispatch-scope.js +46 -0
  25. package/dist/done-evidence.d.ts +31 -0
  26. package/dist/done-evidence.js +216 -0
  27. package/dist/engine-config.d.ts +65 -0
  28. package/dist/engine-config.js +139 -0
  29. package/dist/fsops.d.ts +87 -0
  30. package/dist/fsops.js +117 -24
  31. package/dist/helpers.d.ts +15 -0
  32. package/dist/helpers.js +262 -45
  33. package/dist/intent-rules/admission.d.ts +10 -0
  34. package/dist/intent-rules/admission.js +35 -0
  35. package/dist/intent-rules/done-when-roles.d.ts +21 -0
  36. package/dist/intent-rules/done-when-roles.js +101 -0
  37. package/dist/intent-rules/hooks.d.ts +29 -0
  38. package/dist/intent-rules/hooks.js +23 -0
  39. package/dist/k3-codex-role.d.ts +20 -0
  40. package/dist/k3-codex-role.js +68 -0
  41. package/dist/manifest.d.ts +41 -0
  42. package/dist/manifest.js +59 -14
  43. package/dist/mcp.d.ts +18 -0
  44. package/dist/mcp.js +89 -39
  45. package/dist/opencode-result.d.ts +19 -0
  46. package/dist/opencode-result.js +136 -0
  47. package/dist/opencode-review-guard.d.ts +1 -0
  48. package/dist/opencode-review-guard.js +19 -0
  49. package/dist/opencode-session-export.d.ts +5 -0
  50. package/dist/opencode-session-export.js +28 -0
  51. package/dist/outcome-moves.d.ts +15 -0
  52. package/dist/outcome-moves.js +39 -0
  53. package/dist/planer-client.d.ts +214 -0
  54. package/dist/planer-client.js +351 -0
  55. package/dist/restart-recovery.d.ts +47 -0
  56. package/dist/restart-recovery.js +70 -0
  57. package/dist/review-source-packet.d.ts +17 -0
  58. package/dist/review-source-packet.js +44 -0
  59. package/dist/role-registry.d.ts +19 -0
  60. package/dist/role-registry.js +83 -0
  61. package/dist/role-results.d.ts +15 -0
  62. package/dist/role-results.js +42 -0
  63. package/dist/roles.d.ts +30 -0
  64. package/dist/roles.js +20 -16
  65. package/dist/seed-validation.d.ts +28 -0
  66. package/dist/seed-validation.js +294 -0
  67. package/dist/selection-result.d.ts +44 -0
  68. package/dist/selection-result.js +144 -0
  69. package/dist/sparse-policy.d.ts +8 -0
  70. package/dist/sparse-policy.js +49 -0
  71. package/dist/tester-identity.d.ts +11 -0
  72. package/dist/tester-identity.js +53 -0
  73. package/dist/worker-env.d.ts +5 -0
  74. package/dist/worker-env.js +34 -0
  75. package/docs/ENGINE-API.md +78 -0
  76. package/docs/ENGINE-CONFIG.md +115 -0
  77. package/docs/README.en.md +24 -15
  78. package/docs/README.md +26 -15
  79. package/docs/RELEASE-0.1.0.md +81 -8
  80. package/docs/RELEASE-0.1.1.md +110 -0
  81. package/helpers/ceo-client-launcher-mcp.mjs +36 -8
  82. package/helpers/client-spawn-session.sh +181 -0
  83. package/helpers/client-spawn.sh +825 -0
  84. package/package.json +9 -4
  85. package/roles/ceo-client.md +3 -2
  86. package/roles/manager-builder-client.md +18 -4
  87. package/roles/quality-officer-client.md +20 -6
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "robisie",
3
- "version": "0.1.0",
3
+ "version": "0.1.1",
4
4
  "description": "Instalator klienta robisie: łączy agenta (Claude Code, Codex CLI, OpenCode) z tablicą robisie i instaluje role klienta.",
5
5
  "license": "UNLICENSED",
6
6
  "type": "module",
@@ -24,9 +24,14 @@
24
24
  "zod": "^4.3.6"
25
25
  },
26
26
  "scripts": {
27
- "build": "tsc -p tsconfig.json",
27
+ "build": "node scripts/build-package.mjs",
28
28
  "sync": "node scripts/sync-assets.mjs",
29
- "prepack": "node scripts/sync-assets.mjs && tsc -p tsconfig.json"
29
+ "prepack": "node scripts/sync-assets.mjs && node scripts/build-package.mjs"
30
30
  },
31
- "homepage": "https://robisie.app/SKILL.md"
31
+ "homepage": "https://robisie.app/SKILL.md",
32
+ "repository": {
33
+ "type": "git",
34
+ "url": "https://github.com/chuppa12/robisie-app",
35
+ "directory": "packages/client"
36
+ }
32
37
  }
@@ -55,13 +55,14 @@ async function readCompleteCard(cardRef) {
55
55
  const card = await mcp__robisie__get_task({ id: cardRef, include: detailsKeys });
56
56
  if (card === null) return null;
57
57
  const expected = JSON.stringify([...detailsKeys].sort());
58
- if (JSON.stringify([...(card.availableDetailsKeys ?? [])].sort()) !== expected
58
+ if (!Array.isArray(card.availableDetailsKeys) || card.availableDetailsKeys.some(key => typeof key !== "string")
59
+ || JSON.stringify([...card.availableDetailsKeys].sort()) !== expected
59
60
  || JSON.stringify(Object.keys(card.details ?? {}).sort()) !== expected) throw new Error("Details keys changed during read");
60
61
  return card;
61
62
  }
62
63
  ```
63
64
 
64
- Use the complete second result as the card. The index response is never evidence of complete details. If keys are unreadable or change, report the read failure through the existing failure path; do not continue with partial content.
65
+ Use the complete second result as the card. The index response is never evidence of complete details. Both indexes must be arrays of strings: [] to [] passes the key check; a missing or null second index fails it. If keys are unreadable or change, report the read failure through the existing failure path; do not continue with partial content.
65
66
 
66
67
  ## Discover the operator's intent
67
68
 
@@ -47,13 +47,27 @@ async function readCompleteCard(cardRef) {
47
47
  const card = await mcp__robisie__get_task({ id: cardRef, include: detailsKeys });
48
48
  if (card === null) return null;
49
49
  const expected = JSON.stringify([...detailsKeys].sort());
50
- if (JSON.stringify([...(card.availableDetailsKeys ?? [])].sort()) !== expected
50
+ if (!Array.isArray(card.availableDetailsKeys) || card.availableDetailsKeys.some(key => typeof key !== "string")
51
+ || JSON.stringify([...card.availableDetailsKeys].sort()) !== expected
51
52
  || JSON.stringify(Object.keys(card.details ?? {}).sort()) !== expected) throw new Error("Details keys changed during read");
53
+ const details = card.details && typeof card.details === "object" && !Array.isArray(card.details) ? card.details : {};
54
+ const nonblank = value => typeof value === "string" && value.trim().length > 0;
55
+ const missing = ["goal", "expectedResult", "boundaries", "doneWhen"].filter(key => {
56
+ const value = details[key];
57
+ return key === "goal" || key === "expectedResult"
58
+ ? !nonblank(value)
59
+ : !Array.isArray(value) || value.length === 0 || ![...value].every(nonblank);
60
+ });
61
+ if (missing.length) throw new Error(`Missing intent data: ${missing.join(", ")}`);
52
62
  return card;
53
63
  }
54
64
  ```
55
65
 
56
- Use the complete second result as the card. The index response is never evidence of complete details. If keys are unreadable or change, report the read failure through the existing failure path; do not continue with partial content.
66
+ Use the complete second result as the card. The index response is never evidence of complete details. Both indexes must be arrays of strings: [] to [] passes the key check; a missing or null second index fails it. If keys are unreadable or change, report the read failure through the existing failure path; do not continue with partial content.
67
+
68
+ D04 client intent gate: every complete read must validate `goal` and `expectedResult` as nonblank strings, and `boundaries` and `doneWhen` as nonempty arrays of nonblank strings. `trim()` checks only; preserve the original values and foreign keys, including canonical legacy details. Unreadable details (missing, null, primitive, or array) lack all four fields. `done_when` is builder evidence, never an alias for `doneWhen`.
69
+
70
+ On `Missing intent data`, name every reported field and stop before project work or checks, `mcp__client-launch-context__prepare_review`, identity or receipt creation, evidence append, or status handoff. Do not guess, coerce, fill, or write repairs. This also applies to every fresh reread and context recovery. D04 refusal happens after reservation; do not roll back the status or add a read before reservation.
57
71
 
58
72
  ## First action: reserve the named card
59
73
 
@@ -76,8 +90,8 @@ The only status flow you use is:
76
90
  3. Build only the requested result and persist it locally according to the project's delivery policy. Do not require a remote push, a merge, or a particular repository topology before handoff; the self-contained proof on the card is the handoff record. Handle I/O failures explicitly, keep secrets out of code and logs, and use no `any` in TypeScript.
77
91
  4. Collect evidence before claiming completion: relevant test output, a screenshot for visual work, a diff or changed-file summary, and a location where the operator can inspect the result.
78
92
  5. Run review before handoff. Use available review subagents first: `kieran-typescript-reviewer`, `security-sentinel`, and `code-simplicity-reviewer` for TypeScript work; add the relevant language reviewer for other stacks. Resolve every material finding and rerun affected checks. If review subagents are unavailable, use their published checklists manually in that order, record the fallback and its outcome in the evidence, and do not call the work complete without it. If review does not pass, do not append evidence or change the status; report the unresolved finding and stop.
79
- 6. Write a self-contained proof to the same card with `mcp__robisie__append_detail({ id: cardRef, patch })`. The patch must let a reviewer decide without this session transcript: what changed, which Done-When conditions it satisfies, exact checks and results, where to inspect the result, and any limitation or fallback. If `mcp__robisie__append_detail` fails, do not change the card status; report the failure and stop.
80
- 7. Hand off with `mcp__robisie__update_task({ id: cardRef, status: "in_review" })`. If the handoff update fails, do not retry blindly or finalize the work yourself; report the failure with the card's current state and stop.
93
+ 6. Re-read the card with `readCompleteCard` and require valid D04 intent before any evidence append. Write a self-contained proof to the same card with `mcp__robisie__append_detail({ id: cardRef, patch })`. The patch must let a reviewer decide without this session transcript: what changed, which Done-When conditions it satisfies, exact checks and results, where to inspect the result, and any limitation or fallback. If `mcp__robisie__append_detail` fails, do not change the card status; report the failure and stop.
94
+ 7. Re-read the card with `readCompleteCard` and require valid D04 intent before the status handoff. Hand off with `mcp__robisie__update_task({ id: cardRef, status: "in_review" })`. If the handoff update fails, do not retry blindly or finalize the work yourself; report the failure with the card's current state and stop.
81
95
  8. Stop. Do not merge, accept, or mark the card as delivered or done. A separate reviewer and the operator own that decision.
82
96
 
83
97
  After launch-context validation, use only `mcp__robisie__reserve_task`, `mcp__robisie__get_task`, `mcp__robisie__append_detail`, and `mcp__robisie__update_task` on the returned `cardRef`. `mcp__robisie__append_detail` shallow-merges the evidence; do not use `mcp__robisie__update_task` details for incremental notes because it replaces the whole details object.
@@ -45,13 +45,27 @@ async function readCompleteCard(cardRef) {
45
45
  const card = await mcp__robisie__get_task({ id: cardRef, include: detailsKeys });
46
46
  if (card === null) return null;
47
47
  const expected = JSON.stringify([...detailsKeys].sort());
48
- if (JSON.stringify([...(card.availableDetailsKeys ?? [])].sort()) !== expected
48
+ if (!Array.isArray(card.availableDetailsKeys) || card.availableDetailsKeys.some(key => typeof key !== "string")
49
+ || JSON.stringify([...card.availableDetailsKeys].sort()) !== expected
49
50
  || JSON.stringify(Object.keys(card.details ?? {}).sort()) !== expected) throw new Error("Details keys changed during read");
51
+ const details = card.details && typeof card.details === "object" && !Array.isArray(card.details) ? card.details : {};
52
+ const nonblank = value => typeof value === "string" && value.trim().length > 0;
53
+ const missing = ["goal", "expectedResult", "boundaries", "doneWhen"].filter(key => {
54
+ const value = details[key];
55
+ return key === "goal" || key === "expectedResult"
56
+ ? !nonblank(value)
57
+ : !Array.isArray(value) || value.length === 0 || ![...value].every(nonblank);
58
+ });
59
+ if (missing.length) throw new Error(`Missing intent data: ${missing.join(", ")}`);
50
60
  return card;
51
61
  }
52
62
  ```
53
63
 
54
- Use the complete second result as the card. The index response is never evidence of complete details. If keys are unreadable or change, report the read failure through the existing failure path; do not continue with partial content.
64
+ Use the complete second result as the card. The index response is never evidence of complete details. Both indexes must be arrays of strings: [] to [] passes the key check; a missing or null second index fails it. If keys are unreadable or change, report the read failure through the existing failure path; do not continue with partial content.
65
+
66
+ D04 client intent gate: every complete read must validate `goal` and `expectedResult` as nonblank strings, and `boundaries` and `doneWhen` as nonempty arrays of nonblank strings. `trim()` checks only; preserve the original values and foreign keys, including canonical legacy details. Unreadable details (missing, null, primitive, or array) lack all four fields. `done_when` is builder evidence, never an alias for `doneWhen`.
67
+
68
+ On `Missing intent data`, name every reported field and stop before project work or checks, `mcp__client-launch-context__prepare_review`, identity or receipt creation, evidence append, or status handoff. Do not guess, coerce, fill, or write repairs. This also applies to every fresh reread and context recovery. Report the missing intent to the CEO without constructing a review verdict or receipt.
55
69
 
56
70
  ## Card and status ownership
57
71
 
@@ -87,12 +101,12 @@ Use `Read`, `Glob`, and `Grep` for inspection inside the validated project direc
87
101
  Call `mcp__robisie__get_task` for `cardRef`. Confirm all of the following before planning checks:
88
102
 
89
103
  - status is `in_review`;
90
- - the card states a goal or expected result;
91
- - objective boundaries are clear and checkable;
92
- - objective Done-When conditions are present;
104
+ - D04 passes: both `goal` and `expectedResult` are nonblank strings;
105
+ - `boundaries` is a nonempty array of nonblank strings, with objective boundaries clear and checkable;
106
+ - `doneWhen` is a nonempty array of nonblank strings stating the objective Done-When conditions;
93
107
  - builder evidence identifies what changed and where to inspect it, including its `summary`, `verification`, `inspection`, `limitations`, and `review` fields when applicable.
94
108
 
95
- If the Done-When conditions, boundaries, or builder evidence are missing or unusable, skip acceptance analysis and prepare `evidence_missing`. State precisely what is absent and what the builder must provide.
109
+ If D04 fails, stop through the intent gate before `mcp__client-launch-context__prepare_review`. With complete D04 intent, if builder evidence is missing or unusable, skip acceptance analysis and prepare `evidence_missing`. State precisely what is absent and what the builder must provide.
96
110
 
97
111
  Create a revision-bound identity for the submission before running checks:
98
112